Tool Docs · v1.4.0

Anime ID Finder

Resolve any AniList ID to a provider-native id across all 7 providers. Single-provider mode returns the native id + ready-to-use /sources URL. All-providers mode resolves across every provider in parallel and tells you which ones have the anime — useful for fallback chains and availability checks.

Providers
7
animetsu · anikuro · animeyubi · miruro · animex · anilight · anipm
Modes
2
Single provider · All providers
Cache TTL
30 min
In-memory per provider+anilist
Cold lookup
~2-3s
Per provider (parallel in all-mode)

Overview

Every provider in this scraper has its own native id format — animetsu uses 24-char Mongo ObjectIds, anikuro uses numerics, anipm uses a composite anipm:{id}:{slug}, miruro/animex/anilight use AniList IDs natively. End-users never know these — but they DO know the AniList id (visible in every anilist.co URL).

The ID Finder bridges that gap. Pass an AniList ID and (optionally) a provider, get back the native id, the universal id, and a ready-to-use /sources URL. Useful for debugging, caching, building fallback chains, or passing the native id to a non-API consumer.

Important: You do not need this tool to use the API. Every endpoint already accepts the universal id al:{anilistId} and resolves it automatically. This tool exists for when you want to see the underlying native id explicitly.

UI Tool

The interactive UI lives at /animetsu-id (URL kept for backwards compatibility — the page itself is now the universal "Anime ID Finder"). Features:

  • Single input box — paste AniList ID or full anilist.co URL.
  • Provider dropdown — pick one of 7 providers, or "All Providers".
  • Single-provider mode: shows cover image, matched title, native id (with copy button), universal id, ready-to-use /sources URL, resolution trace, and quick-jump buttons to /sources, /info, /episodes.
  • All-providers mode: shows a per-provider breakdown with availability badges, native ids, and direct links. Includes a "best provider" hint (first provider that resolved in priority order).
  • 6 popular AniList IDs as one-click examples (Frieren, One Piece, FMA: Brotherhood, JJK, Solo Leveling, AoT).
URLtext
https://your-deployment.example.com/animetsu-id

Why Use It

Debug failed resolution

When al:{anilistId} doesn't resolve on a provider, /find-id returns the list of titles that were tried. You can see exactly why it failed — maybe the provider lists it under a synonym you didn't expect.

Cache native ids client-side

If you're hitting /sources many times for the same anime, call /find-id once, cache the native id, and pass it directly to /sources on subsequent calls. Skips the resolution overhead.

Build provider fallback chains

All-providers mode tells you which providers have a given anime. Use this to build a 'try animetsu, fall back to anipm, fall back to miruro' chain in your client.

Pass native id to external tools

If you have a script or tool that doesn't speak the universal al:{id} format, /find-id gives you the raw native id to pass directly.

Inspect provider coverage

All-providers mode shows you exactly which providers have each anime. Useful for analytics: 'what % of my catalog is on animetsu vs anipm?'

Show users the underlying id

For transparency — let users see the actual animetsu Mongo ObjectId or anipm series id, not just the universal form. Builds trust.

Provider ID Formats

Every provider has its own native id format. The table below shows what each one looks like, whether it accepts the universal al:{anilistId} format natively, and an example native id for Frieren (AniList ID 154587).

ProviderNative ID formatAccepts al:{id} natively?Example (Frieren)
animetsuAnimetsu24-char Mongo ObjectIdNo — title-search6989b8a029cf95f4eb03b500
anikuroAnikuronumeric stringNo — title-search4231
animeyubiAnimeyubinumeric stringNo — title-search9821
miruroMiruroal:{anilistId}YES — passthroughal:154587
animexAnimexal:{anilistId}YES — passthroughal:154587
anilightAnilightal:{anilistId}:{slug}YES — passthroughal:154587:sousou-no-frieren
anipmAni.pmanipm:{seriesId}:{slug}No — title-searchanipm:6351:frieren-beyond-journey-s-end-c6fbj
Universal ID: Regardless of the provider's native format, every endpoint accepts al:{anilistId} as a universal id. The backend resolves it to the provider's native format automatically (with a 30-min in-memory cache). You only need this tool if you want to see the native id explicitly.

For per-provider deep dives, see the Ani.pm provider docs (other per-provider docs coming soon).

Find ID (single provider)

Resolves an AniList ID to the native id for a specific provider. Returns the native id, universal id, ready-to-use /sources URLs, and the full resolution trace (which title matched, which titles were tried, what strategy was used).

GET/api/scrape/find-id?anilist={anilistId}&provider={providerId}
ParameterTypeRequiredDefaultDescription
anilistnumberrequiredAniList ID (e.g. 154587 for Frieren).
providerenumrequiredOne of: animetsu, anikuro, animeyubi, miruro, animex, anilight, anipm. Omit for all-providers mode (see next endpoint).
curl ".../api/scrape/find-id?anilist=154587&provider=animetsu"
200 OK (animetsu)json
{
  "anilistId": 154587,
  "provider": "animetsu",
  "anilist": {
    "id": 154587,
    "idMal": 52991,
    "title": {
      "romaji": "Sousou no Frieren",
      "english": "Frieren: Beyond Journey's End",
      "native": "葬送のフリーレン"
    },
    "coverImage": { "large": "https://s4.anilist.co/..." },
    "seasonYear": 2023,
    "format": "TV"
  },
  "resolved": {
    "nativeId": "6989b8a029cf95f4eb03b500",
    "anilistId": 154587,
    "provider": "animetsu",
    "matchedTitle": "Frieren: Beyond Journey's End",
    "strategy": "title-search",
    "triedTitles": [
      "Frieren: Beyond Journey's End",
      "Sousou no Frieren",
      "葬送のフリーレン"
    ]
  },
  "nativeId": "6989b8a029cf95f4eb03b500",
  "universalId": "al:154587",
  "sourcesUrl": "/api/scrape/sources?id=6989b8a029cf95f4eb03b500&provider=animetsu&ep=1",
  "universalSourcesUrl": "/api/scrape/sources?id=al%3A154587&provider=animetsu&ep=1"
}
200 OK (anipm)json
{
  "anilistId": 154587,
  "provider": "anipm",
  "resolved": {
    "nativeId": "anipm:6351:frieren-beyond-journey-end",
    "anilistId": 154587,
    "provider": "anipm",
    "matchedTitle": "Frieren: Beyond Journey's End",
    "strategy": "title-search"
  },
  "nativeId": "anipm:6351:frieren-beyond-journey-end",
  "universalId": "al:154587",
  "sourcesUrl": "/api/scrape/sources?id=anipm%3A6351%3Afrieren-beyond-journey-end&provider=anipm&ep=1",
  "universalSourcesUrl": "/api/scrape/sources?id=al%3A154587&provider=anipm&ep=1"
}
200 OK (miruro — AniList-native, passthrough)json
{
  "anilistId": 154587,
  "provider": "miruro",
  "resolved": {
    "nativeId": "al:154587",
    "anilistId": 154587,
    "provider": "miruro",
    "strategy": "passthrough"
  },
  "nativeId": "al:154587",
  "universalId": "al:154587",
  "sourcesUrl": "/api/scrape/sources?id=al%3A154587&provider=miruro&ep=1",
  "universalSourcesUrl": "/api/scrape/sources?id=al%3A154587&provider=miruro&ep=1"
}

Find ID (all providers)

Resolves an AniList ID across ALL providers in parallel. Returns a per-provider breakdown showing which providers have the anime, each provider's native id + /sources URL, and a 'best provider' hint (first that resolved in priority order). Use this for fallback chains and availability checks.

GET/api/scrape/find-id?anilist={anilistId}
ParameterTypeRequiredDefaultDescription
anilistnumberrequiredAniList ID.
Requestbash
curl "https://your-deployment.example.com/api/scrape/find-id?anilist=154587"
200 OK (truncated)json
{
  "anilistId": 154587,
  "anilist": {
    "id": 154587,
    "title": {
      "english": "Frieren: Beyond Journey's End",
      "romaji": "Sousou no Frieren"
    },
    "coverImage": { "large": "https://s4.anilist.co/..." },
    "seasonYear": 2023,
    "format": "TV"
  },
  "providers": {
    "animetsu": {
      "resolved": { "nativeId": "6989b8a029cf95f4eb03b500", "strategy": "title-search", ... },
      "nativeId": "6989b8a029cf95f4eb03b500",
      "universalId": "al:154587",
      "sourcesUrl": "/api/scrape/sources?id=6989b8a029cf95f4eb03b500&provider=animetsu&ep=1",
      "universalSourcesUrl": "/api/scrape/sources?id=al%3A154587&provider=animetsu&ep=1",
      "label": "Animetsu"
    },
    "anikuro":  { "nativeId": "4231", "label": "Anikuro", ... },
    "animeyubi":{ "nativeId": "9821", "label": "Animeyubi", ... },
    "miruro":   { "nativeId": "al:154587", "strategy": "passthrough", "label": "Miruro", ... },
    "animex":   { "nativeId": "al:154587", "strategy": "passthrough", "label": "Animex", ... },
    "anilight": { "nativeId": "al:154587:sousou-no-frieren", "label": "Anilight", ... },
    "anipm":    { "nativeId": "anipm:6351:frieren-beyond-journey-end", "label": "Ani.pm", ... }
  },
  "availableCount": 7,
  "bestProvider": "animetsu",
  "universalId": "al:154587"
}
Provider priority order: animetsu → anikuro → animeyubi → miruro → animex → anilight → anipm. bestProvider is the first one that resolved — useful as a default for fallback chains. Providers that don't have the anime return null in the providers map.

Animetsu ID Finding (legacy)

The original animetsu-only resolver. Kept for backwards compatibility — prefer /api/scrape/find-id?provider=animetsu for new code. Same response shape, just scoped to animetsu.

GET/api/scrape/animetsu-id?anilist={anilistId}
Equivalent callsbash
# Legacy (still works)
curl ".../api/scrape/animetsu-id?anilist=154587"

# New (preferred)
curl ".../api/scrape/find-id?anilist=154587&provider=animetsu"

The legacy endpoint returns animetsuId instead of nativeId — otherwise identical.

Resolve (low-level)

The low-level resolver that /find-id wraps. Returns a ResolveResult object without the AniList metadata or pre-built /sources URLs. Useful when you want minimal overhead and don't need the extras.

GET/api/scrape/resolve?anilist={anilistId}&provider={providerId}
Requestbash
curl ".../api/scrape/resolve?anilist=154587&provider=animetsu"

See the main docs for the full response schema.

Resolution Strategies

The strategy field in the response tells you how the native id was resolved. Three values:

passthrough

The provider natively accepts al:{anilistId} as its id format — no resolution needed. miruro, animex, and anilight all use AniList IDs as their primary key. Zero overhead.

title-search

The backend fetched the AniList media, collected candidate titles (english, romaji, native, synonyms), searched the provider's catalog with each in priority order, and picked the first hit. Takes 1-3s on cold cache.

cache-hit

Resolution was served from the in-memory 30-min cache. Subsequent calls on the same provider+anilist combo are instant. The cache is per-process — restarts clear it.

Example AniList IDs

Popular anime to test with. The AniList ID is the number in any anilist.co/anime/<id> URL.

AniList IDTitleNotes
154587Frieren: Beyond Journey's End2023 · 28 eps · sub+dub
21One Piece1999 · 1100+ eps
5114Fullmetal Alchemist: Brotherhood2009 · 64 eps
101922Jujutsu Kaisen2020 · 24 eps
113415Solo Leveling2024 · 12 eps
16498Attack on Titan2013 · 25 eps

Errors

400Missing or invalid AniList ID

Returned when the anilist param is missing or not a positive number. Response includes usage hint.

400Unknown provider

Returned when the provider param is not one of the 7 valid provider ids. Response lists the valid values.

404AniList ID not found

The anilistId doesn't exist on AniList itself. Double-check the ID — it's the number in the anilist.co/anime/{id} URL.

404Could not resolve on provider

AniList ID is valid, but the provider doesn't have this anime in its catalog (or lists it under a title we didn't try). Response includes triedTitles so you can see what was searched. Try the universal al:{anilistId} on a different provider.

502Upstream error

The provider's upstream site or AniList itself returned an error. Usually transient — retry after a few seconds.