Get a user's anime or manga list
get_user_listFetches an AniList user's anime or manga list as a compact, paginated table filterable by status or start/completion dates — ideal for syncing, comparing or picking something to watch.
Instructions
Get a user's AniList anime or manga list. Returns a compact table of one row per entry by default (format: "compact") — entry id, media id, MAL id, status, score, progress and title, which is what a sync, comparison or pick-something-to-watch task needs; switch to format: "full" only when you actually need dates, notes, custom lists, advanced scores or the status/custom-list grouping, since that response is roughly ten times larger per entry. Filter server-side with statuses rather than fetching everything and discarding — asking for just CURRENT costs a fraction of a whole-list read. Pass sort (e.g. UPDATED_TIME_DESC) to have AniList order the list before chunking, so a small perChunk returns the top entries by that key rather than an arbitrary slice. To answer "what did they finish/start in a period", use the completedAt_*/startedAt_* bounds (strict, server-side) instead of scanning the list — e.g. everything completed in 2026 is completedAt_greater: {year: 2025, month: 12, day: 31} plus completedAt_lesser: {year: 2027}; chunking then counts only the matching entries. Works for any public/unlisted user. Accepts an exact AniList username directly — no need to call search_user first unless you only have a partial/fuzzy name. Paginated by chunk/perChunk (AniList's own mechanism for this — counted across entries of ALL statuses combined, not per status), since a large list can otherwise return thousands of entries in one response; check hasNextChunk and increment chunk to keep paging. perChunk itself has no cap — AniList accepts values in the thousands, so raise it to pull a whole list in one call instead of paging through it. The collection AniList exposes here is capped at its ~11,000 most recently updated unique entries — irrelevant for virtually every account, but a hard ceiling if one is ever hit (older entries beyond it aren't retrievable through this field at all, by any chunk).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Order AniList applies server-side; later keys break ties in earlier ones (e.g. [SCORE_DESC, UPDATED_TIME_DESC]). Applied to the whole list BEFORE chunking — `chunk` 1 with `perChunk` 10 and UPDATED_TIME_DESC is the 10 most recently updated entries across all statuses — and again within each status/custom-list group. Groups are not interleaved, so `compact` rows (concatenated group by group) are ordered within each status, not globally; filter to one status with `statuses` for a single fully ordered run. Omit for AniList's default order (oldest-added first within each group). | |
| type | Yes | Whether to get the anime or manga list. | |
| user | Yes | AniList user ID (as a number — a digit string is read as a username), or username. | |
| chunk | No | Chunk number for pagination (AniList paginates this list by chunk, not page). | |
| format | No | How much of each entry to return. `compact` (default) is a tab-separated table of entry id, media id, MAL id, status, score (0-10), progress and title, one de-duplicated row per entry — enough for syncing, comparing or choosing, at about a tenth the size. `full` returns AniList's own grouped objects with dates, notes, repeat/priority, custom lists and advanced scores; use it only when you need one of those, or when you need to know which custom list an entry is filed under (`compact` drops the grouping — every row still carries its own status). | compact |
| perChunk | No | Entries per chunk, counted across all statuses combined. Defaults to 25 so an unattended call stays small, but nothing caps it — pass a larger value (AniList accepts values in the thousands) to pull a whole list in one call instead of paging. A compact row is small (a few hundred fit easily); with `format: "full"` each entry carries its dates, notes, custom lists and advanced scores, so a few hundred entries is already a large response there. | |
| statuses | No | Only return entries with these statuses (AniList filters server-side, so this genuinely shrinks the response — prefer it over fetching the whole list and discarding). Omit for every status. Custom-list groups are still returned in `full` when their entries match. | |
| startedAt_lesser | No | Only entries started strictly BEFORE this date (AniList filters server-side; the bound date itself is excluded). An omitted month/day counts as 0, so {year: 2026} here means "up to 2025-12-31". Entries with no date recorded also pass this bound on its own — pair it with the matching `_greater` bound to exclude them. | |
| startedAt_greater | No | Only entries started strictly AFTER this date (AniList filters server-side; the bound date itself is excluded). An omitted month/day counts as 0, so {year: 2026} here means "from 2026-01-01 on". Entries with no date recorded never match. | |
| completedAt_lesser | No | Only entries completed strictly BEFORE this date (AniList filters server-side; the bound date itself is excluded). An omitted month/day counts as 0, so {year: 2026} here means "up to 2025-12-31". Entries with no date recorded also pass this bound on its own — pair it with the matching `_greater` bound to exclude them. | |
| completedAt_greater | No | Only entries completed strictly AFTER this date (AniList filters server-side; the bound date itself is excluded). An omitted month/day counts as 0, so {year: 2026} here means "from 2026-01-01 on". Entries with no date recorded never match. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | `compact` only: one tab-separated row per entry, newline-separated, matching `columns`. An empty cell means AniList has no value for that field (e.g. no MAL id); a score of 0 means unscored. | |
| count | No | `compact` only: how many unique entries `rows` contains. | |
| lists | No | `full` only: AniList's own status/custom-list groups, with full entries. | |
| format | Yes | Which shape this response is in — echoes the `format` argument. | |
| columns | No | `compact` only: the tab-separated column names for `rows`, in order. | |
| hasNextChunk | No | True if another `chunk` of this list is available. |