> ## Documentation Index
> Fetch the complete documentation index at: https://seal-d2ca5bea.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# API documentation

> Access and modify data within Seal programmatically.

The Seal API enables programmatic access to your data and platform functionality. Rate limits are applied to ensure fair usage.

## Authentication

API requests require a bearer token. Organization Admins can generate, revoke, and rename API keys from **Settings → API Keys**.

```
Authorization: Bearer <your-api-key>
```

## Rate limits

Each API key is subject to two independent limits, both intentionally generous — well-behaved integrations rarely encounter either:

* **Request rate** — approximately **2,000 requests per minute** (per API key, per server instance).
* **Concurrent in-flight requests** — approximately **100 at a time** (per API key).

### Request-rate headers

Every response carries the current request-rate state in a rolling one-minute window:

| Header                  | Meaning                                         |
| ----------------------- | ----------------------------------------------- |
| `X-RateLimit-Limit`     | Requests allowed in the current window          |
| `X-RateLimit-Remaining` | Requests remaining in the current window        |
| `X-RateLimit-Reset`     | Unix timestamp (seconds) when the window resets |

When you exceed the request-rate limit the API returns **HTTP 429** with a `Retry-After` header (seconds). Back off for at least that many seconds; we recommend exponential backoff with jitter if you hit the limit repeatedly.

### Concurrent-request 429s

Exceeding the concurrency limit also returns **HTTP 429**, but its headers look different because concurrency has no fixed reset window — a slot frees as soon as any of your in-flight requests completes:

| Header                  | Meaning on a concurrency 429        |
| ----------------------- | ----------------------------------- |
| `X-RateLimit-Limit`     | Concurrent-request cap (e.g. `100`) |
| `X-RateLimit-Remaining` | Always `0` on this response         |
| `Retry-After`           | Seconds to wait (always `1`)        |

`X-RateLimit-Reset` is **not** set on a concurrency 429. If you need to distinguish the two 429 classes programmatically, inspect the response body — the `message` field names the specific limit that fired (`Rate limit exceeded: …` for request-rate, `Too many concurrent requests …` for concurrency).

If your integration legitimately needs a higher limit, contact [support@seal.run](mailto:support@seal.run).

## File upload size

Direct file uploads to Seal API endpoints must stay below **30 MiB**. The
backend runs on Cloud Run, whose HTTP request-body cap is 32 MiB; larger
requests can be rejected before Seal can return a JSON error.

For larger files, use the signed upload flow exposed by the v3 files API and
Python SDK. `seal.files.upload(...)` uses that flow automatically for files
larger than 30 MiB.

## API reference

Full API documentation: **[https://backend.seal.run/api/docs](https://backend.seal.run/api/docs)**

<Note>
  Enterprise customers may have a dedicated API URL. Contact [support@seal.run](mailto:support@seal.run) for your unique endpoint.
</Note>
