SUMU
Sending

Create an invoice

The main endpoint — structured JSON in, compliant PINT OM UBL out.

The main endpoint. You send structured JSON; SUMU builds compliant PINT OM UBL, validates it against the Oman rule sets, transmits it to the buyer, and reports it to the Tax Authority. Use this unless you have a specific reason to build UBL yourself — see Send raw UBL.

Check the receiver first

buyer.peppol_id is derived from the VAT number if you don't supply it, but derivation isn't the same as confirmation — it doesn't tell you the buyer is actually registered on Peppol yet. Call Participant lookup before sending if you haven't recently; a 404 or unpublished capability here fails after the invoice number is already committed, not before.

POST/v1/api/invoices
returns 202

Top-level fields

FieldType Description
sender_iduuidrequiredThe taxpayer issuing this document
buyerobjectconditionalThe customer. Required for 380, 381, 383, 386
sellerobjectconditionalThe supplier. Required instead of buyer for self-billed 389, 261
invoice_type_codeenumrequiredDocument kind — see the table below
invoice_transaction_typestringoptional20 binary flags. Defaults to a full tax invoice — see below
invoice_numberstringoptionalYour reference. Generated sequentially if omitted. Must be unique per taxpayer
issue_datedaterequiredYYYY-MM-DD
issue_timetimerequiredHH:MM:SS
invoice_currency_codestringrequired3-letter ISO 4217
tax_currency_codestringconditionalRequired when the invoice currency isn't OMR
exchange_ratestringconditionalRequired when currency isn't OMR; rejected when it is. Up to 7 decimals
vat_point_datedateoptionalWhen the supply occurred for VAT purposes, if not the issue date
payment_due_datedateconditionalNot permitted on credit notes (381, 261)
previous_invoice_referencestringconditionalRequired for corrections — 381, 383, 261
previous_invoice_issue_datedateconditionalRequired with the above
previous_invoice_uuiduuidconditionalRequired with the above — take it from the original transaction
reason_for_issuancestringconditionalRequired for corrections. Code from the issuance-reason list, e.g. CAN
amount_paidnumberoptionalAlready paid against this invoice
prepayment_invoice_numberstringconditionalRequired when amount_paid is present
prepayment_invoice_uuiduuidconditionalRequired when amount_paid is present
buyer_referencestringoptionalPurchase order or cost-centre reference
invoice_notestringoptionalFree text shown on the document
billing_period_start_datedateoptionalFor periodic billing
billing_period_end_datedateoptionalFor periodic billing
paymentobjectoptionalHow to pay — see Payment object below
itemsarrayrequiredAt least one line
save_as_draftbooleanoptionaltrue stores and validates without sending. Default false

Document kinds — invoice_type_code

CodeDocumentCounterpartyExtra requirements
380Commercial invoicebuyer
381Credit notebuyerCorrection fields; no due date
383Debit notebuyerCorrection fields
386Prepayment invoicebuyerPrepayment flag in the transaction type
389Self-billed invoicesellerSupplier VAT id mandatory
261Self-billed credit notesellerCorrection fields; supplier VAT id

Transaction type — invoice_transaction_type (20 binary flags)

A 20-character string of 0 and 1. Position 1 marks a full tax invoice (B2B), position 2 a simplified one (B2C) — exactly one of the two must be set. Other positions qualify the invoice further.

FlagMeaningNotes
1Full tax invoice (B2B)Buyer must have a complete address
2Simplified invoice (B2C)Cannot combine with 3, 5 or 7
3Self-billedRequired for 389 and 261
4Third party
5Summary invoice
6Continuous supply
7ExportTypically zero-rated
8Deemed supply
15PrepaymentUse with 386

Example: 10000000000000000000 is an ordinary B2B invoice; 01000000000000000000 is B2C; 10100000000000000000 is a self-billed B2B invoice.

Counterparty object — buyer / seller

FieldType Description
namestringrequiredLegal name of the party
vat_numberstringconditionalMandatory on self-billed documents; strongly recommended on B2B
peppol_idstringoptionalNetwork address, e.g. 0248:OM1100449002. Derived from the VAT number if omitted
cr_numberstringoptionalCommercial Registration number
legal_registration_idstringoptionalAlternative legal identifier
buyer_id_schemeenumoptionalScheme the legal identifier was issued under
contact_namestringoptionalPerson or department
phonestringoptional
emailstringoptional
addressobjectrequiredSee Address object below

Address object

FieldType Description
streetstringrequiredStreet or building
address_line_2stringconditionalRequired on everything except a purely B2C invoice
address_line_3stringconditionalRequired on everything except a purely B2C invoice
citystringrequired
postal_codestringconditionalRequired on everything except a purely B2C invoice
statestringoptionalGovernorate
countrystringrequired2-letter ISO 3166-1 code

Address completeness is stricter than base Peppol

On any invoice that isn't purely B2C, all five of street, line 2, line 3, city and postal code must be present. Base Peppol treats the last three as optional, so a payload that's valid elsewhere is rejected here.

Line item object — items[]

FieldType Description
item_namestringconditionalRequired unless product_id is given
product_iduuidoptionalPulls name, price and classification from your product catalogue. Any field you also send overrides it
descriptionstringoptionalLonger detail shown under the name
quantitynumberrequiredMust be positive
unit_codestringconditionalUN/ECE unit, e.g. H87 piece, HUR hour. Required unless sourced from a product
unit_pricenumberconditionalPrice per unit, before tax. Required unless sourced from a product
item_typeenumoptionalGS goods or SV services. Determines which classification applies
item_classification_codestringconditional12-digit Oman HS code. Required on goods lines except B2C
service_type_codestringoptional8-digit service category. Use 00000000 on goods lines
industrial_classification_codestringoptional6-digit ISIC code for the activity
country_of_originstringoptional2-letter code
tax_category_codeenumrequiredS standard, Z zero, E exempt, O out of scope
tax_percentnumberconditional5 for standard-rated, 0 for zero-rated, omitted otherwise
tax_exemption_reason_codestringconditionalRequired for Z and E. Different code list per category
tax_exemption_reason_textstringoptionalFree-text explanation
line_allowance_amountnumberoptionalDiscount on this line
line_allowance_percentagenumberoptionalMust reconcile with the amount if both are sent
line_allowance_reasonstringoptionalWhy the discount applies
line_allowance_reason_codestringoptionalCoded reason
gross_pricenumberoptionalList price before discount
price_discountnumberoptionalDiscount off the list price. gross_price − price_discount must equal unit_price
base_quantitynumberoptionalQuantity the unit price refers to, when not 1
seller_item_idstringoptionalYour SKU
buyer_item_idstringoptionalThe customer's item reference
line_notestringoptionalFree text on the line

Payment object

FieldType Description
means_codestringrequiredUN/ECE 4461 code, e.g. 30 credit transfer, 48 card
account_idstringoptionalIBAN or account number
account_namestringoptionalAccount holder
bicstringoptionalBank identifier
referencestringoptionalRemittance reference for the payer to quote

Response fields

FieldType Description
transaction_iduuidTrack delivery and tax reporting with this
document_iduuidThe stored invoice. Use it to fetch the XML or PDF
invoice_uuiduuidThe document's own identifier inside the UBL. Quote this as previous_invoice_uuid when crediting it later
statusenumAlways queued on success — delivery hasn't happened yet
totalsobjectComputed by SUMU from the lines. Compare against your own figures

202 means accepted, not delivered. The document has passed Oman validation and is queued. Delivery to the buyer and reporting to the Tax Authority happen within seconds — watch the transaction or subscribe to webhooks.

Failure · 422

If the document can't be built to a compliant state, nothing is queued and the issues are returned in the same shape as Validate.

{
  "statusCode": 422,
  "error": {
    "code": "SCHEMATRON_INVALID",
    "message": "Document failed Oman PINT validation",
    "issues": [
      {
        "severity": "error",
        "code": "IBR-019-OM",
        "message": "Buyer address line 1, line 2, line 3, city and post code MUST be present...",
        "location": "/Invoice/cac:AccountingCustomerParty/cac:Party/cac:PostalAddress"
      }
    ]
  }
}

Track what happens next in Get a transaction.

SUMU

Sumu — a business platform owned and operated by OceanGate for Smart Technologies LLC, a FinTech and SaaS solutions company. All rights reserved © 2026.

joinsumu.com ↗