---
title: "anilist"
description: "Authorize AniList locally and store the access token in the OS keychain."
---

> Documentation Index
> Fetch the complete documentation index at: https://manifold.jfa.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# anilist

```sh
manifold login anilist [flags]
```

Local authorization-code OAuth for CLI commands that talk to AniList (migrations,
reconcile, registry import/prefill, `anilist wipe manga`, and `pas5 create --source anilist`).
Prefer this over pasting pin tokens.

## Setup

1. Create a **separate** AniList developer client at
   [anilist.co/settings/developer](https://anilist.co/settings/developer).
2. Set the redirect URI to exactly `http://127.0.0.1:8767/callback`.
3. Provide the client id and secret via **one** of:

   - flags (`--client-id` / `--client-secret`)
   - `cli/.env` / process env (`MANIFOLD_ANILIST_CLIENT_ID` /
     `MANIFOLD_ANILIST_CLIENT_SECRET`)
   - interactive prompt on a TTY (compiled binary with no env file) — values
     are stored in the OS keychain under `manifold` / `anilist-oauth-client`
   - already-saved keychain entry from a prior login

Do **not** reuse the shared implicit clients:

- `49218` (CLI app, localhost callback)
- the Worker app `49060` (PIN flow)

The CLI needs an authorization-code client with the loopback redirect above.

## Flags

### `--client-id <id>`

AniList CLI client ID. Falls back to `MANIFOLD_ANILIST_CLIENT_ID`, then the
OS keychain, then an interactive prompt on a TTY.

Example:

```sh
manifold login anilist --client-id "$MANIFOLD_ANILIST_CLIENT_ID"
```

### `--client-secret <secret>`

AniList CLI client secret. Falls back to `MANIFOLD_ANILIST_CLIENT_SECRET`,
then the OS keychain, then an interactive prompt on a TTY.

### `--paste-only`

Skip binding the local callback server. Use on headless hosts (SSH boxes, CI
with a TTY) when the browser runs elsewhere: open the printed authorize URL on
another machine (or press **`c`** to copy it), press **Enter**, then paste
either the authorization code or the full callback URL from the address bar
(`http://127.0.0.1:8767/callback?code=…&state=…`). A connection-refused page is
expected — copy the URL anyway.

Example:

```sh
manifold login anilist --paste-only
```

## Usage

```sh
manifold login anilist
```

**Bare command on a TTY** (no flags): runs a setup wizard first — prints redirect
URI / developer-app notes, then asks for client id, client secret, and whether to
use `--paste-only`. Enter keeps defaults from env or the OS keychain. Client
credentials are saved under `manifold` / `anilist-oauth-client`.

You can also use Effect CLI’s global walkthrough:

```sh
manifold --wizard login anilist
```

The command then prints a browser authorization URL. On a TTY: press **`c`** to
copy the URL, **Enter** to paste a code or callback URL, **Ctrl+C** to cancel. By
default it also serves `http://127.0.0.1:8767/callback` for up to five minutes
and races that loopback against paste. If the port is busy, it falls back to
paste-only automatically.

After the code arrives, it exchanges for an access token, validates it with a
Viewer query, and stores the session in the OS keychain under `manifold` /
`anilist-session`.

AniList does **not** issue refresh tokens. When the session expires, run login
again. Optionally set `MANIFOLD_ANILIST_TOKEN` to override the keychain without
expiry tracking (useful for one-off scripts). If that env var is set after
login, the CLI warns that it still takes precedence.

Downstream commands resolve credentials as: **flag → `MANIFOLD_ANILIST_TOKEN` →
keychain**.

Source: https://manifold.jfa.dev/cli/login/anilist/index.mdx
