Developers / Numbers

Numbers / Receivables / Quotes

Batch-ingest quotes and drive their full lifecycle (commit / accept / void / convert).

POST /v1/numbers-receivables-quotes
POST /v1/numbers-receivables-quotes/{id}/commit
POST /v1/numbers-receivables-quotes/{id}/accept
POST /v1/numbers-receivables-quotes/{id}/void
POST /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).

POST /v1/numbers-receivables-quotes
{
  "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

EndpointTransitionNotes
POST /{id}/commitdc (sent)409 state-transition-invalid if not in draft.
POST /{id}/acceptcaUse when the counterparty accepts the quote but you are not yet ready to invoice.
POST /{id}/voidd|c|avQuotes have no GL impact, so the lock guards are still applied as a safety net.
POST /{id}/convertc|a → new invoice; quote → aSee below.

Convert quote to invoice

POST /v1/numbers-receivables-quotes/{id}/convert
{
  "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.

200 OK (application/json)
{
  "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.