Shipping
Only accounts allowed by the authenticated integration, environment and tenant. Includes customer-facing services/packaging capabilities; never internal credentials or provider cost.
Required permissions
{
"anyOf": [
{
"allOf": [
"rates.read"
]
}
]
}Parameters
cursorquery · Optional | Opaque continuation bound to tenant/environment/integration scope, filters, snapshot high-watermark and stable sort (updatedAt,id or documented resource-specific sort). Do not alter filters between pages. Incremental synchronization must include archive/deletion tombstones within the published retention window; snapshot expiry fails explicitly and requires a new scan. |
|---|---|
limitquery · Optional | integer |
updatedAfterquery · Optional | Exclusive UTC updated-time lower bound. For incremental sync keep a small overlap and deduplicate by id/version; cursor is authoritative within a scan. |
Response
200 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
The implementation being validated supports standalone shipping in USD only. fulfillment and order_fulfillment sources, and nonzero insuredValue, return unsupported_capability until those capabilities are available.
source is exactly one of standalone, fulfillment or an explicit order+fulfillment association. All source resource IDs and shipping accounts must fit the integration scope. Fulfillment sources additionally require fulfillments.read (order_fulfillment also orders.read). Result may contain partial carrier failures; each returned rate covers all packages.
Required permissions
{
"anyOf": [
{
"allOf": [
"rates.read"
]
}
]
}{
"source.kind=fulfillment": [
"fulfillments.read"
],
"source.kind=order_fulfillment": [
"orders.read",
"fulfillments.read"
]
}Parameters
Idempotency-Keyheader · Required | Required on every business write, including quotes, verification and DELETE. New logical action=new key; retry=same key and canonical payload. Namespace account+environment+stable integrationId+HTTP method+canonical path; credential rotation within one integration preserves integrationId. Same key/different payload=409. Lookup follows authentication/resource authorization and precedes If-Match/freshness checks so a completed retry returns its first result. General receipts retained >=7 days; financial/inventory side effects retain durable business association or tombstone beyond receipt expiry to prevent re-execution. In-flight/unknown result returns its operation, never a blind repurchase. Secret-creation responses are the deliberate exception to identical replay: the resource is replayed, but its one-time secret is null with secretUnavailable=true; use management rotation to recover. |
|---|
Request
sourceoneOf · Required | |
|---|---|
shippingAccountIdsarray · Optional | |
serviceCodesarray · Optional |
{
"source": {
"kind": "standalone",
"shipping": {
"shipFrom": {
"name": "Warehouse",
"street1": "123 Market St",
"city": "San Francisco",
"state": "CA",
"postalCode": "94103",
"country": "US",
"phone": "4155550100",
"residential": false
},
"shipTo": {
"name": "Alex Chen",
"street1": "456 Pine St",
"city": "Seattle",
"state": "WA",
"postalCode": "98101",
"country": "US",
"phone": "2065550100",
"residential": true
},
"packages": [
{
"packageNo": 1,
"length": "12",
"width": "9",
"height": "3",
"weight": "2",
"dimensionUnit": "in",
"weightUnit": "lb",
"shape": "box"
}
],
"reference": "ERP-SHIP-1001"
}
},
"shippingAccountIds": [
"41"
]
}Response
201 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
The implementation being validated purchases standalone quotes only. Fulfillment-bound purchases and insured shipments remain unavailable until their corresponding integrations are implemented and verified.
Server validates immutable quote binding, expiry, current permissions, fulfillment version/readiness, policy, wallet and carrier capability before purchase. A fulfillment-origin purchase additionally requires fulfillments.write. If the current account mark_shipped_trigger or another existing business rule will automatically confirm shipment/decrement inventory, fulfillments.ship is also required before ANY carrier call; absent permission returns 403, never skips that side effect or implicitly grants it from labels.buy. One purchase produces a shipment with one or more packages. Each frozen quote binds durably to one purchase operation before the carrier call; changing the Idempotency-Key or selecting another rate from that quote cannot start another purchase. Quote expiry does not release that binding; a different purchase request remains operation_pending. Retry the original key to recover its operation/result. An intentional new shipment requires a new quote and a new key; do not create a replacement quote to retry an unknown purchase. Unknown carrier outcome is needs_review, never automatically a second purchase.
Required permissions
{
"anyOf": [
{
"allOf": [
"labels.buy"
]
}
]
}{
"quote.source.kind in [fulfillment,order_fulfillment]": [
"fulfillments.write"
],
"existing_business_rule_will_auto_ship": [
"fulfillments.ship"
]
}Parameters
Idempotency-Keyheader · Required | Required on every business write, including quotes, verification and DELETE. New logical action=new key; retry=same key and canonical payload. Namespace account+environment+stable integrationId+HTTP method+canonical path; credential rotation within one integration preserves integrationId. Same key/different payload=409. Lookup follows authentication/resource authorization and precedes If-Match/freshness checks so a completed retry returns its first result. General receipts retained >=7 days; financial/inventory side effects retain durable business association or tombstone beyond receipt expiry to prevent re-execution. In-flight/unknown result returns its operation, never a blind repurchase. Secret-creation responses are the deliberate exception to identical replay: the resource is replayed, but its one-time secret is null with secretUnavailable=true; use management rotation to recover. |
|---|
Request
quoteIdstring · Required | Stable Shipbuy resource identifier serialized as a string. Treat as opaque; never confuse with a carrier identifier or display number. |
|---|---|
rateIdstring · Required | Stable Shipbuy resource identifier serialized as a string. Treat as opaque; never confuse with a carrier identifier or display number. |
referencestring · Optional |
{
"quoteId": "quote_301",
"rateId": "rate_302",
"reference": "ERP-SHIP-1001"
}Response
201 | Success. |
|---|---|
202 | Accepted; poll Location or GET /operations/{id}. |
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
List visible shipments.
Required permissions
{
"anyOf": [
{
"allOf": [
"shipments.read"
]
}
]
}Parameters
cursorquery · Optional | Opaque continuation bound to tenant/environment/integration scope, filters, snapshot high-watermark and stable sort (updatedAt,id or documented resource-specific sort). Do not alter filters between pages. Incremental synchronization must include archive/deletion tombstones within the published retention window; snapshot expiry fails explicitly and requires a new scan. |
|---|---|
limitquery · Optional | integer |
updatedAfterquery · Optional | Exclusive UTC updated-time lower bound. For incremental sync keep a small overlap and deduplicate by id/version; cursor is authoritative within a scan. |
warehouseIdquery · Optional | string |
shippingAccountIdquery · Optional | string |
referencequery · Optional | string |
trackingNumberquery · Optional | string |
fulfillmentIdquery · Optional | string |
statusquery · Optional | string |
Response
200 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
Retrieve a shipment and all packages.
Required permissions
{
"anyOf": [
{
"allOf": [
"shipments.read"
]
}
]
}Parameters
shipmentIdpath · Required | string |
|---|
Response
200 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
Returns persisted valid documents with refreshed signed URLs, including after an original purchase response was lost. Historical voided-label access is visibly marked by the owning shipment/package status; never suggests it is valid for shipping.
Required permissions
{
"anyOf": [
{
"allOf": [
"shipments.read"
]
}
]
}Parameters
shipmentIdpath · Required | string |
|---|---|
cursorquery · Optional | Opaque continuation bound to tenant/environment/integration scope, filters, snapshot high-watermark and stable sort (updatedAt,id or documented resource-specific sort). Do not alter filters between pages. Incremental synchronization must include archive/deletion tombstones within the published retention window; snapshot expiry fails explicitly and requires a new scan. |
limitquery · Optional | integer |
typequery · Optional | string |
Response
200 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
Package subset is explicit; whole-shipment providers reject subsets. Void acceptance, label lifecycle and wallet/carrier refund completion are distinct. Refund cannot exceed actual collected amounts. Partial successes are durable and replayable; no rollback claim for already completed carrier actions. A fulfillment-linked void additionally requires fulfillments.write. If existing rules can revert shipment and restore inventory/reservations, fulfillments.ship is also required before the carrier call. Missing authority returns 403; never skip the existing reversal rules or silently broaden labels.void into inventory authority.
Required permissions
{
"anyOf": [
{
"allOf": [
"labels.void"
]
}
]
}{
"shipment_has_fulfillment": [
"fulfillments.write"
],
"existing_business_rule_may_revert_shipment": [
"fulfillments.ship"
]
}Parameters
shipmentIdpath · Required | string |
|---|---|
Idempotency-Keyheader · Required | Required on every business write, including quotes, verification and DELETE. New logical action=new key; retry=same key and canonical payload. Namespace account+environment+stable integrationId+HTTP method+canonical path; credential rotation within one integration preserves integrationId. Same key/different payload=409. Lookup follows authentication/resource authorization and precedes If-Match/freshness checks so a completed retry returns its first result. General receipts retained >=7 days; financial/inventory side effects retain durable business association or tombstone beyond receipt expiry to prevent re-execution. In-flight/unknown result returns its operation, never a blind repurchase. Secret-creation responses are the deliberate exception to identical replay: the resource is replayed, but its one-time secret is null with secretUnavailable=true; use management rotation to recover. |
Request
packageIdsarray · Optional | |
|---|---|
reasonstring · Required |
{
"reason": "Customer canceled before handover"
}Response
201 | Success. |
|---|---|
202 | Accepted; poll Location or GET /operations/{id}. |
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
Cached tracking for an authorized package. Included basic tracking for Shipbuy-purchased labels does not create a paid external tracker. No immediate upstream call is caused by repeated reads.
Required permissions
{
"anyOf": [
{
"allOf": [
"tracking.read"
]
}
]
}Parameters
packageIdpath · Required | string |
|---|
Response
200 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
Register an external tracking number. Commercial gate: new live actions are disabled until the service price and quota policy are confirmed. Return 403/service_not_enabled before any upstream call, new fee or accrued amount; never silently execute for free. This is independent of the API key scope check. Test simulation and authorized completed-idempotency replay remain available without new charges. No public product-enablement API is provided.
Required permissions
{
"anyOf": [
{
"allOf": [
"tracking.subscribe"
]
}
]
}Parameters
Idempotency-Keyheader · Required | Required on every business write, including quotes, verification and DELETE. New logical action=new key; retry=same key and canonical payload. Namespace account+environment+stable integrationId+HTTP method+canonical path; credential rotation within one integration preserves integrationId. Same key/different payload=409. Lookup follows authentication/resource authorization and precedes If-Match/freshness checks so a completed retry returns its first result. General receipts retained >=7 days; financial/inventory side effects retain durable business association or tombstone beyond receipt expiry to prevent re-execution. In-flight/unknown result returns its operation, never a blind repurchase. Secret-creation responses are the deliberate exception to identical replay: the resource is replayed, but its one-time secret is null with secretUnavailable=true; use management rotation to recover. |
|---|
Request
carrierstring · Required | |
|---|---|
trackingNumberstring · Required | |
shipDatestring · Required | Calendar date yyyy-MM-dd; shipping dates use the ship-from warehouse time zone, or the account time zone for custom origins. |
referencestring · Optional | |
metadataobject · Optional | Client-owned string metadata only. No secrets or card data. Not used for authorization or business rules. |
{
"carrier": "ups",
"trackingNumber": "1Z999AA10123456784",
"shipDate": "2026-11-01",
"reference": "EXTERNAL-1001"
}Response
201 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | API key/resource permission denied, or live new-action capability has not been commercially enabled. service_not_enabled means no upstream call and no new fee/accrual occurred. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
List external tracking registrations.
Required permissions
{
"anyOf": [
{
"allOf": [
"tracking.read"
]
}
]
}Parameters
cursorquery · Optional | Opaque continuation bound to tenant/environment/integration scope, filters, snapshot high-watermark and stable sort (updatedAt,id or documented resource-specific sort). Do not alter filters between pages. Incremental synchronization must include archive/deletion tombstones within the published retention window; snapshot expiry fails explicitly and requires a new scan. |
|---|---|
limitquery · Optional | integer |
updatedAfterquery · Optional | Exclusive UTC updated-time lower bound. For incremental sync keep a small overlap and deduplicate by id/version; cursor is authoritative within a scan. |
referencequery · Optional | string |
carrierquery · Optional | string |
trackingNumberquery · Optional | string |
Response
200 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
Retrieve an external tracker and history.
Required permissions
{
"anyOf": [
{
"allOf": [
"tracking.read"
]
}
]
}Parameters
trackerIdpath · Required | string |
|---|
Response
200 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
Preflight shipments eligible for a manifest. Determine the ship date from persisted shipping options.shipDate first, then shippedAt. An unknown or mismatched date returns eligible=false with an issue; never infer the ship date from label creation time.
Required permissions
{
"anyOf": [
{
"allOf": [
"manifests.read"
]
}
]
}Parameters
cursorquery · Optional | Opaque continuation bound to tenant/environment/integration scope, filters, snapshot high-watermark and stable sort (updatedAt,id or documented resource-specific sort). Do not alter filters between pages. Incremental synchronization must include archive/deletion tombstones within the published retention window; snapshot expiry fails explicitly and requires a new scan. |
|---|---|
limitquery · Optional | integer |
shippingAccountIdquery · Required | string |
warehouseIdquery · Optional | string |
shipDatequery · Required | string |
Response
200 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
Create one manifest for a compatible shipment group.
Required permissions
{
"anyOf": [
{
"allOf": [
"manifests.write"
]
}
]
}Parameters
Idempotency-Keyheader · Required | Required on every business write, including quotes, verification and DELETE. New logical action=new key; retry=same key and canonical payload. Namespace account+environment+stable integrationId+HTTP method+canonical path; credential rotation within one integration preserves integrationId. Same key/different payload=409. Lookup follows authentication/resource authorization and precedes If-Match/freshness checks so a completed retry returns its first result. General receipts retained >=7 days; financial/inventory side effects retain durable business association or tombstone beyond receipt expiry to prevent re-execution. In-flight/unknown result returns its operation, never a blind repurchase. Secret-creation responses are the deliberate exception to identical replay: the resource is replayed, but its one-time secret is null with secretUnavailable=true; use management rotation to recover. |
|---|
Request
shipmentIdsarray · Required | |
|---|---|
shipDatestring · Required | Calendar date yyyy-MM-dd; shipping dates use the ship-from warehouse time zone, or the account time zone for custom origins. |
{
"shipmentIds": [
"301",
"302"
],
"shipDate": "2026-11-01"
}Response
201 | Success. |
|---|---|
202 | Accepted; poll Location or GET /operations/{id}. |
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
List manifests.
Required permissions
{
"anyOf": [
{
"allOf": [
"manifests.read"
]
}
]
}Parameters
cursorquery · Optional | Opaque continuation bound to tenant/environment/integration scope, filters, snapshot high-watermark and stable sort (updatedAt,id or documented resource-specific sort). Do not alter filters between pages. Incremental synchronization must include archive/deletion tombstones within the published retention window; snapshot expiry fails explicitly and requires a new scan. |
|---|---|
limitquery · Optional | integer |
updatedAfterquery · Optional | Exclusive UTC updated-time lower bound. For incremental sync keep a small overlap and deduplicate by id/version; cursor is authoritative within a scan. |
warehouseIdquery · Optional | string |
shippingAccountIdquery · Optional | string |
Response
200 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
Retrieve a manifest and recovery state.
Required permissions
{
"anyOf": [
{
"allOf": [
"manifests.read"
]
}
]
}Parameters
manifestIdpath · Required | string |
|---|
Response
200 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
Retrieve manifest PDF links.
Required permissions
{
"anyOf": [
{
"allOf": [
"manifests.read"
]
}
]
}Parameters
manifestIdpath · Required | string |
|---|---|
cursorquery · Optional | Opaque continuation bound to tenant/environment/integration scope, filters, snapshot high-watermark and stable sort (updatedAt,id or documented resource-specific sort). Do not alter filters between pages. Incremental synchronization must include archive/deletion tombstones within the published retention window; snapshot expiry fails explicitly and requires a new scan. |
limitquery · Optional | integer |
Response
200 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
Only local membership release; does not void the carrier document. Unknown/partial/document-failed results remain occupied and return 409 until reconciliation. Must not be presented as carrier cancellation.
Required permissions
{
"anyOf": [
{
"allOf": [
"manifests.write"
]
}
]
}Parameters
manifestIdpath · Required | string |
|---|---|
Idempotency-Keyheader · Required | Required on every business write, including quotes, verification and DELETE. New logical action=new key; retry=same key and canonical payload. Namespace account+environment+stable integrationId+HTTP method+canonical path; credential rotation within one integration preserves integrationId. Same key/different payload=409. Lookup follows authentication/resource authorization and precedes If-Match/freshness checks so a completed retry returns its first result. General receipts retained >=7 days; financial/inventory side effects retain durable business association or tombstone beyond receipt expiry to prevent re-execution. In-flight/unknown result returns its operation, never a blind repurchase. Secret-creation responses are the deliberate exception to identical replay: the resource is replayed, but its one-time secret is null with secretUnavailable=true; use management rotation to recover. |
Request
reasonstring · Required |
|---|
{
"reason": "Reorganize local manifest group"
}Response
200 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
Verify a postal address without changing saved records. Commercial gate: new live actions are disabled until the service price and quota policy are confirmed. Return 403/service_not_enabled before any upstream call, new fee or accrued amount; never silently execute for free. This is independent of the API key scope check. Test simulation and authorized completed-idempotency replay remain available without new charges. No public product-enablement API is provided.
Required permissions
{
"anyOf": [
{
"allOf": [
"addresses.verify"
]
}
]
}Parameters
Idempotency-Keyheader · Required | Required on every business write, including quotes, verification and DELETE. New logical action=new key; retry=same key and canonical payload. Namespace account+environment+stable integrationId+HTTP method+canonical path; credential rotation within one integration preserves integrationId. Same key/different payload=409. Lookup follows authentication/resource authorization and precedes If-Match/freshness checks so a completed retry returns its first result. General receipts retained >=7 days; financial/inventory side effects retain durable business association or tombstone beyond receipt expiry to prevent re-execution. In-flight/unknown result returns its operation, never a blind repurchase. Secret-creation responses are the deliberate exception to identical replay: the resource is replayed, but its one-time secret is null with secretUnavailable=true; use management rotation to recover. |
|---|
Request
addressobject · Required | Original address is preserved. Country-specific postal validation and carrier print-field limits are separate checks; do not silently truncate. Residential null means unknown. |
|---|
{
"address": {
"name": "Alex Chen",
"street1": "456 Pine St",
"city": "Seattle",
"state": "WA",
"postalCode": "98101",
"country": "US",
"phone": "2065550100",
"residential": true
}
}Response
201 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | API key/resource permission denied, or live new-action capability has not been commercially enabled. service_not_enabled means no upstream call and no new fee/accrual occurred. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |
Authorization must match this operation type (purchase:labels.buy; void:labels.void; manifest:manifests.write; ship:fulfillments.ship), integration identity and resource restrictions. Possessing a different listed scope does not grant access. Completed label purchases remain recoverable after response loss; documents may carry freshly signed links.
Required permissions
{
"anyOf": [
{
"allOf": [
"labels.buy"
]
},
{
"allOf": [
"labels.void"
]
},
{
"allOf": [
"manifests.write"
]
},
{
"allOf": [
"fulfillments.ship"
]
}
]
}Parameters
operationIdpath · Required | string |
|---|
Response
200 | Success. |
|---|---|
400 | Malformed JSON, unsupported query or invalid request syntax. |
401 | Missing, invalid, expired or revoked API key credential. |
403 | Scope, tenant/environment/warehouse/carrier-account constraint or plan entitlement denied. New live external-tracker registration and standalone address verification also return service_not_enabled until price and quota policies are confirmed; no upstream call or new fee/accrual is permitted. |
404 | Resource absent or not visible in the authorized tenant/environment. |
409 | Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds. |
422 | Field/business validation failed; details identify invalid fields. |
429 | Rate or paid-service limit exceeded. Respect Retry-After. |
500 | Unexpected server error; use requestId and query operation before retrying a side effect. |
503 | Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation. |