Developers · the Stowtix API

Load plans from your own systems

Send shipments from your ERP, WMS or TMS. Stowtix plans them, tells your system when each plan is ready, and returns every piece in loading order.

REST and JSON · OpenAPI contract at api.stowtix.com/openapi.json

An animation: one round trip between your ERP, api.stowtix.com and the solver. Your ERP sends POST /v1/shipments and gets 201 with the shipment, then POST …/calculations and gets 202, queued. The API asks the solver to plan 38 pieces; the solver answers done, 83.7 % full. Stowtix calls your ERP's webhook, signed. Your ERP sends GET /v1/calculations/{id} and gets 200: every piece, in order.

Four calls

From your order to a loading plan

01

Create the shipment

Your order as cargo lines: sizes, weights, quantities, and the stop each line goes to. Send an Idempotency-Key, and a retry never makes a second shipment.

shipment.sh

curl · shipment.sh

curl https://api.stowtix.com/v1/shipments \
  -H "Authorization: Bearer $STOWTIX_KEY" \
  -H "Idempotency-Key: po-4471" \
  -H "Content-Type: application/json" \
  -d '{"name": "PO 4471", "lines": [{
        "description": "Pump housing", "quantity": 6,
        "length_mm": 1200, "width_mm": 1150, "height_mm": 1300,
        "weight_kg": 640, "stop_no": 3}]}'
# 201 Created  {"id": "…", "name": "PO 4471", "lines": [ … ]}

Python · shipment.py

Node.js · shipment.mjs

02

Start the plan

Choose the equipment, and how many of each the plan may use. The answer comes at once; the plan is made in the background.

calculation.sh

curl · calculation.sh

curl https://api.stowtix.com/v1/shipments/$SHIPMENT_ID/calculations \
  -H "Authorization: Bearer $STOWTIX_KEY" \
  -H "Content-Type: application/json" \
  -d '{"equipment": [{"equipment_type_id": "'$HIGH_CUBE'", "max_units": 2}]}'
# 202 Accepted  {"id": "…", "status": "queued", "progress": 0, …}

Python · calculation.py

Node.js · calculation.mjs

03

Hear when it is ready

Stowtix calls your webhook when the plan finishes. Check its signature before you trust it.

webhook.http

HTTP · webhook.http

POST https://your-erp.example/hooks/stowtix
Stowtix-Event: calculation.finished
Stowtix-Signature: t=1790850000,v1=5f2c9e…

{"id": "…", "event": "calculation.finished",
 "created_at": "2026-10-01T10:20:00Z",
 "data": {"calculation_id": "…", "shipment_id": "…",
          "status": "succeeded", "totals": { … }}}

Python · webhook.py

Node.js · webhook.mjs

04

Fetch the plan

Every piece with its place and its turn in the loading order, and the reports for the dock.

plan.sh

curl · plan.sh

curl https://api.stowtix.com/v1/calculations/$CALC_ID \
  -H "Authorization: Bearer $STOWTIX_KEY"

# the reports for the dock
curl https://api.stowtix.com/v1/calculations/$CALC_ID/report.pdf \
  -H "Authorization: Bearer $STOWTIX_KEY" -o plan.pdf
curl https://api.stowtix.com/v1/calculations/$CALC_ID/loading-list.xlsx \
  -H "Authorization: Bearer $STOWTIX_KEY" -o list.xlsx

Python · plan.py

Node.js · plan.mjs

What the API covers

The planning the app does, from your code

Shipments

Cargo lines with sizes, weights, priorities, groups and stops.

/v1/shipments

Imports

Upload a packing list, match its columns, reuse saved matchings.

/v1/imports

Plans

Start a plan, follow its progress live, plan again around kept pieces, edit with checks.

/v1/calculations

Reports

The PDF loading plan, the Excel loading list, pictures from every side.

report.pdf · loading-list.xlsx

Equipment

Containers, trucks and trailers: the presets and your own, with axles.

/v1/equipment-types

Cargo library

Your products, saved once and found by SKU.

/v1/cargo-templates

Shared links

Links for the crew, made and withdrawn from your system.

…/share-links

Pallets and sizes

Build single-product pallets; check a piece's size against the equipment.

/v1/pallet-builds · /v1/size-calculations

Built to run unattended

The parts your integration relies on

Keys with scopes

Authorization: Bearer

Owners and admins make keys in Settings. A key reads its company's data and changes only what its scopes allow; revoke it at any time.

Limits you can see

RateLimit-* · Retry-After

Every answer says how many requests are left. Past a limit, a 429 says when to try again.

Safe retries

Idempotency-Key

Send the same key with a retried POST or PATCH and get the first answer back, never the work done twice. Kept 24 hours.

Signed webhooks

HMAC-SHA256

Each webhook is signed with your secret and a timestamp. Failed deliveries are tried again for about an hour.

Clear errors

RFC 9457

Problem details that say what went wrong and which field, in the same shape every time.

An open contract

OpenAPI 3

The full contract at api.stowtix.com/openapi.json: generate a client in your language, or read the docs.

API plans

Sized for your volume, set up with you

The API is sold apart from the app plans. Tell us what you send, and we agree an API plan with four limits.

  • Load plans a month: Plans your systems ask for
  • Requests a minute: For each key
  • Requests a month: All your keys together
  • Working keys: Keys active at once
Talk to us about an API plan

Your API use, request by request and day by day, is in Settings › Developers.

Questions from developers

Before you build

How do we get an API key?

Once your company has an API plan, an owner or admin makes keys in Settings, Developers. Each key has its scopes, and can be revoked at any time.

What comes back?

JSON for everything, and the reports as files: the PDF loading plan, the Excel loading list and PNG pictures of each container or truck.

How do we know a plan is ready?

Register a webhook, and Stowtix calls it when each plan finishes. You can also follow a plan's progress live, or ask for it whenever you like.

How do we check a webhook is from Stowtix?

Recompute the signature with your webhook secret over the timestamp and the body, compare in constant time, and refuse anything older than five minutes. The code is above.

Connect your systems

Start with the docs, then talk to us about an API plan for your volume.