# FAQ

Short answers, each with a link to the page that owns the details. Not here? See [Troubleshooting](https://docs.wandura.ai/developers/production/troubleshooting) or [Support](https://docs.wandura.ai/developers/help/support).

## Keys and access
### Can I call the API from a browser or a mobile app?
No. The API is server-to-server: no CORS headers, and a key inside a client can be extracted. Your app talks to your backend. See [Security](https://docs.wandura.ai/developers/concepts/security#trust-boundary).

### Can I create a key with the `playback` scope myself?
Yes: any Admin or Developer, on **Developers** → **Stream films in an app**. See [Authentication](https://docs.wandura.ai/developers/authentication#scopes).

### I lost a key. Can Wandura show it again?
No. It is shown once. Rotate it or create a new one.

### Does rotating a key cause downtime?
Yes: the old secret stops working within seconds, with no overlap. For no downtime, create a second key, deploy it, then revoke the old one; mind the version pin. See [Security · Key lifecycle](https://docs.wandura.ai/developers/concepts/security#key-lifecycle).

### Is there a sandbox?
No separate host. Tests call production with the keys of your **test organisation**: sample films only, plays not counted, errors simulated on demand. See [Testing](https://docs.wandura.ai/developers/guides/testing).

## Catalog
### Is the catalog paginated?
Optionally. Without `limit` you get everything in one response; with `limit` (1–200 films) you page with `cursor`. Pages are not one snapshot: see [Canonical API behaviour · Pagination](https://docs.wandura.ai/developers/reference/behaviour#pagination).

### A film I licensed is missing. Why?
The licence must be active, today (UTC) inside its window, and the film published. Check the dates with Wandura. See [Catalog](https://docs.wandura.ai/developers/concepts/catalog#what-is-in-the-catalog).

### Why do some episodes have `"id": null`?
They are placeholders for planned episodes ("coming soon"). Never send them to playback. See [Catalog](https://docs.wandura.ai/developers/concepts/catalog#planned-episodes).

### `stream_ready` was `true`, but playback said `not_ready`. A bug?
No. The catalog is a snapshot; the ticket request checks again. Show "Not available yet" and re-sync.

## Playback
### Can I request tickets for several episodes in one call?
Yes: up to 3 per call, with `episodes` or with an episode plus `next`. Each ticket counts 1 toward your limit. See [Request playback](https://docs.wandura.ai/developers/reference/playback).

### Can I cache playback tickets?
Yes, per viewer, **device**, episode and intent, until 5 minutes before `expires_at`. Never across devices: a ticket only decrypts on the device it was issued for. With a stable `viewer_ref`, Wandura does this for you. See [Canonical API behaviour · Reuse](https://docs.wandura.ai/developers/reference/behaviour#ticket-reuse).

### Why do I get `409 sdk_required` or `400 invalid_device_info`?
The device values from the Player SDK are missing (`409`) or look empty, such as `"(null)"` (`400`). See [Playback and tickets](https://docs.wandura.ai/developers/concepts/playback#send-the-device-values).

### Can I play episodes with a standard HLS player?
No: it loads the playlist and stalls. Use the Player SDK. See [Player SDK](https://docs.wandura.ai/developers/player-sdk).

### Do prefetch requests count as plays?
Not with `"intent": "prefetch"`. They do count toward your rate limit. Requests without `intent`, or with another value, count as plays.

### Where do subtitles come from?
From each ticket, as WebVTT files. See [Subtitles](https://docs.wandura.ai/developers/guides/subtitles).

## Creatives
### Does the feed include video files?
Not the file itself. Records describe each creative and never contain a signed media URL. The record's `final.file_url` is a public share link to the final video that needs no API key, so you can hand it to Meta's video upload: see [Downloading the final file](https://docs.wandura.ai/developers/concepts/creatives#downloading-the-final-file).

### How do I find out a creative was withdrawn?
`GET /creatives/{id}` answers `404` `4040`. There are no deletion events. See [Creatives sync](https://docs.wandura.ai/developers/guides/creatives-sync).

### Why did the same creative arrive twice?
Incremental syncs can repeat a record. Overwrite by `creative_id`.
