Convert a quote to a sales order
Converts a quote document into a new sales_order draft. The source quote’s
document_type is unchanged; a new order row is created with document_type: sales_order,
a fresh order number drawn from the SO counter, order_status: draft, and all line items,
pricing, account, and address fields copied from the quote. The new sales order’s
linked_order_id points back to the source quote.
After conversion, call POST /v1/orders/{id}/confirm on the returned sales order to
commit inventory and post GL.
Idempotent via Idempotency-Key header. Requires orders:write scope.
Industry parallel: NetSuite record.transform({fromType:'estimate',toType:'salesorder'});
Stripe POST /v1/quotes/{quote}/accept.
Authorizations
API key issued per entity via Settings > Developers > API Keys.
Each key carries scopes (e.g. orders:read, products:write).
Bearer token format: Authorization: Bearer ark_live_ent_Test keys use ark_test_ent_. Both are issued per entity
via Settings > Developers > API Keys.
Headers
Client-generated unique key for idempotent POST/PATCH/DELETE operations. Alias for the Idempotency parameter. Max 255 chars. On retry with the same key, the original response is returned without re-executing the operation. Keys expire after 24 hours.
255Path Parameters
UUID of the quote to convert.
Body
UUID of the user performing the conversion. Defaults to the API key owner if omitted.
Response
New sales order (draft) created from the quote.
An Arcus ERP order document. One table holds quotes, sales_orders, invoices, returns, and purchase_orders -- always filter by document_type. entity_id is always from the API key (Layer 1 isolation).
order quote, sales_order, invoice, return, purchase_order draft, confirmed, partially_fulfilled, fulfilled, cancelled, voided, awaiting_ach_clearance, on_hold unpaid, partially_paid, paid, overpaid, refunded, partially_refunded, voided unfulfilled, partially_fulfilled, fulfilled Derived (display-only): SUM(list_price * qty) over non-kit lines. The gross baseline of the gross-to-net bridge (List price minus pricing_savings equals subtotal). Never part of order_total.
Derived (display-only): SUM(pricing_rule_adjustment * qty) over non-kit lines (positive magnitude). Per-unit pricing-rule savings already baked into subtotal via sell_rate (ASC 606 transaction price); shown as an informational List-to-Subtotal bridge, never subtracted from order_total.
SSOT: utils/ar-helpers.mjs::updateARBalance. Do not write directly.
ship, pick_up, local_delivery order, manual, proforma, correction 
