POST /api/v2/anime/search/

Search

Full-text catalog search across anime, animation, movies and series, with pagination.

Overview

Returns matching titles with cover art, genre, release date and rating. Each item has a subjectId and a detailPath: pass detailPath to Details, and both to Media Sources. One catalog covers anime and general movies; use subjectType to bias results and the genre field to split anime from everything else.

POST https://api.animedoc.cloud/api/v2/anime/search/
X-API-Key: <your key>

Parameters

NameInTypeRequiredDefaultDescription
keywordbodystringyes—What to search for.
pagebodyintegerno1Page number, starting at 1.
perPagebodyintegerno15Results per page.
subjectTypebodyintegerno00 = everything, 1 = movies, 2 = series.

Example request

cURL
curl -X POST "https://api.animedoc.cloud/api/v2/anime/search/" \
  -H "X-API-Key: $ANIMEDOC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"keyword":"naruto","page":1,"perPage":15,"subjectType":0}'
JavaScript (Node 18+)
const res = await fetch("https://api.animedoc.cloud/api/v2/anime/search/", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.ANIMEDOC_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"keyword":"naruto","page":1,"perPage":15,"subjectType":0}),
});
if (res.status === 429) {
  console.log("Rate limited, retry in", res.headers.get("Retry-After"), "s");
}
const { data } = await res.json();
console.log(data);
Python
import os
import requests

res = requests.post(
    "https://api.animedoc.cloud/api/v2/anime/search/",
    headers={"X-API-Key": os.environ["ANIMEDOC_API_KEY"]},
    json={"keyword":"naruto","page":1,"perPage":15,"subjectType":0},
    timeout=15,
)
if res.status_code == 429:
    print("Rate limited, retry in", res.headers["Retry-After"], "s")
res.raise_for_status()
print(res.json()["data"])

Example response

{
  "code": 0,
  "message": "ok",
  "data": {
    "pager": { "hasMore": true, "totalCount": 48 },
    "items": [
      {
        "subjectId": "3325889774849773352",
        "subjectType": 2,
        "title": "Naruto",
        "description": "Naruto Uzumaki, a young ninja, seeks recognition...",
        "releaseDate": "2002-10-03",
        "genre": "Animation,Action,Adventure",
        "cover": { "url": "https://.../naruto.jpg" },
        "countryName": "Japan",
        "imdbRatingValue": "8.4",
        "subtitles": "English,Spanish",
        "hasResource": true,
        "detailPath": "naruto-2D7JgAQBGX3"
      }
    ]
  }
}

Error codes

StatusBodyWhat it means
400{"error": "Missing detailPath query parameter"}A required parameter is missing or invalid.
401{"detail": "An API key is required. Send it as the X-API-Key header. ..."}No X-API-Key header, or the key doesn't exist (Invalid API key). Every catalog endpoint needs a key; get a free one at /docs/pricing.
403{"detail": "Playback through the API needs a paid plan ..."}Your plan doesn't include this endpoint. The stream proxy needs a paid plan.
404{"error": "No playable source is available ..."}The title or episode doesn't exist, or has no playable source right now.
429{"error": "rate_limit_exceeded"} or {"error": "daily_quota_exceeded"}Over your plan's requests per minute or per day. Wait Retry-After seconds, or upgrade.
502{"error": "...", "details": "..."}The content provider didn't answer in time. Safe to retry with backoff.

When you go over a limit you get 429 Too Many Requests with a Retry-After header (seconds):

HTTP/1.1 429 Too Many Requests
Retry-After: 34
Content-Type: application/json

{
  "error": "rate_limit_exceeded",
  "detail": "Your free plan allows 10 requests per minute. Slow down and retry in 34s.",
  "limit": 10,
  "window": "minute",
  "retry_after_seconds": 34,
  "upgrade_url": "https://animedoc.cloud/pricing"
}

Rate limits per plan

PlanRequests / dayRequests / minuteStream proxyPrice
Free2010No$0
Starter3,00060Yes$12/month or $60/6 months
Pro20,000300Yes$22/month or $110/6 months
Business500,000+CustomYesFrom $100/month
3-Day Pass2,00060Yes$1 for 3 days

Every call made with your API key counts as one request. Daily quotas reset at 00:00 UTC. See rate limits for headers and retry advice, or pricing to raise your limits.