On this page
Returns a page of the series your organisation is licensed for, each with a content_version. Use it in a CMS sync job: when content_version equals the value you stored, nothing changed and you can skip Get series metadata.
GET /api/delivery/v1/seriesScope: metadata:read
Description
Lists your licensed series, oldest change first. Pass updated_since (Unix epoch seconds) to get only the series changed after that moment. A series whose licence ended stays in the list as withdrawn for 30 days, so your sync job sees it. Successful responses are wrapped in the {code, message, data, server_time} envelope; errors use the same envelope without data, except 429 and 400 unsupported_version, which use the flat format. This endpoint shares its rate-limit counter with the catalog.
Your CMS may override any field. Wandura never overwrites your edits: store the content_version you imported and keep your own edits.
Request parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
Authorization |
header | string | Yes | Bearer <API key> for a key with the metadata:read scope. |
updated_since |
query | integer | No | Optional. Unix epoch seconds; only series changed after this moment are returned. |
limit |
query | integer | No | Optional. Items per page, 1 to 100. Default 50. |
cursor |
query | string | No | Optional. next_cursor of the previous page, passed back unchanged. |
Wandura-Version |
header | string | No | Optional. A dated API version (YYYY-MM-DD) to use for this request instead of the version pinned to your API key. Unknown or retired values answer 400 with error_code unsupported_version. |
Keep the same updated_since on every page of one sync, and follow next_cursor until it is null.
Request example
curl -s "https://www.wandura.ai/api/delivery/v1/series?updated_since=1790390000&limit=50" \
-H "Authorization: Bearer $WANDURA_API_KEY"Response
200 OK. New fields may be added at any time: ignore the ones you do not recognise.
| Field | Type | Description |
|---|---|---|
code |
integer | 0. |
message |
string | "ok". |
data.next_cursor |
string or null | Pass it back as cursor; null on the last page. |
server_time |
integer | Server time in Unix epoch seconds. |
links |
object | Ready-made absolute URLs of a list response. Follow them instead of building URLs. |
Fields of a series (data.items[])
| Field | Type | Description |
|---|---|---|
code |
string | Series code, for example WD000016. |
status |
string | active: you may stream it now. withdrawn: your licence ended or was suspended, or Wandura took the series down; it stays in this list for 30 days so your sync job sees it. New values may be added. |
updated_at |
integer | Last change in Unix epoch seconds (metadata, licence or episodes in your media space). |
content_version |
string or null | Hash of everything GET /series/{code} returns for you. Unchanged = no need to fetch the detail. null when withdrawn. |
episode_count |
integer or null | Published episodes. null when withdrawn. |
withdrawn_at |
integer or null | When it was withdrawn (epoch seconds), or null. |
Response example
{
"code": 0,
"message": "ok",
"data": {
"items": [
{
"code": "WD000016",
"status": "active",
"updated_at": 1790390000,
"content_version": "c3f1a9e07b2d4c5e8f9a0b1c2d3e4f50",
"episode_count": 60,
"withdrawn_at": null
},
{ "code": "WD000021", "status": "withdrawn", "updated_at": 1790395000, "content_version": null, "episode_count": null, "withdrawn_at": 1790395000 }
],
"next_cursor": null
},
"server_time": 1790400000
}Response headers
| Header | Responses | Description |
|---|---|---|
Wandura-API-Status |
all | API status. beta today, on every response, success or error. |
Wandura-Version |
200 | The dated API version (YYYY-MM-DD) this response was produced in: the version pinned to your API key, or the one you sent in the Wandura-Version request header. Keys created before dated versions existed use 2026-10-02. |
Wandura-Request-Id |
200 | An opaque id for this request (req_ followed by 26 characters). Every response carries it, errors included, and error bodies repeat it as request_id. Log it, and quote it when you contact Wandura about a request: it finds the exact request in our logs. Do not parse it. |
Cache-Control |
200 | Always no-store. Do not cache these responses in shared caches. |
Retry-After |
429 | Seconds to wait before retrying. Sent with 429 and with retryable 503 responses. |
Errors
| Status | code |
When |
|---|---|---|
| 400 | none | The Wandura-Version header, or the version pinned to your key, is unknown or retired. |
| 401 | 4010 | The Authorization: Bearer header is missing. |
| 401 | 4011 | The key is unknown or revoked. |
| 403 | 4030 | The key lacks the metadata:read scope. |
| 403 | 4031 | Your organisation's access is suspended. |
| 422 | 4220 | limit is not 1 to 100, updated_since is not epoch seconds, or cursor is not a value this endpoint returned. |
| 429 | none | Rate limit reached. |
| 503 | 5030 | The list is temporarily unavailable. |
| 503 | 5031 | Wandura could not verify the API key in time. |
What to do for each: Errors.
Updated 5 Oct 2026 · Change history (1)