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.

uae-invoice.jsonjson
{
  "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 documentType decides which rules apply. Complyance copies it into payload.header.documentType, replacing any value there. An ordinary invoice takes no modifier.
  • TRN and Peppol ID. taxIds holds the 15-digit TRN, which starts with 1 and ends with 03 (IBR-132-AE). peppolId is the party’s 10-digit TIN, the first 10 digits of its TRN, with scheme 0235 in extensions.peppol_seller_peppolIdScheme and extensions.peppol_buyer_peppolIdScheme.
  • Trade licence. A TL registration number needs the name of the authority that issued it, in extensions.ae_seller_authorityName or extensions.ae_buyer_authorityName (IBR-101-AE).
  • Addresses. stateOrProvince is the emirate code, such as DXB or AUH, from the UAE code lists.
  • Lines. price needs grossPrice and baseQuantity (IBR-126-AE). For the UAE, lineTotal is the line amount including VAT; lineTaxableValue is the amount before VAT. Complyance works out each line’s amounts in AED for you.
  • Payment. paymentMeansCode takes a name from the UAE payment means list, such as CREDIT_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.

Submit the UAE request to sandboxbash
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.json

Read 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.

Validated invoice — HTTP 200json
{
  "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:

Document failed validation — HTTP 422json
{
  "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.

Accepted by the buyer's ASP and the FTA — HTTP 200json
{
  "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).

uae-credit-note.jsonjson
{
  "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.