# List projects

> Your projects, newest first.

`GET https://api.codebuckets.clatterlabs.xyz/v1/projects` (key permission: `buckets:read`)

Returns your Code Buckets projects, newest first, each with its bucket count.

## Authorizations

- `Authorization` (string, required): Your API key as a bearer token: `Bearer clsk_...`. Create keys in the [Console](https://console.clatterlabs.com/api-keys) with the Code Buckets permissions you need.
- `X-Clatter-Account` (string, required): The Account ID that owns the key, like `CL-7K2M9QXA`. Find it in Console › Settings. A missing value answers `401 missing_account_id`; someone else's answers `401 account_mismatch`.

## Query parameters

- `limit` (integer, default 50): How many to return, 1 to 100.
- `before` (string): A `created_at` (or `at`) timestamp: return items before it, for paging.

## Response

- `object` (string): Always `list`.
- `data` (Project[]): Projects, newest first.
- `has_more` (boolean): `true` when older projects exist: pass the last `created_at` as `before`.

## Example request

```bash
curl "https://api.codebuckets.clatterlabs.xyz/v1/projects?limit=20" \
  -H "Authorization: Bearer $CLATTER_API_KEY" \
  -H "X-Clatter-Account: $CLATTER_ACCOUNT_ID"
```

## Errors

| Status | Code | When |
| --- | --- | --- |
| `401` | `invalid_api_key / missing_account_id / account_mismatch` | The key or Account ID is wrong. |
| `402` | `quota_exceeded` | This month's free tokens are used up. |
| `403` | `insufficient_scope` | The key lacks the permission. |

## Example response

```json
{
  "object": "list",
  "data": [
    {
      "object": "project",
      "id": "cbp_4k9x2m7q1n8v3c6z0b5w",
      "project_id": "cbp_4k9x2m7q1n8v3c6z0b5w",
      "name": "storefront",
      "description": "Web shop and its assets",
      "buckets": 1,
      "created_at": "2026-10-28T14:05:11.482Z",
      "updated_at": "2026-10-28T14:05:11.482Z"
    }
  ],
  "has_more": false
}
```


