Skip to main content
All errors return a consistent JSON structure with an HTTP status code.
{
  "error": {
    "code": "error_code",
    "message": "Human-readable description",
    "detail": {}
  },
  "request_id": "req_abc123"
}

HTTP Status Codes

StatusDescription
400Bad request — invalid parameters or body
401Unauthorized — missing or invalid API key
403Forbidden — insufficient permissions
404Not found — resource does not exist or is not accessible
409Conflict — resource already exists
422Unprocessable — validation passed but operation failed
500Internal error

Common Error Codes

CodeDescription
unauthorizedMissing or invalid API key
forbiddenAPI key lacks required permission
not_foundResource not found
validation_errorRequest body failed schema validation
credential_not_foundRelay credential does not exist
tier_mismatchRelay instruction exceeds declared tier
engine_errorRelay browser automation failed

Pagination

List endpoints use cursor-based pagination:
{
  "data": [...],
  "pagination": {
    "has_more": true,
    "next_cursor": "clxyz..."
  },
  "request_id": "req_abc123"
}
Pass cursor and limit (1-100, default 25) as query parameters:
curl "https://api.selcor.ai/v1/workspaces?limit=10&cursor=clxyz..."