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
- Order rules for updates, 409 answers and release-the-pick.
- API reference for every field and response.
Connect your own store
Register the integration in the dashboard, then start with GET /ping.