Reference

forbidden

The key is valid, but it is not allowed to do this — either the scope is missing or the resource belongs to another workspace.

403HTTP 403 · Forbidden

What it means

The key is valid, but it is not allowed to do this — either the scope is missing or the resource belongs to another workspace.

Retry after fixing

Retrying unchanged will not help. Correct the cause, then send it again.

What causes it

  • The key was created without the scope this endpoint requires.
  • The resource id in the path belongs to a different workspace. Cross-tenant reads return 403 rather than 404 only where the caller is already known to be authenticated for something.
  • The endpoint is restricted to workspace owners and the key was issued to a member.

How to fix it

  • Check the scopes on the key against the endpoint's requirement in the API reference.
  • Issue a new key with the scope you need rather than widening an existing one — narrow keys are the point.
  • Confirm the resource id belongs to the workspace the key was issued in.

What the response looks like

403 application/problem+json
{
  "error": {
    "code": "forbidden",
    "message": "The key is valid, but it is not allowed to do this — either the scope is missing or the resource belongs to another workspace",
    "request_id": "7cb7f7862a82425d8e4c3fb8a497dfe6"
  },
  "type": "https://integrable.cloud/docs/errors/forbidden",
  "title": "Forbidden",
  "status": 403,
  "detail": "The key is valid, but it is not allowed to do this — either the scope is missing or the resource belongs to another workspace",
  "instance": "/api/bots/01a0652b-3713-7ea1-a6c9-2e895389ec34"
}

Branch on error.code, not on the message — the code is stable, the sentence is not. Log request_id either way.

Still stuck

Quote the request_id from the response — hello@integrable.cloud. It is what lets us find the exact request. The full list of codes is at Error codes, and the conventions every endpoint shares are in Retries, versioning and limits.

Something here wrong or missing? Tell us — the documentation and the API are maintained by the same person, so a correction is a fix rather than a ticket.

Building on it? Start on the free plan — no card — and call the same API the dashboard uses.

Start free