Skip to content
thisDock / Partner API

One dock appointment.
Every system
in sync.

Connect a warehouse’s WMS, TMS and carrier systems through the dock appointment and the trailer.

REST + JSON · OpenAPI 3.1 · Cloudflare edge
Connected through the dock
WMSTMSCarrier / agent
thisDock Partner APIAppointment + trailer
driver.arrived01
door.assigned02
shipment.loaded03
driver.departed04
Your reference ids. One shared operational record.

Enter once. Keep it in sync.

Connect the WMS and TMS to the dock without double entry.

Events instead of phone calls.

Follow gate and yard activity as it happens through webhooks.

Privacy comes standard.

Warehouse-controlled permissions for every connected system.

From booking to departure

The dock, ready to integrate.

Explore what your connector can do. The reference is generated from the production API schema.

Quickstart

Find a slot.
Book it.
Follow the load.

thisDock issues one key per connector. Use the same appointment record to connect booking and warehouse execution.

Examples retain the spec’s sample dates and abbreviated ids. Replace them with your building id, appointment id and booking date before use.

Base URL

https://api.thisdock.com/v1

Authenticate with Authorization: Bearer tdk_live_…. Never put a key in browser code.

01 / Find an open slot
curl "https://api.thisdock.com/v1/availability?building_id=3f1c%E2%80%A6&date=2026-07-20&direction=outbound" \
  -H "Authorization: Bearer tdk_live_YOUR_KEY"
02 / Book the appointment
curl -X POST "https://api.thisdock.com/v1/appointments" \
  -H "Authorization: Bearer tdk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: YOUR_UNIQUE_REQUEST_ID" \
  --data '{
  "building_id": "3f1c…",
  "date": "2026-07-20",
  "time": "14:00",
  "direction": "outbound",
  "external_ref": "PO-123456",
  "external_ids": {
    "wms_order_id": "S-4471",
    "tms_trip_id": "1234"
  },
  "carrier": "Example Carrier",
  "trailer_number": "T-4471",
  "service_type": "drop",
  "pallet_count": 24,
  "weight_lbs": 42000,
  "contact_email": "[email protected]"
}'
03 / Read the full load
curl "https://api.thisdock.com/v1/appointments/APPOINTMENT_ID?expand=load" \
  -H "Authorization: Bearer tdk_live_YOUR_KEY"
Webhooks / operational visibility

Every milestone.
Back to your system.

Slim notifications tell your connector what changed. Fetch GET /v1/appointments/{id}?expand=load for the full record.

  1. 01

    Gate

    driver.arrived
  2. 02

    Door

    door.assigned
  3. 03

    Dock

    driver.docked
  4. 04

    Loaded

    shipment.loaded / shipment.unloaded
  5. 05

    Out

    driver.departed

The appointment is your connection point.

Also subscribe to appointment.created, appointment.updated, appointment.cancelled and trailer.requested. Use ping for tests.

Driver and yard events include appointment_id once matched to a truckload appointment, and always include your external_ref.

Deliveries retry after 1m, 5m, 30m, 2h and 12h.

Verify every delivery.

X-ThisDock-Signature: sha256=<hex> is an HMAC-SHA256 of the raw body using the subscription secret. Verify before parsing or processing the event.

Node.js / Verify the raw body
import { createHmac, timingSafeEqual } from "node:crypto";

// rawBody must be the original request bytes, before JSON parsing.
export function verifyThisDock(rawBody, signatureHeader, secret) {
  if (!/^sha256=[a-f0-9]{64}$/i.test(signatureHeader ?? "")) {
    return false;
  }
  const expected = createHmac("sha256", secret)
    .update(rawBody)
    .digest();
  const received = Buffer.from(signatureHeader.slice(7), "hex");
  return received.length === expected.length &&
    timingSafeEqual(received, expected);
}

// After verification, deduplicate on X-ThisDock-Delivery.
// Keep the subscription secret on your server.
Webhook reference →
Security & reliability

Access you can control.
Writes you can retry.

A key for each system

Separate WMS, TMS and agent keys, each with its own scopes and optional building scope. Keys are stored only as SHA-256 hashes, revoked instantly, and rotated with an overlap period.

Tenant isolation at the server

The key resolves the tenant server-side. Company ids in request bodies are ignored. Every call is audit-logged.

Sensitive data stays private

sensitive:read is off by default. Without it, driver/contact details, customs numbers and inspection records are omitted entirely from responses.

Retries without double-booking

Send an Idempotency-Key with writes. Replays within 24 hours return the original result. A retry cannot double-book an appointment.

Predictable integration behavior

Per-key rate limits default to 60 requests per minute. Wall-clock times use the building’s local timezone and include an IANA timezone field.

Serverless at the edge

REST and JSON at the Cloudflare edge, backed by Supabase Edge Functions. OpenAPI 3.1 describes the production interface.

Warehouse-granted scopes

appointments:readappointments:writeshipments:readshipments:writecheckins:readwebhooks:manageltl:pickupssensitive:read · off by default
Built for the dock

Real freight.
Real operational detail.

Inbound and outbound. Live and drop. Floor-loaded freight, hazmat, FTZ and bonded customs fields, seal photos and detention-relevant timestamps.

Connect WMS, TMS and carrier booking agents. Expanded load records include pallets, cases, floor-loaded and hazmat details, door and WMS status, plus customs data when the key permits it.

Build your connector

Your systems.
One connected dock.

Keys are issued per connector. Tell us what you want to connect.