OptiWMS API

Quick start

Register a store, call ping, push one product and one order, then watch a stock push.

Quick start

About ten minutes from a registered store to a stock push. Hosts: https://api.optiwms.com/store/v1/ for calls into OptiWMS, and app.optiwms.com for the dashboard.

1. Connect the store

In the dashboard open Settings, Integrations, then Connect your own store or carrier, and choose Your own store. Enter a display name, your store's HTTPS base URL (OptiWMS will POST stock and shipments there), and the warehouse that fulfills this store. Copy the integration ID and the shared secret when they are shown; the secret is shown once.

2. Call GET /ping

Sign a GET to /store/v1/ping with an empty body (the canonical string ends with a trailing dot). A correct call answers 200 with the integration name and warehouse. A 401 with an empty body means the signing is wrong: use the signature checker on the integration page (see Testing).

Example response (from the OpenAPI document):

{
  "integration": { "id": "42", "name": "Our web store" },
  "warehouse": { "id": "3", "name": "Sydney DC" },
  "serverTime": "2026-10-27T09:00:00Z"
}

3. Push one product

PUT /store/v1/products with up to 250 variants. Example request body from the OpenAPI document (newVariants):

{
  "variants": [
    {
      "productId": "201",
      "variantId": "301",
      "sku": "TEE-BLK-M",
      "title": "Organic tee - Black / M",
      "status": "active",
      "barcode": "9350000000001"
    },
    {
      "productId": "201",
      "variantId": "302",
      "sku": "TEE-BLK-L",
      "title": "Organic tee - Black / L",
      "status": "active"
    },
    {
      "productId": "202",
      "variantId": "401",
      "sku": "GIFT-50",
      "title": "Gift card $50",
      "status": "active",
      "requiresShipping": false
    }
  ]
}

A first send answers with per-variant outcomes (created, linked, skipped, and so on). Sending the same body again lists each variant as unchanged.

4. Push one order

PUT /store/v1/orders/{orderId} with the whole current order. Example from the OpenAPI document (created), path order id 5001:

{
  "number": "#1001",
  "createdAt": "2026-10-27T09:30:00+11:00",
  "updatedAt": "2026-10-27T09:30:00+11:00",
  "currency": "AUD",
  "customer": {
    "name": "Jo Citizen",
    "email": "[email protected]",
    "phone": "+61 400 000 000"
  },
  "shipTo": {
    "name": "Jo Citizen",
    "phone": "+61 400 000 000",
    "company": "",
    "line1": "1 George St",
    "line2": "Level 2",
    "city": "Sydney",
    "provinceCode": "NSW",
    "postalCode": "2000",
    "countryCode": "AU"
  },
  "shipping": { "code": "express", "name": "Express Post", "price": "12.00" },
  "totals": {
    "subtotal": "99.85",
    "shipping": "12.00",
    "tax": "10.17",
    "total": "111.85",
    "taxesIncluded": true
  },
  "notes": "Leave at the door",
  "lines": [
    {
      "id": "11",
      "productId": "201",
      "variantId": "301",
      "sku": "TEE-BLK-M",
      "title": "Organic tee - Black / M",
      "quantity": 2,
      "unitPrice": "29.95"
    },
    {
      "id": "12",
      "sku": "CAP-RED",
      "title": "Cap",
      "quantity": 1,
      "unitPrice": "39.95"
    }
  ]
}

A new order answers 201 with status created. Open the order in the dashboard under Sales orders.

5. See a stock push

When warehouse stock for a mapped SKU changes, OptiWMS POSTs {your base URL}/stock with the absolute available quantity (after your stock buffer). Example body from the OpenAPI document:

{
  "sku": "TEE-BLK-M",
  "variantId": "301",
  "available": 42,
  "locationCode": "main"
}

Verify the signature the same way as inbound calls, using the full path your server received (including a path prefix on the base URL). Details are in Signing.

Next

Connect your own store

Register the integration in the dashboard, then start with GET /ping.