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.

oman-invoice.jsonjson
{
  "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 onboarded name: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.
  • issueDate and issueTime: 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, peppolId is the VATIN and the scheme in extensions.peppol_buyer_peppolIdScheme is 0248.

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

Submit an Omani invoice in 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 @oman-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 OM 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 the same request without the seller’s phone number:

Missing seller phone — 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-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