Navigation

Errors

All API errors return JSON with an error field describing what went wrong:

{ "error": "Description of what went wrong" }

Status codes

Status Meaning
400 Validation error — see error field for details
401 Missing or invalid API key
403 Plan doesn't allow this feature, or billing lapsed past grace
404 Resource not found
413 Request too large (over bulkRowsPerRequest)
429 Rate limit exceeded (X-RateLimit-Limit, Retry-After headers)
500 Server error — retry with exponential backoff
503 Transient infrastructure error — safe to retry

Retry strategy

429, 500, and 503 are safe to retry. Use exponential backoff:

Attempt Wait
1 (initial request)
2 1s
3 2s
4 4s
5 8s
6+ give up, log, alert

For 429, respect the Retry-After header rather than your backoff schedule — it tells you exactly when the rate limit window resets.

For 503, the response body always includes "transient": true to make it unambiguous from a permanent 503. Konduit's frontend uses bounded auto-retry on this signal.

Validation errors

400 responses include a human-readable error string. For multi-field forms, the error may include the offending field name:

{ "error": "priority must be one of: low, normal, high, urgent" }

For per-row validation in bulk inserts (POST /datatables/{tableId}/rows/bulk), individual row errors are reported in the response with row-level context — the request as a whole still returns 200 if at least some rows succeeded.

404 vs 403

404 means the resource doesn't exist or isn't visible to your API key. If you're certain it exists, double-check you're using the right key.

403 is reserved for: plan doesn't include the feature, billing has lapsed past grace, or your scoped key doesn't permit this action.

Next