BYTETOOLS

trace.moe API

Free reverse image search for anime with no API key. Send a screenshot URL and trace.moe returns the series, episode and exact timestamp, with a video preview. Live example.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the trace.moe API?

trace.moe is a free reverse image search API for anime. Give it a screenshot — by URL or as an uploaded image — and it returns the matching series as an AniList id, the episode number, the exact timestamp within that episode, and preview video and image clips of the matched scene.

What makes trace.moe unusual is the precision of its answer. Most reverse image search returns a ranked list of pages; this returns a position in time — `at: 279.78` seconds into episode 1 — because the index is built from frames rather than from whole images. The `frameCount` field in every response tells you how large that index currently is, and it runs into the billions of frames.

Two things about the result array catch people out. First, matches are duplicated: the same scene indexed from a Blu-ray rip, a BS11 broadcast rip and an AT-X rip returns as three separate results with near-identical similarity, so dedupe on `anilist` plus `episode` before displaying. Second, `similarity` is a 0-to-1 float and low scores are not weak matches — they are wrong matches. The project's own guidance is to discard anything below roughly 0.9 rather than showing it as a best guess.

Quick facts

Base URL
https://api.trace.moe
Authentication
No key required. An optional key raises the search quota; without one you are metered per IP address.
Rate limit
The captured response advertised 100 requests per minute in `ratelimit-policy: 100;w=60`, alongside a search quota reported in the body as `quota` and `quotaUsed`. Call `/me` to read your current allowance.
Pricing
Free at the anonymous tier. Paid tiers raise the quota and priority.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the trace.moe 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. Identify an anime scene from a screenshot URL

GET https://api.trace.moe/search?url=https%3A%2F%2Fimages.plurk.com%2F32B15UXxymfSMwKGTObY5e.jpg

curl
curl 'https://api.trace.moe/search?url=https%3A%2F%2Fimages.plurk.com%2F32B15UXxymfSMwKGTObY5e.jpg'
JavaScript (fetch)
const res = await fetch("https://api.trace.moe/search?url=https%3A%2F%2Fimages.plurk.com%2F32B15UXxymfSMwKGTObY5e.jpg");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://api.trace.moe/search?url=https%3A%2F%2Fimages.plurk.com%2F32B15UXxymfSMwKGTObY5e.jpg", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "quota": 100,
  "quotaUsed": 1,
  "frameCount": 1722433326,
  "error": "",
  "result": [
    {
      "anilist": 21034,
      "filename": "Gochuumon wa Usagi Desuka 2 - 01 (BD 1280x720 x264 AAC).mp4",
      "episode": 1,
      "episode_start": 1,
      "episode_end": 1,
      "from": 272.1886,
      "at": 279.7795,
      "to": 282.6574,
      "duration": 1418.0834,
      "similarity": 0.9922267343483719,
      "video": "https://api.trace.moe/video/4IU9u8xXei4KkFqxRn1pUI3",
      "image": "https://api.trace.moe/image/4IU9u8xXei4KkFqxRn1pUI3"
    },
    {
      "anilist": 21034,
      "filename": "Gochuumon wa Usagi Desuka 2 - 01 (BS11 1280x720 x264 AAC).mp4",
      "episode": 1,
      "episode_start": 1,
      "episode_end": 1,
      "from": 282.282,
      "at": 289.8312,
      "to": 292.7925,
      "duration": 1440.022,
      "similarity": 0.9922267343483719,
      "video": "https://api.trace.moe/video/msyOY3kYwQBtszq40yVbie",
      "image": "https://api.trace.moe/image/msyOY3kYwQBtszq40yVbie"
    },
    {
      "anilist": 21034,
      "filename": "[Ohys-Raws] Gochuumon wa Usagi Desuka 2 - 01 (AT-X 1280x720 x264 AAC).mp4",
      "episode": 1,
      "episode_start": 1,
      "episode_end": 1,
      "from": 282.3237,
      "at": 289.8312,
      "to": 292.7508,
      "duration": 1440.1887,
      "similarity": 0.9922267343483719,
      "video": "https://api.trace.moe/video/BQQG2r4ZEqPgGIn1akptG8e",
      "image": "https://api.trace.moe/image/BQQG2r4ZEqPgGIn1akptG8e"
    },
    {
      "anilist": 21034,
      "filename": "[Leopard-Raws] Gochuumon wa Usagi Desu ka 2nd - 01 RAW

Parameters

ParameterTypeRequiredDescription
urlqueryOptionalURL-encoded link to the image to search. The alternative is POSTing the image bytes directly. https%3A%2F%2Fexample.com%2Fshot.jpg
anilistInfoqueryOptionalPresent-as-flag. Expands each result with the AniList title and metadata instead of just an id. anilistInfo
cutBordersqueryOptionalPresent-as-flag. Crops black bars before searching, which markedly improves matches on letterboxed screenshots. cutBorders
anilistqueryOptionalRestrict the search to one AniList series id. 21034

Response fields

errorstring
Empty string on success — not null. Test it with a truthiness check, not against null.
frameCountinteger
Total frames currently indexed across the whole corpus. Informational, but a useful health signal.
quota / quotaUsedinteger
Your search allowance and how much of it this request consumed against your IP or key.
result[].anilistinteger
AniList series id. Without `anilistInfo` this is all you get — resolve the title yourself or ask for the expansion.
result[].similarityfloat
Confidence from 0 to 1. Below about 0.9 should be treated as no match rather than a weak one.
result[].from / at / tofloat
Start, best-match and end offsets in seconds within the source file, as floats.
result[].filenamestring
The indexed release filename. This is why near-duplicate results appear — one entry per source release.
result[].video / imagestring
Ready-made preview URLs for a short clip and a still of the matched moment.

What you can build with the trace.moe API

  • Answer 'what anime is this screenshot from' in a Discord bot
  • Auto-tag a screenshot archive with series and episode
  • Build a browser extension that identifies a frame from a right-click
  • Verify that fan art or a thumbnail actually comes from the series it claims
  • Link a shared screenshot straight to the moment it came from

Common errors and how to fix them

400

No image supplied, or a `url` that trace.moe could not fetch.

Fix: URL-encode the `url` parameter fully, and make sure the image is publicly reachable without a referer check.

402 / quota exhausted

You have used your search allowance for the period.

Fix: Read `quota` and `quotaUsed` from `/me` before searching in bulk, and cache results by image hash so the same screenshot is never searched twice.

429

Requests arriving faster than the per-minute policy allows.

Fix: Respect `ratelimit-reset` and queue searches; concurrency is limited to one request at the anonymous tier.

A confident-looking result with low similarity

The index returned its nearest neighbour, which may be nothing like your image.

Fix: Threshold on `similarity` — discard below roughly 0.9 and tell the user nothing was found.

trace.moe API — frequently asked questions

Does trace.moe need an API key?

No. Anonymous searches work with no key at all, metered by IP address. A key is only needed to raise the search quota and concurrency, and the response body reports your current `quota` and `quotaUsed` either way.

How accurate is trace.moe?

Very accurate when the frame is genuinely in the index, and confidently wrong when it is not — it always returns its nearest neighbour. Use the `similarity` score as a gate: below roughly 0.9, treat it as no match.

Why do I get several results for the same episode?

Because the index holds one entry per source release. A Blu-ray rip, a broadcast rip and a fansub of the same episode are three separate indexed files, so the same scene matches all three. Dedupe on `anilist` and `episode`.

How do I get the anime title rather than just an id?

Add the `anilistInfo` flag to the query. Without it, each result carries only an AniList series id, which you would otherwise have to resolve through the AniList API yourself.

Tools that pair with this API

trace.moe 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.