Skip to main content

Singapore ๐Ÿ‡ธ๐Ÿ‡ฌ

InvoiceNow (Peppol Singapore) and e-invoicing requirements.

Overviewโ€‹

AspectDetails
B2B MandatePhased, under way. GST-registered businesses must transmit invoice data to IRAS through InvoiceNow: new voluntary GST registrants since 1 November 2025 and 1 April 2026; new compulsory registrants and existing businesses with turnover up to S$200k from 1 April 2028; up to S$1m from 2029; up to S$4m from 2030; all others from 2031
B2G StatusInvoiceNow encouraged; government agencies receive over InvoiceNow
FormatPeppol PINT SG (Singapore's PINT specialisation, urn:peppol:pint:billing-1@sg-1)
Primary Scheme0195 (UEN)
AuthorityIMDA (Infocomm Media Development Authority) runs the network; IRAS sets the GST obligation
AccreditationBusinesses in the mandate must use an IMDA-listed InvoiceNow-Ready Solution. GoRoute validates PINT SG documents and delivers over Peppol; its own invoice generation produces BIS Billing 3.0 today, and PINT SG generation is planned. GoRoute is not yet listed as an InvoiceNow-Ready Solution
Peppol, and the InvoiceNow name

Singapore's InvoiceNow network is Peppol. GoRoute delivers to Singapore participants over Peppol and validates PINT SG documents you supply; the documents GoRoute generates itself are BIS Billing 3.0, and PINT SG generation is planned, which is why Singapore is "coming soon" in the WooCommerce plugin. "InvoiceNow-Ready Solution" is an IMDA listing that GoRoute does not yet hold, so a business inside the IRAS mandate should confirm its own obligations.

Identifier Schemesโ€‹

UEN - Unique Entity Number (0195)โ€‹

The standard Singapore business identifier:

# Format varies by entity type
participant = {
"scheme": "0195",
"identifier": "200012345A", # Business UEN
"name": "Example Pte Ltd",
"country": "SG"
}

UEN Formatsโ€‹

TypeFormatExample
Business10 chars (YYYYNNNNNX)200012345A
Local Company9-10 chars (NNNNNNNNX)12345678A
Foreign CompanyT + year + 2 chars + 5 digits + letterT20FC01234A
OthersVariousS12AB3456C

Validation:

import re

def validate_uen(uen: str) -> bool:
"""Validate Singapore UEN."""
if not uen or len(uen) < 9 or len(uen) > 10:
return False

# Business UEN: starts with year (19xx or 20xx)
business_pattern = r'^(19|20)\d{2}[0-9]{5}[A-Z]$'

# Local company: 9 digits + letter
local_pattern = r'^\d{9}[A-Z]$'

# Foreign company: starts with T
foreign_pattern = r'^T\d{2}[A-Z]{2}\d{5}[A-Z]$'

return (re.match(business_pattern, uen) or
re.match(local_pattern, uen) or
re.match(foreign_pattern, uen)) is not None

GST Registration Number (9914)โ€‹

For GST-registered businesses:

# Format: same as UEN, or M + 8 digits + letter
participant = {
"scheme": "9914",
"identifier": "200012345A",
"name": "Example Pte Ltd",
"country": "SG"
}

InvoiceNowโ€‹

What is InvoiceNow?โ€‹

InvoiceNow is Singapore's national e-invoicing network, built on Peppol:

Supplier โ†’ GoRoute (Peppol AP) โ†’ InvoiceNow โ†’ Receiver

Benefitsโ€‹

  • Direct delivery to accounting systems
  • Faster payment processing
  • Reduced errors in data entry
  • IMDA grants available for adoption

Invoice Requirementsโ€‹

Standard Singapore Invoiceโ€‹

<Invoice>
<cbc:CustomizationID>urn:cen.eu:en16931:2017#conformant#urn:fdc:peppol.eu:2017:poacc:billing:international:sg:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>

<cbc:ID>SG-INV-2024-00123</cbc:ID>
<cbc:IssueDate>2024-01-15</cbc:IssueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>SGD</cbc:DocumentCurrencyCode>

<!-- Singapore Seller -->
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0195">200012345A</cbc:EndpointID>

<cac:PartyTaxScheme>
<cbc:CompanyID>200012345A</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>GST</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>

<cac:PartyLegalEntity>
<cbc:RegistrationName>Example Pte Ltd</cbc:RegistrationName>
<cbc:CompanyID schemeID="0195">200012345A</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>
</Invoice>

Singapore-Specific CustomizationIDโ€‹

<!-- Singapore Peppol BIS extension -->
<cbc:CustomizationID>urn:cen.eu:en16931:2017#conformant#urn:fdc:peppol.eu:2017:poacc:billing:international:sg:3.0</cbc:CustomizationID>

GST Requirementsโ€‹

GST Formatโ€‹

Singapore GST uses either UEN or M-number:

# GST number formats
gst_numbers = {
"standard": "200012345A", # Same as UEN
"m_format": "M12345678A" # M + 8 digits + letter
}

GST Ratesโ€‹

CodeRateDescription
SR9%Standard rate (from 2024)
ZR0%Zero-rated (exports)
ES0%Exempt supply
OS0%Out of scope
GST Rate Change

Singapore GST increased to 9% on January 1, 2024 (from 8% in 2023, and 7% before).

Example Invoiceโ€‹

<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">

<cbc:CustomizationID>urn:cen.eu:en16931:2017#conformant#urn:fdc:peppol.eu:2017:poacc:billing:international:sg:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>

<cbc:ID>SG-INV-2024-00123</cbc:ID>
<cbc:IssueDate>2024-01-15</cbc:IssueDate>
<cbc:DueDate>2024-02-15</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>SGD</cbc:DocumentCurrencyCode>

<!-- Singapore Seller -->
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0195">200012345A</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Example Pte Ltd</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>123 Orchard Road</cbc:StreetName>
<cbc:AdditionalStreetName>#10-01</cbc:AdditionalStreetName>
<cbc:CityName>Singapore</cbc:CityName>
<cbc:PostalZone>238867</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>SG</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>200012345A</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>GST</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Example Pte Ltd</cbc:RegistrationName>
<cbc:CompanyID schemeID="0195">200012345A</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>John Tan</cbc:Name>
<cbc:Telephone>+6562345678</cbc:Telephone>
<cbc:ElectronicMail>invoice@example.com.sg</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingSupplierParty>

<!-- Singapore Buyer -->
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0195">198712345K</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Customer Pte Ltd</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>1 Marina Boulevard</cbc:StreetName>
<cbc:AdditionalStreetName>#20-01</cbc:AdditionalStreetName>
<cbc:CityName>Singapore</cbc:CityName>
<cbc:PostalZone>018989</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>SG</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>198712345K</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>GST</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Customer Pte Ltd</cbc:RegistrationName>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingCustomerParty>

<cac:PaymentMeans>
<cbc:PaymentMeansCode>30</cbc:PaymentMeansCode>
<cac:PayeeFinancialAccount>
<cbc:ID>1234567890</cbc:ID>
<cbc:Name>Example Pte Ltd</cbc:Name>
<cac:FinancialInstitutionBranch>
<cbc:ID>DBSSSGSG</cbc:ID>
<cbc:Name>DBS Bank</cbc:Name>
</cac:FinancialInstitutionBranch>
</cac:PayeeFinancialAccount>
</cac:PaymentMeans>

<cac:TaxTotal>
<cbc:TaxAmount currencyID="SGD">90.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="SGD">1000.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="SGD">90.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>SR</cbc:ID>
<cbc:Percent>9</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>GST</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>

<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="SGD">1000.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="SGD">1000.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="SGD">1090.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="SGD">1090.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>

<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="HUR">10</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="SGD">1000.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>IT Consulting Services</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>SR</cbc:ID>
<cbc:Percent>9</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>GST</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="SGD">100.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
</Invoice>

Looking Up Singapore Businessesโ€‹

# Lookup UEN on Peppol/InvoiceNow
response = requests.get(
"https://app.goroute.ai/peppol-api/api/v1/participants/lookup",
params={"peppol_id": "0195:200012345A"},
headers={"X-API-Key": "your_api_key"}
)

# Check InvoiceNow registration
if response.json()["found"]:
print("Business is on InvoiceNow!")

IMDA Grantsโ€‹

IMDA offers grants for InvoiceNow adoption:

  • Productivity Solutions Grant (PSG) for accounting software
  • SME Go Digital programs
  • Check IMDA for current incentives

Cross-Border Invoicingโ€‹

Singapore to EUโ€‹

# Send from Singapore to EU
response = requests.post(
"https://app.goroute.ai/peppol-api/api/v1/documents",
headers={"X-API-Key": "your_api_key"},
json={
"sender_scheme": "0195",
"sender_id": "200012345A",
"receiver_scheme": "9930", # German VAT
"receiver_id": "DE123456789",
"document": invoice_xml # UBL XML string, not base64
}
)

EU to Singaporeโ€‹

# Send from EU to Singapore
response = requests.post(
"https://app.goroute.ai/peppol-api/api/v1/documents",
headers={"X-API-Key": "your_api_key"},
json={
"sender_scheme": "9930",
"sender_id": "DE123456789",
"receiver_scheme": "0195",
"receiver_id": "198712345K",
"document": invoice_xml # UBL XML string, not base64
}
)

Resourcesโ€‹

Next Stepsโ€‹

Further readingโ€‹

Ready to build? The free developer sandbox gives you test credentials and a registered participant, provisioned within 24 hours on business days. Recorded ERP integration walkthroughs are on the tutorials page.