Skip to main content
ClawLink distinguishes between an action that couldn’t start (blocked — you can usually fix it and retry) and one that ran and failed (failed). Both are reported in a normalized shape so you can branch programmatically.

Error envelopes

Which envelope you get depends on the endpoint.

Canonical endpoints

POST /api/executions, GET /api/executions/{id}, and the discovery endpoints return an execution summary. On a problem, status is "blocked" or "failed":
  • blocked → the action never ran (policy, missing/expired connection, ambiguous connection). execution_id is null. Fix the cause and retry.
  • failed → the action ran and errored. execution_id is set.
  • recommended_next_action appears when the fix is to connect or re-auth an app.

Tool endpoint

POST /api/tools/{tool_name}/execute returns the raw payload with ok: false and a structured error, plus a canonical block mirroring the shape above:
error.retryable tells you whether retrying the same request could succeed (e.g. a transient rate_limit or network error).

Simple guard errors

Malformed requests and auth failures (before any execution) return a bare object:

HTTP status codes

Error codes

error_code (canonical) values and how to recover:
When present, the hint field contains concrete recovery guidance — for example, the upload-and-retry curl for a missing local file (see File uploads). Surface it; it’s written to be actionable.

Recovering connection problems

integration_not_connected and reauth_required come with a recommended_next_action pointing at the connect flow:
Connecting and re-authing apps is a hosted, browser-based flow done from the dashboard (Connections). Once the app is healthy, retry the original request unchanged.