AnimeThemes has an official API https://staging.animethemes.moe/ and audio only mode is planned.
I will keep updating this whenever I can. I'll probably end up switching to a proper database again and do automatic updates.
This an AnimeThemes API written in Python. It works by scraping data from the subreddit (r/AnimeThemes) and saving it to different JSON files under 'data' folder. This is done by the scraping script that is present in the code.
The API is deployed in Heroku and is powered by Flask.
/api/v1/anime/:anime_id
Returns info related to an anime that is identified by the 'anime_id' (MyAnimeList anime's ID).
Example output:
/api/v1/anime/40060
{
"mal_id": 40060,
"title": ["BNA", "Brand New Animal"],
"cover": "https://cdn.myanimelist.net/images/anime/1139/106986.jpg",
"year": 2020,
"season": "Spring 2020",
"themes": [
{
"title": "Ready to",
"theme_id": "40060-00",
"type": "OP V1",
"artist": null,
"mirrors": [
{
"quality": "",
"mirror": "https://animethemes.moe/video/BrandNewAnimal-OP1.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/40060-00/0/audio"
}
],
"notes": "",
"episodes": "1-5",
"category": ""
},
{
"title": "Ready to",
"theme_id": "40060-01",
"type": "OP V2",
"artist": null,
"mirrors": [
{
"quality": "",
"mirror": "https://animethemes.moe/video/BrandNewAnimal-OP1v2.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/40060-01/0/audio"
}
],
"notes": "",
"episodes": "6-11",
"category": ""
},
{
"title": "NIGHT RUNNING",
"theme_id": "40060-02",
"type": "ED V1",
"artist": null,
"mirrors": [
{
"quality": "",
"mirror": "https://animethemes.moe/video/BrandNewAnimal-ED1.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/40060-02/0/audio"
}
],
"notes": "",
"episodes": "1-6",
"category": ""
},
{
"title": "NIGHT RUNNING",
"theme_id": "40060-03",
"type": "ED V2",
"artist": null,
"mirrors": [
{
"quality": "",
"mirror": "https://animethemes.moe/video/BrandNewAnimal-ED1v2.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/40060-03/0/audio"
}
],
"notes": "",
"episodes": "7-10",
"category": ""
},
{
"title": "NIGHT RUNNING",
"theme_id": "40060-04",
"type": "ED V3",
"artist": null,
"mirrors": [
{
"quality": "",
"mirror": "https://animethemes.moe/video/BrandNewAnimal-ED1v3.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/40060-04/0/audio"
}
],
"notes": "",
"episodes": "11",
"category": ""
}
]
}
/api/v1/artist/:artist_id
Returns info related to an artist that is identified by the 'artist_id' (MyAnimeList people's ID).
Example output (truncated):
/api/v1/artist/10561
{
"artist_id": 10561,
"name": "LiSA",
"cover": "https://cdn.myanimelist.net/images/voiceactors/2/36293.jpg",
"themes": [
{
"mal_id": 6547,
"title": "Angel Beats!",
"cover": "https://cdn.myanimelist.net/images/anime/10/22061.jpg",
"year": 2010,
"season": "Spring 2010",
"themes": [
{
"title": "My Soul, Your Beats!",
"theme_id": "6547-01",
"type": "OP2",
"artist": "LiSA",
"mirrors": [
{
"quality": "BD, 1080",
"mirror": "https://animethemes.moe/video/AngelBeats-OP2.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/6547-01/0/audio"
}
],
"notes": "",
"episodes": "4",
"category": ""
},
{
"title": "Ichiban no Takaramono ~Yui final ver.~",
"theme_id": "6547-03",
"type": "ED2",
"artist": "LiSA",
"mirrors": [
{
"quality": "Over",
"mirror": "https://animethemes.moe/video/AngelBeats-ED2.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/6547-03/0/audio"
}
],
"notes": "Spoiler",
"episodes": "10",
"category": ""
}
]
}
]
}
/api/v1/theme/:theme_id
Returns info related to a theme that is identified by the 'theme_id' (format: 'anime_id'-index).
Example output:
/api/v1/theme/40060-00
{
"title": "Ready to",
"theme_id": "40060-00",
"type": "OP V1",
"artist": null,
"mirrors": [
{
"quality": "",
"mirror": "https://animethemes.moe/video/BrandNewAnimal-OP1.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/40060-00/0/audio"
}
],
"notes": "",
"episodes": "1-5",
"category": ""
}
/api/v1/search/:search
Returns a dict containing list of anime, artists and themes.
Example output (truncated):
/api/v1/search/night
{
"anime": [
{
"mal_id": 3024,
"title": ["Ribbon no Kishi", "Princess Knight"],
"cover": "https://cdn.myanimelist.net/images/anime/2/4403.jpg",
"year": 60,
"season": "All 60s",
"themes": [
{
"title": "Ribbon No Kishi",
"theme_id": "3024-00",
"type": "OP",
"artist": null,
"mirrors": [
{
"quality": "DVD, 480",
"mirror": "https://animethemes.moe/video/RibbonNoKishi-OP1.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/3024-00/0/audio"
}
],
"notes": "",
"episodes": "",
"category": ""
},
{
"title": "Ribbon No March",
"theme_id": "3024-01",
"type": "ED",
"artist": null,
"mirrors": [
{
"quality": "DVD, 480",
"mirror": "https://animethemes.moe/video/RibbonNoKishi-ED1.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/3024-01/0/audio"
}
],
"notes": "",
"episodes": "",
"category": ""
}
]
}
],
"themes": [
{
"title": "Space Knights no Uta",
"theme_id": "1458-01",
"type": "ED",
"artist": null,
"mirrors": [
{
"quality": "480",
"mirror": "https://animethemes.moe/video/UchuuNoKishiTekkaman-ED1.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/1458-01/0/audio"
}
],
"notes": "",
"episodes": "",
"category": ""
}
],
"artist": [
{
"artist_id": 6201,
"name": "Nightmare",
"cover": "https://cdn.myanimelist.net/images/voiceactors/1/44467.jpg",
"themes": [
{
"mal_id": 1818,
"title": "Claymore",
"cover": "https://cdn.myanimelist.net/images/anime/3/21834.jpg",
"year": 2007,
"season": "Spring 2007",
"themes": [
{
"title": "Raison D'être",
"theme_id": "1818-00",
"type": "OP",
"artist": "Nightmare",
"mirrors": [
{
"quality": "NC, BD",
"mirror": "https://animethemes.moe/video/Claymore-OP1.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/1818-00/0/audio"
}
],
"notes": "",
"episodes": "",
"category": ""
}
]
}
]
}
]
}
/api/v1/search/anime/:search
Returns a dict containing list of anime.
/api/v1/search/artist/:search
Returns a dict containing list of artists.
/api/v1/search/theme/:search
Returns a dict containing list of themes.
/api/v1/theme/:theme_id/video
/api/v1/theme/:theme_id/:quality/video
Redirects to the requested mirror of a theme identified by 'theme_id'. 'quality' is the index of the desired mirror for that quality. Check theme's info for a list of mirrors.
/api/v1/theme/35062-00/1/video
Example output:
Redirection to https://animethemes.moe/video/MahoutsukaiNoYome-OP1-Lyrics.webm
/api/v1/theme/:theme_id/audio
/api/v1/theme/:theme_id/:quality/audio
Extracts the audio from the video file of the theme identified by 'theme_id' and uploads to ephemeral file system server (temporal storage). Then, it redirects to the download link.
/api/v1/season/all
Return a list of all years with their available seasons.
Example output (truncated):
{
"2000": ["Winter", "Spring", "Summer", "Fall"],
"2020": ["Winter", "Spring", "Summer", "Fall"]
}
/api/v1/season/years
Return a list of all years available.
Example output:
[
60, 70, 80, 90, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020
]
/api/v1/season/current
Return a list of all anime of the current year season.
Example output (truncated):
[
{
"anime_id": 41380,
"title": "100-man no Inochi no Ue ni Ore wa Tatteiru | I'm Standing on a Million Lives",
"cover": "https://cdn.myanimelist.net/images/anime/1825/108800.jpg",
"year": "2020",
"season": "Fall 2020",
"themes": ["41380-00", "41380-01", "41380-02"],
"__type__": "Anime"
}
]
/api/v1/season/:year
Return a list of all anime of the year divided by seasons.
Example output (truncated):
/api/v1/season/2019
{
"year": 2019,
"seasons": [
{
"season": "Winter",
"anime": [
{
"mal_id": 37956,
"title": ["3D Kanojo: Real Girl 2nd Season"],
"cover": "https://cdn.myanimelist.net/images/anime/1941/97219.jpg",
"year": 2019,
"season": "Winter 2019",
"themes": [
{
"title": "Futari nara",
"theme_id": "37956-00",
"type": "OP",
"artist": "BiSH",
"mirrors": [
{
"quality": "",
"mirror": "https://animethemes.moe/video/3DKanojoS2-OP1.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/37956-00/0/audio"
},
{
"quality": "NC, BD, 1080",
"mirror": "https://animethemes.moe/video/3DKanojoS2-OP1-NCBD1080.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/37956-00/1/audio"
}
],
"notes": "",
"episodes": "",
"category": ""
}
]
}
]
},
{
"season": "Spring",
"anime": [
{
"mal_id": 38735,
"title": ["7 Seeds", "7SEEDS"],
"cover": "https://cdn.myanimelist.net/images/anime/1305/96703.jpg",
"year": 2019,
"season": "Spring 2019",
"themes": [
{
"title": "Ark",
"theme_id": "38735-00",
"type": "OP",
"artist": null,
"mirrors": [
{
"quality": "",
"mirror": "https://animethemes.moe/video/7Seeds-OP1.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/38735-00/0/audio"
}
],
"notes": "",
"episodes": "",
"category": ""
}
]
}
]
},
{
"season": "Summer",
"anime": [
{
"mal_id": 38753,
"title": [
"Araburu Kisetsu no Otome-domo yo.",
"O Maidens in Your Savage Season"
],
"cover": "https://cdn.myanimelist.net/images/anime/1256/101166.jpg",
"year": 2019,
"season": "Summer 2019",
"themes": [
{
"title": "Otome-domo yo",
"theme_id": "38753-00",
"type": "OP V1",
"artist": "CHiCO",
"mirrors": [
{
"quality": "",
"mirror": "https://animethemes.moe/video/Araoto-OP1.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/38753-00/0/audio"
}
],
"notes": "",
"episodes": "1-4",
"category": ""
}
]
}
]
},
{
"season": "Fall",
"anime": [
{
"mal_id": 38670,
"title": ["Actors: Songs Connection"],
"cover": "https://cdn.myanimelist.net/images/anime/1383/103339.jpg",
"year": 2019,
"season": "Fall 2019",
"themes": [
{
"title": "Titania",
"theme_id": "38670-00",
"type": "OP",
"artist": null,
"mirrors": [
{
"quality": "",
"mirror": "https://animethemes.moe/video/Actors-OP1.webm",
"audio": "http://animethemes-api.herokuapp.com/api/v1/theme/38670-00/0/audio"
}
],
"notes": "",
"episodes": "",
"category": ""
}
]
}
]
}
]
}
/api/v1/mal/:user
/api/v1/mal/:user/:list_filter
Returns a list of the anime in the requested list identified by 'user' (MyAnimeList username) that are available in the data base.
Available filters:
- All: 7
- Watching: 1
- Completed: 2
- On hold: 3
- Dropped: 4
- Planning: 6
/api/v1/anilist/:user
/api/v1/anilist/:user/:list_filter
Returns a list of the anime in the requested list identified by 'user' (AniList username) that are available in the data base.
Available filters:
- 'CURRENT'
- 'PLANNING'
- 'COMPLETED'
- 'DROPPED'
- 'PAUSED'
- 'REPEATING'