"2026-09-11T08:12:44Z"Shapes
The shapes an answer is made of. A purchase order reads the same from every endpoint that returns one, because the API builds it in one place; a field with no value is null, never missing. Ids are integers. Money is a decimal string beside a currency code.
Date
"2026-09-02"nullQuantity
24SyncState
What Shopify has heard about this record's stock movement.
pendingsyncedfailed{
"state": "synced",
"attempted_at": "2026-09-11T08:12:46Z",
"error": null
}LocationRef
{
"id": 61234567890,
"name": "Main warehouse"
}Error
{
"error": {
"code": "validation_failed",
"message": "The given data was invalid.",
"details": []
}
}Whoami
{
"shop": {
"id": 12,
"domain": "example.myshopify.com",
"name": "Example Store",
"currency": "USD",
"timezone": "America/Chicago"
},
"key": {
"id": 4,
"name": "ERP sync",
"prefix": "srk2_ab12cd34",
"scopes": [
"read"
],
"expires_at": "2027-09-11T00:00:00Z"
},
"api_version": "2"
}Scope
readwrite:purchase_orderswrite:supplierswrite:inventorywrite:manufacturingwebhooks"read"Supplier
{
"id": 7,
"name": "Acme",
"company_name": null,
"type": null,
"contact_name": null,
"email": "orders@acme.example",
"email_cc": [],
"phone": null,
"currency": "USD",
"account_number": null,
"location_account_numbers": {},
"lead_time_days": 10,
"payment_terms": null,
"min_order_value": null,
"free_freight_threshold": null,
"taxable": true,
"ships_direct": false,
"auto_restock": false,
"exclude_from_reorder": false,
"default_updates_stock": null,
"address": {
"line1": null,
"line2": null,
"city": null,
"province": null,
"zip": null,
"country": null
},
"bill_to_address": null,
"notes": null,
"match_vendors": [],
"match_tags": [],
"match_exclude_tags": [],
"dropship_tags": [],
"archived": false,
"archived_at": null,
"merged_into_id": null,
"created_at": "2026-09-01T14:02:11Z",
"updated_at": "2026-09-01T14:02:11Z"
}SupplierInput
Every field is optional on PATCH; name is required on create.
{
"name": "Acme Supply Co",
"company_name": "Acme Supply Co",
"type": "Manufacturer",
"contact_name": "Dana Whitfield",
"email": "orders@acme.example",
"email_cc": [],
"phone": "+1 512 555 0142",
"currency": "USD",
"account_number": "AC-2231",
"location_account_numbers": {},
"lead_time_days": 10,
"payment_terms": "Net 30",
"min_order_value": 250,
"free_freight_threshold": 500,
"taxable": true,
"ships_direct": false,
"auto_restock": true,
"exclude_from_reorder": false,
"default_updates_stock": false,
"address_line1": "500 Congress Ave",
"address_line2": null,
"city": "Austin",
"province": "Texas",
"zip": "78701",
"country": "United States",
"bill_to_address": null,
"notes": null,
"match_vendors": [
"Acme"
],
"match_tags": [],
"match_exclude_tags": [],
"dropship_tags": []
}SupplierCatalogRow
{
"inventory_item_id": 44811223344,
"supplier_sku": "ACME-MUG-BLU",
"pack_size": 12,
"pack_unit": "case",
"min_order_qty": 6,
"is_primary": true,
"source": "catalog",
"price": "12.50",
"price_currency": "USD",
"price_list": {
"effective": {
"currency": "USD",
"effective_from": null,
"source": "api",
"tiers": [
{
"min_qty": 1,
"price": "12.50"
}
]
},
"upcoming": {
"currency": "USD",
"effective_from": null,
"source": "api",
"tiers": [
{
"min_qty": 1,
"price": "12.50"
}
]
}
},
"created_at": "2026-09-01T10:00:00Z",
"updated_at": "2026-09-11T08:12:44Z"
}PriceTierSet
{
"currency": "USD",
"effective_from": null,
"source": "catalog",
"tiers": [
{
"min_qty": 1,
"price": "12.50"
}
]
}SupplierCatalogRowInput
One of inventory_item_id or variant_id is required.
{
"inventory_item_id": 44811223344,
"variant_id": 40011223344,
"supplier_sku": "ACME-MUG-BLU",
"pack_size": 12,
"pack_unit": "case",
"min_order_qty": 6,
"is_primary": true,
"tiers": [
{
"min_qty": 1,
"price": 12.5
}
],
"effective_from": "2026-09-11"
}"draft"PurchaseOrderSummary
A list row - the order without receipts and payments.
draftorderedin_transitpartialreceivedclosedpurchasereturnunpaidpartialpaid{
"id": 1042,
"number": "PO-1042",
"sequential_id": 1042,
"status": "ordered",
"type": "purchase",
"archived": false,
"archived_at": null,
"source": "api",
"supplier": {
"id": 7,
"name": "Acme Supply Co"
},
"supplier_id": 7,
"currency": "USD",
"exchange_rate": {
"rate": 1.36,
"base_currency": "USD",
"date": "2026-09-02",
"source": "api"
},
"reference": "INV-8812",
"customer_order_number": null,
"supplier_order_number": "SO-77120",
"invoice_number": null,
"account_number": "AC-2231",
"notes": null,
"expected_at": "2026-09-20",
"payment_due_on": "2026-10-02",
"payment_status": "unpaid",
"paid_at": null,
"location": {
"id": 61234567890,
"name": "Main warehouse"
},
"updates_stock": true,
"ships_to_customer": false,
"ship_to_address": null,
"tax": {
"rate_id": 1,
"name": "Acme Supply Co",
"rate_percent": 8.25,
"taxes_included": false,
"charges_taxable": true
},
"totals": {
"currency": "USD",
"subtotal": "300.00",
"charges": "0.00",
"tax": "24.75",
"total": "324.75"
},
"lines": [
{
"id": 5001,
"position": 1,
"product_title": "Stoneware mug",
"variant_title": "Blue",
"sku": "MUG-BLU",
"supplier_sku": "ACME-MUG-BLU",
"barcode": "0123456789012",
"pack_code": "CS12",
"inventory_item_id": 44811223344,
"variant_id": 40011223344,
"product_id": 7011223344,
"location_id": 61234567890,
"quantity": 24,
"cancelled_quantity": 0,
"received_quantity": 12,
"outstanding_quantity": 12,
"unit_cost": "12.50",
"discount_percent": null,
"line_total": "300.00",
"taxable": true,
"tax_rate_percent": 8.25,
"weight_grams": 250,
"supplier_note": null,
"internal_note": null
}
],
"charges": [],
"shopify_sync": {
"state": "synced",
"attempted_at": "2026-09-11T08:12:46Z",
"error": null
},
"sent_at": "2026-09-02T14:03:22Z",
"ordered_at": "2026-09-02T14:05:10Z",
"in_transit_at": null,
"received_at": null,
"closed_at": null,
"created_at": "2026-09-01T10:00:00Z",
"updated_at": "2026-09-11T08:12:44Z"
}PurchaseOrder
draftorderedin_transitpartialreceivedclosedpurchasereturnunpaidpartialpaid{
"receipts": [
{
"id": 311,
"purchase_order_id": 1042,
"received_at": null,
"voided_at": null,
"source": "api",
"location": {
"id": 61234567890,
"name": "Main warehouse"
},
"invoice": {
"reference": "INV-8812",
"date": "2026-09-02",
"total": "324.75"
},
"exchange_rate": 1.36,
"rejected_disposition": "replace",
"note": "Two cartons short; supplier notified.",
"lines": [
{
"id": 5001,
"line_id": 5001,
"quantity": 24,
"surplus_quantity": 0,
"rejected_quantity": 0,
"unit_cost": "12.50",
"landed_unit_cost": "13.10",
"allocated_charge_amount": "0.60"
}
],
"shopify_sync": {
"state": "synced",
"attempted_at": "2026-09-11T08:12:46Z",
"error": null
},
"created_at": "2026-09-01T10:00:00Z",
"updated_at": "2026-09-11T08:12:44Z"
}
],
"payments": [
{
"id": 52,
"amount": "324.75",
"currency": "USD",
"paid_on": "2026-09-30",
"method": "bank_transfer",
"reference": "Wire 4471",
"note": "Paid by wire.",
"created_at": "2026-09-01T10:00:00Z"
}
],
"id": 1042,
"number": "PO-1042",
"sequential_id": 1042,
"status": "ordered",
"type": "purchase",
"archived": false,
"archived_at": null,
"source": "api",
"supplier": {
"id": 7,
"name": "Acme Supply Co"
},
"supplier_id": 7,
"currency": "USD",
"exchange_rate": {
"rate": 1.36,
"base_currency": "USD",
"date": "2026-09-02",
"source": "api"
},
"reference": "INV-8812",
"customer_order_number": null,
"supplier_order_number": "SO-77120",
"invoice_number": null,
"account_number": "AC-2231",
"notes": null,
"expected_at": "2026-09-20",
"payment_due_on": "2026-10-02",
"payment_status": "unpaid",
"paid_at": null,
"location": {
"id": 61234567890,
"name": "Main warehouse"
},
"updates_stock": true,
"ships_to_customer": false,
"ship_to_address": null,
"tax": {
"rate_id": 1,
"name": "Acme Supply Co",
"rate_percent": 8.25,
"taxes_included": false,
"charges_taxable": true
},
"totals": {
"currency": "USD",
"subtotal": "300.00",
"charges": "0.00",
"tax": "24.75",
"total": "324.75"
},
"lines": [
{
"id": 5001,
"position": 1,
"product_title": "Stoneware mug",
"variant_title": "Blue",
"sku": "MUG-BLU",
"supplier_sku": "ACME-MUG-BLU",
"barcode": "0123456789012",
"pack_code": "CS12",
"inventory_item_id": 44811223344,
"variant_id": 40011223344,
"product_id": 7011223344,
"location_id": 61234567890,
"quantity": 24,
"cancelled_quantity": 0,
"received_quantity": 12,
"outstanding_quantity": 12,
"unit_cost": "12.50",
"discount_percent": null,
"line_total": "300.00",
"taxable": true,
"tax_rate_percent": 8.25,
"weight_grams": 250,
"supplier_note": null,
"internal_note": null
}
],
"charges": [],
"shopify_sync": {
"state": "synced",
"attempted_at": "2026-09-11T08:12:46Z",
"error": null
},
"sent_at": "2026-09-02T14:03:22Z",
"ordered_at": "2026-09-02T14:05:10Z",
"in_transit_at": null,
"received_at": null,
"closed_at": null,
"created_at": "2026-09-01T10:00:00Z",
"updated_at": "2026-09-11T08:12:44Z"
}PurchaseOrderLine
{
"id": 1042,
"position": 1,
"product_title": "Stoneware mug",
"variant_title": "Blue",
"sku": "MUG-BLU",
"supplier_sku": "ACME-MUG-BLU",
"barcode": "0123456789012",
"pack_code": "CS12",
"inventory_item_id": 44811223344,
"variant_id": 40011223344,
"product_id": 7011223344,
"location_id": 61234567890,
"quantity": 24,
"cancelled_quantity": 0,
"received_quantity": 12,
"outstanding_quantity": 12,
"unit_cost": "12.50",
"discount_percent": null,
"line_total": "300.00",
"taxable": true,
"tax_rate_percent": 8.25,
"weight_grams": 250,
"supplier_note": null,
"internal_note": null
}PurchaseOrderCharge
shippingothervaluequantityweightcustomnone{
"id": 1042,
"kind": "shipping",
"label": "Freight",
"amount": "324.75",
"currency": "USD",
"amount_in_order_currency": "18.00",
"tax_amount": "0.00",
"billed_by_supplier": false,
"allocation_method": "value"
}Payment
{
"id": 52,
"amount": "324.75",
"currency": "USD",
"paid_on": "2026-09-30",
"method": "bank_transfer",
"reference": "Wire 4471",
"note": "Paid by wire.",
"created_at": "2026-09-01T10:00:00Z"
}HistoryRow
{
"type": "ordered",
"at": "2026-09-02T14:05:10Z",
"by": "Dana Whitfield",
"via": null,
"data": {}
}PurchaseOrderInput
Every field is optional on PATCH. On create, supplier_id and at least one line are what an order needs.
purchasereturn{
"supplier_id": 7,
"number": "PO-1042",
"currency": "USD",
"type": "purchase",
"return_reason": null,
"return_source_po_id": null,
"location_id": 61234567890,
"tax_rate_id": null,
"taxes_included": false,
"charges_taxable": true,
"reference": "INV-8812",
"customer_order_number": null,
"supplier_order_number": "SO-77120",
"invoice_number": null,
"account_number": "AC-2231",
"notes": null,
"expected_at": "2026-09-20",
"payment_due_on": "2026-10-02",
"ship_to_override": null,
"bill_to_override": null,
"ships_to_customer": false,
"updates_stock": true,
"lines": [
{
"id": 5001,
"variant_id": 40011223344,
"inventory_item_id": 44811223344,
"product_title": "Stoneware mug",
"variant_title": "Blue",
"sku": "MUG-BLU",
"supplier_sku": "ACME-MUG-BLU",
"barcode": "0123456789012",
"pack_code": "CS12",
"location_id": 61234567890,
"quantity": 24,
"unit_cost": 12.5,
"discount_percent": null,
"weight_grams": 250,
"taxable": true,
"tax_rate_id": null,
"supplier_note": null,
"internal_note": null
}
],
"charges": []
}PurchaseOrderLineInput
Name the product by variant_id or inventory_item_id; with neither, it is a custom line and product_title is required.
{
"id": 1042,
"variant_id": 40011223344,
"inventory_item_id": 44811223344,
"product_title": "Stoneware mug",
"variant_title": "Blue",
"sku": "MUG-BLU",
"supplier_sku": "ACME-MUG-BLU",
"barcode": "0123456789012",
"pack_code": "CS12",
"location_id": 61234567890,
"quantity": 24,
"unit_cost": 12.5,
"discount_percent": null,
"weight_grams": 250,
"taxable": true,
"tax_rate_id": null,
"supplier_note": null,
"internal_note": null
}PurchaseOrderChargeInput
shippingothervaluequantityweightcustomnone{
"kind": "shipping",
"label": "Freight",
"amount": 324.75,
"currency": "USD",
"billed_by_supplier": false,
"allocation_method": "value",
"custom_split": []
}Receipt
replaceremove{
"id": 311,
"purchase_order_id": 1042,
"received_at": null,
"voided_at": null,
"source": "api",
"location": {
"id": 61234567890,
"name": "Main warehouse"
},
"invoice": {
"reference": "INV-8812",
"date": "2026-09-02",
"total": "324.75"
},
"exchange_rate": 1.36,
"rejected_disposition": "replace",
"note": "Two cartons short; supplier notified.",
"lines": [
{
"id": 5001,
"line_id": 5001,
"quantity": 24,
"surplus_quantity": 0,
"rejected_quantity": 0,
"unit_cost": "12.50",
"landed_unit_cost": "13.10",
"allocated_charge_amount": "0.60"
}
],
"shopify_sync": {
"state": "synced",
"attempted_at": "2026-09-11T08:12:46Z",
"error": null
},
"created_at": "2026-09-01T10:00:00Z",
"updated_at": "2026-09-11T08:12:44Z"
}ReceiptInput
location_id instead of one location.replaceremove{
"location_id": 61234567890,
"received_at": "2026-09-11",
"note": "Two cartons short; supplier notified.",
"invoice_reference": "INV-8812",
"invoice_total": 324.75,
"invoice_date": "2026-09-11",
"exchange_rate": 1.36,
"route_to_destinations": false,
"rejected_disposition": "replace",
"lines": [
{
"line_id": 5001,
"quantity": 24,
"rejected": null,
"unit_cost": 12.5,
"bin_location": "A-12",
"lot_number": null,
"lot_expiry": "2026-09-11",
"lot_manufactured": "2026-09-11",
"lot_id": null
}
],
"unordered": []
}StockAdjustment
draftappliedcancelled{
"id": 88,
"number": "ADJ-88",
"sequential_id": 1042,
"status": "applied",
"source": "api",
"reason": "correction",
"reason_label": "Correction",
"note": "Two cartons short; supplier notified.",
"location": {
"id": 61234567890,
"name": "Main warehouse"
},
"stocktake_id": null,
"reversal_of_id": null,
"lines": [
{
"id": 5001,
"position": 1,
"product_title": "Stoneware mug",
"variant_title": "Blue",
"sku": "MUG-BLU",
"barcode": "0123456789012",
"inventory_item_id": 44811223344,
"variant_id": 40011223344,
"delta": -3,
"quantity_before": 42,
"quantity_after": 39,
"unit_cost": "12.50",
"lot_id": null,
"lot_units": null
}
],
"shopify_sync": {
"state": "synced",
"attempted_at": "2026-09-11T08:12:46Z",
"error": null
},
"applied_at": "2026-09-11T08:12:44Z",
"cancelled_at": null,
"created_at": "2026-09-01T10:00:00Z",
"updated_at": "2026-09-11T08:12:44Z"
}StockAdjustmentInput
location_id and lines are required on create; on PATCH every field is optional and lines replaces the set.
correctioncycle_count_availablereceivedrestockdamagedshrinkagepromotionother{
"location_id": 61234567890,
"reason": "correction",
"note": "Two cartons short; supplier notified.",
"lines": [
{
"variant_id": 40011223344,
"inventory_item_id": 44811223344,
"product_title": "Stoneware mug",
"variant_title": "Blue",
"sku": "MUG-BLU",
"barcode": "0123456789012",
"delta": -3,
"lot_id": null,
"lot_number": null,
"lot_units": null
}
]
}Product
GET /products/{id} and with include=variants; otherwise null.{
"id": 7011223344,
"title": "Stoneware mug",
"handle": "stoneware-mug",
"vendor": "Acme",
"product_type": "Kitchen",
"status": "active",
"tags": [],
"options": [
{}
],
"image_url": "https://cdn.shopify.com/s/files/1/0001/products/mug-blue.jpg",
"variants_count": 3,
"variants": [],
"shopify_updated_at": "2026-09-11T08:12:40Z",
"created_at": "2026-09-01T10:00:00Z",
"updated_at": "2026-09-11T08:12:44Z"
}Variant
{
"id": 40011223344,
"product_id": 7011223344,
"inventory_item_id": 44811223344,
"title": "Blue",
"product_title": "Stoneware mug",
"sku": "MUG-BLU",
"barcode": "0123456789012",
"position": 1,
"price": "12.50",
"compare_at_price": null,
"unit_cost": "12.50",
"unit_cost_currency": "USD",
"weight_grams": 250,
"inventory_tracked": true,
"inventory_policy": "deny",
"taxable": true,
"image_url": "https://cdn.shopify.com/s/files/1/0001/products/mug-blue.jpg",
"shopify_updated_at": "2026-09-11T08:12:40Z",
"created_at": "2026-09-01T10:00:00Z",
"updated_at": "2026-09-11T08:12:44Z"
}Location
{
"id": 61234567890,
"name": "Main warehouse",
"active": true,
"fulfillment_service": "manual",
"address": {
"line1": "500 Congress Ave",
"line2": null,
"city": "Austin",
"province_code": "TX",
"zip": "78701",
"country": "United States",
"country_code": "US",
"phone": "+1 512 555 0142"
},
"created_at": "2026-09-01T10:00:00Z",
"updated_at": "2026-09-11T08:12:44Z"
}InventoryLevel
{
"id": 44811223344,
"inventory_item_id": 44811223344,
"location_id": 61234567890,
"available": 42,
"on_hand": 42,
"committed": 0,
"incoming": 24,
"shopify_updated_at": "2026-09-11T08:12:40Z",
"updated_at": "2026-09-11T08:12:44Z"
}WebhookEvent
*purchase_order.createdpurchase_order.updatedpurchase_order.orderedpurchase_order.in_transitpurchase_order.receipt_recordedpurchase_order.receivedpurchase_order.closedpurchase_order.reopenedpurchase_order.archivedpurchase_order.deletedpurchase_order.overduereceipt.voidedsupplier.createdsupplier.updatedsupplier.archivedsupplier.mergedstock_adjustment.appliedstock_adjustment.cancelledstock_adjustment.updateditem.low_stockitem.out_of_stockitem.reorder_pointitem.overstockwebhook.test"*"Webhook
activepauseddisabled{
"id": 3,
"url": "https://erp.example.com/hooks/stockroom",
"description": "ERP sync",
"events": [
"purchase_order.received",
"receipt.voided"
],
"status": "active",
"api_version": 2,
"consecutive_failures": 0,
"last_delivered_at": "2026-09-11T08:12:44Z",
"last_failed_at": null,
"disabled_at": null,
"disabled_reason": null,
"created_at": "2026-09-01T10:00:00Z",
"updated_at": "2026-09-11T08:12:44Z"
}WebhookWithSecret
activepauseddisabled{
"secret": "whsec_9f86d081884c7d659a2feaa0c55ad015",
"id": 3,
"url": "https://erp.example.com/hooks/stockroom",
"description": "ERP sync",
"events": [
"*"
],
"status": "active",
"api_version": 2,
"consecutive_failures": 0,
"last_delivered_at": "2026-09-11T08:12:44Z",
"last_failed_at": null,
"disabled_at": null,
"disabled_reason": null,
"created_at": "2026-09-01T10:00:00Z",
"updated_at": "2026-09-11T08:12:44Z"
}WebhookInput
{
"url": "https://erp.example.com/hooks/stockroom",
"events": [
"*"
],
"description": "ERP sync"
}WebhookDelivery
succeededfailed{
"id": 3,
"webhook_id": 3,
"event_id": "evt_01J9Z8K3M4N5P6Q7R8S9T0V1W2",
"event": "purchase_order.received",
"attempt": 1,
"status": "succeeded",
"status_code": 200,
"duration_ms": 412,
"error": null,
"next_attempt_at": null,
"created_at": "2026-09-01T10:00:00Z"
}RedeliverResult
{
"data": {
"queued": 12,
"event_ids": [
"evt_01J9Z8K3M4N5P6Q7R8S9T0V1W2"
]
}
}WebhookEnvelopePayload
What a webhook delivery POSTs. data is the full v2 object as the matching GET would return it - a PurchaseOrder for purchase_order.* (with a receipt beside it on .receipt_recorded), a Receipt with its purchase_order for receipt.voided, a Supplier, a StockAdjustment, or an ItemCondition for item.*.
X-Stockroom-Event-Id.*purchase_order.createdpurchase_order.updatedpurchase_order.orderedpurchase_order.in_transitpurchase_order.receipt_recordedpurchase_order.receivedpurchase_order.closedpurchase_order.reopenedpurchase_order.archivedpurchase_order.deletedpurchase_order.overduereceipt.voidedsupplier.createdsupplier.updatedsupplier.archivedsupplier.mergedstock_adjustment.appliedstock_adjustment.cancelledstock_adjustment.updateditem.low_stockitem.out_of_stockitem.reorder_pointitem.overstockwebhook.test{
"id": "evt_01J9Z8K3M4N5P6Q7R8S9T0V1W2",
"event": "purchase_order.received",
"api_version": 2,
"occurred_at": "2026-09-11T08:12:44Z",
"shop": {
"id": 12,
"domain": "example.myshopify.com"
},
"data": {}
}ItemCondition
The data of an item.* event: one item at one location crossing a threshold. threshold is the level that was crossed (the low stock level, the reorder point or the overstock level); item.out_of_stock has none. Out of stock and low stock read the shelf count; the reorder point reads available plus incoming, the way the Reorder page does.
{
"inventory_item_id": 44811223344,
"variant_id": 40011223344,
"product_id": 7011223344,
"sku": "MUG-BLU",
"product_title": "Stoneware mug",
"variant_title": "Blue",
"location": {
"id": 61234567890,
"name": "Main warehouse"
},
"available": 3,
"incoming": 24,
"threshold": 5
}