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 referenceAuthentication
Every request authenticates with a secret API key passed as a Bearer token. Create and manage keys in Settings → API. Keys work on every plan and become available once the account owner confirms their email. The full secret (sd_live_…) is shown once at creation, so store it somewhere safe.
Authorization: Bearer sd_live_your_key_hereBase URL & your first call
All endpoints live under /api/v1. List your locations to confirm your key works:
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 start time must be one that GET /availability offers; any other time returns 409 conflict. The API books as a trusted actor, so appointments are confirmed immediately, even at locations that require approval. Send followApprovalRule: true to leave the appointment pending until staff approve it.
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-windowsPOST /locations,PATCH /locations/{id}: create a location, change its details and settingsPUT /locations/{id}/weekly-hours,/closures,POST /locations/{id}/appointment-types,/doors: set up bookingPATCH /locations/{id}/appointment-types/{typeId},PATCH /locations/{id}/doors/{doorId}: change a type or a door, or take it out of serviceGET /availabilityGET /appointments,GET /appointments/{id}POST /appointments— createPATCH /appointments/{id}— reschedule and/or edit detailsPOST /appointments/{id}/approve,/reject,/check-in,/cancel,/statusGET /analytics— per-location summary (Pro)POST /webhooks: send appointment events to your URL (Pro)
Errors
Errors use a stable envelope with a machine-readable code and an HTTP status:
{
"error": {
"code": "not_found",
"message": "Location not found"
}
}401 unauthorized— missing, invalid, revoked, or expired key402 payment_required— a Pro feature (such as analytics) or a Free plan limit403 forbidden— the key lacks the required scope400 invalid_request— validation failed (seedetails)404 not_found— resource not in your organization409 conflict— the time isn't offered or the status change isn't allowed429 rate_limited— slow down (seeRetry-After)
Scopes & rate limits
Each key carries scopes (locations:read, locations:write, appointments:read, appointments:receive, 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.