Get Spot
curl --request GET \
--url https://api.framen.com/v3/vendor/{org_token}/1/rt_ad/{screen_id}import requests
url = "https://api.framen.com/v3/vendor/{org_token}/1/rt_ad/{screen_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.framen.com/v3/vendor/{org_token}/1/rt_ad/{screen_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.framen.com/v3/vendor/{org_token}/1/rt_ad/{screen_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.framen.com/v3/vendor/{org_token}/1/rt_ad/{screen_id}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.framen.com/v3/vendor/{org_token}/1/rt_ad/{screen_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.framen.com/v3/vendor/{org_token}/1/rt_ad/{screen_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyGet Spot
Request a single creative for a single playout on a specific screen.
GET
/
v3
/
vendor
/
{org_token}
/
1
/
rt_ad
/
{screen_id}
Get Spot
curl --request GET \
--url https://api.framen.com/v3/vendor/{org_token}/1/rt_ad/{screen_id}import requests
url = "https://api.framen.com/v3/vendor/{org_token}/1/rt_ad/{screen_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.framen.com/v3/vendor/{org_token}/1/rt_ad/{screen_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.framen.com/v3/vendor/{org_token}/1/rt_ad/{screen_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.framen.com/v3/vendor/{org_token}/1/rt_ad/{screen_id}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.framen.com/v3/vendor/{org_token}/1/rt_ad/{screen_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.framen.com/v3/vendor/{org_token}/1/rt_ad/{screen_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyGet Spot
Request a single creative for a single playout on a specific screen. Returns content (news or ad) along with a proof-of-play URL. This is part of the Vendor Default API for real-time ad serving, separate from the SMAPI CRUD endpoints.Need a test campaign?
To set up a test campaign for your screens, contact support@framen.com with one or multiple
screen_id you want to test with.string
required
Your organization token (e.g.,
Org_4KmTqZnWpLx).string
required
The unique identifier of the screen requesting content.
Response
The responsedata object contains:
| Field | Type | Description |
|---|---|---|
requestId | string | Unique ID for this request |
billable | boolean | Whether this playout is billable |
newsFirst | boolean | Whether news should play before the ad |
data object also contains two nested content objects: news and ad. Both share the same schema:
| Field | Type | Description |
|---|---|---|
id | string | Content item ID |
title | string | Content title |
mimeType | string | e.g., text/html, video/mp4 |
height | integer | Pixel height |
width | integer | Pixel width |
duration | integer | Duration in milliseconds |
url | string | URL to fetch/render the content |
pop | string | Proof-of-play callback URL (GET) |
news object additionally contains:
| Field | Type | Description |
|---|---|---|
newsType | string | News category (e.g., WELT_WISSEN) |
Request Cycle Flow
- Player sends ad-request -> receives ad-response (containing news + ad + pop URLs).
- Player pre-caches content.
- Player plays the content.
- Player fires the proof-of-play GET request. Must happen within 1 hour of the original request.
- Repeat for next spot.
Example Request
curl -X GET https://api.framen.com/v3/vendor/Org_4KmTqZnWpLx/1/rt_ad/Scr_xYz789
Last modified on April 22, 2026