Connect the client's systems to the warehouse.
A REST API and signed webhooks for each client, files for everything else, and connectors for stores and carriers. Each carries a label, so nothing here claims more than it does.
One API, with a key for each client.
A client's ERP or order system sends orders, ASNs and returns, and reads items, inventory, shipments and invoices. A key belongs to one client and can only ever reach that client's data.
- Scopes per key, such as orders:read and orders:write, and a rate limit with standard headers.
- Safe retries: a write with an Idempotency-Key is answered the same way for 24 hours.
- Lists paged by cursor, with updatedSince, so nothing is skipped or repeated.
- A reference generated from the code: the OpenAPI document is always the API as it runs.
- A request log of every call a key made, in the client's portal.
Send an order
POST /api/v1/client/orders Authorization: Bearer <key> Idempotency-Key: order-1001-v1 { "externalOrderId": "1001", "type": "Parcel", "shipTo": { "name": "Ana Silva", "line1": "12 Main St", "city": "Camden", "region": "NJ", "postalCode": "08102", "country": "US" }, "lines": [ { "sku": "R55", "quantity": 2 } ] }
Told when something happens, and able to prove who said it.
A client subscribes an address to the events it wants. Each delivery is signed with the subscription's secret and numbered in sequence.
- Orders: received, updated, allocated, backordered, shipped and cancelled.
- Inbound and stock: a receipt closed, an adjustment, and inventory changed, at most once a minute.
- Returns, production and billing: received, inspected, decided; a build accepted or completed; an invoice issued.
- Retries after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours.
- Catch up after downtime by asking for every event since a sequence number.
Verify a delivery
// Node.js: the signature is HMAC-SHA256 over "timestamp.body" const crypto = require("crypto"); function verify(secret, timestamp, body, header) { const sent = Date.parse(timestamp); const late = Math.abs(Date.now() - sent) > 300000; if (Number.isNaN(sent) || late) return false; const expected = "sha256=" + crypto .createHmac("sha256", secret) .update(timestamp + "." + body) .digest("hex"); const a = Buffer.from(expected), b = Buffer.from(header); return a.length === b.length && crypto.timingSafeEqual(a, b); }
Stores, carriers, EDI and accounting.
What each connection does, and where it stands today.
- SpreadsheetsAvailableItems, ASNs, orders, locations and opening stock from a file. A file is checked whole, every problem named by line and column, and loaded whole or not at all.
- Accounting exportAvailableIssued invoices and credit notes as a batch in QuickBooks Online, Xero or generic layout, with revenue by account and a record of what has gone.
- ExportsAvailableStock, movements, orders, shipments, ASNs, receipts, returns and invoices as CSV files, from the office and from the client's portal.
- Labels and paperwork as PDFAvailableLPN and location labels, packing slips, bills of lading, manifests, receiving reports and invoices, printed from the browser.
- ShopifyIn testingA store connected by its merchant: orders in, fulfilments and tracking back, sellable stock published, returns recorded. Stores connect once Shopify has reviewed the app.
- Carrier labelsIn testingRates from every connected provider and labels bought at the pack station through ShipEngine and EasyPost, with customs data for parcels going abroad.
- EDI, inboundIn testingX12 856 and 943 from a trading partner become ASNs with lots, pallets and serial numbers, and a 944 answers when the receipt closes.
- Email to clientsIn testingDeliveries received, orders shipped, returns, invoices and questions waiting, written by the platform and sent to the contacts who asked.
- Printing to Zebra printersIn testingLabels as ZPL through a print queue and a small agent on a warehouse PC, and on a belt printer from the handheld.
- AI assistanceIn testingOptional, and only with the company's agreement: a likely cause for a number that looks wrong, and a handwritten pallet label read from a photo.
- AmazonRoadmapOrders in and stock levels out, as for a Shopify store.
- Direct accounting syncRoadmapInvoices posted to QuickBooks Online and Xero without a file in between.
- EDI, outboundRoadmapX12 940 and 945 for warehouse orders, 850 and 855, and the outbound 856.
- Freight rating and trackingRoadmapLTL rates and booking through an API, and tracking events on shipments. Today a client's own freight carrier is recorded with its PRO number.
Every connection, and what it is waiting on.
The office sees each connection's health in one list. A message that cannot be processed becomes an exception with a reason and the actions that settle it, never a silent failure.
- Stored first: every delivery is kept as it arrived before anything reads it.
- Integration exceptions: an unmapped product, a late edit or a refused address waits for a person.
- Secrets sealed: tokens and signing secrets are encrypted before they are stored.
- A broken connection is reported to the company's administrators.
Bring your client's integration questions.
Tell us which systems your clients run. We will say plainly which connections work today, which are in testing and which are not built yet.
Tell us what you store and ship, how many clients you serve and what you run today.
