For AI
Everything here exists as plain text, so an AI assistant can read it without a browser.
| File | What it has |
|---|---|
/llms.txt |
Index of every page, one line each |
/llms-full.txt |
All guides and the reference in one file |
/{page}.md |
Any page as Markdown (also with Accept: text/markdown) |
/openapi.json |
OpenAPI 3 of the public API |
Download for your AI gives you one .md with all of it plus the rules
below. Signed in, it also includes your API base URL, your workspace and a real
video id from your account — never a secret.
Rules for the assistant
- The secret key (
xp_sk_…) lives on the server. Never put it in a web page, a mobile app or a repository. - Call
GET /v1/videos/{id}/playbackwhen the player opens, never earlier. - Use
hls_urlas is. Never build, cache or rewrite video URLs. - To play, use
hls_url.original_urlis the untouched file: use it only if your player supports its format. - Never download or re-host videos yourself. To get the file, call
GET /v1/videos/{id}/download. To bring in a video from a URL, callPOST /v1/videos/imports. - On a fatal player error, call
/playbackagain (at most once per minute) and resume at the same second. - If
/playbackreturnsstatus: "error", show itsmessage. Offer Reload only for retryable codes:VIDEO_NOT_READY,LIVE_NOT_ACTIVE,RATE_LIMITED, 5xx. The video host itself (not/playback) can also answerMAXIMUM_UNAVAILABLE(503, plain text,X-Xona-Errorheader) when serving the manifest or a segment — it is retryable too, same reload rule. - All JSON is snake_case:
hls_url,expires_at,per_page. - Every response is
{ "status": "ok", "data": … }or{ "status": "error", "code": …, "message": … }. Lists addmeta: { total, page, per_page, last_page }. {id}accepts the UUIDidor theshort_id.- Pass
viewer_idwith your own user id so a leaked link can be traced. - Verify webhooks with
X-Xona-Signatureover the raw body, and reject timestamps older than five minutes.
Suggested prompt
Read the attached XonaPlay docs. Integrate video playback in my app using
/v1/videos/{id}/playbackfrom my backend with the secret key in theXONAPLAY_SECRET_KEYenvironment variable. Follow the reload rule and the rules for the assistant exactly. Do not add an SDK.