Vault by Stashtab API
The Vault by Stashtab API lets partner applications declare expected arrivals, observe every physical item held in custody, request parcel fulfillment or withdrawal, transfer items through supported exit paths, and receive signed event notifications. Responses are suitable for mirroring into partner systems.
Authentication
Every request is authenticated with an API key in the X-API-Key header.
Keys are managed in the partner console, are named, may carry an expiry, and
can be deactivated at any time. Keys must only be used server-side.
Idempotency
Every POST accepts an Idempotency-Key header. Reusing the same key on the
same endpoint returns the original result instead of repeating the action.
Keys are retained long enough for any reasonable retry policy.
Forward compatibility
Within v1, new fields, enum values, error codes, item types, and endpoints are non-breaking additions. Clients must tolerate values they do not yet know. Breaking changes use a new version prefix and are announced in advance.
Environments & data partitioning
Production and sandbox use separate hosts and fully partitioned data.
sk_live_* keys work only on production and sk_test_* keys work only on
sandbox. Using a key on the wrong host returns 401 environment_mismatch.
A QID from the other environment returns a plain 404 so existence is not
disclosed.
Error codes
Errors use a stable machine-readable vocabulary: validation_error,
state_conflict, environment_mismatch, unsupported_destination,
invalid_api_key, not_found, and rate_limited. Each operation lists
its possible HTTP error codes in x-error-codes; partial-success batch responses
carry row-result codes in their result body.
Pagination
Bounded collections use a page envelope with page and page_size query
parameters. The event stream uses the starting_after cursor instead.
Rate limits
Requests are rate limited per API key. A 429 response carries
Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, and
X-RateLimit-Reset. Default limits are confirmed during onboarding and
sized to the integration.
Item lifecycle
Items move through intake and custody before they ship, withdraw, or complete
a sell-back transfer. Returned items re-enter at received and repeat intake.
The status vocabulary is additive under the forward-compatibility policy.
Fulfillment lifecycle
Fulfillments move through pending, processing, shipped, and
delivered, or end as cancelled, exception, or returned.
processing_stage may be null when granular telemetry is unavailable;
status is always authoritative.
https://api.vault.stashtab.gg/v1https://sandbox.api.vault.stashtab.gg/v1Intake
Digitization completions, with the same payloads available through signed events.
Manifests
Declare immutable expected arrivals and reconcile physical intake against them.
- GETList manifests
/manifests - POSTSubmit an expected manifest
/manifests - POSTSubmit an expected manifest (CSV upload)
/manifests/csv - GETGet a manifest with per-line status
/manifests/{manifest_id} - GETGet the reconciliation report for a manifest
/manifests/{manifest_id}/reconciliation - POSTClose a manifest
/manifests/{manifest_id}/close
Inventory
Inspect physical-item custody records and SKU-level computed stock.
- GETList items
/items - GETAggregate counts by status
/items/summary - GETGet an item by QID
/items/{qid} - GETList SKU inventory levels
/inventory
Fulfillment
Create parcel shipments or withdrawals and follow their execution.
- GETList fulfillments
/fulfillments - POSTCreate a fulfillment
/fulfillments - GETGet a fulfillment
/fulfillments/{fulfillment_id} - POSTCancel a fulfillment (pre-pick)
/fulfillments/{fulfillment_id}/cancel - POSTCreate fulfillments from CSV
/fulfillments/csv
Webhooks
Manage signed event delivery and replay the event stream.
- GETList webhook subscriptions
/webhook-subscriptions - POSTRegister a webhook endpoint
/webhook-subscriptions - GETGet a webhook subscription
/webhook-subscriptions/{subscription_id} - DELETEDelete a webhook subscription
/webhook-subscriptions/{subscription_id} - PATCHUpdate a webhook subscription
/webhook-subscriptions/{subscription_id} - GETList events
/events - POSTRotate a webhook signing secret
/webhook-subscriptions/{subscription_id}/rotate-secret - POSTTest a webhook subscription
/webhook-subscriptions/{subscription_id}/test - GETGet an event
/events/{event_id}
Sandbox
Sandbox API keys are issued during partner onboarding. Sandbox access is not self-service, but the full contract is public so an integration can be planned before keys are issued.
Transfers
Request and follow sell-back transfers for items in custody.
- GETList transfers
/transfers - POSTRequest a sell-back transfer
/transfers - GETGet a transfer
/transfers/{transfer_id} - POSTCancel a transfer
/transfers/{transfer_id}/cancel
Account
Inspect the authenticated partner organization and API key metadata.
Products
Define catalog records before product inventory reaches the vault.