Base URL
https://www.moviemood.lol
moviemood API
Everything you need to integrate MovieMood’s search, similarity, mood, and interaction services. All endpoints respond with JSON and are designed to stay in sync with the UI powering moviemood.lol.
https://www.moviemood.lol
UI login creates a session cookie via /auth/login. Protected endpoints redirect (HTTP 302) to /auth/login when you are not authenticated.
Send application/json for JSON POST requests. Most API endpoints return JSON; protected endpoints may redirect to HTML login when unauthenticated.
All routes live under the base URL shown above. Movie data is loaded from JSONL files into an in-memory cache at startup. Error payloads include an error field with HTTP status (400 bad input, 404 missing, 500 server error).
curl "/similar/The%20Matrix?k=5" # Similar movies
curl "/movie/The%20Matrix?year=1999" # Movie details
curl "/from_mood?happy=0.8&tense=0.2" # Mood recommendation
/api/user/interactions and /profile require login. Unauthenticated requests redirect (HTTP 302) to login.
Simple readiness probe.
{"status": "ok"}
Quick suggestions for the search box. Matches normalized titles instantly.
[{"title":"The Matrix","year":1999,"poster":"https://..."},{"title":"The Matrix Reloaded","year":2003,"poster":null}]
Finds similar movies via fuzzy title matching. Returns up to k recommendations.
{"anchor":{"queried":"...","resolved_title":"...","resolved_year":2023,"details":{...}},
"recommendations":[{"title":"...","similarity_percent":82.1,"rating_count":123456,...}],
"count":5}
Logged-in users get watched movies filtered out and final_score reranking.
HTML page showing up to 100 similar movies.
popular (high ratings first) or gems (low ratings first).Recommendations based on 5 mood sliders (0..1 range).
{"sliders":{...},"k":10,"recommendations":[{"title":"...","mood_similarity_percent":"87%"}],"count":10}
Logged-in users get watched movies filtered out.
Returns the best matching movie object from the catalog using fuzzy matching.
curl "https://www.moviemood.lol/movie/Zelig"
Returns a random movie object from the full dataset.
curl "https://www.moviemood.lol/random_movie"
Renders the Top 100 page (paginated, 100 per page).
/topRenders additional pages of the popularity list.
/top/page/2Returns JSON results for the popularity list.
{
"page": 1,
"results": [
{
"title": "Barbie",
"year": 2023,
"slug": "barbie-2023",
"cover_image": "https://...",
"rating_average": 3.7,
"rating_count": 123456
}
],
"total": 39400
}
Slugs are the canonical keys used by the UI and database (typically title-year).
Returns a random “lucky” recommendation. If you are logged in, it samples from movies similar to your watched list and excludes watched items; otherwise it falls back to a random pick from a popularity-weighted pool.
curl "https://www.moviemood.lol/lucky"
{
"title": "...",
"year": 2014,
"slug": "...",
"genres": ["..."],
"cast": ["..."],
"countries": ["..."],
"languages": ["..."],
"cover_image": "https://..."
}
Returns current user's watched/rating data by slug. Requires login (302 redirect otherwise).
{"the-matrix-1999":{"watched":true,"rating":5},"barbie-2023":{"watched":true}}
Creates or updates watched/rated state. Requires login.
the-matrix-1999).true inserts; false removes.null removes.POST: {"movie_slug":"the-matrix-1999","watched":true,"rating":5}
Response: {"status":"ok","movie_slug":"the-matrix-1999"}
HTML form for creating a user.
/auth/registerHTML form for logging in. Successful login sets a session cookie and redirects to /.
Clears the session and redirects to /.
If you’re driving the API from scripts, authenticate by logging in via the UI (browser) or by scripting the form POST and preserving cookies.
These routes render HTML templates for the web UI.