Send Invoice

post
https://api.wafeq.com/ae/v1/invoices

Send an invoice through the Peppol network.

Converts the JSON invoice to UBL XML, wraps it in an SBDH, validates it,
performs SMP lookup, and sends it via AS4. The supplier defaults to your
registered profile when omitted (LL-1468). For credit notes use
POST /credit-notes.

Live mode requires an active subscription for the taxpayer’s organization.
Returns HTTP 402 with detail.code=subscription_required when absent or
inactive, or HTTP 503 with detail.code=billing_status_unavailable when
billing status is stale. Sandbox does not require a subscription.

Body Params

Request body for POST /invoices — a commercial invoice (UBL 380).

You are the supplier (from your registered profile); provide the customer.

string | null

AP document_id of a C3-rejected document this submission corrects. Keep its business number/type and supply corrected content. Requires a new Idempotency-Key and uses queued delivery. The AP handles FTA recovery internally; retry the same request/key if recovery is pending.

metadataobject

Customer-defined string key-value pairs (up to 100 keys, 100 characters per key, 16 KiB total). Stored separately from the fiscal document; never sent to Peppol or the FTA.

string | null

Issue date YYYY-MM-DD (defaults to today)

stringlength ≤ 64Defaults to pint:billing-1@ae-1

PINT profile used for the Peppol DocTypeID + SMP lookup. Default is the UAE profile (real counterparties). Override for conformance, e.g. 'pint:billing-1*' to reach a testbed receiver.

stringDefaults to ALWAYS_SEND

eDEC Message Level Status preference: ALWAYS_SEND (MLS for every message — recommended for tax-invoice confirmation/audit) or FAILURE_ONLY (MLS only on rejection).

stringlength between 3 and 3Defaults to AED

ISO 4217 currency code

string | null

Buyer's purchase order reference

string | null

The caller's own id for this document (e.g. your invoice id). Stored on the AP record and echoed back in every document.* webhook so you can correlate callbacks to your own document.

string | null

Free-text note

stringDefaults to 00000000

§10.4 invoice transaction-type code (BTAE-02): 8 flags, one per scenario, left→right — Free zone, Deemed supply, Margin scheme, Summary invoice, Continuous supply, Disclosed agent billing, E-commerce, Exports. '1' = applies (multiple allowed). '00000000' = no special scenario.

invoice_periodobject

Invoicing period (IBG-14) covered by the document. Required when the summary-invoice transaction flag is set.

line_itemsarray of objectsrequiredlength between 1 and 1000
customerobjectrequired

The buyer (counterparty)

delivery_addressobject

Actual delivery location; required for exports, including services. Never inferred from buyer address.

stringrequiredlength ≤ 64

Your invoice number

stringrequiredlength ≤ 10

Due date YYYY-MM-DD

payment_meansobject
Headers
string | null

Optional taxpayer-scoped submission key. Repeat the same key and payload to replay the saved response without resending. Required with corrects_document_id or queued delivery. Changed payloads and unfinished attempts return 409. Keys have no automatic expiry.

string | nullenum

Set respond-async with Idempotency-Key to request durable queued delivery. Requires server enablement.

Allowed:
string | null
stringrequired

Taxpayer ID (txpay_…). Required with an organization API key (pk_…) for this taxpayer-specific operation, even for one taxpayer. Not a TIN. Optional with a taxpayer access token, which already names its taxpayer.

string | null

Grant ID (tgr_…) to act through, with an organization API key. The request then has exactly that grant's scopes and fails once the grant is revoked. Without it, the key acts through all of the organization's active grants on the taxpayer.

Response