# API Reference

Build custom integrations with the Anomalia REST API. All endpoints require authentication and return JSON.

## Base URL

`https://anomalia.so/api/v1` 

## Authentication

Every request needs a `Bearer` token in the `Authorization` header.

### Supabase JWT (CLI / Web session)

Obtained via the CLI login flow. Auto-refreshes. Expires after ~1 hour.

`Authorization: Bearer <jwt_token>`

### API Key (integrations)

Long-lived key generated from the [dashboard](/app/api-keys). Full read & write access. Starts with `anomalia_`.

`Authorization: Bearer anomalia_live_...`

## Error Handling

All errors return a consistent JSON body:

`{ "error": "Human-readable message" }`

| Code | Meaning |
| --- | --- |
| `401` | Unauthorized — missing or invalid token |
| `403` | Forbidden — API key has no access to this brand |
| `404` | Not found |
| `405` | Method not allowed |
| `500` | Internal server error |

## Quick Start

```
export TOKEN="anomalia_live_..."

# List brands
curl -H "Authorization: Bearer $TOKEN" https://anomalia.so/api/v1/brands

# Get posts
curl -H "Authorization: Bearer $TOKEN" \
  https://anomalia.so/api/v1/brands/my-brand/posts

# Approve a post
curl -X POST -H "Authorization: Bearer $TOKEN" \
  https://anomalia.so/api/v1/brands/my-brand/posts/ID/approve
```

[

Next →

Brands

](/docs/api/brands)

---
Source: https://www.anomalia.so/docs/api
