AniTrack API

Developers

The AniTrack public API lets third-party integrations read and manage your list on your behalf. All endpoints are versioned and served from https://anitrack.app/api/v1.

Overview

The API uses JSON request/response bodies, bearer-token authentication, and conventional HTTP status codes. Every authenticated endpoint acts as the token's owner — there are no "admin" or "impersonation" flows.

Getting a Token

You can mint a token in two ways:

  1. From the Settings pageAPI Tokens — recommended for personal integrations. The plain-text token is shown once; copy it immediately.
  2. By calling POST /auth/token with a user's email + password — suitable for clients that need a sign-in flow.
Treat tokens like passwords. Anyone with a token can read and modify that user's list. Revoke unused tokens from the settings page.

Making Requests

Pass the token on every request in the Authorization header:

Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
Accept: application/json

All dates are ISO-8601 (UTC). Scores are stored on a 0–100 scale; the UI divides by ten for display.

Rate Limits

Authenticated endpoints are capped at 60 requests / minute per token. The token-issuance endpoint is capped at 5 requests / minute per email and per IP to deter credential stuffing. Exceeding these limits returns 429 Too Many Requests.

Errors

Errors are returned as JSON with a message field and, for validation failures, an errors object keyed by field name.

{
  "message": "The given data was invalid.",
  "errors": {
    "status": ["The status field is required."]
  }
}

Common codes: 401 missing / invalid token, 403 feature not enabled for this account, 404 resource not found, 422 validation failed, 429 rate-limited.

Versioning

Endpoints live under /api/v1. Breaking changes will ship under a new major version; within v1 we will only add fields, never remove or rename them.

Authentication

Issue a token

POST/auth/token Requires email + password

Exchange an AniTrack email and password for a bearer token. Returns the plain-text token once — store it securely. Subject to the strict auth rate limit (5 requests / minute / IP + email).

Parameters

NameInTypeNotes
email*bodystring
password*bodystring
device_name*bodystringShown on your settings page so you can identify the client. Max 120 chars.
curl -X POST https://anitrack.app/api/v1/auth/token \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]","password":"…","device_name":"My Integration"}'

List tokens

GET/auth/tokens Requires bearer token

List your active API tokens (same data shown in the settings page).

curl https://anitrack.app/api/v1/auth/tokens \
  -H "Authorization: Bearer YOUR_TOKEN"

Revoke the current token

DELETE/auth/token Requires bearer token

Revoke the token used on this request. Useful for client "sign out" flows.

curl -X DELETE https://anitrack.app/api/v1/auth/token \
  -H "Authorization: Bearer YOUR_TOKEN"

Revoke a specific token

DELETE/auth/tokens/{id} Requires bearer token

Revoke another token belonging to your account.

Parameters

NameInTypeNotes
id*pathinteger
curl -X DELETE https://anitrack.app/api/v1/auth/tokens/42 \
  -H "Authorization: Bearer YOUR_TOKEN"

Current User

Fetch the authenticated user

GET/user Requires bearer token

Returns the profile of the user who owns the bearer token.

curl https://anitrack.app/api/v1/user \
  -H "Authorization: Bearer YOUR_TOKEN"

Anime

Get anime by AniList ID

GET/anime/anilist/{anilistId} Requires bearer token

Primary lookup path when you only have an AniList ID (for example, from an anilist.co page). Returns 404 if AniTrack has not yet synced that anime.

Parameters

NameInTypeNotes
anilistId*pathinteger
curl https://anitrack.app/api/v1/anime/anilist/101922 \
  -H "Authorization: Bearer YOUR_TOKEN"

Get anime by slug

GET/anime/{slug} Requires bearer token

Full anime detail with genres, studios and external IDs.

Parameters

NameInTypeNotes
slug*pathstring
curl https://anitrack.app/api/v1/anime/demon-slayer-kimetsu-no-yaiba \
  -H "Authorization: Bearer YOUR_TOKEN"

User List

Get your list

GET/list Requires bearer token

Returns all list entries belonging to the token owner, most-recently-updated first.

Parameters

NameInTypeNotes
statusquerystringOne of watching, completed, on_hold, dropped, plan_to_watch
curl "https://anitrack.app/api/v1/list?status=watching" \
  -H "Authorization: Bearer YOUR_TOKEN"

Check if an anime is on your list

GET/list/anime/{animeId} Requires bearer token

Returns the list entry for the given anime, or 404 if the user has not added it.

Parameters

NameInTypeNotes
animeId*pathinteger
curl https://anitrack.app/api/v1/list/anime/1234 \
  -H "Authorization: Bearer YOUR_TOKEN"

Add an anime to your list

POST/list Requires bearer token

Scores are stored on a 0–100 scale. Progress is auto-completed when it reaches the anime's episode count.

Parameters

NameInTypeNotes
anime_id*bodyinteger
status*bodystringwatching | completed | on_hold | dropped | plan_to_watch
scorebodyinteger0–100
progressbodyinteger
started_atbodydate
completed_atbodydate
notesbodystringMax 2000 chars
is_privatebodyboolean
curl -X POST https://anitrack.app/api/v1/list \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"anime_id":1234,"status":"watching","progress":3}'

Update a list entry

PATCH/list/{entryId} Requires bearer token

Partial update — send only the fields you want to change.

Parameters

NameInTypeNotes
entryId*pathinteger
statusbodystring
scorebodyinteger0–100
progressbodyinteger
is_rewatchingbodyboolean
rewatch_countbodyinteger
tagsbodystring[]
curl -X PATCH https://anitrack.app/api/v1/list/987 \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"progress":12,"score":85}'

Remove a list entry

DELETE/list/{entryId} Requires bearer token

Soft-deletes the entry.

Parameters

NameInTypeNotes
entryId*pathinteger
curl -X DELETE https://anitrack.app/api/v1/list/987 \
  -H "Authorization: Bearer YOUR_TOKEN"