Titles

List titles

GET
/v1/titles

Two ways to page. Without page, rows come newest-updated first and nextCursor continues the walk — use this for sync: stop when a row's updatedAt is older than your last run. With page, you get total and totalPages and may sort. Episodes and seasons that arrived from a connected platform sit under their series and are listed only when you ask for their type.

Scope: library:read

Authorization

apiKey
headerAuthorizationBearer <ik_live_…>

An organisation API key from Settings → Organisation → API keys. Each operation names the one scope it needs — see https://developer.ingenee.ai/docs/authentication.

Query Parameters

cursor?string

The nextCursor from the previous response (cursor mode).

limit?integer

Rows per call in cursor mode (default 20, max 200).

page?integer

Page number, from 1.

pageSize?integer

Items per page (max 200).

sort?string

Page mode only: title | year | runtime | updated | added.

dir?string

asc | desc (default desc).

q?string

Matches title text or any external id.

type?string

movie | series | episode | season | short | song | web.

status?string

Enrichment status: pending | enriching | enriched | partial | error.

catalogId?string

Only titles in this catalog; none for titles in no catalog.

ids?string

Comma-separated title ids (max 100).

source?string

studio | feed — where the title came from.

year?integer

Exact release year.

rating?string

Comma-separated content ratings.

hasPoster?boolean

true for titles with a poster.

Response Body

OK

application/json
  1. response
[key: string]?any
Example Request
curl -X GET 'https://dev.app.ingenee.ai/api/v1/titles'
Example Response
{  "rows": [    {      "id": "1b478b6a-7721-4a94-aade-55c5658f259c",      "type": "movie",      "title": "E2E source video fixture",      "status": "partial",      "stateLabel": "Review",      "year": null,      "runtimeMinutes": null,      "runtimeHms": null,      "claimedRuntimeMin": null,      "contentRuntimeMin": null,      "contentRating": null,      "language": null,      "posterUrl": null,      "genres": [],      "confidence": 0.9,      "matchConfidence": null,      "matchNote": null,      "catalog": {        "id": "5eb30874-f069-484d-a913-65fec170f485",        "name": "pasted-list"      },      "fromStudio": false,      "rotation": [        {          "tier": "off",          "label": "Off rotation"        }      ],      "offRotation": false,      "blocker": null,      "updatedAt": "2026-10-30T08:34:44.278Z",      "createdAt": "2026-10-29T10:06:44.936Z"    },    {      "id": "882d87f3-d336-4993-b0d1-96334aee8b19",      "type": "movie",      "title": "E2E no video fixture",      "status": "partial",      "stateLabel": "Review",      "year": null,      "runtimeMinutes": null,      "runtimeHms": null,      "claimedRuntimeMin": null,      "contentRuntimeMin": null,      "contentRating": null,      "language": null,      "posterUrl": null,      "genres": [],      "confidence": 0.95,      "matchConfidence": null,      "matchNote": null,      "catalog": {        "id": "5eb30874-f069-484d-a913-65fec170f485",        "name": "pasted-list"      },      "fromStudio": false,      "rotation": [        {          "tier": "off",          "label": "Off rotation"        }      ],      "offRotation": false,      "blocker": null,      "updatedAt": "2026-10-29T10:06:50.482Z",      "createdAt": "2026-10-29T10:06:50.406Z"    }  ],  "nextCursor": "eyJ1cGRhdGVkQXQiOiIyMDI2LTEwLTE1VDExOjQ1OjE3LjczNFoiLCJpZCI6IjhjNTVhZTVkLWEyMjctNGVlYS1hYWI5LTMwN2RjZmFhOGRhYiJ9"}