PurchaseOrder
The purchase order returned by the purchase order read endpoints, as a plain JSON object with no data/included envelope.
The purchase order's unique identifier. Use it in the purchase order paths.
9a1e3b7c-1e3d-4a3f-9f2e-9c6b6e2a2b11The purchase order number the merchant sees in Bookkeep. Numbers are assigned per store, start at 1001 unless the merchant chose a different starting number, and can have gaps.
1042An optional name the merchant gave the purchase order. Often null.
nullOne of draft, ordered, partial, received, committed or cancelled, or, for stores that receive stock through Shopify transfers, in_transit, partially_transferred or transferred. See Purchase order statuses in the Inventory API overview for what each means. These are also the values filter[status_eq] accepts.
orderedThe Shopify location the stock is delivered to, as a Shopify location ID (gid://shopify/Location/<id>). You can look these IDs up with the Shopify Admin GraphQL API.
gid://shopify/Location/73986408603Name of the destination location, as it appears in Shopify. Bookkeep looks it up from destination_location_id. It is null if Bookkeep cannot find the name.
Main WarehousePayment terms agreed with the supplier. Typically one of prepaid, upon_receipt, net_7, net_15, net_30, net_45, net_60, net_90 or net_120, but it is free text, so older purchase orders can hold other values.
nullThe date the merchant expects the stock to arrive.
nullThe date the order was placed with the supplier.
nullThe date the supplier shipped the order.
nullThe date the order was cancelled.
nullThe carrier delivering the order.
nullThe carrier's tracking number.
nullA reference the merchant can add for their own tracking. It also appears on printed purchase orders.
nullThe supplier's own number for this order.
nullThe number on the supplier's invoice for this order.
nullA note on the purchase order.
nullTags the merchant uses to group purchase orders.
[]Shipping cost for the order.
0Total tax on the order's lines: the sum of each line's unit_cost times quantity_ordered times its tax_percent / 100. Always calculated by Bookkeep from the lines; you cannot set it.
0Sum of each line's unit_cost times quantity_ordered, before tax. Always calculated by Bookkeep from the lines; you cannot set it.
0Order total. For a purchase order created through this API, or whose lines are changed through it, Bookkeep sets it to subtotal plus tax_amount. A purchase order saved in the Bookkeep app keeps the total the app saved, so it can differ from subtotal plus tax_amount.
0Extra data saved with the purchase order. On create you can send any JSON object here.
{}Where the purchase order was created, for example bookkeep for the Bookkeep app or partner_api for this API.
bookkeepISO 4217 currency code for all amounts on the purchase order.
USDWhether the merchant archived the purchase order in Bookkeep.
falseProgress of updating incoming stock in Shopify for this purchase order: pending_sync, syncing, synced or sync_failed. A new draft shows pending_sync; Shopify is only updated once the purchase order leaves draft.
pending_syncWhy the last incoming stock update failed or skipped items, for example a line whose item no longer exists in Shopify. Null when there is nothing to report.
nullunbilled, partially_billed or billed: how many of the purchase order's committed receipts are on a bill that is posted to the merchant's accounting platform (none, some or all). Only posted bills count, so a bill that failed to post leaves the purchase order unbilled.
unbilledNumber of bills created from this purchase order's receipts, in any state, including bills not yet posted or that failed to post. It can be above zero while bill_status is still unbilled.
0When the purchase order was created.
2026-06-01T12:00:00.000ZWhen the purchase order was last changed.
2026-06-01T12:00:00.000Zline_items object[]
Present only when include=line_items was requested.
The line item's ID. Send it on PATCH to change or remove this line.
31842The identifier you sent for this line, if any. Unique within the purchase order.
nullThe product's SKU in the merchant's Shopify store.
WIDGET-1The item's barcode.
nullProduct title.
WidgetThe product image from the Shopify store.
nullCost per unit, in the purchase order's currency.
4.5unit_cost times quantity_ordered, before tax.
45The Shopify product ID (gid://shopify/Product/<id>). You can look these IDs up with the Shopify Admin GraphQL API.
gid://shopify/Product/1The Shopify product variant ID (gid://shopify/ProductVariant/<id>). You can look these IDs up with the Shopify Admin GraphQL API.
gid://shopify/ProductVariant/1The Shopify location for this line (gid://shopify/Location/<id>).
gid://shopify/Location/1Name of the line's location.
Main WarehouseTax rate for the line as a percentage, returned as a string, for example "8.25" for 8.25%.
0.0The supplier's own code for this item.
nullA note on this line.
nullThe variant's title, for example a size or colour.
Default TitleNumber of units ordered.
10The Shopify inventory item ID (gid://shopify/InventoryItem/<id>). You can look these IDs up with the Shopify Admin GraphQL API.
gid://shopify/InventoryItem/1Display order of the line on the purchase order.
1True when the line was added while receiving stock, not when the order was placed.
false2026-06-01T12:00:00.000Z2026-06-01T12:00:00.000Zreceipts object[]
Present only when include=receipts was requested (requires purchase_order_receipts:read).
3f2a9c1e-2b3d-4c5e-8f6a-1b2c3d4e5f60Receipt 1committed2026-06-03T09:00:00.000Znullnullnull2026-06-03T09:00:00.000Z2026-06-03T09:00:00.000Zsupplier objectnullable
Present only when include=supplier was requested.
The supplier's unique identifier, the same uuid the Suppliers endpoints return.
6d1f2a3b-4c5d-4e7f-8091-a2b3c4d5e6f7Acme SupplyAcme Supply Co.USDnullnullnullnullfalse2026-01-01T00:00:00.000Z2026-01-01T00:00:00.000Z{
"uuid": "9a1e3b7c-1e3d-4a3f-9f2e-9c6b6e2a2b11",
"sequence_id": 1042,
"name": null,
"status": "ordered",
"destination_location_id": "gid://shopify/Location/73986408603",
"destination_location_name": "Main Warehouse",
"payment_terms": null,
"estimated_arrival": null,
"order_placed_date": null,
"order_shipped_date": null,
"order_cancelled_date": null,
"shipping_carrier": null,
"tracking_number": null,
"reference_number": null,
"supplier_order_reference": null,
"supplier_invoice_number": null,
"note": null,
"tags": [],
"shipping_amount": 0,
"tax_amount": 0,
"subtotal": 0,
"total": 0,
"metadata": {},
"source": "bookkeep",
"currency": "USD",
"is_archived": false,
"incoming_sync_status": "pending_sync",
"incoming_sync_error": null,
"bill_status": "unbilled",
"bills_count": 0,
"created_at": "2026-06-01T12:00:00.000Z",
"updated_at": "2026-06-01T12:00:00.000Z",
"line_items": [
{
"id": 31842,
"client_line_id": null,
"sku": "WIDGET-1",
"barcode": null,
"title": "Widget",
"image_url": null,
"unit_cost": 4.5,
"line_total": 45,
"product_id": "gid://shopify/Product/1",
"variant_id": "gid://shopify/ProductVariant/1",
"location_id": "gid://shopify/Location/1",
"location_name": "Main Warehouse",
"tax_percent": "0.0",
"supplier_sku": null,
"note": null,
"variant_title": "Default Title",
"quantity_ordered": 10,
"inventory_item_id": "gid://shopify/InventoryItem/1",
"position": 1,
"added_during_receiving": false,
"created_at": "2026-06-01T12:00:00.000Z",
"updated_at": "2026-06-01T12:00:00.000Z"
}
],
"receipts": [
{
"uuid": "3f2a9c1e-2b3d-4c5e-8f6a-1b2c3d4e5f60",
"name": "Receipt 1",
"status": "committed",
"received_at": "2026-06-03T09:00:00.000Z",
"invoice_number": null,
"voided_at": null,
"void_reason": null,
"created_at": "2026-06-03T09:00:00.000Z",
"updated_at": "2026-06-03T09:00:00.000Z"
}
],
"supplier": {
"uuid": "6d1f2a3b-4c5d-4e7f-8091-a2b3c4d5e6f7",
"name": "Acme Supply",
"company_name": "Acme Supply Co.",
"currency_code": "USD",
"website": null,
"payment_terms": null,
"price_list": null,
"supplier_tax_type": null,
"is_hidden": false,
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T00:00:00.000Z"
}
}