Steve API
Get Started

Errors and Rate Limits

Common error envelopes, status codes, and throttling behavior.

Error envelopes

Steve does not use a single global error envelope across every surface. The response shape depends on the route family.

SurfaceError shape
External Integration API{ "error": "..." }
Workflow Agent API{ "error": "..." }
Invitation validate{ "valid": false, "error": "..." } for semantic failures, { "valid": false, "error": "missing_token" } for missing token
Invitation complete{ "success": false, "error": "..." }

Status code matrix

StatusWhere it appearsMeaning
200 OKMost successful reads/postsThe request completed successfully
201 CreatedReserved for future upload-session create endpointsResource was created
400 Bad RequestInvitation routes, agent validation, future submit endpointsMissing field, malformed body, or invalid state
401 UnauthorizedAPI-key and agent routesMissing, malformed, or invalid credentials
403 ForbiddenAPI-key and agent routesKey revoked, wrong owner, or insufficient role
404 Not FoundJob pollingSession not found
410 GonePlanned upload-session flowSession expired
422 Unprocessable EntityWebhook URL validation and future session validationSemantically invalid input
429 Too Many RequestsAPI-key and agent routesCaller exceeded a configured rate limit
500 Internal Server ErrorAny surfaceUnexpected server-side failure

External API rate limits

Rate limits are enforced per API key with fixed one-minute windows.

Limit bucketActive endpointsLimit
readGET /api/v1/companies, GET /api/v1/jobs/{sessionId}300 req/min
webhook_testPOST /api/v1/webhooks/test10 req/min
sessionReserved for planned session-create endpoints60 req/min
submitReserved for planned session-submit endpoints20 req/min

Successful responses include:

  • X-RateLimit-Limit
  • X-RateLimit-Remaining
  • X-RateLimit-Reset

When a limit is exceeded, Steve returns 429 plus:

  • Retry-After
  • X-RateLimit-Limit
  • X-RateLimit-Remaining: 0
  • X-RateLimit-Reset

Workflow agent rate limit

The private workflow agent is limited to 20 messages per minute per authenticated user.

Retry guidance

For 429 responses:

  1. Respect Retry-After.
  2. Add jitter.
  3. Keep usage below the published ceiling instead of running exactly at it.

The external API uses fixed windows rather than sliding windows, so a burst around a minute boundary can appear uneven. Design for headroom.

On this page