curl --request GET \
--url https://api.simkl.com/tv/airing \
--header 'User-Agent: <user-agent>' \
--header 'simkl-api-key: <api-key>'[
{
"title": "Men on a Mission",
"year": 2026,
"date": "2026-05-16T09:00:00-04:00",
"poster": "83/8303720832bdd35c5",
"rank": 3728,
"url": "/tv/584618/men-on-a-mission",
"ids": {
"simkl_id": 584618,
"slug": "men-on-a-mission"
},
"episode": {
"season": 12,
"episode": 18,
"url": "/tv/584618/men-on-a-mission/season-12/episode-18/"
}
},
{
"title": "Silence, ça pousse !",
"year": 2026,
"date": null,
"poster": "10/1004590825e591792b",
"rank": null,
"url": "/tv/2587369/silence-%C3%A7a-pousse",
"ids": {
"simkl_id": 2587369,
"slug": "silence-%C3%A7a-pousse"
},
"episode": {
"season": 2025,
"episode": 36,
"url": "/tv/2587369/silence-%C3%A7a-pousse/season-2025/episode-36/"
}
}
]Currently airing TV shows — same data that powers the Simkl TV calendar. No access_token required.
Same shape and parameters as /anime/airing but for the TV catalog: no anime_type field, and the per-item episode block includes a season integer.
Prefer the cached calendar endpoints for high-traffic use cases. /tv/airing is uncached — every request hits the origin. For widgets, mobile-app home screens, or anything that fetches this on app launch / wake / timer, use the CDN-cached Calendar data files on data.simkl.in instead — both the rolling-window /calendar/{type}.json (yesterday + next 33 days) and the monthly archive /calendar/{year}/{month}/{type}.json serve the same per-day airing data, edge-cached so most requests don’t even reach origin. Reserve /tv/airing for ad-hoc queries by a specific date that the calendar files don’t pre-bake.
Both forms still need the standard URL params on every request — client_id, app-name, app-version (and the User-Agent header) — same as every other Simkl endpoint. See Headers and required parameters.
| Param | Default | Notes |
|---|---|---|
date | today | today, tomorrow, or DD-MM-YYYY. Bogus values silently fall back to today. |
sort | time | time, rank, popularity. Bogus values silently fall back to time. |
{
"title": "string",
"year": "integer | null (extracted from the episode air time)",
"date": "ISO-8601 string with -05:00 offset | null",
"poster": "string (relative path; prepend https://simkl.in/posters/ + size)",
"rank": "integer | null (Simkl popularity rank; null when not yet ranked)",
"url": "string (relative simkl.com URL)",
"ids": {
"simkl_id": "integer",
"slug": "string"
},
"episode": {
"season": "integer",
"episode": "integer",
"url": "string"
}
}
| Field | When null | Type |
|---|---|---|
date | Catalog has no Airs_Time on file for this episode (rare — usually older or low-data titles) | Type 4 |
rank | Item not yet ranked, or rank value >= 999999 sentinel | Type 4 |
| Status | When |
|---|---|
412 client_id_failed | Missing or invalid client_id |
500 | Server error |
No 400 — invalid date/sort values silently fall back to defaults. No 404 — empty result is [] with status 200.
curl --request GET \
--url https://api.simkl.com/tv/airing \
--header 'User-Agent: <user-agent>' \
--header 'simkl-api-key: <api-key>'[
{
"title": "Men on a Mission",
"year": 2026,
"date": "2026-05-16T09:00:00-04:00",
"poster": "83/8303720832bdd35c5",
"rank": 3728,
"url": "/tv/584618/men-on-a-mission",
"ids": {
"simkl_id": 584618,
"slug": "men-on-a-mission"
},
"episode": {
"season": 12,
"episode": 18,
"url": "/tv/584618/men-on-a-mission/season-12/episode-18/"
}
},
{
"title": "Silence, ça pousse !",
"year": 2026,
"date": null,
"poster": "10/1004590825e591792b",
"rank": null,
"url": "/tv/2587369/silence-%C3%A7a-pousse",
"ids": {
"simkl_id": 2587369,
"slug": "silence-%C3%A7a-pousse"
},
"episode": {
"season": 2025,
"episode": 36,
"url": "/tv/2587369/silence-%C3%A7a-pousse/season-2025/episode-36/"
}
}
]Documentation Index
Fetch the complete documentation index at: https://api.simkl.org/llms.txt
Use this file to discover all available pages before exploring further.
Optional alias for the client_id query parameter. Simkl accepts your client_id either as the simkl-api-key request header or as the ?client_id=… query parameter — pick one. The query-parameter form is preferred because it makes the request fully self-describing in URL form.
Descriptive identifier for your app, ideally name/version. Examples: PlexMediaServer/1.43.1.10540, kodi-simkl/0.9.2, MyApp/2.4.1 (https://myapp.com).
only data within this date
^(today|tomorrow|\d{2}-\d{2}-\d{4})$sort the results by the specified option
time, rank, popularity Your client_id from your Simkl developer settings. Required on every request.
Short, lowercase identifier for your app (e.g. plex-scrobbler, kodi-bridge). Helps Simkl identify which apps are using the API.
Your app's current version (e.g. 1.0, 2.4.1). Helps Simkl debug issues you report.
OK
Year extracted from the episode's Airs_Time. Type 4 null when no air time on file. See Null and missing values.
Episode air time as ISO-8601 with -05:00 offset (Simkl's server timezone). Type 4 null — catalog has no Airs_Time for this episode (rare; older or low-data titles). See Null and missing values.
Image path fragment. Combine with the prefixes in Image conventions — for example https://simkl.in/posters/{poster}_m.webp.
Simkl popularity rank. Type 4 null when not yet ranked or when the catalog sentinel value (>= 999999) is present. See Null and missing values.
Relative simkl.com URL.
Was this page helpful?