RoTV Guide

RoTV Guide API

Free, read-only JSON API for Romanian TV data: live EPG across 254 channels, prime-time lineups, tonight picks, important events, title details with streaming availability, full-text search and a what-to-watch concierge.

Quick start

What is on now and next, per channel:

curl -s https://tv.madeinro.eu/api/v1/now-next

Search movies airing tonight:

curl -s 'https://tv.madeinro.eu/api/v1/search?query=film&timeframe=tonight'

Endpoints

EndpointMethodWhat it returns
/api/v1/freshnessGETAge of the EPG and streaming data snapshots.
/api/v1/nowGETPrograms on air right now.
/api/v1/now-nextGETCurrent + next program per channel.
/api/v1/prime-timeGETTonight's prime-time lineup (~20:00–23:00).
/api/v1/tonightGETWhat's worth watching tonight.
/api/v1/important-todayGETMajor broadcasts today (finals, big events), tiered.
/api/v1/recommendationsGETRanked recommendations across TV and streaming.
/api/v1/evening-planGETA pre-built evening viewing plan.
/api/v1/titlesGETIndex of known movie/series titles.
/api/v1/titles/{id}GETOne title, incl. streaming availability in Romania.
/api/v1/searchGET, POSTProgram search: query, channel, category, timeframe, exclude_news, limit.
/api/v1/conciergeGET, POSTOne decision: what to watch in your window (mood, duration, filters).
/api/v1/keysPOSTRequest a free API key ({email, note?}).
/api/v1/healthGETService health.
/feeds/important-today.jsonGETStatic feed of today's major broadcasts.
/feeds/tonight.jsonGETStatic feed of tonight's picks.

Full request/response schemas: see the OpenAPI spec.

Universal object

Collection endpoints return an envelope { generated_at, data_as_of, source, attribution, items } where each item is:

{
  "id": "pro-tv-stirile-pro-tv-1900",     // stable slug
  "type": "program",                       // movie | series | program
  "title": "Știrile PRO TV",
  "summary": "Principalul jurnal de știri al serii.",   // optional
  "channel": "PRO TV",                     // TV programs only
  "channel_slug": "pro-tv",
  "starts_at": "2026-07-20T19:00:00+03:00", // Europe/Bucharest offset
  "ends_at":   "2026-07-20T20:30:00+03:00",
  "image": { "landscape": "…", "poster": "…" },          // optional
  "canonical_url": "https://tv.madeinro.eu/canal-tv/pro-tv",
  "watch_url": "…",                        // optional
  "availability": {                        // optional; attribution: JustWatch
    "country": "RO",
    "platforms": ["Netflix"]
  },
  "updated_at": "2026-07-20T15:00:00+03:00"
}

Authentication & limits

curl -s -X POST https://tv.madeinro.eu/api/v1/keys \
  -H 'Content-Type: application/json' \
  -d '{"email":"[email protected]","note":"my integration"}'

Get a key now

Save this key now — it is shown only once.

Integrations

Embeddable widget

A compact "now on TV" widget for partner sites — self-contained, auto-refreshing, works from 250px width up, adapts to light/dark. Embed it with one iframe:

<iframe src="https://tv.madeinro.eu/widgets/now"
        width="300" height="420" style="border:0" loading="lazy"
        title="Acum la TV — RoTV Guide"></iframe>

No API key needed. The widget links back to tv.madeinro.eu; content updates every 15 minutes.

Terms

Freshness

data_as_of in every envelope is the timestamp of the underlying EPG/streaming snapshot — not the time of your request. The EPG refreshes 4×/day; the JSON feeds refresh every 15 minutes. Check /api/v1/freshness (stale: true means the data is older than its expected cadence) before caching answers for long.