> ## Documentation Index
> Fetch the complete documentation index at: https://www.fluenterp.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Fluent API errors and rate limits

> Handle Fluent API failures and throttling consistently.

## Errors

Non-2xx responses generally contain:

```json theme={null}
{
  "detail": "Agent not found",
  "status": 404
}
```

Common statuses are:

| Status | Meaning |
| - | - |
| `400` | Invalid parameters or request body |
| `401` | Missing, invalid, expired, or unsupported credential |
| `403` | The credential is valid but lacks access or a required OAuth scope |
| `404` | The resource does not exist or is not visible to the caller |
| `409` | The resource's current state conflicts with the operation |
| `429` | A rate limit was exceeded |
| `500` | Fluent or an upstream service failed unexpectedly |

Do not retry most `4xx` responses without changing the request. Retry transient `429` and `5xx` responses with exponential backoff and jitter.

## Rate limits

Authenticated API traffic is limited to 100 requests per 60 seconds per credential. Some expensive operations have tighter limits:

The unauthenticated API index at `GET /api/v1` is limited to 100 requests per 60 seconds per client IP. Its successful responses carry the same live `RateLimit-*` fields, so you can verify the convention before obtaining a credential.

| Operation | Additional limit |
| - | - |
| Create an agent run | 30 requests per 60 seconds per agent |
| Read table records | 5 requests per 60 seconds per user |

### Rate limit headers

Every API response — not only a `429` — carries the current state of the tightest limit the request passed through, so a client can pace itself instead of waiting to be rejected:

| Header | Meaning |
| - | - |
| `RateLimit-Limit` | Requests allowed in the current window |
| `RateLimit-Remaining` | Requests still available in the current window |
| `RateLimit-Reset` | Seconds until the window resets |

A `429` adds `Retry-After` (also in seconds) and, for backwards compatibility, the older `x-ratelimit-limit`, `x-ratelimit-remaining`, and `x-ratelimit-reset` headers — note that `x-ratelimit-reset` is a Unix timestamp in seconds, while `RateLimit-Reset` is a delta.

Treat `Retry-After` as authoritative on a `429`: wait that many seconds, then retry with backoff and jitter.

<Tip>
  Poll an active run about once per second, stop as soon as it reaches a
  terminal state, and prefer webhooks when you need ongoing lifecycle updates.
</Tip>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.