API reference

Content delivery API

Protected content and release assets

HTTP reference. Generated from the backend contract. Browse endpoints below or download OpenAPI.

This group has 8 operations, generated from api/openapi.yaml. Filter by path, action, or authentication. Each endpoint lists its inputs; expand it for a request template and response codes. Templates need your own values and a schema-valid body.

Replace uppercase placeholders with your values. For a JSON request, save a body matching the schema in request.json. Cookie examples use a local cookie jar from an authenticated session.

Protected content and release assets

GET/screen/ad-decisions/{decision_id}

Get Ad Decision Content

Serves the one private object bound to an issued decision. Authority is the live paired identity plus the decision binding; the buyer project and media ID are resolved server-side, never from the caller, and no object key or signed URL is published. A zero-length probe returns metadata only.

Authentication
runtimeCookie OR nativeSessionAuthorization
Request body
none
Operation ID
getAdDecisionContent

Parameters

NameSend inRequired?Description
decision_idpathrequired
RangeheaderoptionalV1 accepts one byte range only.
Request template and responses
shell · request template
curl --request GET --cookie cookies.txt --cookie-jar cookies.txt 'https://play.screenrig.ai/screen/ad-decisions/DECISION_ID'

Responses

StatusMeaningBody and headers
200Complete decision-bound private media.no body; headers: Accept-Ranges, Content-Length, ETag
206One standards-correct byte range.no body; headers: Accept-Ranges, Content-Range, Content-Length, ETag
404not_found - unknown decision.RuntimeProblem (application/problem+json)
410decision expired or otherwise not servable.RuntimeProblem (application/problem+json)
416invalid_range.RuntimeProblem (application/problem+json); headers: Content-Range, Accept-Ranges
default

Stable RFC 9457 problem response on a Player-facing runtime, content, or probe route, in the runtime document shape (RuntimeProblem). A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

RuntimeProblem (application/problem+json)
HEAD/screen/ad-decisions/{decision_id}

Head Ad Decision Content

Identical authority and metadata to the GET with no body.

Authentication
runtimeCookie OR nativeSessionAuthorization
Request body
none
Operation ID
headAdDecisionContent

Parameters

NameSend inRequired?Description
decision_idpathrequired
RangeheaderoptionalV1 accepts one byte range only.
Request template and responses
shell · request template
curl --request HEAD --cookie cookies.txt --cookie-jar cookies.txt 'https://play.screenrig.ai/screen/ad-decisions/DECISION_ID'

Responses

StatusMeaningBody and headers
200Metadata only.no body; headers: Accept-Ranges, Content-Length, ETag
default

Stable RFC 9457 problem response on a Player-facing runtime, content, or probe route, in the runtime document shape (RuntimeProblem). A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

RuntimeProblem (application/problem+json)
GET/media/{media_id}

Get Stable Protected Media

Stable immutable media URL shared across playlist revisions. The runtime session identifies the screen and project for authorization and bandwidth accounting.

Every request requires membership in that screen's desired, active, or unexpired transition-grace grant in its current content-access generation, or a media:<id> reference in the current document of a card data key such a grant lists. IDs alone grant no access. ETag is the quoted sha256 of the bytes.

Browser cookie and native session authentication remain on the trusted Player origin; redirects and public object-storage access are not used.

Authentication
runtimeCookie OR nativeSessionAuthorization
Request body
none
Operation ID
getStableProtectedMedia

Parameters

NameSend inRequired?Description
media_idpathrequired
RangeheaderoptionalV1 accepts one byte range only.
Sec-Fetch-Siteheaderoptional
Sec-Fetch-Modeheaderoptional
Sec-Fetch-Destheaderoptional
Request template and responses
shell · request template
curl --request GET --cookie cookies.txt --cookie-jar cookies.txt 'https://play.screenrig.ai/media/MEDIA_ID'

Responses

StatusMeaningBody and headers
200Session-authorized complete private media. Browser Fetch Metadata must describe trusted-player same-origin media/image/video use; authenticated native clients may omit it.no body; headers: Accept-Ranges, Content-Length, ETag, Content-Disposition
206One standards-correct byte range.no body; headers: Accept-Ranges, Content-Range, Content-Length, ETag
416Unsatisfiable, multiple, or malformed range.RuntimeProblem (application/problem+json); headers: Content-Range, Accept-Ranges
429Per-client, screen, or organization protected-media egress limit exceeded.RuntimeProblem (application/problem+json); headers: Retry-After
default

Stable RFC 9457 problem response on a Player-facing runtime, content, or probe route, in the runtime document shape (RuntimeProblem). A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

RuntimeProblem (application/problem+json)
HEAD/media/{media_id}

Head Stable Protected Media

Session-authorized immutable media metadata with the same grant checks as GET and no response body.

Authentication
runtimeCookie OR nativeSessionAuthorization
Request body
none
Operation ID
headStableProtectedMedia

Parameters

NameSend inRequired?Description
media_idpathrequired
RangeheaderoptionalV1 accepts one byte range only.
Sec-Fetch-Siteheaderoptional
Sec-Fetch-Modeheaderoptional
Sec-Fetch-Destheaderoptional
Request template and responses
shell · request template
curl --request HEAD --cookie cookies.txt --cookie-jar cookies.txt 'https://play.screenrig.ai/media/MEDIA_ID'

Responses

StatusMeaningBody and headers
200Session-authorized complete private media. Browser Fetch Metadata must describe trusted-player same-origin media/image/video use; authenticated native clients may omit it.no body; headers: Accept-Ranges, Content-Length, ETag, Content-Disposition
206One standards-correct byte range.no body; headers: Accept-Ranges, Content-Range, Content-Length, ETag
416Unsatisfiable, multiple, or malformed range.RuntimeProblem (application/problem+json); headers: Content-Range, Accept-Ranges
429Per-client, screen, or organization protected-media egress limit exceeded.RuntimeProblem (application/problem+json); headers: Retry-After
default

Stable RFC 9457 problem response on a Player-facing runtime, content, or probe route, in the runtime document shape (RuntimeProblem). A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

RuntimeProblem (application/problem+json)
GET/media/manifests/{manifest_revision}/{media_id}

Get Protected Media

Authentication
runtimeCookie OR nativeSessionAuthorization
Request body
none
Operation ID
getProtectedMedia

Parameters

NameSend inRequired?Description
manifest_revisionpathrequired
media_idpathrequired
RangeheaderoptionalV1 accepts one byte range only.
Sec-Fetch-Siteheaderoptional
Sec-Fetch-Modeheaderoptional
Sec-Fetch-Destheaderoptional
Request template and responses
shell · request template
curl --request GET --cookie cookies.txt --cookie-jar cookies.txt 'https://play.screenrig.ai/media/manifests/MANIFEST_REVISION/MEDIA_ID'

Responses

StatusMeaningBody and headers
200Session-authorized complete private media. Browser Fetch Metadata must describe trusted-player same-origin media/image/video use; authenticated native clients may omit it.no body; headers: Accept-Ranges, Content-Length, ETag, Content-Disposition
206One standards-correct byte range.no body; headers: Accept-Ranges, Content-Range, Content-Length, ETag
416Unsatisfiable, multiple, or malformed range.RuntimeProblem (application/problem+json); headers: Content-Range, Accept-Ranges
429Per-client, screen, or organization protected-media egress limit exceeded.RuntimeProblem (application/problem+json); headers: Retry-After
default

Stable RFC 9457 problem response on a Player-facing runtime, content, or probe route, in the runtime document shape (RuntimeProblem). A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

RuntimeProblem (application/problem+json)
GET/screen/manifests/{manifest_revision}/releases/{release_id}/package

Get Native Webapp Package

Retrieves the normalized immutable package for one uploaded application release so a paired native player can retain its authorized last-known-good release across process restart and temporary network loss.

The paired-device cookie, exact screen grant, manifest revision, content-access generation, release membership, and ready package metadata are checked on every request. Project tokens, anonymous runtime cookies, release cookies, external iframe primitives, and direct object-storage access never authorize package bytes.

Authentication
pairedDeviceCookie OR nativeSessionAuthorization
Request body
none
Operation ID
getNativeWebappPackage

Parameters

NameSend inRequired?Description
manifest_revisionpathrequired
release_idpathrequired
RangeheaderoptionalV1 accepts one byte range only.
Sec-Fetch-Siteheaderoptional
Sec-Fetch-Modeheaderoptional
Sec-Fetch-Destheaderoptional
Request template and responses
shell · request template
curl --request GET --cookie cookies.txt --cookie-jar cookies.txt 'https://play.screenrig.ai/screen/manifests/MANIFEST_REVISION/releases/RELEASE_ID/package'

Responses

StatusMeaningBody and headers
200Complete normalized private package.no body; headers: Accept-Ranges, Content-Length, Content-Type, Content-Disposition, Cache-Control, ETag, Referrer-Policy, Cross-Origin-Resource-Policy, X-Content-Type-Options, Vary
206One standards-correct byte range from the same immutable package.no body; headers: Accept-Ranges, Content-Range, Content-Length, Content-Type, Content-Disposition, Cache-Control, ETag, Referrer-Policy, Cross-Origin-Resource-Policy, X-Content-Type-Options, Vary
416Unsatisfiable, multiple, or malformed range.RuntimeProblem (application/problem+json); headers: Content-Range, Accept-Ranges
429

Stable rate_limited problem on a Player-facing runtime or content route, in the runtime document shape (RuntimeProblem). Retry only after the authoritative Retry-After interval. Fixed-window denials also include the applicable RateLimit-Policy and RateLimit members; concurrency and byte-budget denials omit those optional disclosures.

RuntimeProblem (application/problem+json); headers: Retry-After, RateLimit-Policy, RateLimit
default

Stable RFC 9457 problem response on a Player-facing runtime, content, or probe route, in the runtime document shape (RuntimeProblem). A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

RuntimeProblem (application/problem+json)
HEAD/screen/manifests/{manifest_revision}/releases/{release_id}/package

Head Native Webapp Package

Returns the same authorization and immutable identity headers as GET without package bytes.

Authentication
pairedDeviceCookie OR nativeSessionAuthorization
Request body
none
Operation ID
headNativeWebappPackage

Parameters

NameSend inRequired?Description
manifest_revisionpathrequired
release_idpathrequired
RangeheaderoptionalV1 accepts one byte range only.
Sec-Fetch-Siteheaderoptional
Sec-Fetch-Modeheaderoptional
Sec-Fetch-Destheaderoptional
Request template and responses
shell · request template
curl --request HEAD --cookie cookies.txt --cookie-jar cookies.txt 'https://play.screenrig.ai/screen/manifests/MANIFEST_REVISION/releases/RELEASE_ID/package'

Responses

StatusMeaningBody and headers
200Authorized normalized package metadata.no body; headers: Accept-Ranges, Content-Length, Content-Type, Content-Disposition, Cache-Control, ETag, Referrer-Policy, Cross-Origin-Resource-Policy, X-Content-Type-Options, Vary
206Authorized metadata for one byte range.no body; headers: Accept-Ranges, Content-Range, Content-Length, Content-Type, Content-Disposition, Cache-Control, ETag, Referrer-Policy, Cross-Origin-Resource-Policy, X-Content-Type-Options, Vary
416Unsatisfiable, multiple, or malformed range.no body; headers: Content-Range, Accept-Ranges
429

Stable rate_limited problem on a Player-facing runtime or content route, in the runtime document shape (RuntimeProblem). Retry only after the authoritative Retry-After interval. Fixed-window denials also include the applicable RateLimit-Policy and RateLimit members; concurrency and byte-budget denials omit those optional disclosures.

RuntimeProblem (application/problem+json); headers: Retry-After, RateLimit-Policy, RateLimit
default

Stable RFC 9457 problem response on a Player-facing runtime, content, or probe route, in the runtime document shape (RuntimeProblem). A 421 server_draining carries Retry-After of 1 second, a 500 not_ready or dependency_unavailable carries 5, and a 500 manifest_degraded carries 60, unless the handler set a more specific value.

RuntimeProblem (application/problem+json)
GET/{asset_path}

Consume Launch Ticket Or Get Release Asset

Exact-release-host operation. With a ticket query, atomically consumes the single-use 30-second ticket, binds Host/release/screen/content-generation/manifest/grant, sets only the exact-host release-grant cookie, and redirects to the same path without the ticket. Without a ticket, validates that cookie on every GET/HEAD.

The asset_path parameter is greedy (x-screenrig-greedy-path) and is resolved only beneath the ready release root. Runtime/project/device cookies and project bearer tokens never authorize this operation.

Authentication
releaseLaunchTicket OR releaseGrantCookie
Request body
none
Operation ID
consumeLaunchTicketOrGetReleaseAsset

Parameters

NameSend inRequired?Description
asset_pathpathrequired
Sec-Fetch-Siteheaderoptional
Sec-Fetch-Modeheaderoptional
Sec-Fetch-Destheaderoptional
Request template and responses
shell · request template
curl --request GET --cookie cookies.txt --cookie-jar cookies.txt 'https://r-{release_host_label}.apps.screenrig.ai/index.html'

Responses

StatusMeaningBody and headers
200Exact-host grant-authorized immutable asset.no body; headers: Referrer-Policy, X-Content-Type-Options, ETag
302Ticket consumed once; release-grant cookie issued; ticket removed from Location.no body; headers: Location, Set-Cookie, Cache-Control, Referrer-Policy
403Wrong Host/release/screen/generation/grant, stale/replayed ticket, invalid cookie, contradictory Fetch Metadata, or disallowed method.Problem (application/problem+json)
404Asset absent without exposing release filesystem shape.Problem (application/problem+json)