Developer platform
One print-order API.
Every provider behind it.
Batch Relay validates prepared assets, resolves one compatible provider, and freezes the route before payment or fulfillment. Build against a single contract instead of one lab's SDK.
- HTTP APILive
any HTTP client
- DashboardLive
keys · orders · billing
- n8nComing soon
multi-step workflows
- ZapierComing soon
trigger-based automations
- WebhooksPlanned
push order status
OpenAPI 3.1 spec
The full contract is machine-readable at api.batchrelay.com/openapi.json — generate a client in any language.
Idempotent by default
Every submission carries an Idempotency-Key. Retries are safe, and reuse with a changed payload is rejected.
Staging first
br_test_ keys run the same quote-and-submit flow against sandbox fulfillment before anything goes live.
The order lifecycle
Compatibility, quote, freeze, submit.
Four requests take an order from prepared assets to fulfillment. The route is frozen before any payment, so nothing changes underneath you.
- 01
Create a scoped key
Generate a staging key in the dashboard with print_orders:write and print_orders:read. Staging and production are separate key environments.
Authentication - 02
Check compatibility
POST /v1/providers/compatibility confirms a provider can produce every line item before you commit to anything.
Provider routing - 03
Quote and freeze the route
Quoting resolves one compatible provider and locks provider and pricing for 15 minutes. What you show the customer is what fulfills.
Provider routing - 04
Submit with an Idempotency-Key
POST /v1/print-orders against the frozen quote. Retries are safe; reusing a key with a different payload returns 409 idempotency_conflict.
Idempotency
From the terminal
A print order in one request.
Authenticate with a bearer key, pass an idempotency key, and submit against your frozen quote. Every error comes back structured — a stable code, a docs_url, and a request_id you can hand to support.
curl https://api.batchrelay.com/v1/print-orders \
-H "Authorization: Bearer br_test_••••" \
-H "Idempotency-Key: event-2481-order-114" \
-H "Content-Type: application/json" \
-d '{ "quote_id": "…", "order": { … } }'
# 202 Accepted → payment_pending → paid
# → fulfillment_submitted → accepted → shippedWays to connect
Use the API directly, or wait for the wrapper.
HTTP API
LiveThe production path used by Batch Relay's own surfaces. Provider-neutral catalog, quoting, and order submission from any language.
Quickstartn8n node
Coming soon · in pilotPrepare, quote, and submit print orders from multi-step n8n workflows. The node calls the Batch Relay API — provider credentials never enter your workflow.
n8n docsZapier
Coming soon · in pilotA planned Zapier Platform app for trigger-based automations, built on the same API boundary as everything else.
Zapier docsWebhooks
PlannedPush order and fulfillment status changes to your systems. Until they ship, poll order state with GET /v1/print-orders/{id}.
Webhooks docsLooking for lab availability instead? See current integration status for WHCC, Richmond Pro Lab, and the pilots.
Safe to call
Boring where it counts.
Real orders and real money move through this API, so the failure modes are designed to be dull. The full architecture is documented on the trust page.
Keys are hashed, not stored
Raw API keys are never persisted — only a one-way hash. If a key leaks, revoke it in the dashboard and rotate.
Idempotency is enforced
Reusing an Idempotency-Key with a different payload is rejected with a 409. A retry never becomes a duplicate order.
Provider credentials stay server-side
Automations authenticate to Batch Relay, and Batch Relay talks to the labs. Lab credentials never enter your code.
Staging is a separate environment
br_test_ keys can only create sandbox orders, and production keys can't touch sandbox. A mixed-up key fails closed.
Start in staging
Send your first test order. Start in staging.
A staging key and the quickstart get you to a submitted sandbox order in one sitting — no billing required until production.