Catalog API Documentation
Browse endpoints, parameters, and live request examples.
Order Management
Track and manage orders after they've been placed
Order Tracking System
After placing an order through the cart system, you can track its status and fulfillment progress using the order number you assigned at the time the order was placed. The system provides detailed visibility into each order's journey from placement through delivery.
Each order is identified by the unique
external_order_id
that you provided when converting the cart to an order. This ID serves as your primary reference for all order-related
operations and tracking.
Individual Line Item Status: Line items in the order can have individual statuses, allowing you to track partial shipments, split fulfillment, and item-specific issues. This granular tracking means one item being backordered won't block the shipment of available items.
Retrieving Order Information
1 Track Order by Your ID
Use GET /orders/{external_order_id} to retrieve the order details using the order number you assigned at placement.
{
"external_order_id": "ORD-2024-001",
"created_at": "2024-03-15T10:30:00Z",
"line_items": [
{
"line_item_id": "li-1",
"catalog_item_id": "12345",
"status": "fulfilled"
},
{
"line_item_id": "li-2",
"catalog_item_id": "12346",
"status": "backordered"
}
],
"fulfillments": [
{
"line_item_ids": ["li-1"],
"shipper": "UPS",
"tracking_number": "1Z999AA10123456784"
}
],
"shipping_address": {...},
"total": "59.98"
}
Returns: Order tracking information including individual line item statuses
Note: This endpoint uses the global external order number you provided during order placement. Store this ID after placing each order for future tracking.
Additional Order Management Features Coming Soon
We're expanding our order management capabilities. The following features are planned for future releases:
- List all orders for a specific user within a socket
- Filter orders by date range, status, and other criteria
- Paginated order history with customizable result limits
- Socket-specific order retrieval for multi-catalog scenarios
For now, track individual orders using the external order number from your order placement response.
Understanding Line Item Statuses
Status lives on the line item, not on the order as a whole. A single order can hold items in different statuses, for example one fulfilled and one backordered, so read and display each item's status separately.
We accepted the item but have not yet sent it to a supplier.
We are holding the item because your account does not have enough funds on file to cover it. It moves on once billing is resolved. Contact us if you see this unexpectedly.
Handed off to the supplier for fulfillment. Our support staff actively monitors items in this status and will follow up with you about merchandise delivery after 10 business days.
The supplier is waiting on stock. We retry automatically as stock returns.
Terminal success. Tracking for a physical item, or the virtual code for a digital one, is on the matching fulfillment record rather than on the line item.
Terminal. The item will not fulfill, and you are not billed for it.
Terminal. The supplier declined the item. Our support team works these with the supplier directly. If we need something from your end user, such as a corrected address, we contact you.
Most items move from new
to exported
within minutes, and from exported
to fulfilled
within a business day. Digital items are usually much faster than that, often
fulfilled in under an hour. Items that ship physically can take longer. If an item
sits in exported
longer than is reasonable for the supplier, send us the
external_order_id
and we will investigate.
Webhook Notifications
When an order item's status changes, we send an HTTP
POST
with a JSON body to your configured HTTPS endpoint. Each delivery is signed or uses your provided credentials so you
can verify it came from us. Configure your endpoint and which statuses fire
on the
Webhooks
page, and test it from the simulator.
Delivery is asynchronous.
We send each notification as soon as we can after a status change, but delivery is
not instant. During busy periods it may be delayed by up to several minutes. Treat
webhooks as eventually delivered: don't assume one arrives the moment a status
changes, and make your handler idempotent using status_change_id.
Endpoint & authentication
-
Your endpoint must be HTTPS. Respond
2xxto acknowledge; other responses (or timeouts) are retried, then markedfailedand re-sendable from the Deliveries page. - Signing secret (recommended): set a secret and verify the HMAC signature below.
-
HTTP Basic auth:
leave the secret blank and embed credentials in the URL (
https://user:pass@host); we store them encrypted and send them via theAuthorizationheader (no signature header in that case).
Headers & signature
The signature is
v1=
followed by a lowercase hex HMAC-SHA256(secret, "<timestamp>.<raw_body>").
Reject deliveries whose
x-webhook-timestamp
is too far from now to prevent replays.
POST /your/webhook/endpoint HTTP/1.1
content-type: application/json
x-webhook-timestamp: 1718712000
x-webhook-signature: v1=3f9a... (hex HMAC-SHA256)
Verifying (Node.js)
const crypto = require("crypto");
function verify(rawBody, headers, secret) {
const ts = headers["x-webhook-timestamp"];
const sig = headers["x-webhook-signature"]; // "v1=<hex>"
const expected =
"v1=" + crypto.createHmac("sha256", secret)
.update(ts + "." + rawBody)
.digest("hex");
// reject if Math.abs(Date.now()/1000 - Number(ts)) > 300
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig));
}
Example payload
One event per order-item status change.
status_change_id
is a stable idempotency key, so dedupe on it. Some fields may be null.
{
"event": "order_item.status_changed",
"status_change_id": "9f8c1a2b-4d5e-6f70-8192-a3b4c5d6e7f8",
"environment": "production",
"order_number": "abc-123",
"external_order_id": "your-ref-1",
"external_user_id": "user-42",
"line_item_id": "li-1",
"status": "exported",
"occurred_at": "2026-06-18T12:00:00Z"
}
Status values
status
is one of new, pending, exported, fulfilled, cancelled, backordered, rejected. You choose which fire per environment on the
Webhooks settings page; selecting none means no webhooks are sent.
Best Practices
-
Store Order IDs: Always save both your
external_order_idand our system'sorder_idfor complete tracking capability. -
Use Webhooks: Configure a webhook endpoint to receive status changes as they happen instead of polling. If you do poll, use a reasonable cadence (every few minutes, not every few seconds) and back off on 429s.
-
Handle Partial Fulfillment: Design your UI to clearly show when items ship separately with different tracking numbers.
-
Track Line Items: Monitor individual line item statuses to provide accurate delivery estimates to your customers.
-
Metadata Continuity: Line item metadata from the cart carries through to the order for reference.