Endpoints
All endpoints live under https://orionmedia.app and require your
API token. POST bodies are JSON. Responses are JSON.
Write endpoints return {"ok": true} on success or {"error": "..."} with an
appropriate status code.
GET /api/machine/summary
Section titled “GET /api/machine/summary”The consolidated feed. One request returns everything a dashboard or integration needs:
{ "generatedAt": "2026-07-04T12:00:00.000Z", "counts": { "upNext": 7, "airingToday": 2, "airingWeek": 9, "unwatchedEpisodes": 41 }, "next": { "show": "Severance", "episode": "S02E05", "air_date": "2025-02-14", ... }, "upNext": [ /* one item per followed show with an unwatched aired episode */ ], "today": [ /* episodes airing today */ ], "week": [ /* episodes airing in the next 7 days */ ], "releasing": [ /* followed episodes/movies/games releasing today or tomorrow */ ]}New integrations should use this endpoint. The endpoints below are narrower feeds that predate it and remain for compatibility.
GET /api/notifications
Section titled “GET /api/notifications”Followed items releasing today or tomorrow that you haven’t watched:
{ "items": [...] }. This is what drives the Android app’s
release notifications.
GET /api/upcoming
Section titled “GET /api/upcoming”Airing soon feed: { "counts": { "today", "week" }, "next", "today", "week" }.
GET /api/widget
Section titled “GET /api/widget”The Android widget’s feed (watch list + coming this week).
GET /api/calendar.ics
Section titled “GET /api/calendar.ics”Your releases as an iCalendar feed. See
Calendar subscription. The token goes in the query string
(?token=...), since calendar apps can’t send headers.
GET /api/export
Section titled “GET /api/export”Your whole library, meaning followed shows, episodes, movies, and games plus watch history, as a downloadable JSON file keyed by TMDB, IGDB, and TVDB ids. See Import & export. Requires the token as a bearer header, not a query param, since this is a bigger prize than the read only calendar feed.
POST /api/machine/watched
Section titled “POST /api/machine/watched”Mark an episode, movie, or game watched or unwatched:
{ "kind": "episode", "id": 1234, "watched": true }kind is "episode", "movie", or "game".
POST /api/machine/follow
Section titled “POST /api/machine/follow”Follow, unfollow, or archive a show:
{ "kind": "show", "id": 42, "followed": true, "archived": false }kind is "show", "movie", or "game" (archived applies to shows).
POST /api/machine/sync
Section titled “POST /api/machine/sync”Trigger an immediate catalog refresh and notification check for your account. It’s the same work the scheduled background sync does, useful behind a dashboard “Refresh now” button.
POST /api/import/{tvtime,trakt,simkl,orion}
Section titled “POST /api/import/{tvtime,trakt,simkl,orion}”Multipart file upload(s) for each supported import source. See Import & export for what each expects and returns. Requires the token as a bearer header.
Example
Section titled “Example”# What's next?curl -s -H "Authorization: Bearer $TOKEN" \ https://orionmedia.app/api/machine/summary | jq .next
# Mark it watchedcurl -s -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \ -d '{"kind":"episode","id":1234,"watched":true}' \ https://orionmedia.app/api/machine/watched