Singapore ๐ธ๐ฌ
InvoiceNow (Peppol Singapore) and e-invoicing requirements.
Overviewโ
| Aspect | Details |
|---|---|
| B2G Status | InvoiceNow encouraged |
| B2B Status | Growing adoption via InvoiceNow |
| Format | Peppol BIS 3.0 |
| Primary Scheme | 0195 (UEN) |
| Authority | IMDA (Infocomm Media Development Authority) |
InvoiceNow Network
Singapore's InvoiceNow is built on Peppol infrastructure. GoRoute connects to InvoiceNow via the Peppol network.
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โ
| Type | Format | Example |
|---|---|---|
| Business | 10 chars (YYYYNNNNNX) | 200012345A |
| Local Company | 9-10 chars (NNNNNNNNX) | 12345678A |
| Foreign Company | T + year + 2 chars + 5 digits + letter | T20FC01234A |
| Others | Various | S12AB3456C |
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โ
| Code | Rate | Description |
|---|---|---|
| SR | 9% | Standard rate (from 2024) |
| ZR | 0% | Zero-rated (exports) |
| ES | 0% | Exempt supply |
| OS | 0% | 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={
"scheme": "0195",
"identifier": "200012345A"
},
headers={"X-API-Key": "your_api_key"}
)
# Check InvoiceNow registration
if response.json()["registered"]:
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/send",
headers={"X-API-Key": "your_api_key"},
json={
"sender": {
"scheme": "0195",
"identifier": "200012345A"
},
"receiver": {
"scheme": "9930", # German VAT
"identifier": "DE123456789"
},
"document": base64_invoice
}
)
EU to Singaporeโ
# Send from EU to Singapore
response = requests.post(
"https://app.goroute.ai/peppol-api/api/v1/send",
headers={"X-API-Key": "your_api_key"},
json={
"sender": {
"scheme": "9930",
"identifier": "DE123456789"
},
"receiver": {
"scheme": "0195",
"identifier": "198712345K"
},
"document": base64_invoice
}
)