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.

# Example response
{
  "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.

new

We accepted the item but have not yet sent it to a supplier.

pending

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.

exported

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.

backordered

The supplier is waiting on stock. We retry automatically as stock returns.

fulfilled

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.

cancelled

Terminal. The item will not fulfill, and you are not billed for it.

rejected

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 2xx to acknowledge; other responses (or timeouts) are retried, then marked failed and 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 the Authorization header (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_id and our system's order_id for 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.