Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.pickupbell.com/llms.txt

Use this file to discover all available pages before exploring further.

Every PickupBell error response has the same shape, regardless of status code:
{
  "error": {
    "code": "forbidden",
    "message": "missing scope: calls:read",
    "details": { "location_id": "…" }
  }
}

Error codes

error.codeHTTPMeaning
unauthorized401Missing, malformed, or revoked Bearer token.
forbidden403Token is valid but lacks the required scope, or target belongs to another location.
not_found404The resource (or the location it belongs to) doesn’t exist from this caller’s perspective.
validation400Your request body or query parameter is wrong. details may include a field-level reason.
conflict409The operation would create a duplicate or break an invariant (e.g. removing the sole location owner).
server500Unhandled server-side error. Safe to retry with idempotency.

Retries

  • 5xx responses are retry-safe — we return them specifically for transient conditions (database timeouts, upstream provider outages).
  • 4xx responses are not retry-safe; fix the request and resubmit.
  • All POST endpoints are idempotent over the same payload: retrying the same POST /leads with the same body within a short window will not create duplicates.

MCP errors

MCP uses JSON-RPC 2.0 error codes, mapped from ServiceError:
JSON-RPC codePickupBell codeNotes
-32600(malformed request)Raw JSON-RPC transport error
-32601(method / tool not found)
-32602validation
-32001unauthorizedMissing / invalid Bearer token
-32002forbiddenScope missing
-32003not_found
-32004conflict
-32603server
The error.data.httpStatus field on JSON-RPC errors carries the matching HTTP status for tools that round-trip through a REST proxy.