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.

EventTypical use
order.shippedTrigger a "your order is on its way" email flow
inventory.changedKeep a business intelligence (BI) database or replenishment tool current
return.receivedTrigger a customer experience (CX) ticket update or refund workflow
wave.completedFeed a key performance indicator (KPI) dashboard in real time
print_job.failedAlert 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 history
  • read:ordersSales order and fulfillment data
  • write:ordersUpdate order state, trigger fulfillment
  • manage:webhooksSubscribe, unsubscribe, and test-fire webhook endpoints

Get started in under ten minutes

  1. 1

    Create an account at app.optiwms.com - the 14-day trial includes full sandbox access, no card required.

  2. 2

    From Developer Settings, create a Personal Access Token with the scopes you need.

  3. 3

    Open GraphiQL at https://api.optiwms.com/query - your token authenticates to the sandbox tenant automatically.

  4. 4

    Run a first query:

    {
      inventoryItems(warehouseId: "your-warehouse-id") {
        sku
        onHand
        available
        reserved
      }
    }
  5. 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