Submit a UAE sandbox invoice
Send a UAE tax invoice and a credit note in GETS and read each response up to the final status. You need an onboarded UAE sandbox source, a sandbox API key and real test identities approved for that environment.
Save the request
Save this body as uae-invoice.json. It is a standard-rated tax invoice from one VAT-registered UAE business to another, in dirhams (AED), with one line at 5% VAT.
{
"country": "AE",
"environment": "sandbox",
"purpose": "invoicing",
"source": "acme-erp:1.0.0",
"documentType": { "base": "tax_invoice", "modifiers": [] },
"payload": {
"header": {
"documentType": { "base": "tax_invoice", "modifiers": [] },
"documentNumber": "INV-2026-0142",
"uuid": "6f1c2b8e-4a7d-4c3e-9b52-1d8e7f0a3c64",
"issueDate": "2026-09-18",
"dueDate": "2026-10-18",
"currency": "AED"
},
"parties": {
"seller": {
"name": "Acme Trading LLC",
"peppolId": "1234567890",
"taxIds": [{ "type": "VAT", "value": "123456789000003" }],
"registrationNumbers": [{ "type": "TL", "value": "CN-1234567" }],
"address": {
"addressLine1": "Sheikh Zayed Road",
"addressLine2": "Business Bay",
"city": "Dubai",
"postalCode": "00000",
"stateOrProvince": "DXB",
"country": "AE"
},
"contact": {
"name": "Accounts Receivable",
"phone": "+97145551234",
"email": "billing@acme.example"
}
},
"buyer": {
"name": "Gulf Hospitality LLC",
"peppolId": "1009876543",
"taxIds": [{ "type": "VAT", "value": "100987654300003" }],
"registrationNumbers": [{ "type": "TL", "value": "CN-7654321" }],
"address": {
"addressLine1": "Corniche Road",
"addressLine2": "Al Bateen",
"city": "Abu Dhabi",
"postalCode": "00000",
"stateOrProvince": "AUH",
"country": "AE"
}
}
},
"lineItems": [
{
"id": "1",
"name": "Office chairs",
"quantity": 20,
"unitCode": "C62",
"price": { "amount": 250, "grossPrice": 250, "baseQuantity": 1 },
"lineTaxableValue": 5000,
"taxCategory": "S",
"taxRate": 5,
"taxAmount": 250,
"lineTotal": 5250,
"commodityClassification": { "code": "940130", "scheme": "HS" }
}
],
"payment": {
"paymentMeans": [
{
"paymentMeansCode": "CREDIT_TRANSFER",
"creditTransferInfo": {
"payeeFinancialAccountId": "AE070331234567890123456"
}
}
]
},
"taxTotals": [
{
"taxAmount": 250,
"taxSubtotals": [
{
"taxableAmount": 5000,
"taxAmount": 250,
"taxCategory": "S",
"percent": 5
}
]
}
],
"totals": {
"totalLineTaxableAmount": 5000,
"totalAmountExcludingTax": 5000,
"totalTaxAmount": 250,
"totalAmountIncludingTax": 5250,
"amountDue": 5250
},
"extensions": {
"ae_seller_authorityName": "Dubai Economy and Tourism",
"ae_buyer_authorityName": "Abu Dhabi Department of Economic Development",
"peppol_seller_peppolIdScheme": "0235",
"peppol_buyer_peppolIdScheme": "0235",
"peppol_buyerAccountingReference": "PO-88213"
}
}
}Replace source with your onboarded name:version, and use an unused documentNumber. Keep environment: "sandbox" with a sandbox key. These values are specific to the UAE:
- Document type. The envelope’s
documentTypedecides which rules apply. Complyance copies it intopayload.header.documentType, replacing any value there. An ordinary invoice takes no modifier. - TRN and Peppol ID.
taxIdsholds the 15-digit TRN, which starts with1and ends with03(IBR-132-AE).peppolIdis the party’s 10-digit TIN, the first 10 digits of its TRN, with scheme0235inextensions.peppol_seller_peppolIdSchemeandextensions.peppol_buyer_peppolIdScheme. - Trade licence. A
TLregistration number needs the name of the authority that issued it, inextensions.ae_seller_authorityNameorextensions.ae_buyer_authorityName(IBR-101-AE). - Addresses.
stateOrProvinceis the emirate code, such asDXBorAUH, from the UAE code lists. - Lines.
priceneedsgrossPriceandbaseQuantity(IBR-126-AE). For the UAE,lineTotalis the line amount including VAT;lineTaxableValueis the amount before VAT. Complyance works out each line’s amounts in AED for you. - Payment.
paymentMeansCodetakes a name from the UAE payment means list, such asCREDIT_TRANSFER.
The UAE field reference lists every field, with its PINT AE business term.
Send the request
Sandbox and production use the same host, https://prod.gets.complyance.io. The "environment": "sandbox" field in the request body is what sends this invoice to sandbox.
curl --request POST 'https://prod.gets.complyance.io/api/v3/unify' \
--header "Authorization: Bearer ${COMPLYANCE_API_KEY}" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'new-api: true' \
--data @uae-invoice.jsonRead the response
HTTP 200 means the invoice passed validation and was stored. This response is illustrative: the real Base64XML holds the generated PINT AE invoice, not this short fragment.
{
"documentId": "01K5EXAMPLE00000000000142",
"documentNumber": "INV-2026-0142",
"message": "Your invoice was validated and is ready for submission.",
"Base64XML": "PEludm9pY2U+PElEPklOVi0yMDI2LTAxNDI8L0lEPjwvSW52b2ljZT4="
}If the request returns HTTP 422, read every entry in errors. This one is the response to a request without totals.amountDue:
{
"documentId": "01K5EXAMPLE00000000000143",
"documentNumber": "INV-2026-0142",
"message": "Your invoice could not be validated. Review the errors and try again.",
"validationStage": "gets",
"errors": [
{
"code": "IBR-015",
"getsPath": "totals.amountDue",
"payloadPath": "totals.amountDue",
"message": "An Invoice MUST have the Amount due for payment (ibt-115).",
"severity": "error",
"ruleSet": "ae:tax_invoice"
}
]
}Correct the field named by getsPath, then send the request again. UAE validation rules lists every rule. For 404, compare source with the onboarded source name and version; for 401 or 403, check the API key and that it belongs to sandbox. See Unify errors for other statuses.
Check the final status
A 200 does not confirm delivery. Follow the document by documentId, as described in Submit and retrieve, until isTerminal is true. This response is shortened: government, which holds the Peppol exchange’s answers, and artifacts are left out.
{
"success": true,
"data": {
"documentId": "01K5EXAMPLE00000000000142",
"documentNumber": "INV-2026-0142",
"country": "AE",
"environment": "sandbox",
"state": "final_valid",
"isTerminal": true,
"lastUpdatedAt": "2026-09-18T10:04:31.000Z",
"errors": [],
"validationResults": {
"status": "Valid",
"validationSteps": [
{ "name": "Validation Passed", "status": "Valid", "error": null },
{ "name": "Queue Admitted", "status": "Valid", "error": null },
{
"name": "Delivery Processing Started",
"status": "Valid",
"error": null
},
{ "name": "Final Valid", "status": "Valid", "error": null }
]
}
}
}final_valid means both the buyer’s ASP and the FTA accepted the e-invoice; see the five corners. final_invalid means one of them rejected it.
Credit note
A credit note reduces an invoice you have already sent. It names the invoice in header.referenceId, with that invoice’s date in extensions.peppol_precedingInvoiceIssueDate, and gives a reason from the UAE credit note reasons in extensions.ae_creditNoteReasonCode, such as GOODS_OR_SERVICES_RETURNED. Only a credit note with reason VOLUME_DISCOUNT can leave out the invoice reference (IBR-055-AE).
{
"country": "AE",
"environment": "sandbox",
"purpose": "invoicing",
"source": "acme-erp:1.0.0",
"documentType": { "base": "credit_note", "modifiers": [] },
"payload": {
"header": {
"documentType": { "base": "credit_note", "modifiers": [] },
"documentNumber": "CN-2026-0037",
"uuid": "2a9d4e71-8c3b-4f06-a5e2-7b1c9d0f4e38",
"issueDate": "2026-09-25",
"currency": "AED",
"referenceId": "INV-2026-0142"
},
"parties": {
"seller": {
"name": "Acme Trading LLC",
"peppolId": "1234567890",
"taxIds": [{ "type": "VAT", "value": "123456789000003" }],
"registrationNumbers": [{ "type": "TL", "value": "CN-1234567" }],
"address": {
"addressLine1": "Sheikh Zayed Road",
"addressLine2": "Business Bay",
"city": "Dubai",
"postalCode": "00000",
"stateOrProvince": "DXB",
"country": "AE"
},
"contact": {
"name": "Accounts Receivable",
"phone": "+97145551234",
"email": "billing@acme.example"
}
},
"buyer": {
"name": "Gulf Hospitality LLC",
"peppolId": "1009876543",
"taxIds": [{ "type": "VAT", "value": "100987654300003" }],
"registrationNumbers": [{ "type": "TL", "value": "CN-7654321" }],
"address": {
"addressLine1": "Corniche Road",
"addressLine2": "Al Bateen",
"city": "Abu Dhabi",
"postalCode": "00000",
"stateOrProvince": "AUH",
"country": "AE"
}
}
},
"lineItems": [
{
"id": "1",
"name": "Office chairs",
"quantity": 2,
"unitCode": "C62",
"price": { "amount": 250, "grossPrice": 250, "baseQuantity": 1 },
"lineTaxableValue": 500,
"taxCategory": "S",
"taxRate": 5,
"taxAmount": 25,
"lineTotal": 525,
"commodityClassification": { "code": "940130", "scheme": "HS" }
}
],
"payment": {
"paymentMeans": [
{
"paymentMeansCode": "CREDIT_TRANSFER",
"creditTransferInfo": {
"payeeFinancialAccountId": "AE070331234567890123456"
}
}
]
},
"taxTotals": [
{
"taxAmount": 25,
"taxSubtotals": [
{
"taxableAmount": 500,
"taxAmount": 25,
"taxCategory": "S",
"percent": 5
}
]
}
],
"totals": {
"totalLineTaxableAmount": 500,
"totalAmountExcludingTax": 500,
"totalTaxAmount": 25,
"totalAmountIncludingTax": 525,
"amountDue": 525
},
"extensions": {
"ae_seller_authorityName": "Dubai Economy and Tourism",
"ae_buyer_authorityName": "Abu Dhabi Department of Economic Development",
"peppol_seller_peppolIdScheme": "0235",
"peppol_buyer_peppolIdScheme": "0235",
"peppol_buyerAccountingReference": "PO-88213",
"peppol_precedingInvoiceIssueDate": "2026-09-18",
"ae_creditNoteReasonCode": "GOODS_OR_SERVICES_RETURNED"
}
}
}This request passes Unify’s validation as written. Send it and follow it the same way as the invoice.