Guides

Request logs

Every call your API keys make is recorded, with its status, latency and error code. When something is failing you can see what we saw, rather than guessing from a status code.

For
Anyone debugging a call that did not do what they expected
You will need
An API key with the logs scope
About
4 minutes to read

Reading the log

curl
curl "https://api.integrable.cloud/api/logs?limit=20" \
  -H "Authorization: Bearer $INTEGRABLE_API_KEY"
response
{
  "items": [
    {
      "id": "01a0670f-...",
      "request_id": "7cb7f7862a82425d8e4c3fb8a497dfe6",
      "method": "POST",
      "path": "/bots/{bot_id}/knowledge",
      "status_code": 402,
      "duration_ms": 118,
      "error_code": "quota_exceeded",
      "ip": "203.0.113.24",
      "user_agent": "integrable-cloud-python/0.1.0",
      "idempotency_replayed": false,
      "created_at": "2026-09-03T14:22:09.481Z",
      "api_key_id": "01a0654a-...",
      "api_key_name": "CRM sync"
    }
  ],
  "has_more": true,
  "next_cursor": "eyJrIjoiMjAyNi0wOS0wM1QxNDoyMjowOVoi..."
}

Newest first, cursor-paginated. Follow next_cursor — there is deliberately no total, because counting this table exactly means scanning the fastest-growing thing your workspace owns to produce a number nobody acts on.

The lookup to use when something breaks

Every API response carries an X-Request-ID. Feed it back and you get that exact call:

curl
curl "https://api.integrable.cloud/api/logs?request_id=$REQUEST_ID" \
  -H "Authorization: Bearer $INTEGRABLE_API_KEY"

This is also what to quote at support — we look up the same row, so there is no round of “can you reproduce it”.

Filters

ParameterDoes
status_class2xx, 3xx, 4xx, 5xx, or errors for everything ≥ 400
api_key_idOne key — what is this integration actually doing
methodGET, POST, PATCH, DELETE
path_containsSubstring of the path, e.g. knowledge
request_idOne exact call
since_hoursHow far back to look, up to 90 days
limit / cursorPage size (max 200) and where to continue

4xx and 5xx are worth separating rather than filtering on errors: a 4xx is something your client sent, a 5xx is ours.

The summary

curl
curl "https://api.integrable.cloud/api/logs/summary?hours=24" \
  -H "Authorization: Bearer $INTEGRABLE_API_KEY"
response
{
  "requests": 1842,
  "errors": 37,
  "server_errors": 2,
  "rate_limited": 11,
  "replays": 4,
  "keys_used": 3,
  "avg_ms": 96,
  "p95_ms": 412,
  "error_rate": 0.0201,
  "window_hours": 24,
  "endpoints": [
    { "method": "GET", "path": "/bots/{bot_id}/conversations",
      "requests": 1204, "errors": 3, "avg_ms": 88 }
  ]
}

p95_ms alongside the mean on purpose: a mean hides exactly the case you are debugging, which is a call that is usually fast and occasionally is not.

rate_limited is the one to watch in a batch job. If it is climbing, read the RateLimit-* headers and slow down — see rate limits.

What is and is not recorded

  • Only API-key traffic. Requests made by the dashboard are not logged — they are not your integration, and logging them would bury the rows you came here to find.
  • No bodies, ever. Not the request, not the response. On a failure the machine-readable error_code is stored but never the message, because a message can quote your own data back.
  • The templated path (/bots/{bot_id}), not the concrete one. The specific id is in the call you made; the pattern is what makes “which endpoint is slow” answerable.
Because bodies are not stored, this log tells you that a call failed validation and which code it returned, not which field was wrong. That is a deliberate trade: the alternative is a table holding your customers' messages and contact details, readable by everyone on your team.

Retention

PlanKept for
Free1 day
Starter7 days
Pro30 days
Business90 days
Enterprise1 year

Export anything you need to keep longer — the log is for debugging, not an archive.

Access

Reading the log requires an admin seat. It names every endpoint your integrations touch and the addresses they call from, which is closer to how your systems are wired than to ordinary workspace data.

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