Overview
External profiles allow users to link their anime list accounts from external services (AniList, MyAnimeList, Kitsu) to AnimeThemes. This enables synchronization of watch lists, favorites, and ratings.Authentication
Most external profile endpoints require authentication using Laravel Sanctum bearer tokens.Supported Sites
AniList
Site ID:
1 - Popular anime and manga tracking serviceMyAnimeList
Site ID:
0 - The world’s most active anime and manga communityKitsu
Site ID:
2 - Modern anime discovery platformGet User’s External Profiles
Retrieve all external profiles for the authenticated user
Request
Query Parameters
Include related resources. Available includes:
externalentries- Anime entries in the external profileexternalentries.anime- Full anime details for each entryexternalentries.anime.animethemes- Themes for each animeexternalentries.anime.images- Images for each animeuser- Profile owner information
include=externalentries,externalentries.animeSpecify which fields to return. Available fields:
profile_id- Profile IDname- Profile usernamesite- External site (0=MAL, 1=AniList, 2=Kitsu)visibility- Privacy setting (0=Public, 1=Private)user_id- AnimeThemes user IDsynced_at- Last sync timestampcreated_at- Creation timestampupdated_at- Last update timestamp
fields[externalprofile]=profile_id,name,site,synced_atResponse
List All Public External Profiles
Retrieve all public external profiles (requires localhost or feature flag)
Request
This endpoint returns public profiles and profiles belonging to the authenticated user.
Query Parameters
Filter by external site:
0- MyAnimeList1- AniList2- Kitsu
Filter by profile username
Filter by visibility:
0- Public1- Private
Number of results per page (default: 15, max: 100)
Page number for pagination
Response
Get External Profile by ID
Retrieve a specific external profile by ID
Request
Response
Create External Profile
Link a new external profile to the authenticated user
Request
Request Body
Username on the external site
External site identifier:
0- MyAnimeList1- AniList2- Kitsu
Profile visibility:
0- Public (searchable, appears in public listings)1- Private (only visible to owner)
User ID on the external platform (optional)
Response
Update External Profile
Update an existing external profile
Request
Request Body
Update username on the external site
Update profile visibility (0=Public, 1=Private)
Update external user ID
Response
Delete External Profile
Permanently delete an external profile
Request
Response
External Profile Data Structure
Core Attributes
- profile_id: Unique identifier for the external profile
- name: Username on the external platform
- site: External platform identifier (0=MAL, 1=AniList, 2=Kitsu)
- visibility: Privacy setting (0=Public, 1=Private)
- user_id: Associated AnimeThemes user ID (null for unclaimed profiles)
- external_user_id: User ID on the external platform
- synced_at: Timestamp of last synchronization with external service
- created_at: Profile creation timestamp
- updated_at: Last update timestamp
Profile Synchronization
External profiles can be synchronized with their external services to import:- Watch status (watching, completed, plan to watch, etc.)
- Ratings and scores
- Favorite anime
- Watch history
synced_at field tracks the last sync time.
Profile URL Format
External profiles are accessible via the client at:{site} is:
mal- MyAnimeListanilist- AniListkitsu- Kitsu
Available Relations
External profiles support the following includes:- externalentries: Anime entries in the list
- externalentries.anime: Full anime details
- externalentries.anime.animethemes: Theme songs
- externalentries.anime.animethemes.animethemeentries.videos: Theme videos
- externalentries.anime.animethemes.group: Artist/group information
- externalentries.anime.animethemes.song: Song details
- externalentries.anime.images: Anime cover images
- user: Profile owner’s user information
External Entries
External entries represent individual anime in an external profile’s list.Entry Attributes
- entry_id: Unique identifier for the entry
- anime_id: Associated AnimeThemes anime ID
- profile_id: Parent external profile ID
- is_favorite: Whether marked as favorite
- score: User’s rating (float, typically 0-10)
- watch_status: Watch status enum (watching, completed, plan to watch, etc.)
OAuth Integration
For sites supporting OAuth (AniList, MyAnimeList), users can authenticate and authorize AnimeThemes to access their profiles.Authorization URLs
Each site provides an authorization URL accessible via the site enum: AniList:OAuth tokens are stored securely and never exposed through the API. Access and refresh tokens are hidden attributes.
Profile Visibility
Public Profiles (visibility: 0)
- Appear in search results
- Listed in public profile directories
- Indexed for search
- Accessible to all users
Private Profiles (visibility: 1)
- Only visible to the profile owner
- Not searchable or indexed
- Not listed in public directories
- Require authentication to access
Profile Lifecycle
Claimed Profiles
Profiles with auser_id are “claimed” - linked to an AnimeThemes account. These profiles:
- Persist indefinitely
- Can be synced with external services
- Support full CRUD operations
Unclaimed Profiles
Profiles without auser_id are “unclaimed” - created but not linked. These profiles:
- Are automatically deleted after 7 days
- Cannot be synced
- Are typically created during the OAuth flow before completion
Error Responses
Missing or invalid authentication token
User exceeded maximum external profile limit
External profile not found
Validation errors
Notes
External profile management is restricted by feature flags and middleware. Contact your administrator if you cannot create or manage profiles.
External profiles support Elasticsearch for fast searching. Only public profiles are indexed.