JBI API — Sandbox (v3)

Base URL: https://api.jbi.bike/sandbox
Version: v3
Content-Type: application/json


Overview

The sandbox lets you build and test your integration before you send real orders. It has the same endpoints, request format, responses and error codes as the live v3 API.

Orders sent to the sandbox are never saved and are never shipped or invoiced.

A successful sandbox order still returns an order ID and a message saying the order was created. That only confirms your request was accepted. No order was created.

Your order goes through every check a live order does, against your real account data: your ship-to IDs, part numbers, warehouse locations, carrier permissions and current inventory. You get back exactly the response a live order would get. The order is then thrown away.

When your integration works in the sandbox, remove /sandbox from the base URL to go live. Nothing else changes.


Endpoints

Sandbox Live
POST /sandbox/customer/v3/ordering/{accountId} POST /customer/v3/ordering/{accountId}
POST /sandbox/customer/v3/inventory/{accountId} POST /customer/v3/inventory/{accountId}
POST /sandbox/customer/v3/tracking/{accountId} POST /customer/v3/tracking/{accountId}

For the request and response details of each endpoint, see the matching v3 document: Order Submission, Inventory Availability and Order Tracking.


Authentication

The sandbox uses your normal accountId and Token-key. You don't need separate sandbox credentials.

Token-key: your-api-token-here

Software companies building an integration for J&B dealers: if you don't have a dealer yet, ask us for a sandbox key. We issue it on a J&B test account and tell you its accountId, so you can build and test before your first dealer signs up. A sandbox key works only on /sandbox URLs. When a dealer is ready to go live, we connect that dealer's account to you and issue a live key.


How to Tell a Sandbox Response

Once your token has been accepted, every sandbox response includes "sandbox": true at the top level, and the HTTP header:

X-JBI-Environment: sandbox

Live responses have neither. Authentication errors (400 INVALID_ACCOUNT, 401 MISSING_TOKEN, 401 INVALID_TOKEN) are returned before the sandbox is involved, so they look exactly like live.

Example — order accepted (HTTP 201)

{
  "sandbox": true,
  "success": true,
  "data": {
    "orderId": 84210,
    "customerOrderNo": "ORD-2025-001",
    "status": "submitted",
    "message": "Order successfully created"
  }
}

Differences From Live

Behavior Sandbox
Orders Checked and priced, then thrown away. Nothing is saved, shipped or invoiced, and nothing shows up on jbi.bike.
orderId Looks like a real order ID, but no order exists with that ID. Don't store it or look it up.
status / code Same as live would return for your account, e.g. "submitted", "pending", 21, 10.
DUPLICATE_ORDER Never happens. Sandbox orders aren't saved, so you can send the same CustomerOrderNo as many times as you like. Live orders still need unique order numbers (see Order Uniqueness).
Inventory Live, read-only data. The same results as the live endpoint.
Tracking Live, read-only data. Returns your real orders. Sandbox orders are never saved, so tracking can't find them.
Errors Same HTTP status codes and error codes as live.

Limits

Sandbox ordering is limited per key on each account. Limits count orders, not requests: a request with 3 orders counts as 3. Inventory and tracking have no sandbox limits.

Limit Value
Orders per minute 10
Orders per day 200 (resets at midnight US Eastern time)
Orders per request 10

Orders count toward the limits even if they fail validation. Requests rejected for going over a limit don't count.

HTTP 429 — Limit reached

{
  "sandbox": true,
  "success": false,
  "error": {
    "code": "RATE_LIMITED",
    "message": "Sandbox limit reached: 10 orders per minute. Retry after the time in the Retry-After header."
  }
}

The Retry-After header gives the number of seconds until you can send again. If you're scripting tests, wait that long before retrying. Don't retry right away in a loop.

HTTP 422 — Too many orders in one request

A single sandbox request with more than 10 orders is rejected with error code TOO_MANY_ORDERS. Split it into smaller requests.


Quick Reference

POST /sandbox/customer/v3/ordering/{accountId} HTTP/1.1
Host: api.jbi.bike
Token-key: your-api-token-here
Content-Type: application/json

[
  {
    "CustomerOrderNo": "TEST-001",
    "AccountNumber": "10042",
    "ShipToID": "10042",
    "LineItems": [
      { "PartNumber": "6451", "Qty": 2, "LocID": 1 }
    ]
  }
]

Document version: 1.0 — 2026-09-16
For questions, contact JBI.