AnimeThemes API
AnimeThemes is a free, key-free API for anime opening and ending themes: series, songs, artists and hosted video and audio files, cross-linked and filterable. Live example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the AnimeThemes API?
AnimeThemes is a free, key-free REST API cataloguing anime opening and ending themes. It links anime to their themes, themes to songs, songs to performing artists, and each theme to hosted WebM video and audio files, with filtering, sparse fieldsets and includes across the whole graph.
Most anime APIs stop at series metadata. This one goes down a level that nothing else covers well: the actual songs. A single anime record can be expanded to its opening and ending themes, each theme to its song, each song to the artists who performed it, and each theme entry to the video files AnimeThemes hosts — which means you can go from a series title to a playable, correctly-timed opening in one request chain.
The API borrows JSON:API conventions without being strict about them. You get `include` for eager-loading relationships, `fields[anime]` for sparse fieldsets, `filter[...]` for narrowing and `page[size]` and `page[number]` for paging, so a well-constructed request returns exactly the graph you need and nothing else. Rate limiting is real and published in headers — 90 requests per minute — which is generous but easy to blow through if you fan out one request per series. Fetch broader pages with includes instead of looping over ids.
Quick facts
- Base URL
https://api.animethemes.moe- Authentication
- No key or account for public read access.
- Rate limit
- 90 requests per minute, reported in `X-RateLimit-Limit` and `X-RateLimit-Remaining` on every response.
- Pricing
- Free. Community-run and open source.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the AnimeThemes API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Fetch two anime records
GET https://api.animethemes.moe/anime?page%5Bsize%5D=2
curl 'https://api.animethemes.moe/anime?page%5Bsize%5D=2'const res = await fetch("https://api.animethemes.moe/anime?page%5Bsize%5D=2");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.animethemes.moe/anime?page%5Bsize%5D=2", timeout=20)
res.raise_for_status()
print(res.json()){
"anime": [
{
"id": 1,
"name": ".hack//Liminality",
"media_format": "OVA",
"season": "Spring",
"slug": "hackliminality",
"synopsis": "While playing the newly released MMORPG ‘The World’, Minase Mai and Tomonari Kasumi collapsed in the real world and were sent to the hospital after hearing a mysterious sound. Only Mai had recovered while her friend Kasumi had slipped into a mysterious coma. Mai is later approached by the creator of ‘The World’, Tokuoka Junichiro, who unveils to her that, just like her friend, six other players across the country had also collapsed while playing ‘The World’ and are now in mysterious comas. What exactly is ‘The World’, what is this mysterious sound Mai keeps on hearing, and why are people slipping into comas from this game? Minase, Junichiro and their acquaintances set off to get to the bottom of this problem before any further harm happens.\n\n[Written by MAL Rewrite]",
"year": 2002
},
{
"id": 2,
"name": ".hack//roots",
"media_format": "TV",
"season": "Spring",
"slug": "hackroots",
"synopsis": "After the destruction of \"The World\" in 2015, CC Corporation rebuilt the game using data from what was previously to be another game. \"The World R:2\" was then released in 2016. A newcomer to the game, Haseo, is instantly PKed and then revived by a mysterious man known as Ovan. With the problem of PKs occupying the game, Haseo soon after receives help from a female Harvest known as Shino. Amidst curiosity and cParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
page[size] | integer | Optional | Records per page. 2 |
page[number] | integer | Optional | Which page to fetch. 2 |
include | string | Optional | Comma-separated relationships to eager-load, e.g. `animethemes.song.artists`. This is how you get from a series to its music in one call. animethemes.song |
fields[anime] | string | Optional | Sparse fieldset — return only the listed attributes for that resource type. name,season,year |
filter[season] | string | Optional | Narrow by season, year, media format and other attributes. Spring |
q | string | Optional | Free-text search across the resource. cowboy bebop |
sort | string | Optional | Attribute to sort by; prefix with `-` to reverse. -year |
Response fields
anime[]array- The requested records. The top-level key is named after the resource, not a generic `data`.
anime[].idinteger- Stable numeric id.
anime[].namestring- Series title.
anime[].slugstring- URL-safe identifier used on the AnimeThemes site.
anime[].media_formatstring- `TV`, `OVA`, `Movie` and similar.
anime[].season / yearstring / integer- Broadcast season and year — the two fields most people filter on.
anime[].synopsisstring- Series synopsis. Contains HTML entities, so decode before rendering.
links / metaobject- Cursor-style paging links and totals, returned alongside the records.
What you can build with the AnimeThemes API
- Build an anime opening quiz that plays real audio
- Add theme song credits to an anime tracker or database
- Find every opening performed by a particular artist
- Assemble a seasonal playlist of new openings
- Practise sparse fieldsets and relationship includes against a real graph API
Common errors and how to fix them
429
You exceeded 90 requests in a minute.
Fix: Watch `X-RateLimit-Remaining`. Use `include` to fetch related records in one request rather than looping over ids.
Huge responses
You used `include` without `fields[...]`.
Fix: Combine them: include the relationship you need, then restrict each type's fields. Eager-loading everything is expensive on both ends.
HTML entities in text
Synopsis fields carry encoded entities such as `‘`.
Fix: Decode entities before rendering, or the apostrophes will show as literal escape sequences.
404 on a slug
Slugs are site identifiers and can change.
Fix: Prefer numeric ids for anything you store; treat slugs as display values.
AnimeThemes API — frequently asked questions
Is the AnimeThemes API free?
Yes, free with no key or account, limited to 90 requests per minute per IP. It is a community project and the limit is published in response headers so you can pace yourself.
Can I get the actual opening video files?
Yes. Theme entries link to video resources hosted by AnimeThemes, typically WebM, along with audio-only versions. That is the point of the project — it is a media archive with an API in front, not just a metadata list.
How do I get a series and its songs in one request?
Use `include`, for example `include=animethemes.song.artists`. Combine it with `fields[...]` for each type so the eager-loaded graph does not balloon the response.
How is this different from Jikan or Kitsu?
Those cover anime metadata broadly — synopses, ratings, episode lists. AnimeThemes covers the music specifically, down to individual openings, endings, performing artists and the hosted files themselves.
Tools that pair with this API
Audio Converter
Convert audio online for free. Turn any file into MP3, WAV, OGG, M4A or FLAC right in your browser with one tool — nothing is ever uploaded to a server.
MP4 to MP3 Converter
Extract the audio from an MP4 video and save it as an MP3 online, free. Pull music or speech out of any video right in your browser — nothing is uploaded.
JSON Path Finder
Evaluate a dot/bracket path against your JSON and list every leaf path for discovery. Free online JSON path finder that runs 100% in your browser.
AnimeThemes is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.