E-Invoicing for Singapore: API References
Introduction
In Singapore, the government introduced the e-invoicing mandate under the e-invoicing framework, which was rolled out to standardize business-to-business (B2B) invoicing and improve the efficiency of the invoicing process. This system, InvoiceNow, enables seamless exchange of invoices between businesses and with government agencies. It allows for the secure transmission of structured electronic invoices in the Peppol BIS Billing 3.0 format, which ensures consistency and reduces errors in tax reporting.
Introduction to InvoiceNow:
InvoiceNow was launched to simplify the invoicing process, reduce manual errors, and improve the reconciliation process for businesses. The platform is powered by the Peppol network, a global standard for electronic data exchange. As of January 2024, it has become a requirement for businesses that are registered with the Goods and Services Tax (GST) to use InvoiceNow for sending and receiving invoices for transactions with other businesses. This move aims to promote digital transformation across Singapore's economy and streamline the tax compliance process.
Peppol Standards:
InvoiceNow is based on the Peppol network, which facilitates the exchange of e-invoices in a standardized format. Peppol ensures interoperability with various countries globally, allowing businesses to exchange invoices across borders seamlessly.
BIS Billing 3.0 Format:
The system uses the Peppol BIS Billing 3.0 standard for invoice data exchange, which is the technical format required by all users for invoice submission. This ensures consistency in how invoices are generated, transmitted, and processed.
Integration with Accounting Systems:
Businesses are encouraged to integrate their accounting or ERP systems with the InvoiceNow platform, either by using certified software or by building their own integrations. This allows invoices to be directly sent to the platform without manual intervention.
Transaction Validation:
The e-invoices sent through InvoiceNow undergo validation, ensuring they meet regulatory and technical standards. This includes checks for proper GST formatting, invoice authenticity, and compliance with tax reporting rules.
In Singapore, businesses that are GST-registered must adopt InvoiceNow for their transactions with other businesses as part of the broader push for digitalization. By utilizing InvoiceNow, companies can ensure real-time invoicing, reduce errors, and simplify compliance with tax regulations.
Onboard to InvoiceNow
InvoiceNow is Singapore’s national e-invoicing initiative based on the Peppol framework, enabling businesses to exchange standardized e-invoices directly and efficiently. By onboarding to InvoiceNow through an Access Point provider, businesses gain access to the Peppol network, allowing seamless and compliant invoicing with partners and government agencies. This system supports Singapore’s tax regulations and streamlines business processes, with mandatory adoption for GST-registered companies by 2026. This endpoint will help you in onboarding to it.
Request Body
- Name
registered_name
- Type
- string: mandatory (limit: 300 chars)
- Description
Registred Name of Supplier’s business
- Name
identifiers
- Type
- array: mandatory
- Description
For all VAT-registered businesses in Singapore, the Identification Number (SG:UEN) is mandatory.
- Name
SG:UEN
- Type
- string: mandatory if applicable
- Description
- Name
city
- Type
- string: optional (limit: 50 chars)
- Description
Registered City of the supplier.
- Name
street
- Type
- string: optional (limit: 150 chars)
- Description
Street details of the supplier. If not available, provide 'NA'.
- Name
county
- Type
- string: optional (limit: 150 chars)
- Description
County details of the supplier. If not available, provide 'NA'.
- Name
country
- Type
- string: ISO 3166-1 alpha-2 country code
- Description
Country of the supplier. DE in case of .
- Name
contact_number
- Type
- string: optional (limit: 20 chars)
- Description
The telephone number of the Supplier (e.g., office, mobile, fax).
Sample Request
curl
--url https://sandbox-api.flick.network/sg/einvoice/onboard \
--header 'x-flick-auth-key: {token}' \
--header 'Content-Type: application/json' \
--data '
{
"registered_name": "TestCompany",
"identifiers": [
{
"scheme": "SG:UEN",
"id": "SGTST0987654321SC"
}
],
"city": "Singapore",
"street": "Example Street 45",
"county": "Central Region",
"country": "SG",
"contact_number": "+65-61234567"
}'
Sample Response
{
"status": "success",
"message": "Successfully Onboarded to Peppol",
"data": {
"supplier_uuid": "f4b173a9-9f0f-4850-b682-762290885fee"
}
}
Submit an Invoice
To Generate a new E-Invoice Document & share it through Peppol, this endpoint can be used along with the Supplier UUID to which it belongs to. Specify transport_mode
for proper delivery of the document.
Request Body
- Name
ID
- Type
- string: mandatory (limit: 50 chars)
- Description
Unique Invoice Reference Number. This should be made in sequence.
- Name
DocumentType
- Type
- string: mandatory (limit: 50 chars)
- Description
Specifies the type of document. For example,
Invoice
,CreditNote
orDebitNote
.
- Name
IssueDate
- Type
- date: mandatory, schema: YYYY-MM-DD
- Description
Date on which the invoice was issued.
- Name
DocumentCurrencyCode
- Type
- string: mandatory (3 chars)
- Description
Currency in which the invoice was issued. Default value:
SGD
.
- Name
CustomerParty
- Type
- object: mandatory
- Description
Information about the customer to whom the invoice is issued.
- Name
RegisteredName
- Type
- string: mandatory (limit: 300 chars)
- Description
Name of the Customer/Receiving company.
- Name
address
- Type
- object: mandatory
- Description
Address details of the customer.
- Name
Street
- Type
- string: mandatory (limit: 150 chars)
- Description
Street details of the customer. If not available, provide
NA
.
- Name
ZipCode
- Type
- string: mandatory (limit: 10 chars)
- Description
ZIP code of the customer's address.
- Name
City
- Type
- string: mandatory (limit: 50 chars)
- Description
City of the customer's address.
- Name
Country
- Type
- string: ISO 3166-1 alpha-2 country code
- Description
Country of the customer. Use
FI
for Singapore.
- Name
Identifiers
- Type
- array: mandatory
- Description
List of public identifiers for the customer.
- Name
Scheme
- Type
- string: mandatory
- Description
Scheme type of the identifier, e.g.,
SG:UEN
.
- Name
ID
- Type
- string: mandatory (limit: 50 chars)
- Description
The identifier value for the given scheme.
- Name
InvoiceLines
- Type
- array: mandatory
- Description
Details of the line items in the invoice.
- Name
Description
- Type
- string: mandatory (limit: 300 chars)
- Description
Description of the purchased goods or services.
- Name
PriceAmount
- Type
- number: mandatory
- Description
Amount excluding VAT for the line item.
- Name
TaxType
- Type
- object: mandatory
- Description
Tax details for the line item.
- Name
TaxRate
- Type
- number: mandatory
- Description
The VAT percentage applicable to the line item.
- Name
TaxType
- Type
- enum: mandatory
- Description
Tax category. For example,
standard
orreduced
.
- Name
TaxCountry
- Type
- string: ISO 3166-1 alpha-2 country code
- Description
Country for which the tax is applied. Use
FI
for Singapore.
- Name
TotalIncludingVat
- Type
- number: mandatory
- Description
Total amount of the invoice, including VAT.
Sample Request
curl --url https://sandbox-api.flick.network/sg/einvoice/generate/invoice \
--header 'x-flick-auth-key: {token}' \
--header 'supplier_uuid: {supplier_uuid}' \
--header 'transport_mode: peppol' \
--header 'Content-Type: application/json' \
--data '
{
"ID": "INV-11",
"DocumentType": "Invoice",
"IssueDate": "2024-12-01",
"DocumentCurrencyCode": "SGD",
"CustomerParty": {
"RegisteredName": "Test Inc.",
"address": {
"Street": "Street Name 987",
"ZipCode": "9999AA",
"City": "City Test",
"Country": "SG"
},
"Identifiers": [
{
"Scheme": "SG:UEN",
"ID": "SGTST0987654321SC"
}
]
},
"InvoiceLines": [
{
"Description": "Test Item",
"InvoicedQuantity": 2,
"PriceAmount": 100,
"TaxType": {
"TaxRate": 19,
"TaxType": "standard",
"TaxCountry": "SG"
}
}
],
"TotalIncludingVat": 238.00
}'
Sample Response
{
"status": "success",
"data": {
"DocumentID": "52d08f40-a2a0-450b-857f-2e1dd865064c",
"DeliveryStatus": "Scheduled"
}
}
Get Document Details
This API endpoint allows users to get details of a document by querying with UUID.
GET Request Parameters
- Name
uuid
- Type
- string
- Description
UUID of the document
Sample Request
curl
--url https://sandbox-api.flick.network/sg/einvoice/get-document/{uuid} \
--header 'x-flick-auth-key: {token}' \
--header 'supplier_uuid: {supplier_uuid}'
Sample Response
{
"uuid": "52d08f40-a2a0-450b-857f-2e1dd865064c",
"ID": "INV-11",
"DocumentType": "Invoice",
"IssueDate": "2024-12-01",
"DocumentCurrencyCode": "SGD",
"CustomerParty": {
"RegisteredName": "Test Inc.",
"address": {
"Street": "Street Name 987",
"ZipCode": "9999AA",
"City": "City Test",
"Country": "SG"
},
"Identifiers": [
{
"Scheme": "SG:UEN",
"ID": "SGTST0987654321SC"
}
]
},
"InvoiceLines": [
{
"Description": "Test Item",
"InvoicedQuantity": 2,
"PriceAmount": 100,
"TaxType": {
"TaxRate": 19,
"TaxType": "standard",
"TaxCountry": "SG"
}
}
],
"TotalIncludingVat": 238.00
}
Get Delivery Status
This API endpoint allows users to query the status of delivery of a document through Peppol.
GET Request Parameters
- Name
uuid
- Type
- string
- Description
UUID of the document
Sample Request
curl
--url https://sandbox-api.flick.network/sg/einvoice/delivery-status/{uuid} \
--header 'x-flick-auth-key: {token}' \
--header 'supplier_uuid: {supplier_uuid}'
Sample Response
{
"DocumentID": "52d08f40-a2a0-450b-857f-2e1dd865064c",
"DeliveryStatus": "Delivered"
}
Received Document
You can listen to this webhook to get new documents issued against the supplier.
Request Body
- Name
Event
- Type
- string
- Description
Type of Event that happend.
- Name
EventType
- Type
- string
- Description
Type of Event Type that happend.
- Name
EventGroup
- Type
- string
- Description
Type of Event group that it belongs.
- Name
uuid
- Type
- string
- Description
UUID of the document
- Name
DocumentId
- Type
- string
- Description
Internal Document ID
- Name
Status
- Type
- string
- Description
Current status of the document
Sample Request
{
"Event": "DocumentReceived",
"EventType": "PeppolReceived",
"EventGroup": "Invoice",
"uuid": "52d08f40-a2a0-450b-857f-2e1dd865064c",
"DocumentId": "INV-123",
"Status": "Delivered"
}