Skip to main content

GCC E-Invoicing | Singapore InvoiceNow (PINT SG)

This is the Singapore country pack for the ECOSIRE GCC E-Invoicing | Core Engine. It implements the PINT SG / BIS Billing 3.0 profile on the Peppol 4-corner network (Singapore InvoiceNow), as mandated by IMDA and the IRAS GST InvoiceNow Requirement.

This pack requires the core engine. Install ecosire_einvoice_core first, then install this pack on top.

Compatibility: Odoo 17 / 18 / 19 (Community or Enterprise) Price: $299 (one-time) License: Up to 3 domain activations Category: Accounting / Localizations / EDI

The one thing to understand about Singapore InvoiceNow

Singapore InvoiceNow is Peppol, not a government clearance portal. There is no taxpayer-facing IRAS REST API for invoice submission. Your Odoo instance generates a PINT SG / BIS Billing 3.0 UBL 2.1 XML document and hands it to an IMDA-certified InvoiceNow-Ready Access Point (IAP). The IAP handles AS4 transport to the buyer's access point and automatically forwards a GST data copy to IRAS for businesses enrolled in the IRAS GST InvoiceNow Requirement.

Unlike the KSA ZATCA pack: no clearance gate, no per-document cryptographic stamp, no TLV QR code.

What it does

  • Singapore country pack auto-discovered by the engine when your company's country is Singapore (country_code = SG).
  • PINT SG / BIS Billing 3.0 UBL 2.1 document generation (Invoice type 380, Credit Note type 381).
  • Singapore business-rule validators run before any transmission attempt:
    • Supplier UEN (Unique Entity Number) format check — Peppol Participant ID scheme 0195.
    • GST Registration Number format check (M-XXXXXXX-X) when GST is charged.
    • 9% GST rate validation (effective 1 January 2024).
    • GST tax category recognition: SR (Standard Rate) / ZR (Zero-Rated) / ES (Exempt Supply) / OS (Out-of-Scope).
    • Document currency code required (SGD for domestic supplies).
  • Peppol Participant ID management — stores and transmits the 0195:{UEN} identifier on supplier and buyer party records.
  • IRAS GST InvoiceNow compliance cockpit — per-invoice transmission status, Peppol message-ID audit log, and a configurable mandatory-date alert.
  • Pluggable IAP transport adapter — abstract adapter layer with Storecove as the first confirmed target (api.storecove.com/api/v2/).
  • Validated XML export fallback — export signed BIS Billing 3.0 UBL XML for manual upload to any IAP portal while your live IAP API credentials are being provisioned.

Honest scope — what is pending

The module ships every confirmed building block. The following items raise a clear UserError rather than making a guessed API call, because their specifications were not retrievable from a primary source on the date this module was built (2026-06-19):

ItemStatusWhy blocked
Live IAP submission via StorecovePendingRequest body schema for POST /document_submissions requires a Storecove developer account; Singapore-specific setup steps also need sandbox access
Delivery-evidence pollingPendingResponse schema for GET .../evidence needs developer account
PINT SG schematron validationPendingdocs.peppol.eu/pint/sg/ returned 404; schematron artefacts not yet retrievable
IRAS mandatory phase dates / thresholdsPendingNot published from a primary source — the cockpit alert field is configurable, not hardcoded
Tickstar / Zyllem adaptersPendingNo public API documentation retrieved for these IAPs

The Export Validated XML action is fully functional today and allows you to submit via any IAP portal that accepts UBL XML upload.

Requirements

RequirementDetail
Odoo17.0, 18.0, or 19.0 (Community or Enterprise)
Core engineecosire_einvoice_core installed and configured
Odoo dependenciesecosire_einvoice_core, ecosire_license_client
Python packageslxml (installed automatically by Odoo's addon installer)
LicenseAn active ECOSIRE license for this module
IAP accountAn IMDA-certified InvoiceNow-Ready Access Point account (e.g. Storecove developer account) for live submission; not required to install or export XML

See the core engine requirements for the engine's own prerequisites.

Installation

  1. Install and configure the GCC E-Invoicing | Core Engine first.
  2. Download this pack's ZIP from your ECOSIRE Dashboard and extract it to your addons directory:
    unzip ecosire-einvoice-sg-*.zip -d /opt/odoo/addons/
    sudo systemctl restart odoo
  3. In Odoo go to Apps, click Update Apps List.
  4. Search for ECOSIRE GCC E-Invoicing | Singapore InvoiceNow (PINT SG) and click Install. Odoo installs ecosire_einvoice_core and ecosire_license_client automatically if they are not yet present.
  5. Enter your ECOSIRE license key when prompted.

After installation a Singapore InvoiceNow submenu appears under Accounting → GCC E-Invoicing.

Configuration

Step 1: Activate your ECOSIRE license

  1. Navigate to Settings → GCC E-Invoicing → License.
  2. Enter the license key you received after purchase and click Activate.
  3. The status indicator turns green once the license server confirms activation. The module's transmission features are blocked until the license is active.

Step 2: Company prerequisites

Before the Singapore validators will pass, complete the following on your company record (Settings → Companies → [your company]):

FieldWhere to set itRequirement
Singapore UENPartner record of the companyRequired; format: 201234567K (companies) or T08LL1234A (LLPs)
GST Registration NumberPartner record → Singapore GST Reg No (sg_gst_reg_no)Required when your company charges GST; format M-XXXXXXX-X
Peppol Participant IDPartner record → Peppol Participant IDPre-filled as 0195:{UEN} once UEN is entered
CurrencyInvoice / company settingsSGD for domestic supplies
CountryCompany addressMust be Singapore for the country pack to auto-activate

For buyer partners that will receive InvoiceNow documents: fill in their UEN and GST Registration Number on their contact record. The buyer Peppol Participant ID (0195:{UEN}) is required for Peppol network routing.

Step 3: Configure GST tax categories

Navigate to Accounting → Configuration → Taxes. For each tax used on Singapore invoices, set the GST Category field to one of:

CodeDescription
SRStandard Rate — 9% GST on taxable supplies
ZRZero-Rated — exports of goods and international services
ESExempt Supply — financial services, residential property rental
OSOut-of-Scope — supplies outside the scope of GST

The SR 9% GST rate is confirmed effective 1 January 2024 (Singapore Budget 2022). The module validates that any invoice with a tax amount carries a recognised GST category.

Step 4: Configure the IAP provider (for live submission)

Prerequisite for live submission

Live submission requires a contract with an IMDA-certified InvoiceNow-Ready Access Point and the IAP's API credentials. The Export Validated XML action works without an IAP account.

  1. Navigate to Settings → GCC E-Invoicing → Singapore InvoiceNow.
  2. Select your IAP Provider from the dropdown. Storecove is the first provider with a confirmed public API.
  3. Enter your IAP API Key (for Storecove: Bearer token obtained from your Storecove developer account).
  4. Enter the IAP Base URL if your provider uses a non-default endpoint.
  5. Set the IRAS Mandatory Date alert field to the mandatory phase date that applies to your business size (check the IRAS GST InvoiceNow Requirement for your applicable phase and threshold — the module does not hardcode this date as it is subject to change).
  6. Click Save and then Test Connection to verify the API key is accepted.

Step 5: Sandbox vs production

Singapore InvoiceNow does not have a separate government sandbox portal (unlike ZATCA). The Storecove IAP offers a sandbox environment at the account level — contact Storecove to enable sandbox mode for your API key. In the module:

  • Set Environment to Sandbox during testing; switch to Production when ready for live submission.
  • There are no Compliance or Production CSID steps — Singapore does not use PKI certificates at the taxpayer level. Peppol certificates are held by the IAP, not your Odoo instance.

Usage

Core workflow

  1. Create and confirm an invoice in Odoo as usual (Accounting → Customers → Invoices → New).
  2. Click Validate for InvoiceNow (or the equivalent button added by the pack on the invoice form). The module runs the Singapore validators (SG-01 through SG-04) and surfaces any errors before generating XML.
  3. If all validators pass, the module generates the PINT SG / BIS Billing 3.0 UBL 2.1 XML for the invoice.
  4. Choose your transmission path:
    • Submit via IAP — sends the XML to your configured IAP (e.g. Storecove), which routes it to the buyer's access point and forwards the GST copy to IRAS. Requires an active IAP API key.
    • Export Validated XML — downloads the generated UBL XML for manual upload to your IAP's web portal. Use this path while your IAP API credentials are being provisioned, or as a fallback.
  5. The IRAS GST InvoiceNow Compliance Cockpit (accessible from the invoice or from Accounting → GCC E-Invoicing → Singapore InvoiceNow → Transmissions) records the transmission attempt, Peppol message GUID returned by the IAP, and delivery status.

Credit notes

Create a credit note through the standard Odoo credit note flow (Invoice → Add Credit Note). The country pack automatically maps credit notes to document type 381 in the UBL output. The Peppol profile and validation rules apply identically.

Compliance cockpit

Navigate to Accounting → GCC E-Invoicing → Singapore InvoiceNow → Transmissions to see:

  • All transmission attempts with status (draft, submitted, delivered, error).
  • The Peppol message GUID assigned by the IAP for each submission.
  • The IAP provider used and the timestamp of each attempt.
  • Chatter notes and activity tracking for compliance follow-up.

Troubleshooting / FAQ

SymptomLikely causeFix
License not active error on any actionECOSIRE license not activated or expiredGo to Settings → GCC E-Invoicing → License and activate your key. Contact [email protected] if the key is rejected.
Supplier UEN missing or invalid (SG-01)Company partner has no sg_uen or the UEN format is wrongSet the UEN on the company's partner record. Companies: 9 digits + letter (e.g. 201234567K). LLPs/partnerships: prefix-year-type-digits-letter format.
Supplier GST Registration Number missing or not in M-XXXXXXX-X format (SG-02)GST reg no field is blank or incorrectly formattedEnter the 9-character GST reg number (e.g. M-12345678-A) on the company partner record under Singapore GST Reg No. This check only triggers when the invoice has a non-zero tax amount.
Document currency is not set (SG-03)Invoice currency is blankEnsure the invoice currency is set. SGD is required for domestic supplies.
GST category warning (SG-04)A tax line has no recognised GST category codeSet the GST Category field (SR/ZR/ES/OS) on the Odoo tax record via Accounting → Configuration → Taxes.
No IAP configured error on SubmitNo IAP provider selected in company settingsNavigate to Settings → GCC E-Invoicing → Singapore InvoiceNow and select an IAP provider.
IAP has no confirmed public API errorA non-Storecove provider is selected (Tickstar, Zyllem, etc.)Only Storecove has a confirmed public API in the current module version. Use Export Validated XML and upload manually to your IAP portal, or switch to Storecove.
Live IAP submission not yet implemented (Storecove)Storecove adapter is pending sandbox credentialsUse Export Validated XML to download the UBL XML and upload it via the Storecove portal, or contact [email protected] for the latest adapter status.
PINT SG schematron validation is not availableThe schematron spec URL was unreachable when this module was builtThe module's BIS Billing 3.0 UBL generation follows confirmed Peppol standards. Rely on your IAP's validation step for schematron conformance until PINT SG spec is accessible.
Singapore InvoiceNow does not define a QR-code requirementA QR code action was triggeredSingapore InvoiceNow uses no TLV QR code. This is by design — do not import ZATCA/KSA QR patterns.
XML export downloads but IAP portal rejects itUBL XML field mapping mismatch with your IAP's profileShare the IAP rejection message with [email protected] so we can adjust the UBL field mapping for your IAP.

Common questions

Do I need a CSID or PKI certificate? No. Singapore InvoiceNow does not require taxpayers to hold Peppol certificates. The IAP manages the AS4 transport certificates on your behalf. There is no onboarding wizard equivalent to the KSA CSID flow.

Does the module support both B2B and B2G invoices? Yes. B2B (business-to-business) and B2G (invoices to Singapore Government agencies on the InvoiceNow network) both use the PINT SG / BIS Billing 3.0 profile. B2C invoices are out of scope for InvoiceNow — standard Singapore tax invoice rules apply and these are not transmitted via Peppol.

Do I need to register my Peppol Participant ID separately? Your Peppol Participant ID (0195:{UEN}) is registered in the Singapore SML (Service Metadata Locator) by your IAP on your behalf when you onboard with them. The module stores and transmits the identifier; the registration process itself is handled by the IAP.

What is the IRAS GST InvoiceNow Requirement and when does it apply to me? IRAS is phasing in a mandatory requirement for GST-registered businesses to transmit invoice data to IRAS via the InvoiceNow network. The IAP forwards this data automatically — you do not call IRAS directly. The mandatory phase dates and revenue thresholds are set by IRAS and are subject to update; configure the IRAS Mandatory Date alert in the module settings once your applicable date is confirmed on the IRAS website.

Support

For IAP-specific integration questions (Storecove account setup, Singapore-specific onboarding steps, adapter body schema once available), include your IAP provider name and the exact error message in your support request.