All developer docs

Developer · REST API

SimpleDock API

Read availability and create or manage dock appointments from your own systems. A small, predictable REST API with a single Bearer key.

Open interactive reference

Authentication

Every request authenticates with a secret API key passed as a Bearer token. Create and manage keys in Settings → API & developers. Keys are Pro-only — the full secret (sd_live_…) is shown once at creation, so store it somewhere safe.

HTTP
Authorization: Bearer sd_live_your_key_here
Keep keys server-side
Treat keys like passwords. Never embed them in browser or mobile apps — call the API from your backend. Leaked a key? Revoke it instantly from the dashboard.

Base URL & your first call

All endpoints live under /api/v1. List your locations to confirm your key works:

cURL
curl https://simpledock.ai/api/v1/locations \
  -H "Authorization: Bearer sd_live_your_key_here"

Successful responses wrap the payload in a data field. List endpoints that paginate also return a nextCursor.

Create an appointment

Look up open slots with GET /availability, then create the appointment. The API books as a trusted actor, so appointments are confirmed immediately.

cURL
curl -X POST https://simpledock.ai/api/v1/appointments \
  -H "Authorization: Bearer sd_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "locationId": "loc_123",
    "appointmentTypeId": "type_123",
    "startTime": "2026-06-01T15:00:00Z",
    "companyName": "Acme Logistics",
    "contactEmail": "[email protected]"
  }'

Endpoints

The full surface, with schemas and a live console, is in the interactive reference. In short:

  • GET /locations, GET /locations/{id}
  • GET /locations/{id}/appointment-types, /doors, /operating-windows
  • GET /availability
  • GET /appointments, GET /appointments/{id}
  • POST /appointments — create
  • PATCH /appointments/{id} — reschedule and/or edit details
  • POST /appointments/{id}/approve, /reject, /check-in, /cancel, /status
  • GET /analytics — per-location summary

Errors

Errors use a stable envelope with a machine-readable code and an HTTP status:

JSON
{
  "error": {
    "code": "not_found",
    "message": "Location not found"
  }
}
  • 401 unauthorized — missing, invalid, revoked, or expired key
  • 402 payment_required — the org is not on an active Pro plan
  • 403 forbidden — the key lacks the required scope
  • 400 invalid_request — validation failed (see details)
  • 404 not_found — resource not in your organization
  • 409 conflict — no availability or an invalid state transition
  • 429 rate_limited — slow down (see Retry-After)

Scopes & rate limits

Each key carries scopes (locations:read, appointments:read, appointments:write, analytics:read); a request missing the required scope returns 403. Requests are rate limited per key — back off when you receive a 429 and honor the Retry-After header.