OptiWMS API

Testing and troubleshooting

Recent activity, the signature checker, common errors, and why test orders are real orders.

Testing and troubleshooting

Recent activity

On the integration page in the dashboard (app.optiwms.com, Settings, Integrations), Recent activity lists recent OptiWMS API calls both ways: method and path or call name, HTTP status, time, request id (inbound), and SKUs or order number when known. Request and response bodies are never stored. Quote the request id when you contact support.

Activity is kept for seven days (purge may retain up to fourteen). It is not a full audit log of payloads.

Signature checker

The same page includes a signature checker. Paste the hex (with or without a sha256= prefix) your code produced for this fixed sample:

Field Value
Method and path POST /store/v1/ping
Timestamp 1700000000
Body (exact bytes) {"ping":true}

The checker compares constant-time after trimming and case-folding. If your hex does not match, it tries common mistakes in this order and returns the first matching hint:

  1. Path /ping or /v1/ping - "The path must include /store/v1: sign /store/v1/ping, not /ping."
  2. Body {"ping": true}, { "ping": true } or the compact body with a trailing newline - "The body must be the exact bytes sent: sign the serialized JSON string you transmit, not a re-encoded object."
  3. Timestamp 1700000000000 - "The timestamp is unix seconds, not milliseconds."
  4. Otherwise - "None of the usual causes match. Check that the secret is the one shown when the store was registered (rotating issues a new one) and that the input is timestamp.method.path.body joined with single dots and no spaces."

For calls OptiWMS makes to your store, remember the signed path includes the base URL's path prefix as well as /store/v1 on inbound calls.

Common errors

Symptom Likely cause
401 empty body Wrong secret, wrong path (encoding or missing /store/v1), body bytes differ from what you signed, or clock skew beyond 15 minutes. Use the signature checker.
410 empty body Integration disabled or archived.
409 ORDER_IN_FULFILLMENT Warehouse has started; release the pick, then resend. See Order rules.
409 ORDER_SHIPPED / ORDER_CANCELED Terminal state; do not retry the change.
404 ORDER_NOT_FOUND Wrong integration credentials, or the order was never sent on this integration.
429 RATE_LIMITED More than 300 calls in a minute; honor Retry-After.
Stock or shipment never arrives Confirm the registered base URL is reachable on the public internet, verifies the signature (including path prefix), and answers 2xx. Check Recent activity for outbound rows.

Test orders are real orders

There is no separate sandbox mode on the OptiWMS API. An order you send is a real sales order in the organization: it can be picked, packed and shipped, and it affects stock.

  • Prefer a dedicated test warehouse, or cancel test orders when finished.
  • Use distinct order ids so retries stay idempotent.
  • We can provision a separate test organization on request (contact support from app.optiwms.com or the contact form).

Start with ping

GET /ping exercises signing with an empty body and returns the integration name and warehouse. Get that green before products or orders. 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"
}

Connect your own store

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