Build on the same API we use
Every screen in the OptiWMS dashboard runs on the same GraphQL API your account exposes. The API covers every data surface the dashboard uses: inventory positions, fulfillment state, print queue, and inbound progress. If OptiWMS can show it, you can query it.
One endpoint, typed schema
All queries and mutations go to https://api.optiwms.com/query.
The schema is fully typed and self-documenting. Open GraphiQL against your sandbox tenant and explore with tab completion before writing a single line of production code. Every field has a type and a description. Breaking changes carry a six-month deprecation runway and are flagged via @deprecated directives visible in the explorer before the field is removed.
What you can query
Inventory
On-hand, reserved, and available quantity per variant per warehouse location, keyed by SKU (stock-keeping unit). Full ledger history with timestamps, operator, and movement type. Useful for live stock sync to a downstream platform, replenishment triggers, and low-stock alerts.
Orders and fulfillments
Sales order state, pick and pack progress, label fetch status, dispatch timestamp, tracking number, and carrier. Useful for customer experience (CX) platform lookup, email flow triggers on dispatch, and order-to-dispatch time reporting.
Inbound and purchase orders
Purchase order lines, expected versus received quantities, discrepancy flags, and putaway location. Useful for supplier performance reporting, inventory availability forecasting, and finance reconciliation.
Warehouse operations
Wave assignments, pick queue state, and operator activity by shift. Useful for labour management reporting, shift supervisor dashboards, and service-level (SLA) monitoring.
Print queue
Print job status, printer health, and job history per warehouse. Useful for ops alerting when a printer goes offline and pack station monitoring dashboards.
Outbound webhooks
OptiWMS pushes events to your HTTPS endpoint so you are not polling. Webhook payloads are signed with a keyed hash (HMAC). Failures retry with exponential backoff. The last delivery status for each subscription is visible in Developer Settings.
| Event | Typical use |
|---|---|
order.shipped | Trigger a "your order is on its way" email flow |
inventory.changed | Keep a business intelligence (BI) database or replenishment tool current |
return.received | Trigger a customer experience (CX) ticket update or refund workflow |
wave.completed | Feed a key performance indicator (KPI) dashboard in real time |
print_job.failed | Alert ops before a label backlog builds |
Authentication
Personal Access Tokens with scope-based permissions. One token per integration, rotated independently. Revoking an analytics integration token does not affect a Klaviyo webhook token. Tokens are created from Developer Settings inside app.optiwms.com with no wait on the OptiWMS team.
read:inventoryInventory queries and ledger historyread:ordersSales order and fulfillment datawrite:ordersUpdate order state, trigger fulfillmentmanage:webhooksSubscribe, unsubscribe, and test-fire webhook endpoints
Get started in under ten minutes
- 1
Create an account at app.optiwms.com - the 14-day trial includes full sandbox access, no card required.
- 2
From Developer Settings, create a Personal Access Token with the scopes you need.
- 3
Open GraphiQL at
https://api.optiwms.com/query- your token authenticates to the sandbox tenant automatically. - 4
Run a first query:
{ inventoryItems(warehouseId: "your-warehouse-id") { sku onHand available reserved } } - 5
Subscribe a webhook endpoint from the same settings screen and test-fire an event.
If the query you need is not there
OptiWMS is actively shipping. A missing query, mutation, or event type is a short conversation. Email [email protected] with the use case and we will tell you whether it exists under a different name or add it for a real customer driving the need.
Carrier integration
The shipping layer is a typed Carrier interface. Australia Post, DHL Express, FedEx, and UPS each have a direct adapter that connects to your own carrier account and creates the label at pack time. Adding another carrier means one new adapter package. If your integration needs to know which carrier handled a shipment, the tracking number and carrier name are on the fulfillment object in the API.
Start building
Sandbox access, full API and webhook permissions, and 14 days to build before committing to a paid plan.
Request early access