The Philippines BIR e-invoice JSON format will follow a structured data layout to transmit invoices to the BIR's Electronic Invoicing System (EIS). Even if one field is wrong, your invoice risks rejection. Schema, mandatory fields, common errors you will come across and handling of invoices through the EIS API are what you should know before 31 December 2026 mandate.
Key Takeaways
- JSON, not XML, is the format the EIS accepts. BIR chose it as a lighter way to exchange data between different systems.
- Two schema variants exist: one for CAS, one for CRM/POS. Both sit at spec version v2.01.
- Every invoice has 24-character EisUniqueId having issuance date (8), EIS-Cert ID (8) and control value (8).
- The payload is JWS-signed, then AES-256 encrypted, then pushed to the API. Skip a step, and it fails.
- The deadline for covered taxpayers is 31 December 2026 under RR No. 26-2025. Micro taxpayers are exempt.
The BIR e-invoice format becomes prescribed and structured-data layout for electronic invoices for Philippines taxpayers. They must raise and send to the EIS for reporting. These are mentioned under Sections 237 and 237-A of the Tax Code, implemented by RR No. 11-2025 and changed by RR No. 26-2025.
JSON or JavaScript Object Notation is machine-readable, so the EIS can validate and store your data without anyone manually entering it. A PDF or a scan of a paper invoice does not count after 31 December 2026.
Note that the Philippines e-invoice schema is not a digital picture of your invoice. Every value is checked server-side when fed. The authoritative field list lives on the EIS Certification Portal, with separate CAS and CRM/POS templates. Use the current v2.01 spreadsheet before you build anything.
These are the e-invoice JSON fields Philippines businesses have to populate. Cardinality 1..1 means mandatory.
Field | Type | Notes |
| EisUniqueId | String (24) | Issuance date + EIS-Cert ID + control value. Must be unique. |
| IssueDtm | String (8) | Issuance date, format YYYYMMDD. |
| Tin (Seller) | String (9) | Nine digits, no dashes. 123456789 is right. 123-456-7 is not. |
| BranchCd | String | Branch code. 00000 for head office. Separate field from the TIN. |
| ItemList | Array | 1 to 1,000 line items. All amounts in PHP. |
| SalesAmt | Number | Item sales amount, net of VAT if VATable. |
| NetSales | Number | Sales less regular and special discounts. |
If a field does not apply, follow the null convention. String fields take null or blank. Number fields take 0.00. Do not leave them out.
A note most finance teams miss: the seller TIN is a plain 9-digit string. The branch code is its own field. Mapping the branch code into the TIN is a common configuration mistake, and it fails every invoice until you fix it.
The e-invoice JSON structure is organised into logical blocks under CAS v2.01:
The invoice body then sits inside a transmission wrapper. submitId identifies the submission. data holds the signed, encrypted invoice JSON. You can send 1 to 100 invoices per submission.
One document maps to one e-invoice JSON. Mixed transactions get split by tax classification, so a VATable and an exempt line on the same sale become separate e-invoices.
The BIR invoice validation rules run server-side. There is no partial pass. The EIS returns status codes.
Code | Meaning |
| SUC001 | Success. Passed all checks. |
| SYN002 | Invalid digital signature. |
| SYN003 | Duplicated EisUniqueId. |
| SYN004 | Schema error: missing fields, extra fields, wrong data type or number format. |
| ERR001 | Seller TIN not registered with BIR. |
| ERR002 | Issuance datetime invalid, or later than transmission, or mismatched with the date in EisUniqueId. |
| ERR004 | Total Sales / VAT error. VAT must be 0.00 for exempt or zero-rated. |
That last one catches people. If your tax type is exempt or zero-rated, the VAT amount has to be 0.00. Anything else, and the payload bounces.
These are the ones that show up in almost every first live batch.
Run this before every batch. Not just during testing.
The Philippines e-invoice API integration runs on a push model over REST. There are four API types: Authentication, Invoice Issuance, Inquiry Result, and an optional Result Callback you host yourself.
The issuance flow, in order:
On authentication and security, per the BIR EIS technical specifications, the auth token is valid for six hours. Every request header carries an HMAC-SHA256 signature, and the datetime must be within ten minutes of server time. RSA is used only once, in the auth request, to hand over your session key. Everything after that is AES-256.
Before any of this works, you need EIS Certification, an Application ID from the certification portal, sandbox testing, and a Permit to Transmit. The PTT is issued to the taxpayer, not the software vendor.