Skip to content

Endpoint reference

The tables below are a quick scan of the routes and filters. For full request/response schemas, the interactive explorer is the richer view.

The full machine-readable contract is served publicly (no auth, no shop data) at:

GET https://prod.logistified.app/api/v1/openapi.json

Point Postman, Insomnia, or any OpenAPI 3.1 client at that URL to generate a typed client or browse every parameter and response shape.

GET endpoints need a read-scope bearer token (a write key works too). POST / PATCH / DELETE need a write-scope token.

PathReturns
GET /api/v1/purchase-ordersList (filters: status, supplierId, search, dateFrom, dateTo, paidStatus, locationId, variantId, sku, limit, cursor)
GET /api/v1/purchase-orders/{id}Full detail — header, line items, shipment, addresses, payments, documents
GET /api/v1/purchase-orders/{id}/line-itemsLine items
GET /api/v1/purchase-orders/{id}/paymentsPayments
GET /api/v1/purchase-orders/{id}/documentsDocument metadata
GET /api/v1/purchase-orders/{id}/shipmentShipment
GET /api/v1/purchase-orders/{id}/shipmentsAll shipments, each with its line allocations
GET /api/v1/purchase-orders/{id}/addressesBilling + shipping addresses
GET /api/v1/purchase-orders/{id}/receipt-scheduleReceiving / incoming schedule
GET /api/v1/purchase-orders/{id}/cost-sync-historyCost-sync history — every unit-cost update this order proposed, with its outcome (?variantIds=a,b narrows). “Proposed” and “failed” rows may still have been applied
GET /api/v1/purchase-orders/{id}/logActivity log
GET /api/v1/purchase-orders/{id}/creditsApplied + available supplier credits
PathDoes
POST /api/v1/purchase-ordersCreate a draft. 201 + Location. An empty body {} is a valid empty draft
PATCH /api/v1/purchase-orders/{id}Update header fields (at least one). status is not accepted here
DELETE /api/v1/purchase-orders/{id}Delete a Draft outright, or soft-delete a Cancelled order
POST /api/v1/purchase-orders/{id}/line-itemsAdd catalog line items (bulk, 1–500). 201
POST /api/v1/purchase-orders/{id}/line-items/customAdd one non-catalog line. 201
PATCH /api/v1/purchase-orders/{id}/line-itemsUpdate line items (bulk, 1–500). updateSupplier: true also writes the supplier-related values back to the supplier’s catalogue
DELETE /api/v1/purchase-orders/{id}/line-items?lineItemIds=a,bDelete line items (bulk). Can partly succeed — check failed[]
POST /api/v1/purchase-orders/{id}/statusMove the order’s status
POST /api/v1/purchase-orders/{id}/confirmRecord confirmed quantities — lines or confirmAll
POST /api/v1/purchase-orders/{id}/receiveRecord received quantities (absolute totals)
POST /api/v1/purchase-orders/{id}/unreceiveTake back received quantities (deltas)
POST /api/v1/purchase-orders/{id}/completeComplete the order and run the cost sync
POST /api/v1/purchase-orders/{id}/quick-completeReceive + sync + complete, in one call from In Progress
POST /api/v1/purchase-orders/{id}/shopify-syncPush received quantities to Shopify
POST /api/v1/purchase-orders/{id}/shopify-sync/resetClear the sync bookkeeping (Shopify untouched)

Read-only.

PathReturns
/api/v1/stock-takesList (filters: status, locationId, search, limit, cursor)
/api/v1/stock-takes/reasonsConfigured stock-take reasons
/api/v1/stock-takes/{id}Full detail — header + line items
/api/v1/stock-takes/{id}/line-itemsLine items
PathReturns
/api/v1/stock-adjustmentsList (filters: status, locationId, reason, createdBy, search, limit, cursor)
/api/v1/stock-adjustments/{id}Full detail — header + line items
/api/v1/stock-adjustments/{id}/line-itemsLine items

Adjustments are the delta-only sibling of stock takes: a line carries a signed delta (and the resulting value change), never a counted quantity. The header carries the operator (createdBy), the live netQuantityChange, and the revertOf / revertedBy links when the document is part of a revert pair. Reasons are shared with stock takes — read them from /api/v1/stock-takes/reasons.

Read-only.

PathReturns
/api/v1/transfer-ordersList (filters: status, search, dateFrom, dateTo, fromLocationId, toLocationId, variantId, sku, limit, cursor)
/api/v1/transfer-orders/{id}Full detail — header (incl. line items), addresses, log
/api/v1/transfer-orders/{id}/line-itemsLine items
/api/v1/transfer-orders/{id}/shipmentShipment
/api/v1/transfer-orders/{id}/documentsDocument metadata
/api/v1/transfer-orders/{id}/addressesFrom + to addresses
/api/v1/transfer-orders/{id}/logActivity log

Read-only.

PathReturns
/api/v1/manufacturing-ordersList (filters: status — repeatable — executionMode, productionLocationId — repeatable — search, dateField, dateFrom, dateTo, includeMeasures, limit, cursor)
/api/v1/manufacturing-orders/{id}Full detail — items to build, materials, and the linked purchase orders / transfers / stock releases, plus computed progress when includeMeasures was requested
/api/v1/manufacturing-orders/{id}/logActivity log

Read-only. A forecast view is a saved forecast scope you configure in the app (locations, filters, columns, sort). The rows endpoint returns what the view shows: the response carries a columns[] descriptor — id, displayName (the column header in the app), type (string / number / boolean / date), optional unit (currency marks a money column; its currencyColumn names the row key holding that row’s currency code, null meaning the response’s currencyCode) and, for supply-mode views, period — and every row is an object keyed by those ids, plus variantId and productId on every row. Values are the table’s display values as JSON (dates as YYYY-MM-DD, blanks as null). Read columns[] on every page — the view’s columns may change whenever someone edits the view in the app.

PathReturns
/api/v1/forecast-viewsList of saved views: viewId, viewName, isStarred, isAutogenerated. Autogenerated (dashboard) views are hidden unless includeAutogenerated=true
/api/v1/forecast-views/{id}/rowsThe view’s rows, view-shaped: currencyCode, columns[], rows[], totalCount, cursor (params: limit — up to 1000, default 50 — cursor, variantIds CSV)