The enterprise ingestion endpoint. Your system stays the record of truth; Navira produces the compliant document, signs it and retains the audit artefacts. In Saudi Arabia it is then submitted to ZATCA. In the UAE the PINT AE document is built and stored but NOT transmitted: Navira is not an FTA-accredited service provider.
Submitted once, and not retried. The authority submission happens synchronously inside this request. If it fails, the invoice is durably stored with zatca_status: "not_submitted" and is NOT picked up by any retry job — the catch-up sweep covers POS sales only. Read zatca_status from the response, and poll GET /api/v1/invoices or re-submit from the app.
Standard or simplified is inferred from the buyer. With a customer_trn the invoice is a STANDARD tax invoice, which in Saudi Arabia must be CLEARED by ZATCA before it is valid. Without one it is SIMPLIFIED and is reported within 24 hours. Sending subtype: "standard" with no customer_trn is rejected here rather than by ZATCA later.
Idempotent. Send the same idempotency_key again after a dropped connection and you get the ORIGINAL invoice back with deduped: true — never a duplicate. On a nightly batch over an unreliable link this is the difference between a reconciliation and an incident.
Cost centres allocate an invoice, or individual lines, to a department, branch or campus. An unknown code is a 400: a silently unallocated line is what an audit fails on months later. There is no self-serve screen for creating them yet, so ask us to set your codes up before you send them — otherwise every code is an unknown one and rejects the whole invoice.
Any industry, without a schema change. A line is a description, a quantity, a price and a UN/CEFACT unit — HUR for consulting hours, DAY for hotel nights, MON for a school term, C62 for a countable item. There is no SKU field to work around. Anything your own system needs to reconcile by — a student id, a patient reference, a matter number — goes in metadata.
Tax treatment is stated, never guessed — on THIS endpoint. Any line that is not standard-rated must name its exemption reason code, validated against the authority's list for the account's country. This is why a school can bill zero-rated tuition and 5% uniforms on one invoice and have both come out right. /api/v1/pos/sales does not accept an exemption reason yet and falls back to a per-category default, so push zero-rated and exempt lines through here.
Accounting firms can be issued one key that acts on several client accounts, named per request in X-Navira-Tenant, rather than holding one key per client. This is provisioned by hand today — talk to us before you build against it.
Requires an nvr_live_… key.