> For the complete documentation index, see [llms.txt](https://wiki.crosswatch.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.crosswatch.app/crosswatch/settings/connections/trackers/myanimelist-mal.md).

# MyAnimeList (MAL)

Connect MyAnimeList to sync anime watchlists, ratings, and watch history.

Connect MyAnimeList to sync anime watchlists, ratings, and watch history.

{% tabs %}
{% tab title="End users" %}
Connect MyAnimeList to synchronize anime watchlists, ratings, and watched history with CrossWatch. You can also scrobble completed anime episodes and movies to MyAnimeList.

#### Connect MyAnimeList

1. Open **Settings → Connections → MyAnimeList** in CrossWatch.
2. Select a connection profile. To connect another MyAnimeList account, click **New profile**.
3. Click **Connect MyAnimeList**. A browser window briefly shows a waiting screen, then opens MyAnimeList.
4. Sign in to MyAnimeList and approve CrossWatch.
5. Return to CrossWatch and wait until the connection shows **Connected as** followed by your MyAnimeList username. Authorization is saved automatically for the selected connection profile.
6. Enable **Anime ID Mapping** under **Connections → Metadata**.

You do not need to create a developer app, enter a client secret, configure Cloudflare, or expose CrossWatch to the internet. CrossWatch uses its hosted authentication service for login and token refresh. Your MyAnimeList password is entered on MyAnimeList itself.

{% hint style="info" %}
Enable global **Anime ID Mapping** to match anime across providers. It also translates episode numbering for history and scrobbling. Custom mappings are supported.

Guide: Anime ID Mapping.
{% endhint %}

#### Synchronization and scrobbling

Create a sync pair and select the MyAnimeList connection profile. Watchlist, ratings, and history support one-way and two-way sync with compatible providers.

* **Watchlist:** Uses anime marked **Plan to Watch** in your MyAnimeList anime list. Watching, completed, dropped, or on-hold titles are not moved back to the watchlist. Removing a planned title deletes its list entry only when it has no other saved data; otherwise, CrossWatch moves it to **On Hold** to preserve that data.
* **Ratings:** Syncs whole-number title scores from **1 to 10**. Removing a rating clears the score without deleting the list entry. Rating an anime that is not yet on your list creates an **On Hold** entry.
* **History:** Uses watched status and the number of watched episodes per title. Removing history reduces consecutive watched episodes from the end, or resets a movie to unwatched. Ratings and notes remain. Removals that would leave gaps are unresolved.
* **Use source watch status:** Enable this in the pair's history options to preserve **Dropped** and **On Hold** status when adding watched episodes between SIMKL, AniList, MyAnimeList, and Kitsu. Status-only changes and titles with no watched episodes are not synced. Completed titles are not changed back to dropped or on hold.
* **Scrobbling:** Select MyAnimeList as a destination in a Watcher or webhook route. CrossWatch updates watched history when playback stops at or beyond the configured watched threshold. MyAnimeList does not receive live start/pause events or resume positions.
* **Plex ratings:** MyAnimeList is also available as a rating target in Watcher and Webhook.

{% hint style="warning" %}
MyAnimeList is an experimental, anime-only provider. **Anime-only sync** is always enabled for its watchlist, ratings, and history pairs. Use **Interactive Sync** to review changes before applying them.

Playback position and resume syncing are unsupported. History represents cumulative episode progress, not individual dated watch events. Specials and separate rewatch events are not supported. Manga, playlists, and collections are not supported by this integration.
{% endhint %}

#### Troubleshooting

* If the login window does not open, allow pop-ups or use the approval link shown in CrossWatch.
* If login expires or access was declined, click **Connect MyAnimeList** to start again.
* If CrossWatch cannot reach the authentication service, check outbound internet access and DNS on the **CrossWatch server or Docker container**. Browser connectivity alone does not confirm that the container can connect. For TLS errors, check the server clock and CA certificates.
* Reconnect if MyAnimeList rejects a token refresh. Normal token refresh happens automatically.
* Enable Anime ID Mapping and verify its data is available if titles or episodes are skipped. Add a custom mapping for missing or incorrect title and episode ranges.
* Check for later watched episodes when history removal is unresolved. MyAnimeList stores one episode count and cannot represent gaps.
* Large first syncs can take time. CrossWatch paces requests, retries rate-limited requests, and groups episode updates by anime title to reduce writes.
  {% endtab %}

{% tab title="Power users" %}

### Power users

#### Config keys

Stored under:

* `myanimelist.*` for the default connection.
* `myanimelist.instances.<instance_id>.*` for additional connection profiles.

CrossWatch manages the access token, refresh token, token expiry, and account identity. Tokens are encrypted in the saved configuration. The MyAnimeList password and developer client secret are not stored in your CrossWatch configuration.

Anime matching settings are stored under `anime_mapping.*`.

#### Hosted authentication

CrossWatch uses `https://auth.crosswatch.app` as its authentication service. Your installation starts the login and polls for completion using outbound requests. After browser approval, the service exchanges the authorization code and CrossWatch retrieves the tokens. No inbound connection to your installation or installation-specific callback URL is needed.

The authentication service is also used for token refresh. Anime list reads and writes go directly from CrossWatch to the MyAnimeList API. The authentication service address is built into CrossWatch; no environment-variable override is required or supported.

#### Related docs

* Anime ID Mapping
* Profiles
* Watcher
* Webhooks
  {% endtab %}
  {% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://wiki.crosswatch.app/crosswatch/settings/connections/trackers/myanimelist-mal.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
