Anime API endpoint
Searches anime by free-text query. Returns entries: titles, scores, popularity, format, status, season, genres, tags, and studios.
/anime/searchSearches anime by free-text query. Anime data from AniList (anilist.co). Returns entries.
Query parameters:
query (required) — search text, e.g. Frieren.sort (optional, default SEARCH_MATCH) — one of SEARCH_MATCH, POPULARITY_DESC, SCORE_DESC, TRENDING_DESC, FAVOURITES_DESC, START_DATE_DESC.page (optional, default 1) — 1-based page number.per_page (optional, default 10, max 50).Response includes total, has_next_page, and results[]: id, id_mal, type, title (romaji/english/native), format, status, average_score, mean_score, popularity, favourites, season, season_year, episodes, duration, genres, tags[] (name, rank), studios, cover_image, site_url.
| Field | Filled in, of 6 checked | Values in the sample |
|---|---|---|
| id | 6 | |
| id_mal | 4 | |
| type | 6 | ANIME in all 6 |
| title | 6 | |
| format | 6 | TV (3), ONA (3) |
| status | 6 | FINISHED (5), NOT_YET_RELEASED (1) |
| description | 6 | median 592 characters |
| season | 6 | FALL (3), WINTER (2), SPRING (1) |
| season_year | 6 | 2,023 to 2,027, median 2,025 |
| start_date | 6 | |
| end_date | 5 | |
| episodes | 5 | 6 to 28, median 10 |
| duration | 5 | 1 to 24, median 1 |
| average_score | 5 | 68 to 91, median 73 |
| mean_score | 5 | 72 to 91, median 73 |
| popularity | 6 | 2,322 to 489,460, median 11,107 |
| favourites | 6 | 27 to 56,297, median 109 |
| trending | 4 | 1 to 30, median 1 |
| genres | 6 | median 2 entries |
| tags | 6 | median 5 entries |
| studios | 6 | median 2 entries |
| country_of_origin | 6 | JP in all 6 |
| cover_image | 6 | s4.anilist.co |
| banner_image | 3 | s4.anilist.co |
| site_url | 6 | anilist.co |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| query | string | Yes | Search text | Frieren | |
| sort | string | No | Ordering: SEARCH_MATCH, POPULARITY_DESC, SCORE_DESC, TRENDING_DESC, FAVOURITES_DESC, START_DATE_DESC. Default SEARCH_MATCH. Allowed values: SEARCH_MATCH, POPULARITY_DESC, SCORE_DESC, TRENDING_DESC, FAVOURITES_DESC, START_DATE_DESC. | ||
| page | integer | No | 1-based page number, default 1 | ||
| per_page | integer | No | Results per page, default 10, max 50 | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/anime/search?query=Frieren&sort=SEARCH_MATCH&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "Frieren",
"page": 1,
"per_page": 10,
"total": 1,
"has_next_page": false,
"results": [
{
"id": 154587,
"id_mal": 52991,
"type": "ANIME",
"title": {
"romaji": "Sousou no Frieren",
"english": "Frieren: Beyond Journey's End"
},
"format": "TV",
"status": "FINISHED",
"average_score": 91,
"popularity": 456965,
"episodes": 28,
"season": "FALL",
"season_year": 2023,
"genres": [
"Adventure",
"Drama",
"Fantasy"
],
"studios": [
"MADHOUSE"
],
"site_url": "https://anilist.co/anime/154587"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/anime.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | anime.SearchResponse | No | ||||
| data.has_next_page | boolean | No | false | True when more pages of results are available. | ||
| data.page | integer | No | 1 | Page number returned. | ||
| data.per_page | integer | No | 10 | Number of results per page. | ||
| data.query | string | No | Frieren | Search text that was run. | ||
| data.results | array | No | Matching titles on this page. | |||
| data.results[].average_score | integer | No | 91 | Average user score on AniList, from 0 to 100. | ||
| data.results[].banner_image | string | No | URL of the banner image. | |||
| data.results[].chapters | integer | No | Number of chapters, for manga. | |||
| data.results[].country_of_origin | string | No | JP | Two-letter code of the country the title comes from, for example `JP`. | ||
| data.results[].cover_image | string | No | URL of the cover image. | |||
| data.results[].description | string | No | Synopsis of the title. | |||
| data.results[].duration | integer | No | 24 | Length of one episode in minutes. | ||
| data.results[].end_date | object | No | Date the title finished airing or publishing. | |||
| data.results[].end_date.day | integer | No | 29 | Day of the month. Omitted when AniList does not know it. | ||
| data.results[].end_date.month | integer | No | 9 | Month of the date, 1 to 12. Omitted when AniList does not know it. | ||
| data.results[].end_date.year | integer | No | 2023 | Year of the date. Omitted when AniList does not know it. | ||
| data.results[].episodes | integer | No | 28 | Number of episodes. | ||
| data.results[].favourites | integer | No | 54038 | Number of AniList users who marked the title as a favourite. | ||
| data.results[].format | string | No | TV | Release format, for example `TV`, `MOVIE` or `OVA`. | ||
| data.results[].genres | array | No | Adventure,Drama,Fantasy | Genres of the title. | ||
| data.results[].id | integer | No | 154587 | AniList id of the title. | ||
| data.results[].id_mal | integer | No | 52991 | MyAnimeList id of the same title. | ||
| data.results[].is_adult | boolean | No | True when AniList marks the title as adult content. | |||
| data.results[].mal | object | No | MyAnimeList community score. Present only when requested and the title has a MyAnimeList entry. | |||
| data.results[].mal.max | integer | No | 10 | Highest possible score on MyAnimeList. | ||
| data.results[].mal.score | number | No | 9.26 | MyAnimeList community score, on a 0 to 10 scale. | ||
| data.results[].mal.scored_by | integer | No | 911901 | Number of MyAnimeList users who scored the title. | ||
| data.results[].mal.url | string | No | Link to the title's page on MyAnimeList. | |||
| data.results[].mean_score | integer | No | 91 | Mean user score on AniList, from 0 to 100. | ||
| data.results[].next_airing_episode | object | No | Countdown to the next episode. Present only while the title is releasing. | |||
| data.results[].next_airing_episode.airing_at | integer | No | 1704900600 | Time the next episode airs, in Unix seconds. | ||
| data.results[].next_airing_episode.episode | integer | No | 13 | Episode number that airs next. | ||
| data.results[].next_airing_episode.time_until_airing | integer | No | 259200 | Seconds until the next episode airs. | ||
| data.results[].popularity | integer | No | 456965 | Number of AniList users who have the title in their lists. | ||
| data.results[].season | string | No | FALL | Season the title aired in: `WINTER`, `SPRING`, `SUMMER` or `FALL`. | ||
| data.results[].season_year | integer | No | 2023 | Year of the season the title aired in. | ||
| data.results[].site_url | string | No | https://anilist.co/anime/154587 | Link to the title's page on AniList. | ||
| data.results[].start_date | object | No | Date the title started airing or publishing. | |||
| data.results[].start_date.day | integer | No | 29 | Day of the month. Omitted when AniList does not know it. | ||
| data.results[].start_date.month | integer | No | 9 | Month of the date, 1 to 12. Omitted when AniList does not know it. | ||
| data.results[].start_date.year | integer | No | 2023 | Year of the date. Omitted when AniList does not know it. | ||
| data.results[].status | string | No | FINISHED | Release status, for example `FINISHED` or `RELEASING`. | ||
| data.results[].studios | array | No | MADHOUSE | Names of the animation studios. | ||
| data.results[].tags | array | No | Community tags of the title, each with a relevance rank. | |||
| data.results[].tags[].category | string | No | Cast-Main Cast | Group the tag belongs to, for example `Cast-Main Cast`. | ||
| data.results[].tags[].is_spoiler | boolean | No | True when the tag is a spoiler. | |||
| data.results[].tags[].name | string | No | Elf | Tag name, for example `Elf`. | ||
| data.results[].tags[].rank | integer | No | 91 | How strongly the tag applies to the title, from 0 to 100. | ||
| data.results[].title | object | No | Title in romaji, English and native script. | |||
| data.results[].title.english | string | No | Frieren: Beyond Journey's End | Official English title. | ||
| data.results[].title.native | string | No | 葬送のフリーレン | Title in its original language and script. | ||
| data.results[].title.romaji | string | No | Sousou no Frieren | Title in Latin script (romaji). | ||
| data.results[].trending | integer | No | 120 | AniList trending score of the title. | ||
| data.results[].type | string | No | ANIME | Kind of title: `ANIME` or `MANGA`. | ||
| data.results[].volumes | integer | No | Number of volumes, for manga. | |||
| data.total | integer | No | 1 | Total number of matching titles. | ||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/anime/search?query=Frieren&sort=SEARCH_MATCH&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"