Shipping API
REST endpoints for shipping in SKUFlow: 14 operations with parameters, request and response fields, permissions and curl examples.
Base URL: https://app.skuflow.ai/api. Every call needs Authorization: Bearer skf_… (Authentication); {organizationId} ($ORGANIZATION_ID in the examples) is your business's id.
| Operation | Endpoint | Risk |
|---|---|---|
| Shipping set-up | GET /organizations/{organizationId}/shipping/settings | read |
| Change the shipping set-up | PATCH /organizations/{organizationId}/shipping/settings | write |
| Connect your own shipping account | POST /organizations/{organizationId}/shipping/account | sensitive |
| Disconnect your own shipping account | DELETE /organizations/{organizationId}/shipping/account | sensitive |
| List shipments | GET /organizations/{organizationId}/shipments | read |
| Start a shipment and get rates | POST /organizations/{organizationId}/shipments | write |
| Get a shipment | GET /organizations/{organizationId}/shipments/{shipmentId} | read |
| Delete a draft shipment | DELETE /organizations/{organizationId}/shipments/{shipmentId} | sensitive |
| What a new shipment starts with | GET /organizations/{organizationId}/shipments/defaults | read |
| Get new rates | POST /organizations/{organizationId}/shipments/{shipmentId}/rates | write |
| Buy a shipping label | POST /organizations/{organizationId}/shipments/{shipmentId}/buy | sensitive |
| Void a shipping label | POST /organizations/{organizationId}/shipments/{shipmentId}/void | sensitive |
| Refresh tracking | POST /organizations/{organizationId}/shipments/{shipmentId}/track | write |
| Move a test shipment | POST /organizations/{organizationId}/shipments/{shipmentId}/simulate | write |
Shipping set-up
GET /organizations/{organizationId}/shipping/settings
How the business ships: on SKUFlow's carrier account (MANAGED; postage billed at cost + the markup, once a label is used) or its own EasyPost or Shippo account (OWN), the ship-from address (the business address until set) and the packages. Keys are never answered. Read-only.
| Permission | orders.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | shipping_settings (toolset orders) |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/shipping/settings" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
mode | enum | One of MANAGED, OWN. |
provider | enum or null | One of EASYPOST, SHIPPO, FAKE. |
connected | boolean | Its own EasyPost or Shippo account is connected. |
connectedAt | string (date-time) or null | |
managedAvailable | boolean | Labels can be bought on SKUFlow's account on this server. |
managedProvider | string | |
markupPercent | number | SKUFlow's markup on postage bought on its account. |
environment | enum | One of fake, live, off. |
fromAddress | object or null | |
fromAddress.name | string | Up to 200 characters. Default ``. |
fromAddress.company | string | Up to 200 characters. Default ``. |
fromAddress.street1 | string | Up to 200 characters. |
fromAddress.street2 | string | Up to 200 characters. Default ``. |
fromAddress.city | string | Up to 100 characters. |
fromAddress.state | string | Up to 100 characters. Default ``. |
fromAddress.zip | string | Up to 20 characters. |
fromAddress.country | string | Default US. |
fromAddress.phone | string | Up to 40 characters. Default ``. |
fromAddress.email | string | Up to 254 characters. Default ``. |
fromAddressSet | boolean | |
parcelPresets | array of object | Up to 20 items. |
parcelPresets[].lengthIn | number | At most 200. |
parcelPresets[].widthIn | number | At most 200. |
parcelPresets[].heightIn | number | At most 200. |
parcelPresets[].weightOz | number | At most 2400. |
parcelPresets[].key | string | Up to 40 characters. |
parcelPresets[].name | string | Up to 80 characters. |
parcelPresets[].tareOz | number | 0–400. Default 0. |
Change the shipping set-up
PATCH /organizations/{organizationId}/shipping/settings
Sets the ship-from address and the packages (presets: name, inches, weight and the box's own weight), and chooses SKUFlow's account (MANAGED) or the connected own account (OWN; connect it first with POST …/shipping/account).
| Permission | shipping.manage (Owner, Admin) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | shipping_updateSettings (toolset orders) |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
mode | enum | No | One of MANAGED, OWN. |
fromAddress | object | No | |
fromAddress.name | string | No | Up to 200 characters. Default ``. |
fromAddress.company | string | No | Up to 200 characters. Default ``. |
fromAddress.street1 | string | Yes | Up to 200 characters. |
fromAddress.street2 | string | No | Up to 200 characters. Default ``. |
fromAddress.city | string | Yes | Up to 100 characters. |
fromAddress.state | string | No | Up to 100 characters. Default ``. |
fromAddress.zip | string | Yes | Up to 20 characters. |
fromAddress.country | string | No | Default US. |
fromAddress.phone | string | No | Up to 40 characters. Default ``. |
fromAddress.email | string | No | Up to 254 characters. Default ``. |
parcelPresets | array of object | No | Up to 20 items. |
parcelPresets[].lengthIn | number | Yes | At most 200. |
parcelPresets[].widthIn | number | Yes | At most 200. |
parcelPresets[].heightIn | number | Yes | At most 200. |
parcelPresets[].weightOz | number | Yes | At most 2400. |
parcelPresets[].key | string | Yes | Up to 40 characters. |
parcelPresets[].name | string | Yes | Up to 80 characters. |
parcelPresets[].tareOz | number | No | 0–400. Default 0. |
Example
curl -X PATCH "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/shipping/settings" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"MANAGED","fromAddress":{"street1":"string","city":"string","zip":"string"},"parcelPresets":[{"lengthIn":1,"widthIn":1,"heightIn":1,"weightOz":1,"key":"string","name":"Dana Whitfield"}]}'Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
mode | enum | One of MANAGED, OWN. |
provider | enum or null | One of EASYPOST, SHIPPO, FAKE. |
connected | boolean | Its own EasyPost or Shippo account is connected. |
connectedAt | string (date-time) or null | |
managedAvailable | boolean | Labels can be bought on SKUFlow's account on this server. |
managedProvider | string | |
markupPercent | number | SKUFlow's markup on postage bought on its account. |
environment | enum | One of fake, live, off. |
fromAddress | object or null | |
fromAddress.name | string | Up to 200 characters. Default ``. |
fromAddress.company | string | Up to 200 characters. Default ``. |
fromAddress.street1 | string | Up to 200 characters. |
fromAddress.street2 | string | Up to 200 characters. Default ``. |
fromAddress.city | string | Up to 100 characters. |
fromAddress.state | string | Up to 100 characters. Default ``. |
fromAddress.zip | string | Up to 20 characters. |
fromAddress.country | string | Default US. |
fromAddress.phone | string | Up to 40 characters. Default ``. |
fromAddress.email | string | Up to 254 characters. Default ``. |
fromAddressSet | boolean | |
parcelPresets | array of object | Up to 20 items. |
parcelPresets[].lengthIn | number | At most 200. |
parcelPresets[].widthIn | number | At most 200. |
parcelPresets[].heightIn | number | At most 200. |
parcelPresets[].weightOz | number | At most 2400. |
parcelPresets[].key | string | Up to 40 characters. |
parcelPresets[].name | string | Up to 80 characters. |
parcelPresets[].tareOz | number | 0–400. Default 0. |
Connect your own shipping account
POST /organizations/{organizationId}/shipping/account
Money: connects the business's own EasyPost or Shippo account (its API key, checked with the provider and kept encrypted; our tracking webhook is registered on it). Labels are then bought on that account and its carrier charges the postage. Replaces a connected account.
| Permission | shipping.manage (Owner, Admin) |
| Risk | sensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access. |
| MCP tool | shipping_connect (toolset orders) |
| Approval | Waits for your approval in SKUFlow when called with an API key or a connected app: the first call answers 428 APPROVAL_REQUIRED; once you approve it, repeat the call with the X-SKUFlow-Approval header. See Approvals. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
provider | enum | Yes | One of EASYPOST, SHIPPO. |
apiKey | string | Yes | The account's live or test API key. Up to 200 characters. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/shipping/account" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"provider":"EASYPOST","apiKey":"string"}'Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
mode | enum | One of MANAGED, OWN. |
provider | enum or null | One of EASYPOST, SHIPPO, FAKE. |
connected | boolean | Its own EasyPost or Shippo account is connected. |
connectedAt | string (date-time) or null | |
managedAvailable | boolean | Labels can be bought on SKUFlow's account on this server. |
managedProvider | string | |
markupPercent | number | SKUFlow's markup on postage bought on its account. |
environment | enum | One of fake, live, off. |
fromAddress | object or null | |
fromAddress.name | string | Up to 200 characters. Default ``. |
fromAddress.company | string | Up to 200 characters. Default ``. |
fromAddress.street1 | string | Up to 200 characters. |
fromAddress.street2 | string | Up to 200 characters. Default ``. |
fromAddress.city | string | Up to 100 characters. |
fromAddress.state | string | Up to 100 characters. Default ``. |
fromAddress.zip | string | Up to 20 characters. |
fromAddress.country | string | Default US. |
fromAddress.phone | string | Up to 40 characters. Default ``. |
fromAddress.email | string | Up to 254 characters. Default ``. |
fromAddressSet | boolean | |
parcelPresets | array of object | Up to 20 items. |
parcelPresets[].lengthIn | number | At most 200. |
parcelPresets[].widthIn | number | At most 200. |
parcelPresets[].heightIn | number | At most 200. |
parcelPresets[].weightOz | number | At most 2400. |
parcelPresets[].key | string | Up to 40 characters. |
parcelPresets[].name | string | Up to 80 characters. |
parcelPresets[].tareOz | number | 0–400. Default 0. |
Disconnect your own shipping account
DELETE /organizations/{organizationId}/shipping/account
Destructive: forgets the connected EasyPost or Shippo key and goes back to SKUFlow's account. Labels already bought keep their tracking.
| Permission | shipping.manage (Owner, Admin) |
| Risk | sensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access. |
| MCP tool | shipping_disconnect (toolset orders) |
| Approval | Over MCP, this tool always waits for your approval in SKUFlow. See Approvals. |
Example
curl -X DELETE "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/shipping/account" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
mode | enum | One of MANAGED, OWN. |
provider | enum or null | One of EASYPOST, SHIPPO, FAKE. |
connected | boolean | Its own EasyPost or Shippo account is connected. |
connectedAt | string (date-time) or null | |
managedAvailable | boolean | Labels can be bought on SKUFlow's account on this server. |
managedProvider | string | |
markupPercent | number | SKUFlow's markup on postage bought on its account. |
environment | enum | One of fake, live, off. |
fromAddress | object or null | |
fromAddress.name | string | Up to 200 characters. Default ``. |
fromAddress.company | string | Up to 200 characters. Default ``. |
fromAddress.street1 | string | Up to 200 characters. |
fromAddress.street2 | string | Up to 200 characters. Default ``. |
fromAddress.city | string | Up to 100 characters. |
fromAddress.state | string | Up to 100 characters. Default ``. |
fromAddress.zip | string | Up to 20 characters. |
fromAddress.country | string | Default US. |
fromAddress.phone | string | Up to 40 characters. Default ``. |
fromAddress.email | string | Up to 254 characters. Default ``. |
fromAddressSet | boolean | |
parcelPresets | array of object | Up to 20 items. |
parcelPresets[].lengthIn | number | At most 200. |
parcelPresets[].widthIn | number | At most 200. |
parcelPresets[].heightIn | number | At most 200. |
parcelPresets[].weightOz | number | At most 2400. |
parcelPresets[].key | string | Up to 40 characters. |
parcelPresets[].name | string | Up to 80 characters. |
parcelPresets[].tareOz | number | 0–400. Default 0. |
List shipments
GET /organizations/{organizationId}/shipments
Shipments (SHP-n), newest first: for an order or a store order, by status, or open (a label bought and not delivered yet). Each has its rates, label, tracking and scans. Read-only.
| Permission | orders.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | shipments_list (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orderId | query | string | No | |
storeOrderId | query | string | No | |
status | query | enum | No | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
open | query | boolean | No | |
limit | query | integer | No | 1–200. |
offset | query | integer | No |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/shipments" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
items | array of object | |
items[].id | string | Shipment id. |
items[].identifier | string | SHP-n. |
items[].orderId | string or null | |
items[].storeOrderId | string or null | |
items[].customerId | string or null | |
items[].status | enum | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
items[].mode | enum | MANAGED (SKUFlow's account) or OWN (the business's). One of MANAGED, OWN. |
items[].provider | string | |
items[].toAddress | object | |
items[].toAddress.name | string | Up to 200 characters. Default ``. |
items[].toAddress.company | string | Up to 200 characters. Default ``. |
items[].toAddress.street1 | string | Up to 200 characters. |
items[].toAddress.street2 | string | Up to 200 characters. Default ``. |
items[].toAddress.city | string | Up to 100 characters. |
items[].toAddress.state | string | Up to 100 characters. Default ``. |
items[].toAddress.zip | string | Up to 20 characters. |
items[].toAddress.country | string | Default US. |
items[].toAddress.phone | string | Up to 40 characters. Default ``. |
items[].toAddress.email | string | Up to 254 characters. Default ``. |
items[].fromAddress | object | |
items[].fromAddress.name | string | Up to 200 characters. Default ``. |
items[].fromAddress.company | string | Up to 200 characters. Default ``. |
items[].fromAddress.street1 | string | Up to 200 characters. |
items[].fromAddress.street2 | string | Up to 200 characters. Default ``. |
items[].fromAddress.city | string | Up to 100 characters. |
items[].fromAddress.state | string | Up to 100 characters. Default ``. |
items[].fromAddress.zip | string | Up to 20 characters. |
items[].fromAddress.country | string | Default US. |
items[].fromAddress.phone | string | Up to 40 characters. Default ``. |
items[].fromAddress.email | string | Up to 254 characters. Default ``. |
items[].parcel | object | |
items[].parcel.lengthIn | number | At most 200. |
items[].parcel.widthIn | number | At most 200. |
items[].parcel.heightIn | number | At most 200. |
items[].parcel.weightOz | number | At most 2400. |
items[].rates | array of object | |
items[].rates[].id | string | Buy it with POST …/shipments/{shipmentId}/buy. |
items[].rates[].carrier | string | |
items[].rates[].service | string | |
items[].rates[].postageCents | integer | What the shipping account is charged. |
items[].rates[].priceCents | integer | What the business pays: the postage, or postage × markup on SKUFlow's account. |
items[].rates[].currency | string | |
items[].rates[].deliveryDays | number or null | |
items[].rates[].estimatedDelivery | string or null | |
items[].carrier | string or null | |
items[].service | string or null | |
items[].trackingNumber | string or null | |
items[].trackingUrl | string or null | |
items[].labelUrl | string or null | The label (PDF) to print. |
items[].postageCents | integer or null | |
items[].priceCents | integer or null | |
items[].estimatedDelivery | string or null | |
items[].statusDetail | string or null | |
items[].purchasedAt | string (date-time) or null | |
items[].shippedAt | string (date-time) or null | |
items[].deliveredAt | string (date-time) or null | |
items[].voidable | boolean | |
items[].order | object or null | |
items[].order.id | string | |
items[].order.identifier | string | |
items[].storeOrder | object or null | |
items[].storeOrder.id | string | |
items[].storeOrder.identifier | string | |
items[].events | array of object | |
items[].events[].id | string | |
items[].events[].status | enum or null | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
items[].events[].message | string or null | |
items[].events[].location | string or null | |
items[].events[].occurredAt | string (date-time) | |
items[].createdAt | string (date-time) | |
total | integer |
Start a shipment and get rates
POST /organizations/{organizationId}/shipments
Makes a DRAFT shipment for an order or a store order and reads the carriers' rates (cheapest first, with the price the business pays). Defaults: the order's ship-to address, the ship-from address, a package estimated from the goods (GET …/shipments/defaults). Nothing is bought: POST …/shipments/{shipmentId}/buy.
| Permission | shipping.labels (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | shipments_create (toolset orders) |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
orderId | string or null | No | The order it ships (GET /orders). |
storeOrderId | string or null | No | Or the store order it ships. |
toAddress | object | No | |
toAddress.name | string | No | Up to 200 characters. Default ``. |
toAddress.company | string | No | Up to 200 characters. Default ``. |
toAddress.street1 | string | Yes | Up to 200 characters. |
toAddress.street2 | string | No | Up to 200 characters. Default ``. |
toAddress.city | string | Yes | Up to 100 characters. |
toAddress.state | string | No | Up to 100 characters. Default ``. |
toAddress.zip | string | Yes | Up to 20 characters. |
toAddress.country | string | No | Default US. |
toAddress.phone | string | No | Up to 40 characters. Default ``. |
toAddress.email | string | No | Up to 254 characters. Default ``. |
fromAddress | object | No | |
fromAddress.name | string | No | Up to 200 characters. Default ``. |
fromAddress.company | string | No | Up to 200 characters. Default ``. |
fromAddress.street1 | string | Yes | Up to 200 characters. |
fromAddress.street2 | string | No | Up to 200 characters. Default ``. |
fromAddress.city | string | Yes | Up to 100 characters. |
fromAddress.state | string | No | Up to 100 characters. Default ``. |
fromAddress.zip | string | Yes | Up to 20 characters. |
fromAddress.country | string | No | Default US. |
fromAddress.phone | string | No | Up to 40 characters. Default ``. |
fromAddress.email | string | No | Up to 254 characters. Default ``. |
parcel | object | No | |
parcel.lengthIn | number | Yes | At most 200. |
parcel.widthIn | number | Yes | At most 200. |
parcel.heightIn | number | Yes | At most 200. |
parcel.weightOz | number | Yes | At most 2400. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/shipments" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"orderId":"order_id","storeOrderId":"storeOrder_id","toAddress":{"street1":"string","city":"string","zip":"string"}}'Response
201: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Shipment id. |
identifier | string | SHP-n. |
orderId | string or null | |
storeOrderId | string or null | |
customerId | string or null | |
status | enum | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
mode | enum | MANAGED (SKUFlow's account) or OWN (the business's). One of MANAGED, OWN. |
provider | string | |
toAddress | object | |
toAddress.name | string | Up to 200 characters. Default ``. |
toAddress.company | string | Up to 200 characters. Default ``. |
toAddress.street1 | string | Up to 200 characters. |
toAddress.street2 | string | Up to 200 characters. Default ``. |
toAddress.city | string | Up to 100 characters. |
toAddress.state | string | Up to 100 characters. Default ``. |
toAddress.zip | string | Up to 20 characters. |
toAddress.country | string | Default US. |
toAddress.phone | string | Up to 40 characters. Default ``. |
toAddress.email | string | Up to 254 characters. Default ``. |
fromAddress | object | |
fromAddress.name | string | Up to 200 characters. Default ``. |
fromAddress.company | string | Up to 200 characters. Default ``. |
fromAddress.street1 | string | Up to 200 characters. |
fromAddress.street2 | string | Up to 200 characters. Default ``. |
fromAddress.city | string | Up to 100 characters. |
fromAddress.state | string | Up to 100 characters. Default ``. |
fromAddress.zip | string | Up to 20 characters. |
fromAddress.country | string | Default US. |
fromAddress.phone | string | Up to 40 characters. Default ``. |
fromAddress.email | string | Up to 254 characters. Default ``. |
parcel | object | |
parcel.lengthIn | number | At most 200. |
parcel.widthIn | number | At most 200. |
parcel.heightIn | number | At most 200. |
parcel.weightOz | number | At most 2400. |
rates | array of object | |
rates[].id | string | Buy it with POST …/shipments/{shipmentId}/buy. |
rates[].carrier | string | |
rates[].service | string | |
rates[].postageCents | integer | What the shipping account is charged. |
rates[].priceCents | integer | What the business pays: the postage, or postage × markup on SKUFlow's account. |
rates[].currency | string | |
rates[].deliveryDays | number or null | |
rates[].estimatedDelivery | string or null | |
carrier | string or null | |
service | string or null | |
trackingNumber | string or null | |
trackingUrl | string or null | |
labelUrl | string or null | The label (PDF) to print. |
postageCents | integer or null | |
priceCents | integer or null | |
estimatedDelivery | string or null | |
statusDetail | string or null | |
purchasedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
deliveredAt | string (date-time) or null | |
voidable | boolean | |
order | object or null | |
order.id | string | |
order.identifier | string | |
storeOrder | object or null | |
storeOrder.id | string | |
storeOrder.identifier | string | |
events | array of object | |
events[].id | string | |
events[].status | enum or null | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
events[].message | string or null | |
events[].location | string or null | |
events[].occurredAt | string (date-time) | |
createdAt | string (date-time) |
Get a shipment
GET /organizations/{organizationId}/shipments/{shipmentId}
One shipment with its rates, label, tracking and scans. Read-only.
| Permission | orders.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | shipments_get (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
shipmentId | path | string | Yes |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/shipments/{shipmentId}" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Shipment id. |
identifier | string | SHP-n. |
orderId | string or null | |
storeOrderId | string or null | |
customerId | string or null | |
status | enum | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
mode | enum | MANAGED (SKUFlow's account) or OWN (the business's). One of MANAGED, OWN. |
provider | string | |
toAddress | object | |
toAddress.name | string | Up to 200 characters. Default ``. |
toAddress.company | string | Up to 200 characters. Default ``. |
toAddress.street1 | string | Up to 200 characters. |
toAddress.street2 | string | Up to 200 characters. Default ``. |
toAddress.city | string | Up to 100 characters. |
toAddress.state | string | Up to 100 characters. Default ``. |
toAddress.zip | string | Up to 20 characters. |
toAddress.country | string | Default US. |
toAddress.phone | string | Up to 40 characters. Default ``. |
toAddress.email | string | Up to 254 characters. Default ``. |
fromAddress | object | |
fromAddress.name | string | Up to 200 characters. Default ``. |
fromAddress.company | string | Up to 200 characters. Default ``. |
fromAddress.street1 | string | Up to 200 characters. |
fromAddress.street2 | string | Up to 200 characters. Default ``. |
fromAddress.city | string | Up to 100 characters. |
fromAddress.state | string | Up to 100 characters. Default ``. |
fromAddress.zip | string | Up to 20 characters. |
fromAddress.country | string | Default US. |
fromAddress.phone | string | Up to 40 characters. Default ``. |
fromAddress.email | string | Up to 254 characters. Default ``. |
parcel | object | |
parcel.lengthIn | number | At most 200. |
parcel.widthIn | number | At most 200. |
parcel.heightIn | number | At most 200. |
parcel.weightOz | number | At most 2400. |
rates | array of object | |
rates[].id | string | Buy it with POST …/shipments/{shipmentId}/buy. |
rates[].carrier | string | |
rates[].service | string | |
rates[].postageCents | integer | What the shipping account is charged. |
rates[].priceCents | integer | What the business pays: the postage, or postage × markup on SKUFlow's account. |
rates[].currency | string | |
rates[].deliveryDays | number or null | |
rates[].estimatedDelivery | string or null | |
carrier | string or null | |
service | string or null | |
trackingNumber | string or null | |
trackingUrl | string or null | |
labelUrl | string or null | The label (PDF) to print. |
postageCents | integer or null | |
priceCents | integer or null | |
estimatedDelivery | string or null | |
statusDetail | string or null | |
purchasedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
deliveredAt | string (date-time) or null | |
voidable | boolean | |
order | object or null | |
order.id | string | |
order.identifier | string | |
storeOrder | object or null | |
storeOrder.id | string | |
storeOrder.identifier | string | |
events | array of object | |
events[].id | string | |
events[].status | enum or null | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
events[].message | string or null | |
events[].location | string or null | |
events[].occurredAt | string (date-time) | |
createdAt | string (date-time) |
Delete a draft shipment
DELETE /organizations/{organizationId}/shipments/{shipmentId}
Destructive: deletes a DRAFT shipment (no label bought). A bought label is voided instead.
| Permission | shipping.labels (Owner, Admin, Staff) |
| Risk | sensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access. |
| MCP tool | shipments_delete (toolset orders) |
| Approval | Over MCP, this tool always waits for your approval in SKUFlow. See Approvals. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
shipmentId | path | string | Yes |
Example
curl -X DELETE "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/shipments/{shipmentId}" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
ok | true |
What a new shipment starts with
GET /organizations/{organizationId}/shipments/defaults
For an order or a store order: its ship-to address, the ship-from address and a package estimated from the goods (weight from the variants, the package by the number of pieces) with the presets. Read-only.
| Permission | orders.read (Owner, Admin, Staff, Member) |
| Risk | read, OAuth scope skuflow.read. Read: reads only. |
| MCP tool | shipments_defaults (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
orderId | query | string | No | The order it ships (GET /orders). |
storeOrderId | query | string | No | Or the store order it ships. |
Example
curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/shipments/defaults" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
toAddress | object or null | |
toAddress.name | string | Up to 200 characters. Default ``. |
toAddress.company | string | Up to 200 characters. Default ``. |
toAddress.street1 | string | Up to 200 characters. |
toAddress.street2 | string | Up to 200 characters. Default ``. |
toAddress.city | string | Up to 100 characters. |
toAddress.state | string | Up to 100 characters. Default ``. |
toAddress.zip | string | Up to 20 characters. |
toAddress.country | string | Default US. |
toAddress.phone | string | Up to 40 characters. Default ``. |
toAddress.email | string | Up to 254 characters. Default ``. |
fromAddress | object or null | |
fromAddress.name | string | Up to 200 characters. Default ``. |
fromAddress.company | string | Up to 200 characters. Default ``. |
fromAddress.street1 | string | Up to 200 characters. |
fromAddress.street2 | string | Up to 200 characters. Default ``. |
fromAddress.city | string | Up to 100 characters. |
fromAddress.state | string | Up to 100 characters. Default ``. |
fromAddress.zip | string | Up to 20 characters. |
fromAddress.country | string | Default US. |
fromAddress.phone | string | Up to 40 characters. Default ``. |
fromAddress.email | string | Up to 254 characters. Default ``. |
parcel | object | |
parcel.lengthIn | number | At most 200. |
parcel.widthIn | number | At most 200. |
parcel.heightIn | number | At most 200. |
parcel.weightOz | number | At most 2400. |
presetKey | string or null | |
pieces | number | |
parcelPresets | array of object | Up to 20 items. |
parcelPresets[].lengthIn | number | At most 200. |
parcelPresets[].widthIn | number | At most 200. |
parcelPresets[].heightIn | number | At most 200. |
parcelPresets[].weightOz | number | At most 2400. |
parcelPresets[].key | string | Up to 40 characters. |
parcelPresets[].name | string | Up to 80 characters. |
parcelPresets[].tareOz | number | 0–400. Default 0. |
mode | enum | One of MANAGED, OWN. |
Get new rates
POST /organizations/{organizationId}/shipments/{shipmentId}/rates
Reads the rates again for a DRAFT shipment, for another package or address.
| Permission | shipping.labels (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | shipments_rates (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
shipmentId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
toAddress | object | No | |
toAddress.name | string | No | Up to 200 characters. Default ``. |
toAddress.company | string | No | Up to 200 characters. Default ``. |
toAddress.street1 | string | Yes | Up to 200 characters. |
toAddress.street2 | string | No | Up to 200 characters. Default ``. |
toAddress.city | string | Yes | Up to 100 characters. |
toAddress.state | string | No | Up to 100 characters. Default ``. |
toAddress.zip | string | Yes | Up to 20 characters. |
toAddress.country | string | No | Default US. |
toAddress.phone | string | No | Up to 40 characters. Default ``. |
toAddress.email | string | No | Up to 254 characters. Default ``. |
parcel | object | No | |
parcel.lengthIn | number | Yes | At most 200. |
parcel.widthIn | number | Yes | At most 200. |
parcel.heightIn | number | Yes | At most 200. |
parcel.weightOz | number | Yes | At most 2400. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/shipments/{shipmentId}/rates" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"toAddress":{"street1":"string","city":"string","zip":"string"},"parcel":{"lengthIn":1,"widthIn":1,"heightIn":1,"weightOz":1}}'Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Shipment id. |
identifier | string | SHP-n. |
orderId | string or null | |
storeOrderId | string or null | |
customerId | string or null | |
status | enum | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
mode | enum | MANAGED (SKUFlow's account) or OWN (the business's). One of MANAGED, OWN. |
provider | string | |
toAddress | object | |
toAddress.name | string | Up to 200 characters. Default ``. |
toAddress.company | string | Up to 200 characters. Default ``. |
toAddress.street1 | string | Up to 200 characters. |
toAddress.street2 | string | Up to 200 characters. Default ``. |
toAddress.city | string | Up to 100 characters. |
toAddress.state | string | Up to 100 characters. Default ``. |
toAddress.zip | string | Up to 20 characters. |
toAddress.country | string | Default US. |
toAddress.phone | string | Up to 40 characters. Default ``. |
toAddress.email | string | Up to 254 characters. Default ``. |
fromAddress | object | |
fromAddress.name | string | Up to 200 characters. Default ``. |
fromAddress.company | string | Up to 200 characters. Default ``. |
fromAddress.street1 | string | Up to 200 characters. |
fromAddress.street2 | string | Up to 200 characters. Default ``. |
fromAddress.city | string | Up to 100 characters. |
fromAddress.state | string | Up to 100 characters. Default ``. |
fromAddress.zip | string | Up to 20 characters. |
fromAddress.country | string | Default US. |
fromAddress.phone | string | Up to 40 characters. Default ``. |
fromAddress.email | string | Up to 254 characters. Default ``. |
parcel | object | |
parcel.lengthIn | number | At most 200. |
parcel.widthIn | number | At most 200. |
parcel.heightIn | number | At most 200. |
parcel.weightOz | number | At most 2400. |
rates | array of object | |
rates[].id | string | Buy it with POST …/shipments/{shipmentId}/buy. |
rates[].carrier | string | |
rates[].service | string | |
rates[].postageCents | integer | What the shipping account is charged. |
rates[].priceCents | integer | What the business pays: the postage, or postage × markup on SKUFlow's account. |
rates[].currency | string | |
rates[].deliveryDays | number or null | |
rates[].estimatedDelivery | string or null | |
carrier | string or null | |
service | string or null | |
trackingNumber | string or null | |
trackingUrl | string or null | |
labelUrl | string or null | The label (PDF) to print. |
postageCents | integer or null | |
priceCents | integer or null | |
estimatedDelivery | string or null | |
statusDetail | string or null | |
purchasedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
deliveredAt | string (date-time) or null | |
voidable | boolean | |
order | object or null | |
order.id | string | |
order.identifier | string | |
storeOrder | object or null | |
storeOrder.id | string | |
storeOrder.identifier | string | |
events | array of object | |
events[].id | string | |
events[].status | enum or null | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
events[].message | string or null | |
events[].location | string or null | |
events[].occurredAt | string (date-time) | |
createdAt | string (date-time) |
Buy a shipping label
POST /organizations/{organizationId}/shipments/{shipmentId}/buy
Money: buys the label at one of the shipment's rates (rateId from its rates). On SKUFlow's account the business is billed the rate's priceCents once the label is used (or 30 days later, unless voided); on its own account its carrier charges the postage. Refused (409) during the free trial or while billing can't be checked. Answers the shipment with its tracking number and labelUrl. A store order with its label is fulfilled.
| Permission | shipping.labels (Owner, Admin, Staff) |
| Risk | sensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access. |
| MCP tool | shipments_buy (toolset orders) |
| Approval | Over MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in SKUFlow). See Approvals. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
shipmentId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
rateId | string | Yes | Up to 200 characters. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/shipments/{shipmentId}/buy" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"rateId":"rate_id"}'Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Shipment id. |
identifier | string | SHP-n. |
orderId | string or null | |
storeOrderId | string or null | |
customerId | string or null | |
status | enum | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
mode | enum | MANAGED (SKUFlow's account) or OWN (the business's). One of MANAGED, OWN. |
provider | string | |
toAddress | object | |
toAddress.name | string | Up to 200 characters. Default ``. |
toAddress.company | string | Up to 200 characters. Default ``. |
toAddress.street1 | string | Up to 200 characters. |
toAddress.street2 | string | Up to 200 characters. Default ``. |
toAddress.city | string | Up to 100 characters. |
toAddress.state | string | Up to 100 characters. Default ``. |
toAddress.zip | string | Up to 20 characters. |
toAddress.country | string | Default US. |
toAddress.phone | string | Up to 40 characters. Default ``. |
toAddress.email | string | Up to 254 characters. Default ``. |
fromAddress | object | |
fromAddress.name | string | Up to 200 characters. Default ``. |
fromAddress.company | string | Up to 200 characters. Default ``. |
fromAddress.street1 | string | Up to 200 characters. |
fromAddress.street2 | string | Up to 200 characters. Default ``. |
fromAddress.city | string | Up to 100 characters. |
fromAddress.state | string | Up to 100 characters. Default ``. |
fromAddress.zip | string | Up to 20 characters. |
fromAddress.country | string | Default US. |
fromAddress.phone | string | Up to 40 characters. Default ``. |
fromAddress.email | string | Up to 254 characters. Default ``. |
parcel | object | |
parcel.lengthIn | number | At most 200. |
parcel.widthIn | number | At most 200. |
parcel.heightIn | number | At most 200. |
parcel.weightOz | number | At most 2400. |
rates | array of object | |
rates[].id | string | Buy it with POST …/shipments/{shipmentId}/buy. |
rates[].carrier | string | |
rates[].service | string | |
rates[].postageCents | integer | What the shipping account is charged. |
rates[].priceCents | integer | What the business pays: the postage, or postage × markup on SKUFlow's account. |
rates[].currency | string | |
rates[].deliveryDays | number or null | |
rates[].estimatedDelivery | string or null | |
carrier | string or null | |
service | string or null | |
trackingNumber | string or null | |
trackingUrl | string or null | |
labelUrl | string or null | The label (PDF) to print. |
postageCents | integer or null | |
priceCents | integer or null | |
estimatedDelivery | string or null | |
statusDetail | string or null | |
purchasedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
deliveredAt | string (date-time) or null | |
voidable | boolean | |
order | object or null | |
order.id | string | |
order.identifier | string | |
storeOrder | object or null | |
storeOrder.id | string | |
storeOrder.identifier | string | |
events | array of object | |
events[].id | string | |
events[].status | enum or null | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
events[].message | string or null | |
events[].location | string or null | |
events[].occurredAt | string (date-time) | |
createdAt | string (date-time) |
Void a shipping label
POST /organizations/{organizationId}/shipments/{shipmentId}/void
Money: voids an unused label (the provider refunds its postage; nothing is billed for it). Refused (409) once the carrier has the package.
| Permission | shipping.labels (Owner, Admin, Staff) |
| Risk | sensitive, OAuth scope skuflow.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access. |
| MCP tool | shipments_void (toolset orders) |
| Approval | Over MCP, this tool asks for your OK first (in the AI app when it supports it, otherwise in SKUFlow). See Approvals. |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
shipmentId | path | string | Yes |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/shipments/{shipmentId}/void" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Shipment id. |
identifier | string | SHP-n. |
orderId | string or null | |
storeOrderId | string or null | |
customerId | string or null | |
status | enum | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
mode | enum | MANAGED (SKUFlow's account) or OWN (the business's). One of MANAGED, OWN. |
provider | string | |
toAddress | object | |
toAddress.name | string | Up to 200 characters. Default ``. |
toAddress.company | string | Up to 200 characters. Default ``. |
toAddress.street1 | string | Up to 200 characters. |
toAddress.street2 | string | Up to 200 characters. Default ``. |
toAddress.city | string | Up to 100 characters. |
toAddress.state | string | Up to 100 characters. Default ``. |
toAddress.zip | string | Up to 20 characters. |
toAddress.country | string | Default US. |
toAddress.phone | string | Up to 40 characters. Default ``. |
toAddress.email | string | Up to 254 characters. Default ``. |
fromAddress | object | |
fromAddress.name | string | Up to 200 characters. Default ``. |
fromAddress.company | string | Up to 200 characters. Default ``. |
fromAddress.street1 | string | Up to 200 characters. |
fromAddress.street2 | string | Up to 200 characters. Default ``. |
fromAddress.city | string | Up to 100 characters. |
fromAddress.state | string | Up to 100 characters. Default ``. |
fromAddress.zip | string | Up to 20 characters. |
fromAddress.country | string | Default US. |
fromAddress.phone | string | Up to 40 characters. Default ``. |
fromAddress.email | string | Up to 254 characters. Default ``. |
parcel | object | |
parcel.lengthIn | number | At most 200. |
parcel.widthIn | number | At most 200. |
parcel.heightIn | number | At most 200. |
parcel.weightOz | number | At most 2400. |
rates | array of object | |
rates[].id | string | Buy it with POST …/shipments/{shipmentId}/buy. |
rates[].carrier | string | |
rates[].service | string | |
rates[].postageCents | integer | What the shipping account is charged. |
rates[].priceCents | integer | What the business pays: the postage, or postage × markup on SKUFlow's account. |
rates[].currency | string | |
rates[].deliveryDays | number or null | |
rates[].estimatedDelivery | string or null | |
carrier | string or null | |
service | string or null | |
trackingNumber | string or null | |
trackingUrl | string or null | |
labelUrl | string or null | The label (PDF) to print. |
postageCents | integer or null | |
priceCents | integer or null | |
estimatedDelivery | string or null | |
statusDetail | string or null | |
purchasedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
deliveredAt | string (date-time) or null | |
voidable | boolean | |
order | object or null | |
order.id | string | |
order.identifier | string | |
storeOrder | object or null | |
storeOrder.id | string | |
storeOrder.identifier | string | |
events | array of object | |
events[].id | string | |
events[].status | enum or null | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
events[].message | string or null | |
events[].location | string or null | |
events[].occurredAt | string (date-time) | |
createdAt | string (date-time) |
Refresh tracking
POST /organizations/{organizationId}/shipments/{shipmentId}/track
Reads the package's tracking from the provider now (webhooks and the tick do it on their own). The order follows: shipped once the carrier has a package, completed when all are delivered.
| Permission | shipping.labels (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | shipments_track (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
shipmentId | path | string | Yes |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/shipments/{shipmentId}/track" \
-H "Authorization: Bearer $SKUFLOW_API_KEY"Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Shipment id. |
identifier | string | SHP-n. |
orderId | string or null | |
storeOrderId | string or null | |
customerId | string or null | |
status | enum | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
mode | enum | MANAGED (SKUFlow's account) or OWN (the business's). One of MANAGED, OWN. |
provider | string | |
toAddress | object | |
toAddress.name | string | Up to 200 characters. Default ``. |
toAddress.company | string | Up to 200 characters. Default ``. |
toAddress.street1 | string | Up to 200 characters. |
toAddress.street2 | string | Up to 200 characters. Default ``. |
toAddress.city | string | Up to 100 characters. |
toAddress.state | string | Up to 100 characters. Default ``. |
toAddress.zip | string | Up to 20 characters. |
toAddress.country | string | Default US. |
toAddress.phone | string | Up to 40 characters. Default ``. |
toAddress.email | string | Up to 254 characters. Default ``. |
fromAddress | object | |
fromAddress.name | string | Up to 200 characters. Default ``. |
fromAddress.company | string | Up to 200 characters. Default ``. |
fromAddress.street1 | string | Up to 200 characters. |
fromAddress.street2 | string | Up to 200 characters. Default ``. |
fromAddress.city | string | Up to 100 characters. |
fromAddress.state | string | Up to 100 characters. Default ``. |
fromAddress.zip | string | Up to 20 characters. |
fromAddress.country | string | Default US. |
fromAddress.phone | string | Up to 40 characters. Default ``. |
fromAddress.email | string | Up to 254 characters. Default ``. |
parcel | object | |
parcel.lengthIn | number | At most 200. |
parcel.widthIn | number | At most 200. |
parcel.heightIn | number | At most 200. |
parcel.weightOz | number | At most 2400. |
rates | array of object | |
rates[].id | string | Buy it with POST …/shipments/{shipmentId}/buy. |
rates[].carrier | string | |
rates[].service | string | |
rates[].postageCents | integer | What the shipping account is charged. |
rates[].priceCents | integer | What the business pays: the postage, or postage × markup on SKUFlow's account. |
rates[].currency | string | |
rates[].deliveryDays | number or null | |
rates[].estimatedDelivery | string or null | |
carrier | string or null | |
service | string or null | |
trackingNumber | string or null | |
trackingUrl | string or null | |
labelUrl | string or null | The label (PDF) to print. |
postageCents | integer or null | |
priceCents | integer or null | |
estimatedDelivery | string or null | |
statusDetail | string or null | |
purchasedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
deliveredAt | string (date-time) or null | |
voidable | boolean | |
order | object or null | |
order.id | string | |
order.identifier | string | |
storeOrder | object or null | |
storeOrder.id | string | |
storeOrder.identifier | string | |
events | array of object | |
events[].id | string | |
events[].status | enum or null | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
events[].message | string or null | |
events[].location | string or null | |
events[].occurredAt | string (date-time) | |
createdAt | string (date-time) |
Move a test shipment
POST /organizations/{organizationId}/shipments/{shipmentId}/simulate
Test labels only (SKUFLOW_SHIPPING=fake): moves the shipment as if the carrier had scanned it (IN_TRANSIT, DELIVERED…), with what follows for the order. 409 for real labels.
| Permission | shipping.labels (Owner, Admin, Staff) |
| Risk | write, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it. |
| MCP tool | shipments_simulate (toolset orders) |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
shipmentId | path | string | Yes |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
status | enum | Yes | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
Example
curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/shipments/{shipmentId}/simulate" \
-H "Authorization: Bearer $SKUFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"DRAFT"}'Response
200: the answer's fields
| Field | Type | Description |
|---|---|---|
id | string | Shipment id. |
identifier | string | SHP-n. |
orderId | string or null | |
storeOrderId | string or null | |
customerId | string or null | |
status | enum | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
mode | enum | MANAGED (SKUFlow's account) or OWN (the business's). One of MANAGED, OWN. |
provider | string | |
toAddress | object | |
toAddress.name | string | Up to 200 characters. Default ``. |
toAddress.company | string | Up to 200 characters. Default ``. |
toAddress.street1 | string | Up to 200 characters. |
toAddress.street2 | string | Up to 200 characters. Default ``. |
toAddress.city | string | Up to 100 characters. |
toAddress.state | string | Up to 100 characters. Default ``. |
toAddress.zip | string | Up to 20 characters. |
toAddress.country | string | Default US. |
toAddress.phone | string | Up to 40 characters. Default ``. |
toAddress.email | string | Up to 254 characters. Default ``. |
fromAddress | object | |
fromAddress.name | string | Up to 200 characters. Default ``. |
fromAddress.company | string | Up to 200 characters. Default ``. |
fromAddress.street1 | string | Up to 200 characters. |
fromAddress.street2 | string | Up to 200 characters. Default ``. |
fromAddress.city | string | Up to 100 characters. |
fromAddress.state | string | Up to 100 characters. Default ``. |
fromAddress.zip | string | Up to 20 characters. |
fromAddress.country | string | Default US. |
fromAddress.phone | string | Up to 40 characters. Default ``. |
fromAddress.email | string | Up to 254 characters. Default ``. |
parcel | object | |
parcel.lengthIn | number | At most 200. |
parcel.widthIn | number | At most 200. |
parcel.heightIn | number | At most 200. |
parcel.weightOz | number | At most 2400. |
rates | array of object | |
rates[].id | string | Buy it with POST …/shipments/{shipmentId}/buy. |
rates[].carrier | string | |
rates[].service | string | |
rates[].postageCents | integer | What the shipping account is charged. |
rates[].priceCents | integer | What the business pays: the postage, or postage × markup on SKUFlow's account. |
rates[].currency | string | |
rates[].deliveryDays | number or null | |
rates[].estimatedDelivery | string or null | |
carrier | string or null | |
service | string or null | |
trackingNumber | string or null | |
trackingUrl | string or null | |
labelUrl | string or null | The label (PDF) to print. |
postageCents | integer or null | |
priceCents | integer or null | |
estimatedDelivery | string or null | |
statusDetail | string or null | |
purchasedAt | string (date-time) or null | |
shippedAt | string (date-time) or null | |
deliveredAt | string (date-time) or null | |
voidable | boolean | |
order | object or null | |
order.id | string | |
order.identifier | string | |
storeOrder | object or null | |
storeOrder.id | string | |
storeOrder.identifier | string | |
events | array of object | |
events[].id | string | |
events[].status | enum or null | DRAFT (rates only), PURCHASED (label bought), PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. One of DRAFT, PURCHASED, PRE_TRANSIT, IN_TRANSIT, OUT_FOR_DELIVERY, AVAILABLE_FOR_PICKUP, DELIVERED, RETURNED, FAILURE, CANCELLED, VOIDED. |
events[].message | string or null | |
events[].location | string or null | |
events[].occurredAt | string (date-time) | |
createdAt | string (date-time) |