Fulfillment API
The Carriyo Fulfillment API covers the work between order allocation and carrier handoff: picking items off shelves, packing them into parcels, and managing customer-collection handovers. Bin-location mappings for the picker app are also managed here.
Picks
A Pick is the picker's work order. It represents the lifecycle of one picker pulling line items from shelves at a fulfillment location for one or more fulfillment orders. Items can be picked off the shelf, restocked back, or recorded as mispicks when something goes wrong (wrong item, damaged unit).
State changes go through dedicated action endpoints (/start, /complete, /items/pick, /items/restock, /items/mispick) rather than a generic PUT, so the action verb is part of the audit trail.
11 operations · 0 objects
/orders/picksCreate a pick
Creates a pick work order for one or more fulfillment-order line items at a single location.
When to use this
Call this when you want to create a pick manually. In many setups the Fulfillment App auto-creates picks on allocation (when auto_create_picks is enabled in the location's Fulfillment App settings), so a manual create is only needed when auto-creation is off or when you want fine-grained control over which items go into which pick.
Behavior
Carriyo determines the pick type from the items you supply:
| Scenario | Pick type | Requirement |
|---|---|---|
| All items belong to one fulfillment order | ORDER_PICK |
None. |
| Items span multiple fulfillment orders and every FO is fully included | CLUSTER_PICK |
cluster_picking_enabled must be true in the location's Fulfillment App settings. |
| Items span multiple fulfillment orders but only a subset of each FO's items is included | ZONE_PICK |
split_picking_enabled must be true. |
On success, Carriyo:
- Moves each referenced fulfillment-order line item from
allocatedtopick_in_progress. If the requested quantity is less than the line item's total, the line item is split: the original keeps the remaining quantity asallocated, and a new line item is created with the requested quantity aspick_in_progress. - Assigns a picker (if not provided in the request, assignment uses the configured strategy:
work_loadormanual). - Generates a pick list document (PDF) attached to the pick.
Validation
location_idis required. All items must belong to fulfillment orders at this location.- At least one item is required.
- Each line item must be in
allocatedstatus. - Each line item must not already belong to another active (non-terminal) pick.
quantitymust not exceed the line item's available allocated quantity.- If
pickeris provided, the user must havepickpermission for the location.
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: pick-requestrequired- The user to assign as the picker (typically an email or user ID). If omitted, Carriyo assigns a picker automatically using the location's configured strategy (
work_loadassigns the picker with the fewest active picks;manualleaves the pick unassigned until a picker claims it or you call reassign). When provided, the user must havepickpermission for the location in Fulfillment App access settings.
Responses
pick-response- How Carriyo classified this pick based on the items provided at creation. -
ORDER_PICK: all items belong to a single fulfillment order (the default). -CLUSTER_PICK: items span multiple fulfillment orders, all fully included. Requirescluster_picking_enabledin the location's Fulfillment App settings. -ZONE_PICK: items span multiple fulfillment orders, but only a subset of each FO's items. Requiressplit_picking_enabled.Values:ORDER_PICKZONE_PICKCLUSTER_PICK - The pick lifecycle state. -
open: created, waiting for the picker to start. -processing: the picker is actively working. -stopped: the pick was cancelled while items were partially picked. The pick can be cancelled again to fully cancel and revert line items. -completed: all items accounted for; handover to packing is done. Terminal. -cancelled: the pick was voided. Terminal.Values:openprocessingstoppedcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/picks/{pickId}Get a pick
Returns the full pick record, including all items, documents, and timestamps.
Use this endpoint when you need the complete pick data. The list endpoints (/order/{orderId}, /fulfillment-order/{foId}) return lookup records with only summary fields (pick_id, location_id, status, creation_date); they do not include items, documents, or detailed timestamps.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| pickId | string | Yes | The pick identifier (e.g. `PIK_123`). |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
pick-response- How Carriyo classified this pick based on the items provided at creation. -
ORDER_PICK: all items belong to a single fulfillment order (the default). -CLUSTER_PICK: items span multiple fulfillment orders, all fully included. Requirescluster_picking_enabledin the location's Fulfillment App settings. -ZONE_PICK: items span multiple fulfillment orders, but only a subset of each FO's items. Requiressplit_picking_enabled.Values:ORDER_PICKZONE_PICKCLUSTER_PICK - The pick lifecycle state. -
open: created, waiting for the picker to start. -processing: the picker is actively working. -stopped: the pick was cancelled while items were partially picked. The pick can be cancelled again to fully cancel and revert line items. -completed: all items accounted for; handover to packing is done. Terminal. -cancelled: the pick was voided. Terminal.Values:openprocessingstoppedcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/picks/order/{orderId}List picks for an order
Returns all picks associated with an order.
These are lookup records containing only summary fields: pick_id, tenant, location_id, status, and creation_date. To get the full pick (items, documents, timestamps), call Get pick with the pick_id.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| orderId | string | Yes | The order identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
- How Carriyo classified this pick based on the items provided at creation. -
ORDER_PICK: all items belong to a single fulfillment order (the default). -CLUSTER_PICK: items span multiple fulfillment orders, all fully included. Requirescluster_picking_enabledin the location's Fulfillment App settings. -ZONE_PICK: items span multiple fulfillment orders, but only a subset of each FO's items. Requiressplit_picking_enabled.Values:ORDER_PICKZONE_PICKCLUSTER_PICK - The pick lifecycle state. -
open: created, waiting for the picker to start. -processing: the picker is actively working. -stopped: the pick was cancelled while items were partially picked. The pick can be cancelled again to fully cancel and revert line items. -completed: all items accounted for; handover to packing is done. Terminal. -cancelled: the pick was voided. Terminal.Values:openprocessingstoppedcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/picks/fulfillment-order/{fulfillmentOrderId}List picks for a fulfillment order
Returns all picks associated with a fulfillment order.
These are lookup records containing only summary fields: pick_id, tenant, location_id, status, and creation_date. To get the full pick (items, documents, timestamps), call Get pick with the pick_id.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| fulfillmentOrderId | string | Yes | The fulfillment order identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
- How Carriyo classified this pick based on the items provided at creation. -
ORDER_PICK: all items belong to a single fulfillment order (the default). -CLUSTER_PICK: items span multiple fulfillment orders, all fully included. Requirescluster_picking_enabledin the location's Fulfillment App settings. -ZONE_PICK: items span multiple fulfillment orders, but only a subset of each FO's items. Requiressplit_picking_enabled.Values:ORDER_PICKZONE_PICKCLUSTER_PICK - The pick lifecycle state. -
open: created, waiting for the picker to start. -processing: the picker is actively working. -stopped: the pick was cancelled while items were partially picked. The pick can be cancelled again to fully cancel and revert line items. -completed: all items accounted for; handover to packing is done. Terminal. -cancelled: the pick was voided. Terminal.Values:openprocessingstoppedcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/picks/{pickId}/startStart a pick
Transitions the pick from open to processing. The picker is now walking the floor.
Validation
- The pick must be in
openstatus. - A
pickermust already be assigned (set at creation or via Reassign pick).
No request body is required.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| pickId | string | Yes | The pick identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
pick-response- How Carriyo classified this pick based on the items provided at creation. -
ORDER_PICK: all items belong to a single fulfillment order (the default). -CLUSTER_PICK: items span multiple fulfillment orders, all fully included. Requirescluster_picking_enabledin the location's Fulfillment App settings. -ZONE_PICK: items span multiple fulfillment orders, but only a subset of each FO's items. Requiressplit_picking_enabled.Values:ORDER_PICKZONE_PICKCLUSTER_PICK - The pick lifecycle state. -
open: created, waiting for the picker to start. -processing: the picker is actively working. -stopped: the pick was cancelled while items were partially picked. The pick can be cancelled again to fully cancel and revert line items. -completed: all items accounted for; handover to packing is done. Terminal. -cancelled: the pick was voided. Terminal.Values:openprocessingstoppedcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/picks/{pickId}/cancelCancel a pick
Cancels the pick. The outcome depends on the current status and whether any items have been picked.
Behavior
| Current status | Items picked? | Result | Line-item effect |
|---|---|---|---|
open |
n/a | cancelled |
All line items revert to allocated. |
processing |
No | cancelled |
All line items revert to allocated. |
processing |
Yes | stopped |
No revert. Items stay pick_in_progress. |
stopped |
n/a | cancelled |
All line items revert to allocated. |
A stopped pick means items were partially picked and the pick was cancelled mid-flow. You can cancel a stopped pick again to fully cancel it and revert line items.
Picks in completed or cancelled status cannot be cancelled.
The request body is optional. If provided, reason_code is stored on the pick for auditing.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| pickId | string | Yes | The pick identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: cancel-pick-requestResponses
pick-response- How Carriyo classified this pick based on the items provided at creation. -
ORDER_PICK: all items belong to a single fulfillment order (the default). -CLUSTER_PICK: items span multiple fulfillment orders, all fully included. Requirescluster_picking_enabledin the location's Fulfillment App settings. -ZONE_PICK: items span multiple fulfillment orders, but only a subset of each FO's items. Requiressplit_picking_enabled.Values:ORDER_PICKZONE_PICKCLUSTER_PICK - The pick lifecycle state. -
open: created, waiting for the picker to start. -processing: the picker is actively working. -stopped: the pick was cancelled while items were partially picked. The pick can be cancelled again to fully cancel and revert line items. -completed: all items accounted for; handover to packing is done. Terminal. -cancelled: the pick was voided. Terminal.Values:openprocessingstoppedcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/picks/{pickId}/reassignReassign a pick
Reassigns the pick to a different picker.
Validation
- The pick must be in
openstatus. - The new picker must have
pickpermission for the pick's location.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| pickId | string | Yes | The pick identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: reassign-pick-requestrequiredResponses
pick-response- How Carriyo classified this pick based on the items provided at creation. -
ORDER_PICK: all items belong to a single fulfillment order (the default). -CLUSTER_PICK: items span multiple fulfillment orders, all fully included. Requirescluster_picking_enabledin the location's Fulfillment App settings. -ZONE_PICK: items span multiple fulfillment orders, but only a subset of each FO's items. Requiressplit_picking_enabled.Values:ORDER_PICKZONE_PICKCLUSTER_PICK - The pick lifecycle state. -
open: created, waiting for the picker to start. -processing: the picker is actively working. -stopped: the pick was cancelled while items were partially picked. The pick can be cancelled again to fully cancel and revert line items. -completed: all items accounted for; handover to packing is done. Terminal. -cancelled: the pick was voided. Terminal.Values:openprocessingstoppedcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/picks/{pickId}/completeComplete a pick
Completes the pick and hands it over to packing. This is the handover step.
Validation
- The pick must be in
processingstatus. - Every item must be fully accounted for:
quantity_picked + sum(mispick quantities) == quantityfor each item.
Behavior
On completion, Carriyo updates each fulfillment-order line item based on what was picked:
| Outcome | Line-item effect |
|---|---|
| Item fully picked (no mispicks) | pick_in_progress → picked |
| Item partially picked with mispicks | picked (quantity adjusted to the picked amount) |
| Item fully mispicked (zero picked) | Line item cancelled |
If every item in the pick has quantity_picked = 0 (all mispicked), the pick status becomes cancelled instead of completed, and all line items revert to allocated.
No request body is required.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| pickId | string | Yes | The pick identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
pick-response- How Carriyo classified this pick based on the items provided at creation. -
ORDER_PICK: all items belong to a single fulfillment order (the default). -CLUSTER_PICK: items span multiple fulfillment orders, all fully included. Requirescluster_picking_enabledin the location's Fulfillment App settings. -ZONE_PICK: items span multiple fulfillment orders, but only a subset of each FO's items. Requiressplit_picking_enabled.Values:ORDER_PICKZONE_PICKCLUSTER_PICK - The pick lifecycle state. -
open: created, waiting for the picker to start. -processing: the picker is actively working. -stopped: the pick was cancelled while items were partially picked. The pick can be cancelled again to fully cancel and revert line items. -completed: all items accounted for; handover to packing is done. Terminal. -cancelled: the pick was voided. Terminal.Values:openprocessingstoppedcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/picks/{pickId}/items/pickRecord items picked off shelf
Records that the picker has collected items from the shelf. Call this incrementally as the picker works through the list.
Behavior
For each item in the request, Carriyo increments quantity_picked on the matching pick item. The fulfillment-order line items stay in pick_in_progress until you call Complete pick.
You can call this endpoint multiple times. Each call adds to the running total.
Validation
- The pick must be in
processingstatus. - Each item must exist in the pick (matched by
fulfillment_order_id+line_item_id). quantitymust not exceeditem.quantity - item.quantity_picked - sum(mispick quantities).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| pickId | string | Yes | The pick identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonrequiredResponses
pick-response- How Carriyo classified this pick based on the items provided at creation. -
ORDER_PICK: all items belong to a single fulfillment order (the default). -CLUSTER_PICK: items span multiple fulfillment orders, all fully included. Requirescluster_picking_enabledin the location's Fulfillment App settings. -ZONE_PICK: items span multiple fulfillment orders, but only a subset of each FO's items. Requiressplit_picking_enabled.Values:ORDER_PICKZONE_PICKCLUSTER_PICK - The pick lifecycle state. -
open: created, waiting for the picker to start. -processing: the picker is actively working. -stopped: the pick was cancelled while items were partially picked. The pick can be cancelled again to fully cancel and revert line items. -completed: all items accounted for; handover to packing is done. Terminal. -cancelled: the pick was voided. Terminal.Values:openprocessingstoppedcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/picks/{pickId}/items/restockRestock items back to shelf
Reverses a previous pick action, putting items back on the shelf. Use this when items were picked in error.
Behavior
Decrements quantity_picked on each matching pick item. If the fulfillment-order line item was already moved to picked (e.g. in a prior partial completion), it reverts to pick_in_progress.
Validation
- The pick must be in
processingorstoppedstatus. quantitymust not exceed the item's currentquantity_picked.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| pickId | string | Yes | The pick identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonrequiredResponses
pick-response- How Carriyo classified this pick based on the items provided at creation. -
ORDER_PICK: all items belong to a single fulfillment order (the default). -CLUSTER_PICK: items span multiple fulfillment orders, all fully included. Requirescluster_picking_enabledin the location's Fulfillment App settings. -ZONE_PICK: items span multiple fulfillment orders, but only a subset of each FO's items. Requiressplit_picking_enabled.Values:ORDER_PICKZONE_PICKCLUSTER_PICK - The pick lifecycle state. -
open: created, waiting for the picker to start. -processing: the picker is actively working. -stopped: the pick was cancelled while items were partially picked. The pick can be cancelled again to fully cancel and revert line items. -completed: all items accounted for; handover to packing is done. Terminal. -cancelled: the pick was voided. Terminal.Values:openprocessingstoppedcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/picks/{pickId}/items/mispickRecord mispicked items
Records items that could not be picked: out of stock, damaged, wrong item, or any other warehouse-floor issue.
Behavior
Appends a mispick record (quantity + reason) to the matching pick item's mispicks array. The fulfillment-order line item status does not change until Complete pick.
At completion, items that are fully mispicked (zero picked, all mispicked) are cancelled. Items with a mix of picked and mispicked quantities have their quantity adjusted to the picked amount.
Validation
- The pick must be in
processingstatus. quantitymust not exceeditem.quantity - item.quantity_picked - sum(existing mispick quantities).reasonis a free-text string describing why the item couldn't be picked.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| pickId | string | Yes | The pick identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonrequiredResponses
pick-response- How Carriyo classified this pick based on the items provided at creation. -
ORDER_PICK: all items belong to a single fulfillment order (the default). -CLUSTER_PICK: items span multiple fulfillment orders, all fully included. Requirescluster_picking_enabledin the location's Fulfillment App settings. -ZONE_PICK: items span multiple fulfillment orders, but only a subset of each FO's items. Requiressplit_picking_enabled.Values:ORDER_PICKZONE_PICKCLUSTER_PICK - The pick lifecycle state. -
open: created, waiting for the picker to start. -processing: the picker is actively working. -stopped: the pick was cancelled while items were partially picked. The pick can be cancelled again to fully cancel and revert line items. -completed: all items accounted for; handover to packing is done. Terminal. -cancelled: the pick was voided. Terminal.Values:openprocessingstoppedcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
Packs
A Pack is the packer's work order. It represents one packer at a packing station consolidating items from a completed pick into one or more parcels (packages). Completing a pack can produce a shipment (for delivery fulfillment orders) or trigger Collection creation (for click-and-collect fulfillment orders).
State changes go through dedicated action endpoints (/start, /complete, /items/pack, /items/unpack, /packages, /create-shipment).
16 operations · 0 objects
/orders/packsCreate a pack
Creates a pack work order for one or more fulfillment-order line items at a single location.
When to use this
Call this after items have been picked (or directly after allocation if your workflow skips the pick stage). Each item in the request must be in allocated or picked status.
Behavior
On success, Carriyo:
- Moves each referenced line item from
allocatedorpickedtopack_in_progress. If the requested quantity is less than the line item's total, the line item is split. - Generates a packing list document (PDF) attached to the pack.
- Creates one default empty package per unique fulfillment order in the pack.
Validation
location_idis required. All items must belong to fulfillment orders at this location.- At least one item is required.
- Each line item must be in
allocatedorpickedstatus. - Each line item must not already belong to another active (non-terminal) pack.
quantitymust not exceed the line item's available quantity.- If
pick_idis provided on an item, the referenced pick must be incompletedstatus.
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: pack-requestrequiredResponses
pack-response- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/{packId}Get a pack
Returns the full pack record, including all items, packages, documents, and timestamps.
The list endpoints (/order/{orderId}, /fulfillment-order/{foId}, /pick/{pickId}) return lookup records with only summary fields. Use this endpoint for the complete data.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| packId | string | Yes | The pack identifier (e.g. `PAK_123`). |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
pack-response- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/order/{orderId}List packs for an order
Returns all packs associated with an order. These are lookup records with only summary fields. Use Get pack for the full record.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| orderId | string | Yes | The order identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/fulfillment-order/{fulfillmentOrderId}List packs for a fulfillment order
Returns all packs associated with a fulfillment order. These are lookup records with only summary fields. Use Get pack for the full record.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| fulfillmentOrderId | string | Yes | The fulfillment order identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/pick/{pickId}List packs for a pick
Returns all packs that reference a given pick. Use this to find which packs were created from a completed pick.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| pickId | string | Yes | The pick identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/{packId}/startStart a pack
Transitions the pack from open to processing. The packer is now at the station building parcels.
Validation
- The pack must be in
openstatus. - Both
packing_stationandpackermust be set (either at creation or via Reassign pack).
No request body is required.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| packId | string | Yes | The pack identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
pack-response- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/{packId}/reassignReassign a pack
Reassigns the pack to a different packer and/or packing station. At least one of packing_station or packer must be provided.
Validation
- The pack must be in
openstatus. - If
packing_stationis provided, it must be a valid station for the location. - If
packeris provided, the user must havepackpermission for the location.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| packId | string | Yes | The pack identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: reassign-pack-requestrequiredResponses
pack-response- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/{packId}/packagesAdd a package to the pack
Adds a new physical package (parcel) to the pack. Each package is assigned a unique package_id (prefixed PKG_).
A pack can have many packages. Each package belongs to one order and one fulfillment order. Items are placed into packages via Pack items.
Behavior
The package is created empty with the provided dimensions and weight constraints. You then use Pack items to assign line items into it.
Validation
- The pack must be in
openorprocessingstatus. order_idandfulfillment_order_idare required and must match items in the pack.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| packId | string | Yes | The pack identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: add-package-requestrequiredResponses
pack-response- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/{packId}/packages/{packageId}Update a package
Updates the physical properties of a package (carton type, dimensions, weight). All fields are optional; only provided fields are updated.
Validation
- The pack must be in
openorprocessingstatus. - The package must not have an active (non-cancelled) shipment. Once a shipment is booked for a package, update the shipment directly.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| packId | string | Yes | The pack identifier. |
| packageId | string | Yes | The package identifier (e.g. `PKG_456`). |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: update-package-requestrequiredResponses
pack-response- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/{packId}/packages/{packageId}Remove a package
Removes a package from the pack. Any items in the package are unpacked first (their quantity_packed on the pack item is decremented).
Validation
- The pack must be in
openorprocessingstatus. - The package must not have an active (non-cancelled) shipment.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| packId | string | Yes | The pack identifier. |
| packageId | string | Yes | The package identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
pack-response- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/{packId}/reset-packagesReset packages on the pack
Clears all packing progress and replaces all packages with one default empty package per unique fulfillment order in the pack.
Use this when the packer needs to start over. All items are unpacked (quantity_packed reset to 0) and existing packages are deleted.
Validation
- The pack must be in
openorprocessingstatus. - No package in the pack can have an active (non-cancelled) shipment.
No request body is required.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| packId | string | Yes | The pack identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
pack-response- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/{packId}/items/packPlace items into packages
Places line items into a specific package. Call this as the packer scans or places each item into a parcel.
Behavior
For each item in the request, Carriyo increments quantity_packed on the matching pack item and adds a PackageItem entry to the target package's items array.
You can call this endpoint multiple times. Each call adds to the running total.
Validation
- The pack must be in
processingstatus. - Each
package_idmust exist in the pack and belong to the same fulfillment order as the line item. quantitymust not exceeditem.quantity - item.quantity_packed.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| packId | string | Yes | The pack identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonrequiredResponses
pack-response- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/{packId}/items/unpackRemove items from packages
Removes items from a package, reversing a previous pack action. Use this when an item was placed in the wrong parcel.
Behavior
Decrements quantity_packed on the matching pack item and removes the corresponding quantity from the package's items array.
Validation
- The pack must be in
processingstatus. quantitymust not exceed the item's current packed quantity in the specified package.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| packId | string | Yes | The pack identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonrequiredResponses
pack-response- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/{packId}/completeComplete a pack
Completes the pack. This is the handoff from fulfillment to shipping (or to collection for click-and-collect orders).
Behavior
On completion, Carriyo:
- Moves all line items to
fulfilledviacreateFulfillment. - For each package with a
shipment_id, marks the shipment asready_to_shipand applies theship_zoneif provided. - For fulfillment orders with
delivery_method = COLLECTIONand acustomer_collection_address, auto-creates a Collection record inopenstatus. No shipment is created for store-pickup collection FOs.
The ready_to_ship transition fires the shipment-status webhook. That's the signal your systems receive at the fulfillment/shipping boundary.
Validation
- The pack must be in
processingstatus. - Every item must be fully packed (
quantity_packed >= quantity). - Every non-digital, non-collection package must have a
shipment_id(created via Create shipment from pack). - If any package has a
shipment_id,ship_zoneis required in the request body.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| packId | string | Yes | The pack identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: complete-pack-requestResponses
pack-response- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/{packId}/cancelCancel a pack
Cancels the pack and reverts all side effects.
Behavior
On cancellation:
- All
pack_in_progressline items revert topicked(if apick_idwas set on the pack item) orallocated(if no pick). - Any active (non-cancelled) shipments on the pack's packages are cancelled via the shipment operations queue.
- Similar line items on the fulfillment order are merged back together.
The request body is optional. If provided, reason_code is stored on the pack for auditing.
Validation
- The pack must not be in
completedorcancelledstatus.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| packId | string | Yes | The pack identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: cancel-pack-requestResponses
pack-response- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/packs/{packId}/create-shipmentCreate a shipment from the pack
Books a shipment for one or more packages in the pack. All selected packages must belong to the same order and fulfillment order.
Behavior
Carriyo builds a shipment from the selected packages: each package becomes a parcel in the shipment, with its dimensions, weight, and items. The shipment_id is stored on each package.
If a carrier_account is provided, the shipment is booked with that carrier. Otherwise, Carriyo uses the default carrier selection rules.
Validation
- The pack must be in
processingstatus. - All packages must belong to the same order and fulfillment order.
- Each package must have items (you must call Pack items first).
- Store-pickup collection FOs are blocked. Collections are auto-created on pack complete instead.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| packId | string | Yes | The pack identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: create-pack-shipment-requestrequiredResponses
pack-response- The pack lifecycle state. -
open: created, waiting for packer to start. -processing: the packer is actively building parcels. -completed: all items packed, shipments booked, handed off. Terminal. -cancelled: the pack was voided, line items reverted. Terminal.Values:openprocessingcompletedcancelled
Need the full machine-readable spec? Download the OpenAPI document →
Collections
A Collection is the customer-pickup runtime entity. When a Pack completes for a click-and-collect fulfillment order, the platform auto-creates a Collection. The customer later arrives at the location, identity is verified via OTP, and items are handed over.
There is no POST /orders/collections; Collections are a side effect of POST /orders/packs/{packId}/complete. The endpoints below cover the lifecycle from creation onwards.
11 operations · 0 objects
/orders/collections/{collectionId}Get a collection
Returns the full collection record, including packages, customer, verification state, and all timestamps.
The list endpoints (/order/{orderId}, /fulfillment-order/{foId}, /pack/{packId}, /shipment/{shipmentId}) return lookup records with only summary fields. Use this endpoint for the complete data.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| collectionId | string | Yes | The collection identifier (e.g. `COL_123`). |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
collection-response- The collection lifecycle state. -
open: created but not yet at the collection point. -ready_to_collect: at the collection point, customer can be notified and verified. -collected: handed over to the customer. Terminal (success). -expired: customer didn't collect within the configured window. Recoverable via unexpire. -cancelled: explicitly cancelled or auto-cancelled after expiry. Terminal.Values:openready_to_collectcollectedexpiredcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/collections/order/{orderId}List collections for an order
Returns all collections associated with an order. These are lookup records with only summary fields. Use Get collection for the full record.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| orderId | string | Yes | The order identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
- The collection lifecycle state. -
open: created but not yet at the collection point. -ready_to_collect: at the collection point, customer can be notified and verified. -collected: handed over to the customer. Terminal (success). -expired: customer didn't collect within the configured window. Recoverable via unexpire. -cancelled: explicitly cancelled or auto-cancelled after expiry. Terminal.Values:openready_to_collectcollectedexpiredcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/collections/fulfillment-order/{fulfillmentOrderId}List collections for a fulfillment order
Returns all collections associated with a fulfillment order. These are lookup records with only summary fields. Use Get collection for the full record.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| fulfillmentOrderId | string | Yes | The fulfillment order identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
- The collection lifecycle state. -
open: created but not yet at the collection point. -ready_to_collect: at the collection point, customer can be notified and verified. -collected: handed over to the customer. Terminal (success). -expired: customer didn't collect within the configured window. Recoverable via unexpire. -cancelled: explicitly cancelled or auto-cancelled after expiry. Terminal.Values:openready_to_collectcollectedexpiredcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/collections/pack/{packId}List collections for a pack
Returns all collections created from a given pack. Use this to find which collections were auto-created when the pack completed.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| packId | string | Yes | The pack identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
- The collection lifecycle state. -
open: created but not yet at the collection point. -ready_to_collect: at the collection point, customer can be notified and verified. -collected: handed over to the customer. Terminal (success). -expired: customer didn't collect within the configured window. Recoverable via unexpire. -cancelled: explicitly cancelled or auto-cancelled after expiry. Terminal.Values:openready_to_collectcollectedexpiredcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/collections/shipment/{shipmentId}List collections for a shipment
Returns all collections linked to a given shipment. Relevant for remote-collection scenarios where a shipment moves parcels to a different pickup location.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| shipmentId | string | Yes | The shipment identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
- The collection lifecycle state. -
open: created but not yet at the collection point. -ready_to_collect: at the collection point, customer can be notified and verified. -collected: handed over to the customer. Terminal (success). -expired: customer didn't collect within the configured window. Recoverable via unexpire. -cancelled: explicitly cancelled or auto-cancelled after expiry. Terminal.Values:openready_to_collectcollectedexpiredcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/collections/{collectionId}/readyMark collection ready for pickup
Transitions the collection from open to ready_to_collect. The parcel is at the collection point and the customer can be notified.
Behavior
On success, Carriyo sets ready_date and optionally schedules an auto-expire job. If customer_collection_auto_expire_enabled is on in the tenant's order management settings, the collection will automatically transition to expired after customer_collection_auto_expire_days days (default 7).
Validation
- The collection must be in
openstatus.
No request body is required.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| collectionId | string | Yes | The collection identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
collection-response- The collection lifecycle state. -
open: created but not yet at the collection point. -ready_to_collect: at the collection point, customer can be notified and verified. -collected: handed over to the customer. Terminal (success). -expired: customer didn't collect within the configured window. Recoverable via unexpire. -cancelled: explicitly cancelled or auto-cancelled after expiry. Terminal.Values:openready_to_collectcollectedexpiredcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/collections/{collectionId}/reopenReopen a collection
Sends a ready_to_collect collection back to open. Use this when the parcel needs to go back to the warehouse (e.g. the customer rescheduled).
Behavior
Resets the verification state to pending and clears OTP data. Auto-expire and auto-cancel schedules are dropped.
Validation
- The collection must be in
ready_to_collectstatus.
No request body is required.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| collectionId | string | Yes | The collection identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
collection-response- The collection lifecycle state. -
open: created but not yet at the collection point. -ready_to_collect: at the collection point, customer can be notified and verified. -collected: handed over to the customer. Terminal (success). -expired: customer didn't collect within the configured window. Recoverable via unexpire. -cancelled: explicitly cancelled or auto-cancelled after expiry. Terminal.Values:openready_to_collectcollectedexpiredcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/collections/{collectionId}/cancelCancel a collection
Cancels the collection. The request body is optional; if provided, cancellation_reason is stored for auditing.
Behavior
Cancellation clears any pending auto-expire or auto-cancel schedules and resets verification state.
When a collection is cancelled (or collected), Carriyo checks whether all collections linked to each affected line item are now terminal (collected or cancelled). If so, the line item moves to closed, and the fulfillment order and order statuses are recomputed.
Validation
- The collection must not be in
collectedorcancelledstatus.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| collectionId | string | Yes | The collection identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: cancel-collection-requestResponses
collection-response- The collection lifecycle state. -
open: created but not yet at the collection point. -ready_to_collect: at the collection point, customer can be notified and verified. -collected: handed over to the customer. Terminal (success). -expired: customer didn't collect within the configured window. Recoverable via unexpire. -cancelled: explicitly cancelled or auto-cancelled after expiry. Terminal.Values:openready_to_collectcollectedexpiredcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/collections/{collectionId}/unexpireReverse auto-expiry
Reverses an auto-expired collection back to ready_to_collect. Use this when the customer turns up late and you want to give them another pickup window.
Behavior
Drops the pending auto-cancel schedule (if any) and re-schedules a fresh auto-expire window.
Validation
- The collection must be in
expiredstatus.
No request body is required.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| collectionId | string | Yes | The collection identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
collection-response- The collection lifecycle state. -
open: created but not yet at the collection point. -ready_to_collect: at the collection point, customer can be notified and verified. -collected: handed over to the customer. Terminal (success). -expired: customer didn't collect within the configured window. Recoverable via unexpire. -cancelled: explicitly cancelled or auto-cancelled after expiry. Terminal.Values:openready_to_collectcollectedexpiredcancelled
Need the full machine-readable spec? Download the OpenAPI document →
/orders/collections/{collectionId}/verification/send-otpSend pickup OTP to customer
Generates a 6-digit OTP and sends it to the customer's email address. The OTP is hashed (SHA-256) before storage; the plaintext is never persisted.
Behavior
The response includes masked_email (e.g. j***n@example.com) and otp_expires_at so staff can tell the customer where to look and how long they have.
OTP constraints
- 6 digits.
- Expires after 5 minutes.
- Maximum 5 verification attempts before the OTP is invalidated (customer must request a new one).
- 60-second cooldown between resends.
Validation
- The collection must be in
ready_to_collectstatus. - The customer must have an email address on file.
- At least 60 seconds must have passed since the last OTP was sent.
No request body is required.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| collectionId | string | Yes | The collection identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
send-otp-responseNeed the full machine-readable spec? Download the OpenAPI document →
/orders/collections/{collectionId}/verification/verify-and-collectVerify OTP and complete handover
Verifies the OTP supplied by the customer and marks the collection as collected. This is the final handover step.
Two modes
OTP verification: Send otp in the request. Carriyo compares the SHA-256 hash against the stored hash. On match, the collection moves to collected with verification.status = verified.
Staff override: Send override: true (no otp needed). The collection moves to collected with verification.status = overridden. Use this when the customer can prove identity but cannot access the OTP.
Behavior on collect
When a collection reaches collected, Carriyo checks each linked fulfillment-order line item. If all collections referenced by a line item are now terminal (collected or cancelled), the line item moves to closed. The fulfillment order and order statuses are then recomputed.
Validation
- The collection must be in
ready_to_collectstatus. - An OTP must have been sent (unless using override).
- The OTP must not be expired (5-minute window).
- The maximum attempt count (5) must not be exceeded. Each failed attempt increments the counter.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| collectionId | string | Yes | The collection identifier. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: verify-and-collect-requestrequiredResponses
collection-response- The collection lifecycle state. -
open: created but not yet at the collection point. -ready_to_collect: at the collection point, customer can be notified and verified. -collected: handed over to the customer. Terminal (success). -expired: customer didn't collect within the configured window. Recoverable via unexpire. -cancelled: explicitly cancelled or auto-cancelled after expiry. Terminal.Values:openready_to_collectcollectedexpiredcancelled
Need the full machine-readable spec? Download the OpenAPI document →
Bin Locations
A Bin location is an SKU-to-bin mapping within a fulfillment location: which physical bins on the warehouse floor hold a given SKU. The picker app reads these mappings to direct pickers efficiently.
Records are keyed by (tenantId, locationId, sku). Bulk import is supported for tenants migrating from another system.
6 operations · 0 objects
/bin-locations/{locationId}Create bin location
Creates a bin-location mapping for an SKU at the given fulfillment location.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| locationId | string | Yes | Fulfillment location ID. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: bin-location-requestrequiredResponses
bin-location-responseNeed the full machine-readable spec? Download the OpenAPI document →
/bin-locations/{locationId}/{sku}Get bin location by SKU
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| locationId | string | Yes | Fulfillment location ID. |
| sku | string | Yes | SKU. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
bin-location-responseNeed the full machine-readable spec? Download the OpenAPI document →
/bin-locations/{locationId}/{sku}Update bin location
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| locationId | string | Yes | Fulfillment location ID. |
| sku | string | Yes | SKU. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: bin-location-requestrequiredResponses
bin-location-responseNeed the full machine-readable spec? Download the OpenAPI document →
/bin-locations/{locationId}/{sku}Delete bin location
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| locationId | string | Yes | Fulfillment location ID. |
| sku | string | Yes | SKU. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
Responses
Need the full machine-readable spec? Download the OpenAPI document →
/bin-locations/{locationId}/{sku}/update-skuRename the SKU on a bin-location mapping
Changes the SKU key on an existing bin-location mapping, preserving the bin assignment.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| locationId | string | Yes | Fulfillment location ID. |
| sku | string | Yes | Current SKU on the mapping. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonSchema: update-sku-requestrequiredResponses
bin-location-responseNeed the full machine-readable spec? Download the OpenAPI document →
/bin-locations/{locationId}/bulk/importBulk import bin locations
Bulk-imports an array of bin-location mappings for the given fulfillment location. Each item is processed independently and the response reports per-item outcomes.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| locationId | string | Yes | Fulfillment location ID. |
Headers
| Name | Value | Required | Description |
|---|---|---|---|
| Authorization | Bearer YOUR-ACCESS-TOKEN | Yes | OAuth 2.0 bearer token obtained from `POST /oauth/token`. |
| x-api-key | YOUR-API-KEY | Yes | Your tenant's API key, issued in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| tenant-id | YOUR-TENANT-ID | Yes | Your Carriyo tenant ID, shown in the Carriyo Dashboard. Required on every request except `POST /oauth/token`. |
| Content-Type | application/json | Yes | Media type of the request body. |
Request body
application/jsonrequiredResponses
Need the full machine-readable spec? Download the OpenAPI document →