Skip to main content

Get Purchase Order

GET 

/api/purchase-orders/:purchase_order

Get a single purchase order with all relations loaded: lines, products, inventory, shipments, receipts, invoices, bills, notes, financial lines, Amazon inbound data, and more.

Required scope: purchase-orders:read

Grant this scope to your token under Settings → Developer → Personal Access Tokens.

Authentication: Requires Bearer token.

Lifecycle fields: approved_at, last_submitted_at, fully_invoiced_at (ISO timestamps) and finalized_without_submission (bool — true when the PO reached finalized submission status without ever being sent to the supplier; happens automatically when an unsubmitted PO is fully invoiced or received). That implicit transition is also written to the PO activity log with an explanation.

Invoices invoices[] lists every invoice raised against the order. Each entry carries is_provisional - true marks a committed-spend bill (created automatically when the order was submitted, and reduced as real supplier invoices are recorded) rather than a real supplier invoice.

AWD (Amazon Warehousing and Distribution) orders For orders destined to an AWD warehouse, awd_closure_state reports how far the order is from closing. AWD orders are never received by hand — they close when the AWD inventory ledger is reconciled against an AWD inbound shipment that is linked to the order.

  • not_applicable — not an AWD destination.
  • not_linked — no AWD shipment linked and nothing received anywhere; the order is fully outstanding.
  • awaiting_link — no AWD shipment linked, but an unlinked shipment from this supplier is already carrying reconciled receipts. Stock is at Amazon; closure is waiting on the shipment being linked.
  • awaiting_receipt — a shipment is linked but nothing has been received yet. Genuinely not received.
  • partially_received / received — the ledger has confirmed part or all of the order.

awaiting_link and awaiting_receipt both render as "open / unreceived / 0" on the order itself, so use this field rather than order_status when deciding whether stock is still outstanding.

awd_unlinked_receipts[] lists those unlinked shipments and what the ledger already confirms received, broken down by merchant SKU.

⚠ These are candidates, not attributions. A candidate is matched on supplier and Amazon account (only shipments received on the Amazon account of this order's destination warehouse), so the same shipment appears on every open AWD order from that supplier for that account. contested_by_open_purchase_orders says how many — when it is greater than 1 the receipts cannot be attributed to this order from the API alone, and received_units must not be subtracted from an outstanding quantity. Treat awaiting_link as "this order's status is not trustworthy right now", not as a received quantity.

matches_purchase_order_line says whether a merchant SKU corresponds to a line on this order.

Note: received_quantity on the order's lines is not maintained by the AWD receipt pipeline. Use awd_receipts[] (once linked) or awd_unlinked_receipts[] (before linking) instead.

asn_warehouse_system (string|null) is the name of the warehouse-system connection a Send ASN request will create the inbound shipment in (the destination warehouse is mapped to a Trackstar connection that can receive ASNs); null means the ASN is emailed.

asn_warehouse_system_reference (string|null) is the warehouse system's reference for the inbound shipment already created from this order; null until one exists (an ASN emailed earlier does not count).

Approval policy: The response 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​

OK

Response Headers
    Content-Type