Create Purchase Order
POST/api/purchase-orders
Create a new purchase order with optional line items.
purchase-orders:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Authentication: Requires Bearer token.
Required fields:
- purchase_order_date (date)
- supplier_id OR supplier_name
- currency_id OR currency_code
- destination_warehouse_id: warehouse the stock will be received into (required for standard purchase orders; omit for dropship purchase orders, which ship directly to the customer)
Optional fields:
- purchase_order_number: custom PO number (auto-generated if omitted)
- approval_status: pending (default) or approved
- order_status: draft (only allowed value; omit for open)
- shipment_id: required when destination_warehouse is Amazon FBA
Line item fields:
- product_id OR sku (required if not a cost line)
- quantity (required, min:0)
- amount (required, min:0) — unit cost
- description, discount, tax_rate_id, estimated_delivery_date, nominal_code_id, is_free_of_charge, free_of_charge_reason, linked_backorders all optional
Requires permission: purchase_orders.create
Approval policy:
When the purchase-order approval policy is enabled, sending approval_status: approved approves and opens the order only if you can approve it in one call (its amount is within your limit, or its tier auto-approves). Otherwise the order stays in draft, an approval request is raised to the policy's approvers, and the response adds top-level approval: {requested: true, request_id}. The data object also adds approval — present only while the purchase-order approval policy is enabled (omitted otherwise, so responses are unchanged without a policy). Fields: policy_enabled, request_id, status (pending, approved, rejected, withdrawn, superseded; null when no request was ever raised), reason, tier_name, waiting_on[] (id, name of users who can act now), reapproval_pending (an open order whose changes await re-approval), awaiting_viewer (you can act on it now), and on single-order responses can_approve_directly (you can approve it in one call — within your limit), blocked_reason (why not), send_blocked_reason (why it cannot be sent to the supplier yet) and deposit_blocked_reason (why no new vendor deposit can be taken against it). Use GET /api/approval-requests/for/purchase_order/{id} for the full approval timeline.
Request
Responses
- 200
- 401
- 403
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Unprocessable Entity
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.