API reference
Base URL https://animelove.dev/v1. Everything is GET, everything returns JSON.
Authentication
Pass your key in the X-API-Key header. Query-string keys are accepted but logged, so prefer the header.
curl -s https://animelove.dev/v1/title/alv_8f2c91 \
-H "X-API-Key: alv_live_..."
Endpoints
| Path | Purpose |
|---|---|
/season/{year}/{season} | All titles airing in a season. season is one of winter spring summer fall. |
/title/{id} | Full record for one title, including staff and related works. |
/search | Fuzzy title lookup. See parameters below. |
/studio/{id} | Studio record with a paginated production history. |
/changes | Records modified since a cursor. Use this instead of polling seasons. |
Search parameters
| Name | Type | Notes |
|---|---|---|
q | string | Required. Matched against romaji, english, native and known abbreviations. |
year | int | Restrict to a broadcast year. |
format | enum | tv, ova, ona, movie, special. |
limit | int | 1–100, default 20. |
Delta polling
GET /v1/changes?since=alv_cur_92f10b&limit=200
The response carries a next cursor. Store it and pass it back on the following call. Cursors stay valid for 30 days; an expired one returns 410 and you should do a full re-sync.
Errors
| Code | Meaning |
|---|---|
401 | Missing or unknown key. |
404 | No such id. Ids are opaque — do not construct them. |
410 | Cursor expired. |
429 | Rate limited. Honour Retry-After. |
Rate limits
60 requests/minute during beta, burst of 20. Limits are per key, not per IP. If you need more for something specific, ask — the ceiling is soft.
Caching
Season responses carry an ETag and a 15-minute max-age. Conditional requests with If-None-Match do not count against your rate limit, so use them freely.