Numbers / Receivables / Quotes
Batch-ingest quotes and drive their full lifecycle (commit / accept / void / convert).
/v1/numbers-receivables-quotes
/v1/numbers-receivables-quotes/{id}/commit
/v1/numbers-receivables-quotes/{id}/accept
/v1/numbers-receivables-quotes/{id}/void
/v1/numbers-receivables-quotes/{id}/convert
Quotes do not affect the live AR balance. The counterparty leg is a non-control zero-value placeholder posted to the trade-receivables account. Convert a quote to a real invoice via the /convert endpoint. Document numbers are allocated as QTE-NNNNNN.
Required scope
numbers.receivables-quotes.write
Batch request
Same item shape as the invoices endpoint. The post_status field controls whether new quotes land as draft (d) or sent (c).
{
"schema_version": "1.0.0",
"items": [
{
"counterparty_identifier": "019f1111-bbbb-7ccc-9ddd-222222222222",
"transaction_date": "2026-05-15",
"transaction_currency": "ZAR",
"narration": "Consulting proposal - Q3 2026",
"post_status": "committed",
"lines": [
{ "order": 1, "account_number": "4000", "description": "Consulting fee", "line_amount": "1000.00", "vat201_rate_code": "20180401-1" }
]
}
]
}
Lifecycle
| Endpoint | Transition | Notes |
|---|---|---|
POST /{id}/commit | d → c (sent) | 409 state-transition-invalid if not in draft. |
POST /{id}/accept | c → a | Use when the counterparty accepts the quote but you are not yet ready to invoice. |
POST /{id}/void | d|c|a → v | Quotes have no GL impact, so the lock guards are still applied as a safety net. |
POST /{id}/convert | c|a → new invoice; quote → a | See below. |
Convert quote to invoice
{
"schema_version": "1.0.0",
"invoice_date": "2026-06-01",
"due_date": "2026-07-01",
"post_status": "committed"
}
Creates a brand-new invoice header in either draft (d) or committed (c) state by copying the quote's trading lines as-is and appending a real AR counterparty debit at gross. The source quote is marked accepted (a). The new invoice is linked back to the quote via numbers_transaction_headers.related_transaction.
{
"invoice_identifier": "019f2222-cccc-7ddd-8eee-333333333333",
"invoice_number": "INV-000124",
"quote_identifier": "019f0000-aaaa-7bbb-8ccc-1234567890ab",
"post_status_effective": "committed",
"_links": { "self": "/v1/numbers-receivables-invoices/019f2222-cccc-7ddd-8eee-333333333333" },
"warnings": []
}
Idempotency
Same semantics as the other receivables endpoints. /convert is fully idempotent: a replay returns the previously created invoice id without inserting a second header.
Errors
Same per-item problem types as invoices.