API Integration
Connect to upstream + downstream APIs without spreadsheet middlemen. Banking APIs (ABA, Wing, Bakong), tax (GDT e-VAT), logistics (J&T, DHL, Speedoo), payment gateways, and any third-party SaaS your business relies on.
A long-form page for API Integration with sample build, case study, and pricing band is coming. Until then, scope it directly with us.
What does GDT e-VAT integration cover?
GDT e-VAT integration submits invoice header data and per-line VAT calculations to Cambodia's General Department of Taxation (GDT) for VAT reporting and e-invoicing compliance. Two adjacent submission paths exist in 2026: the established GDT API (invoice declarations, live since approximately 2019) and the newer CamInvoice B2G e-invoicing platform launched 12 May 2025 by the General Department of Digital Economy (GDDE). Both consume the same core data — invoice attributes plus line-item VAT — but use distinct submission endpoints and validation rules.
Cambodian VAT-registered enterprises must file monthly VAT declarations with GDT by the 20th of the following month (Prakas 1033). Failure to submit or discrepancies between system-generated invoices and GDT records trigger audits, penalties, and potential suspension of VAT registration. For most SMBs using QuickBooks, Peachtree, or a local accounting package, that submission today is still a manual re-entry: an accountant downloads an export, formats a spreadsheet, and uploads it to the GDT portal. API integration eliminates that step entirely — the adapter reads invoices directly from your system and pushes them to GDT on-save or on-schedule.
CamInvoice (the GDDE platform) extends this to B2G: suppliers to government entities must issue e-invoices through GDDE's network. Registration as a CamInvoice issuer is done through a GDDE-approved service provider. As of May 2025, the platform is newly launched, SERP coverage is thin, and most ERP vendors have not shipped a native integration — which is precisely the gap we fill.
Which systems can Scale connect to GDT?
Scale builds GDT e-VAT adapters for Odoo, SAP Business One, Acumatica, QuickBooks Online, QuickBooks Desktop, Peachtree/Sage 50, MAQSU, and any custom-built accounting or ERP system. None of these ship native Cambodia GDT support — each requires a purpose-built adapter tuned to your chart of accounts, VAT codes, and invoice numbering sequence.
Withholding tax (ToT) lines are handled separately from VAT — the adapter maps your WHT codes to GDT's TVET code table and submits them in the correct field. Multi-currency invoices (KHR + USD) are converted at the NBC daily rate on the invoice date before submission, not at a fixed rate, which is the source of most rounding errors in manual submissions.
- Odoo (v14–v17): webhook-triggered submission on invoice confirmation; Odoo accounting journal entries stay unchanged.
- SAP Business One: A/R invoice event → GDT adapter via SAP DI API or B1if middleware.
- Acumatica: push via Acumatica's webhook framework after AR invoice release.
- QuickBooks Online: reads invoices via QBO REST API; resubmits on retry if GDT returns a validation error.
- QuickBooks Desktop / Peachtree: file-based extraction (IIF or CSV export) → adapter → GDT submission; no direct API on the ERP side.
- Custom systems: adapter consumes your internal invoice API or database view; we define the interface contract together during discovery.
What does a GDT e-VAT integration project look like?
A standard GDT e-VAT integration runs in five sequential phases. Total duration is 7–13 weeks for a single-system SMB, 14–22 weeks for multi-system or mid-market scope. All timelines assume a signed contract and access to the source system from day one.
- Week 1 — Discovery + mapping: We document your invoice flow, chart of accounts, VAT codes, withholding tax codes, and submission frequency. We map every source field to the GDT API schema and flag gaps (e.g. missing tax registration numbers on customer records).
- Weeks 2–6 — Adapter build: We build the adapter in TypeScript/Node (or Python for SAP B1 integrations), wire it to a staging GDT endpoint, and implement retry logic, error alerting (email + Telegram), and an audit log table. For CamInvoice, we complete GDDE partner registration in parallel — this runs 2–4 weeks independently.
- Weeks 5–7 — End-to-end test: We run 30 days of historical invoices through the adapter against GDT's sandbox, reconcile totals, and fix edge cases. Your accountant validates the output against GDT's own portal UI.
- Week 7–8 — UAT: Your team runs live invoices through the adapter in parallel with your existing manual process. We resolve any discrepancies before cutover.
- Week 8+ — Go-live + monitoring: Adapter runs in production. We monitor submission success rate and error queues for the first 30 days, then hand over to your team with runbook documentation.
What does it cost?
A single-system GDT e-VAT integration for an SMB (one ERP, one legal entity, standard VAT only) is typically quoted in the $2,500–$6,000 range on a fixed-scope basis. Multi-system, multi-entity, or CamInvoice-plus-GDT projects are quoted separately after a paid one-week discovery.
We quote fixed scope, fixed price after a 1-week discovery engagement ($500, deducted from the project fee if you proceed). Discovery produces a detailed data-mapping document, a field-gap register, and a final quote with no ambiguity. The reason: GDT integration cost varies sharply by ERP — a QuickBooks Online integration and a SAP B1 integration share almost no code, so hourly estimates are not credible here.
Ongoing monthly hosting of the adapter (server, monitoring, error alerting, NBC exchange rate pulls) runs $150–$300/month depending on submission volume. If GDT changes their API schema (they have done so twice since 2019), adapter updates are quoted as change orders.
Common pitfalls when integrating GDT
Most GDT integration projects that stall do so because of four well-known problems — all preventable if you catch them during discovery.
- KHR rounding drift: GDT's submission format requires amounts in KHR, rounded to the riel with no decimals. If your ERP stores KHR at two decimal places and you truncate rather than round-half-up, cumulative drift across 500 invoices/month becomes material. The adapter must match GDT's rounding exactly — not your ERP's default.
- Withholding tax misclassification: GDT uses TVET codes (15%, 14%, 10%, 5%, 4%, 2%, 0%) that do not map 1:1 to QuickBooks or Odoo WHT categories. A mismatch causes GDT to reject the line silently — the submission appears accepted but the WHT amount is missing from your filing. This is audited regularly.
- Tax registration number (TRN) gaps on customer records: GDT's API requires the buyer's TRN on every B2B invoice. Most ERPs allow this field to be blank. The adapter must validate TRN presence before submission and route blank-TRN invoices to a manual queue — not suppress them.
- Multi-currency invoice ordering: If an invoice has both KHR and USD line items, GDT expects the currency split declared in a specific order. Getting the order wrong causes a 422 error that looks identical to a currency-code error, which costs debugging time.
- CamInvoice issuer registration lag: GDDE partner registration for CamInvoice takes 2–4 weeks and requires a physical document submission. If you start adapter development before registration is complete, you cannot run end-to-end tests against the live CamInvoice network — not even in staging. Start registration on day one.
- Hardcoded NBC exchange rates: Some integrations use a static USD/KHR rate (e.g. 4,100). GDT compares your submitted KHR amounts against the NBC's published daily rate on the invoice date. Discrepancies greater than ±2% trigger a query. The adapter must pull the NBC API daily.
Frequently asked questions — GDT e-VAT integration
Do I need to register with GDT separately before we start the integration?
Your business must already be VAT-registered with GDT (tax.gov.kh) before any API submission is possible. If you are not yet VAT-registered, that process — submitting Form VAT-001 and receiving your TIN — takes 2–6 weeks and must happen first. We can advise on the registration steps but do not file on your behalf.
What is the difference between the GDT API and CamInvoice?
The GDT API (on tax.gov.kh) handles monthly VAT declarations and invoice data submitted by VAT-registered businesses for tax compliance. CamInvoice is a separate GDDE platform (launched May 2025) for B2G e-invoicing — suppliers issuing invoices to government agencies or state-owned enterprises must use CamInvoice. Both can be integrated; they use different credentials, endpoints, and document schemas. Most SMBs only need the GDT API unless they sell to government entities.
What are the submission deadlines?
Monthly VAT declarations are due on the 20th of the month following the reporting period (Prakas 1033). An adapter can submit daily in near-real-time or batch all invoices on the 19th — the GDT API accepts both patterns. We recommend daily submission so errors surface before the deadline.
Can the integration handle multiple legal entities under one holding company?
Yes, but each legal entity has its own GDT TIN and its own VAT registration. The adapter must authenticate separately per entity and route invoices to the correct GDT account. Multi-entity scope is quoted separately — typically +40–60% on a single-entity baseline depending on how many entities share the same ERP vs. run separate systems.
Does the integration produce an audit trail if GDT queries our submission?
Yes. The adapter writes every submission attempt to a log table: invoice ID, timestamp, GDT request payload (sanitised), GDT response code, and success/failure flag. This gives your accountant and auditor a verifiable record of what was submitted and when. Logs are retained for 7 years by default, matching Cambodian accounting record-keeping requirements (Law on Accounting and Auditing, 2016).
What happens if GDT's API is down during month-end?
The adapter queues failed submissions locally and retries with exponential back-off. Your team receives a Telegram or email alert for any invoice that has not successfully submitted within 24 hours. We have never seen GDT's API sustain an outage longer than 4 hours — but the queue means a short outage does not cause a missed filing.
Can we integrate both GDT e-VAT and our banking (ABA or Wing) in the same project?
Yes. API integration projects often cover multiple upstream systems. A combined GDT + ABA/Wing project adds roughly 2–4 weeks to scope and shares the same adapter infrastructure, authentication vault, and monitoring dashboard. It is more efficient to build both together than as separate projects.
We are already using a local ERP vendor (e.g. erpcambodia.biz or MAQSU). Do we still need a custom adapter?
It depends. Some local ERP vendors have built a partial GDT integration — check whether their submission covers all VAT codes, withholding tax, and multi-currency correctly before assuming it is complete. In our experience, most local ERP GDT modules handle the happy path but fail on WHT misclassification and KHR rounding. A 1-week audit of their integration output is cheaper than discovering the gaps during a GDT audit.
How do you handle a GDT API schema change?
GDT has updated their API schema at least twice since 2019 (most recently in late 2023 adding CamInvoice cross-reference fields). When a schema change is announced, we review the changelog, update the adapter, and deploy within 5 business days. Schema-change updates are quoted as fixed change orders, not open-ended time-and-materials work.