GET /v3/vendor/{org_token}/1/rt_ad/{screen_id}
Request ad creatives and news content for immediate playback on a specific screen. Each request triggers a new auction decision on the server — responses are one-time use and must not be replayed offline.
Requests must come from the screen itself (or its player software). Each request triggers a fresh auction. Caching the media file for playback is fine, but only play it when an ad response tells you to do so. Do not replay old responses.
Path parameters
| Parameter | Type | Required | Description |
|---|
org_token | string | Yes | Your organization token (find it here) |
screen_id | string | Yes | The screen to fetch content for |
Example request
curl -X GET "https://api.framen.com/v3/vendor/Org_9WeJxcVrRnM/1/rt_ad/d3c8dbb6-c21b-4b26-8f35-d73260c95fa1"
Response scenarios
Ad and news available:
{
"data": {
"requestId": "b576b083-a7cd-47fa-b33e-642b93457339",
"ad": {
"id": "Itm_cgK3bmLgWMC",
"title": "Campaign Creative",
"mimeType": "video/mp4",
"height": 1080,
"width": 1920,
"duration": 10000,
"url": "https://d3kdzyvtj6vooy.cloudfront.net/video-opt.mp4",
"pop": "https://api.framen.com/pop/GtzksoSqPq2ojMzcDbdAahGgz4ogDKjLF44tdowMHFue",
"md5": "1a61d314216ed9b267be3b6f93cdb78d"
},
"news": null,
"billable": false,
"newsFirst": true
}
}
No content available (valid request, nothing to serve):
{
"data": {
"requestId": "175e6560-21ef-4263-b7de-269172572512",
"ad": null,
"news": null,
"billable": false,
"newsFirst": true
}
}
Invalid request (404):
{
"detail": "Not Found"
}
Response fields
| Field | Type | Description |
|---|
data.requestId | string | Unique identifier for this request |
data.billable | boolean | Whether this response contains a billable impression |
data.newsFirst | boolean | Playback order flag (see below) |
data.ad | object | null | Ad creative, or null if none available |
data.news | object | null | News item, or null if none available |
Ad object
| Field | Type | Description |
|---|
id | string | Ad creative ID |
title | string | Creative name |
mimeType | string | Content type (e.g., video/mp4, image/jpeg) |
width | int | Content width in pixels |
height | int | Content height in pixels |
duration | int | Playback duration in milliseconds |
url | string | URL to download or stream the creative |
pop | string | Proof-of-play callback URL |
md5 | string | MD5 hash of the creative file, for cache validation |
News object
| Field | Type | Description |
|---|
id | string | News item ID |
title | string | News headline |
mimeType | string | Content type (e.g., text/html) |
width | int | Content width in pixels |
height | int | Content height in pixels |
newsType | string | News category |
duration | int | Display duration in milliseconds |
url | string | URL to load the news content |
pop | string | Proof-of-play callback URL |
Duration values in the ad and news objects are in milliseconds, while loop_duration on screens is in seconds. Be careful not to mix these units.
Playback order
When both ad and news are present, the newsFirst flag determines the order:
newsFirst | Play order |
|---|
true | Play news first, then ad immediately after |
false | Play ad first, then news immediately after |
When only one item is present, play it regardless of the newsFirst value. When both are null, show your default/fallback content or request again after a delay.
Handling null responses
Both ad and news can be null independently. Your player must handle all four combinations:
ad | news | Action |
|---|
| present | present | Play both in newsFirst order, fire both PoPs |
| present | null | Play ad only, fire ad PoP |
null | present | Play news only, fire news PoP |
null | null | Show fallback content, request again after delay |