Express B2B
Developer Preview

Connect your systems to your order data.

The Express B2B API gives you real-time access to orders, billing accounts, catalog, and webhooks. REST endpoints, API key auth, no friction.

Available on every plan. Use it to push orders into your ERP, sync inventory, or trigger downstream workflows the moment something happens.

GET /api/orders
200 OK
{
  "data": [
    {
      "id":          "01936b4a-2c5e-7a1f-9d83-e7f2c4a18b3d",
      "status":      "pending_approval",
      "billing_account": {
        "id":           "01936a11-8d3f-7c0e-b541-94e1c73b2f8a",
        "name":         "Midwest Restaurant Group",
        "pricing_tier": "volume_b"
      },
      "site": {
        "id":   "01936a12-ff40-7c9e-b112-73e4d9b8a214",
        "name": "Chicago — Loop"
      },
      "items": [
        {
          "sku":        "NAP-LIN-WHT-200",
          "qty":        4,
          "unit_price": "38.50",
          "line_total": "154.00"
        }
      ],
      "subtotal":    "154.00",
      "created_at":  "2026-03-15T14:32:07Z"
    }
  ],
  "meta": {
    "total":    47,
    "per_page": 25
  }
}
REST
JSON over HTTPS
API keys
Simple Bearer auth
All plans
No tier gating
Webhooks
Real-time events
What's exposed

Three surfaces. Everything you need.

The API covers the data your ERP, WMS, and internal tools actually care about — not a surface-level subset.

Orders

Pull orders by status, date range, billing account, or site. Each record includes full line items, negotiated pricing applied at order time, approval state, and timestamps.

List & filter orders
Single order detail
Line items + pricing
Approval history

Catalog

Push products, update inventory levels, and manage pricing tiers without touching the admin panel. Keep Express B2B in sync with your ERP or warehouse system automatically.

Create & update products
Set per-account pricing
Inventory level sync
Bulk upsert support

Webhooks

Register endpoints to receive real-time events when orders are placed, approved, rejected, or fulfilled. No polling. Signed payloads so you know the request is genuine.

Order lifecycle events
Signed with HMAC-SHA256
Retry with backoff
Manage via API or admin
Endpoints

Clean, predictable, REST.

Every endpoint returns JSON and follows standard HTTP conventions. No surprises.

GET
/api/orders List orders

Returns paginated orders. Filter by status, billing_account_id, site_id, or date range.

{ "data": [ { "id": "...", "status": "pending_approval", ... } ], "meta": { "total": 47 } }
GET
/api/orders/{id} Retrieve an order

Full order detail including all line items, applied pricing, site, billing account, and approval history.

{ "id": "01936b4a-...", "items": [ { "sku": "NAP-LIN-WHT-200", "qty": 4, "line_total": "154.00" } ], ... }
POST
/api/products Create or update a product

Upserts a product by SKU. Include pricing overrides for specific billing accounts in the same request.

{ "sku": "NAP-LIN-WHT-200", "name": "...", "base_price": "38.50", "pricing": [ { "tier": "volume_b", "price": "34.00" } ] }
POST
/api/webhooks Register a webhook

Subscribe a URL to one or more event types. Returns a signing secret for verifying incoming payloads.

{ "url": "https://yourapp.com/hooks/orders", "events": ["order.placed", "order.approved"] }
GET
/api/billing-accounts List billing accounts

All billing accounts in your workspace with their sites, pricing tiers, and approval configuration.

{ "data": [ { "id": "...", "name": "Midwest Restaurant Group", "sites_count": 7, "pricing_tier": "volume_b" } ] }
Authentication

One header. Every request.

Generate an API key from your admin panel. Pass it as a Bearer token on every request. No OAuth flows, no token refresh — just a key you control.

Request header
Authorization: Bearer ak_live_4xR9mK2pL8nQ7vT3wF6jH1sA5yC
Accept: application/json
Keys are workspace-scoped — Each key has access to all resources in your workspace.
Rotate without downtime — Generate a new key before revoking the old one — no gap in coverage.
Separate staging keys — Create test keys tied to your staging environment.
Rate limits
Endpoint type Limit
Read endpoints 120 / min
Write endpoints 60 / min
Webhook registration 10 / min
Bulk product upsert 500 records / req

Limits are per API key. Exceeded requests return 429 Too Many Requests with a Retry-After header.

Versioning
Request header
X-ExpressB2B-Version: 2026-01
Pass the version as a request header in YYYY-MM format. Endpoint URLs stay stable across versions.
Omitting the header pins you to the oldest supported version. Each version is supported for 12 months after a newer one ships.
Webhook events

React to what happens, when it happens.

Every event carries the full order context. No follow-up API call needed to know what changed — the payload has everything.

order.placed A buyer submitted an order
order.approved Order passed approval review
order.rejected Order was rejected by an approver
order.fulfilled Order marked as fulfilled
order.cancelled Order cancelled by buyer or admin
POST → your-endpoint order.placed
{
  "event":      "order.placed",
  "id":         "wh_01936b5c-3f2a-7e4d-8b29-c1d4e5f6a7b8",
  "created_at": "2026-03-15T14:32:08Z",
  "data": {
    "order_id":          "01936b4a-2c5e-7a1f-9d83-e7f2c4a18b3d",
    "status":            "pending_approval",
    "billing_account_id": "01936a11-8d3f-7c0e-b541-94e1c73b2f8a",
    "site_id":           "01936a12-ff40-7c9e-b112-73e4d9b8a214",
    "total":             "154.00",
    "items_count":       1
  }
}

Every payload is signed with X-ExpressB2B-Signature (HMAC-SHA256). Verify it before processing.

API access is included on every plan.

No feature tier to unlock. Generate a key from your admin panel and start pulling orders the same day you go live.