Oman: request and response examples
Send an Omani tax invoice to the sandbox and read the response. You need a sandbox API key and an Omani company onboarded with its invoice source.
Save the request
Save this body as oman-invoice.json. It is a standard tax invoice in Omani rials (OMR) for two standard-rated service lines at 5% VAT. It passes the PINT OM rules for a tax invoice as written.
{
"country": "OM",
"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": "e2dcb6e9-6538-53e9-b13b-1806f388e14a",
"issueDate": "2026-09-18",
"issueTime": "10:42:00",
"dueDate": "2026-10-18",
"currency": "OMR"
},
"parties": {
"seller": {
"name": "Sohar Trading LLC",
"address": {
"addressLine1": "Way 3021",
"addressLine2": "Building 14",
"addressLine3": "Office 22",
"city": "Muscat",
"postalCode": "112",
"country": "OM"
},
"contact": { "phone": "+968 2412 3456" },
"taxIds": [{ "type": "VAT", "value": "OM1100012345" }],
"registrationNumbers": [{ "type": "CR", "value": "1234567" }],
"peppolId": "OM1100012345"
},
"buyer": {
"name": "Nizwa Retail SAOC",
"address": {
"addressLine1": "Way 1507",
"addressLine2": "Building 3",
"addressLine3": "Floor 2",
"city": "Nizwa",
"postalCode": "611",
"country": "OM"
},
"taxIds": [{ "type": "VAT", "value": "OM1100054321" }],
"registrationNumbers": [{ "type": "CR", "value": "1234589" }],
"peppolId": "OM1100054321"
}
},
"lineItems": [
{
"id": "1",
"name": "Software consulting",
"quantity": 10,
"unitCode": "HUR",
"price": { "amount": 45, "baseQuantity": 1 },
"netPrice": 45,
"lineTaxableValue": 450,
"taxCategory": "S",
"taxRate": 5,
"taxAmount": 22.5,
"lineTotal": 472.5,
"extensions": {
"om_itemType": "S",
"om_industrialClassifications": [{ "code": "620201" }],
"om_serviceTypes": [{ "code": "72000000" }]
}
},
{
"id": "2",
"name": "Annual support plan",
"quantity": 1,
"unitCode": "C62",
"price": { "amount": 120, "baseQuantity": 1 },
"netPrice": 120,
"lineTaxableValue": 120,
"taxCategory": "S",
"taxRate": 5,
"taxAmount": 6,
"lineTotal": 126,
"extensions": {
"om_itemType": "S",
"om_industrialClassifications": [{ "code": "620201" }],
"om_serviceTypes": [{ "code": "72000000" }]
}
}
],
"taxTotals": [
{
"taxAmount": 28.5,
"taxSubtotals": [
{ "taxCategory": "S", "percent": 5, "taxableAmount": 570, "taxAmount": 28.5 }
]
}
],
"totals": {
"totalLineTaxableAmount": 570,
"totalAmountExcludingTax": 570,
"totalTaxAmount": 28.5,
"totalAmountIncludingTax": 598.5,
"amountDue": 598.5
},
"extensions": {
"peppol_seller_peppolIdScheme": "0248",
"peppol_buyer_peppolIdScheme": "0248"
}
}
}Before you send it, change these values:
source: your onboardedname:version.documentNumber: a number you have not sent before.uuid: a new UUID version 5 for each invoice. PINT OM accepts no other UUID version; see IBR-002-OM.issueDateandissueTime: the issue date and time. The date cannot be in the future in Oman’s time zone.- Seller and buyer: names, addresses, phone, VATINs and commercial registration numbers. For a buyer registered on Peppol with its VATIN,
peppolIdis the VATIN and the scheme inextensions.peppol_buyer_peppolIdSchemeis0248.
Each line carries the item type in extensions.om_itemType (S for services, G for goods), an ISIC industrial classification code and a service type code. Choose codes from the PINT OM code lists. A goods line also needs an HS code in commodityClassification, with scheme set to HS.
The payload uses GETS field names. If your source’s mapping expects other field names, send the same values under those names. For other document types and their fields, see the Oman field reference.
Send the request
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 @oman-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 OM 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 the same request without the seller’s phone number:
{
"documentId": "01K5EXAMPLE00000000000143",
"documentNumber": "INV-2026-0142",
"message": "Your invoice could not be validated. Review the errors and try again.",
"validationStage": "gets",
"errors": [{
"code": "IBR-011-OM",
"getsPath": "parties.seller.contact.phone",
"payloadPath": "parties.seller.contact.phone",
"message": "[IBR-011-OM] - In Seller Contact (IBG-06), Seller contact telephone number (IBT-042) must be provided.",
"severity": "error",
"ruleSet": "om:tax_invoice"
}]
}Correct the field named by getsPath, then send the request again. The code is the PINT OM rule; Oman validation rules lists the common ones. See Unify errors for other statuses. A 200 is not a delivery receipt: follow the document by documentId to check its status.
Last updated