Skip to content

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.

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.

Followed items releasing today or tomorrow that you haven’t watched: { "items": [...] }. This is what drives the Android app’s release notifications.

Airing soon feed: { "counts": { "today", "week" }, "next", "today", "week" }.

The Android widget’s feed (watch list + coming this week).

Your releases as an iCalendar feed. See Calendar subscription. The token goes in the query string (?token=...), since calendar apps can’t send headers.

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.

Mark an episode, movie, or game watched or unwatched:

{ "kind": "episode", "id": 1234, "watched": true }

kind is "episode", "movie", or "game".

Follow, unfollow, or archive a show:

{ "kind": "show", "id": 42, "followed": true, "archived": false }

kind is "show", "movie", or "game" (archived applies to shows).

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.

Terminal window
# What's next?
curl -s -H "Authorization: Bearer $TOKEN" \
https://orionmedia.app/api/machine/summary | jq .next
# Mark it watched
curl -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