Inventory

Contract approved · validation in progress

Always applies integration warehouse restrictions. Shipping-only credentials receive origin/capability metadata, not inventory balances.

Required permissions
{
  "anyOf": [
    {
      "allOf": [
        "inventory.read"
      ]
    },
    {
      "allOf": [
        "fulfillments.read"
      ]
    },
    {
      "allOf": [
        "rates.read"
      ]
    }
  ]
}
Parameters
cursor
query · 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.
limit
query · Optional
integer
updatedAfter
query · 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
200Success.
400Malformed JSON, unsupported query or invalid request syntax.
401Missing, invalid, expired or revoked API key credential.
403Scope, 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.
404Resource absent or not visible in the authorized tenant/environment.
409Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds.
422Field/business validation failed; details identify invalid fields.
429Rate or paid-service limit exceeded. Respect Retry-After.
500Unexpected server error; use requestId and query operation before retrying a side effect.
503Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation.
Download V2 contract (JSON)

Discover locations in authorized warehouses.

Required permissions
{
  "anyOf": [
    {
      "allOf": [
        "inventory.read"
      ]
    }
  ]
}
Parameters
cursor
query · 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.
limit
query · Optional
integer
updatedAfter
query · 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.
warehouseId
query · Optional
string
type
query · Optional
string
Response
200Success.
400Malformed JSON, unsupported query or invalid request syntax.
401Missing, invalid, expired or revoked API key credential.
403Scope, 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.
404Resource absent or not visible in the authorized tenant/environment.
409Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds.
422Field/business validation failed; details identify invalid fields.
429Rate or paid-service limit exceeded. Respect Retry-After.
500Unexpected server error; use requestId and query operation before retrying a side effect.
503Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation.
Download V2 contract (JSON)

Read product-by-warehouse stock balances. Incremental updatedAfter follows persisted balance-row changes. Derived supply or pick allocations are evaluated at read time and may change without advancing that row timestamp; periodically perform a full read for these derived quantities. Opaque version values support equality checks, not numeric ordering.

Required permissions
{
  "anyOf": [
    {
      "allOf": [
        "inventory.read"
      ]
    }
  ]
}
Parameters
cursor
query · 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.
limit
query · Optional
integer
updatedAfter
query · 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.
warehouseId
query · Optional
string
productId
query · Optional
string
Response
200Success.
400Malformed JSON, unsupported query or invalid request syntax.
401Missing, invalid, expired or revoked API key credential.
403Scope, 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.
404Resource absent or not visible in the authorized tenant/environment.
409Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds.
422Field/business validation failed; details identify invalid fields.
429Rate or paid-service limit exceeded. Respect Retry-After.
500Unexpected server error; use requestId and query operation before retrying a side effect.
503Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation.
Download V2 contract (JSON)

Read location-level physical stock. Incremental updatedAfter follows persisted balance-row changes. Derived supply or pick allocations are evaluated at read time and may change without advancing that row timestamp; periodically perform a full read for these derived quantities. Opaque version values support equality checks, not numeric ordering.

Required permissions
{
  "anyOf": [
    {
      "allOf": [
        "inventory.read"
      ]
    }
  ]
}
Parameters
cursor
query · 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.
limit
query · Optional
integer
updatedAfter
query · 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.
warehouseId
query · Optional
string
productId
query · Optional
string
locationId
query · Optional
string
Response
200Success.
400Malformed JSON, unsupported query or invalid request syntax.
401Missing, invalid, expired or revoked API key credential.
403Scope, 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.
404Resource absent or not visible in the authorized tenant/environment.
409Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds.
422Field/business validation failed; details identify invalid fields.
429Rate or paid-service limit exceeded. Respect Retry-After.
500Unexpected server error; use requestId and query operation before retrying a side effect.
503Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation.
Download V2 contract (JSON)

Stable order by occurredAt,id. No transaction mutation endpoints. These records represent executed business changes, not requested future quantities. Source order, fulfillment and store references must also be within the credential resource restrictions before pagination. A restricted ledger may contain fewer rows than the full physical warehouse ledger; stock quantities are never reduced to match those visible rows.

Required permissions
{
  "anyOf": [
    {
      "allOf": [
        "inventory.read"
      ]
    }
  ]
}
Parameters
cursor
query · 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.
limit
query · Optional
integer
warehouseId
query · Optional
string
productId
query · Optional
string
locationId
query · Optional
string
occurredAfter
query · Optional
string
sourceId
query · Optional
string
Response
200Success.
400Malformed JSON, unsupported query or invalid request syntax.
401Missing, invalid, expired or revoked API key credential.
403Scope, 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.
404Resource absent or not visible in the authorized tenant/environment.
409Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds.
422Field/business validation failed; details identify invalid fields.
429Rate or paid-service limit exceeded. Respect Retry-After.
500Unexpected server error; use requestId and query operation before retrying a side effect.
503Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation.
Download V2 contract (JSON)

Apply an atomic guarded stock adjustment.

Required permissions
{
  "anyOf": [
    {
      "allOf": [
        "inventory.adjust"
      ]
    }
  ]
}
Parameters
Idempotency-Key
header · 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
warehouseId
string · Required
Stable Shipbuy resource identifier serialized as a string. Treat as opaque; never confuse with a carrier identifier or display number.
reasonCode
string · Required
["correction","damage","loss"]
reason
string · Required
lines
array · Required
{
  "warehouseId": "10",
  "reasonCode": "correction",
  "reason": "Cycle check found two additional units",
  "lines": [
    {
      "productId": "501",
      "locationId": "22",
      "mode": "delta",
      "quantityDelta": 2,
      "expectedOnHand": 20
    }
  ]
}
Response
201Success.
400Malformed JSON, unsupported query or invalid request syntax.
401Missing, invalid, expired or revoked API key credential.
403Scope, 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.
404Resource absent or not visible in the authorized tenant/environment.
409Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds.
422Field/business validation failed; details identify invalid fields.
429Rate or paid-service limit exceeded. Respect Retry-After.
500Unexpected server error; use requestId and query operation before retrying a side effect.
503Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation.
Download V2 contract (JSON)

Create a manual warehouse-level stock hold.

Required permissions
{
  "anyOf": [
    {
      "allOf": [
        "inventory.reserve"
      ]
    }
  ]
}
Parameters
Idempotency-Key
header · 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
warehouseId
string · Required
Stable Shipbuy resource identifier serialized as a string. Treat as opaque; never confuse with a carrier identifier or display number.
productId
string · Required
Stable Shipbuy resource identifier serialized as a string. Treat as opaque; never confuse with a carrier identifier or display number.
quantity
integer · Required
reason
string · Required
expiresAt
string · Optional
UTC date/time, exactly yyyy-MM-dd HH:mm:ss. This project convention deliberately is not RFC 3339; all time zones are UTC unless a field explicitly says local calendar date.
{
  "warehouseId": "10",
  "productId": "501",
  "quantity": 3,
  "reason": "Reserved for upcoming promotion",
  "expiresAt": "2026-11-03 18:00:00"
}
Response
201Success.
400Malformed JSON, unsupported query or invalid request syntax.
401Missing, invalid, expired or revoked API key credential.
403Scope, 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.
404Resource absent or not visible in the authorized tenant/environment.
409Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds.
422Field/business validation failed; details identify invalid fields.
429Rate or paid-service limit exceeded. Respect Retry-After.
500Unexpected server error; use requestId and query operation before retrying a side effect.
503Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation.
Download V2 contract (JSON)

Only active manual holds; fully released/expired rows are not retained as resources by the current model. Audit/operation receipts are separate. Fulfillment holds are not editable here.

Required permissions
{
  "anyOf": [
    {
      "allOf": [
        "inventory.read"
      ]
    }
  ]
}
Parameters
cursor
query · 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.
limit
query · Optional
integer
updatedAfter
query · 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.
warehouseId
query · Optional
string
productId
query · Optional
string
Response
200Success.
400Malformed JSON, unsupported query or invalid request syntax.
401Missing, invalid, expired or revoked API key credential.
403Scope, 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.
404Resource absent or not visible in the authorized tenant/environment.
409Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds.
422Field/business validation failed; details identify invalid fields.
429Rate or paid-service limit exceeded. Respect Retry-After.
500Unexpected server error; use requestId and query operation before retrying a side effect.
503Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation.
Download V2 contract (JSON)

Release all or part of a manual stock hold.

Required permissions
{
  "anyOf": [
    {
      "allOf": [
        "inventory.reserve"
      ]
    }
  ]
}
Parameters
reservationId
path · Required
string
Idempotency-Key
header · 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
quantity
integer · Optional
reason
string · Required
{
  "quantity": 1,
  "reason": "Promotion requirement reduced"
}
Response
201Success.
400Malformed JSON, unsupported query or invalid request syntax.
401Missing, invalid, expired or revoked API key credential.
403Scope, 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.
404Resource absent or not visible in the authorized tenant/environment.
409Business conflict, changed idempotency payload, stale quote, pending side effect or insufficient stock/funds.
422Field/business validation failed; details identify invalid fields.
429Rate or paid-service limit exceeded. Respect Retry-After.
500Unexpected server error; use requestId and query operation before retrying a side effect.
503Service temporarily unavailable; upstream outcome may be unknown, query/replay the operation.
Download V2 contract (JSON)