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

# API Overview

> ezForge REST API reference

## Base URL

```
https://api.ezforge.ai/v1
```

## Authentication

All API endpoints require a Bearer token:

```bash theme={null}
Authorization: Bearer ezf_live_<your-api-key>
```

See [Authentication](/getting-started/authentication) for how to create API keys and manage scopes.

## Request format

* Content-Type: `application/json`
* All request bodies must be valid JSON

## Response format

All responses follow a consistent envelope:

```json theme={null}
{
  "data": { ... },
  "meta": {
    "cursor": "eyJpZCI6IjEyMyJ9",
    "hasMore": true,
    "total": 42
  }
}
```

The `meta` field is only present on list endpoints.

## Pagination

List endpoints use cursor-based pagination:

```
GET /v1/projects?limit=20&cursor=eyJpZCI6IjEyMyJ9
```

**Parameters:**

| Parameter | Type    | Default | Description                          |
| --------- | ------- | ------- | ------------------------------------ |
| `limit`   | integer | 20      | Max items to return (1–100)          |
| `cursor`  | string  | —       | Opaque cursor from previous response |

## Errors

```json theme={null}
{
  "error": {
    "code": "NOT_FOUND",
    "message": "Project not found",
    "details": { "projectId": "proj_abc123" }
  }
}
```

**Status codes:**

| Code  | Meaning                        |
| ----- | ------------------------------ |
| `200` | OK                             |
| `201` | Created                        |
| `204` | No Content                     |
| `400` | Bad Request                    |
| `401` | Unauthenticated                |
| `403` | Forbidden (insufficient scope) |
| `404` | Not Found                      |
| `409` | Conflict                       |
| `422` | Unprocessable Entity           |
| `429` | Rate Limited                   |
| `500` | Internal Server Error          |

## Rate limits

| Plan      | Limit                    |
| --------- | ------------------------ |
| Free      | 100 requests / minute    |
| Developer | 1,000 requests / minute  |
| Pro       | 10,000 requests / minute |

Rate limit headers are included in every response:

```
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1709000060
```

## Health check

```
GET /v1/health
```

Response:

```json theme={null}
{
  "status": "ok",
  "version": "1.0.0",
  "timestamp": "2026-03-09T20:00:00Z",
  "services": {
    "database": "ok"
  }
}
```
