curl --request POST \
--url https://api.dizplai.com/v1/experiences \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "Hartley Town v Riverside",
"starts_at": "2026-11-21T19:45:00Z",
"metadata": {
"event_id": "ev_2041",
"round": "QF"
}
}
'import requests
url = "https://api.dizplai.com/v1/experiences"
payload = {
"name": "Hartley Town v Riverside",
"starts_at": "2026-11-21T19:45:00Z",
"metadata": {
"event_id": "ev_2041",
"round": "QF"
}
}
headers = {
"x-api-key": "<api-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-api-key': '<api-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'Hartley Town v Riverside',
starts_at: '2026-11-21T19:45:00Z',
metadata: {event_id: 'ev_2041', round: 'QF'}
})
};
fetch('https://api.dizplai.com/v1/experiences', 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.dizplai.com/v1/experiences",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Hartley Town v Riverside',
'starts_at' => '2026-11-21T19:45:00Z',
'metadata' => [
'event_id' => 'ev_2041',
'round' => 'QF'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.dizplai.com/v1/experiences"
payload := strings.NewReader("{\n \"name\": \"Hartley Town v Riverside\",\n \"starts_at\": \"2026-11-21T19:45:00Z\",\n \"metadata\": {\n \"event_id\": \"ev_2041\",\n \"round\": \"QF\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.dizplai.com/v1/experiences")
.header("x-api-key", "<api-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Hartley Town v Riverside\",\n \"starts_at\": \"2026-11-21T19:45:00Z\",\n \"metadata\": {\n \"event_id\": \"ev_2041\",\n \"round\": \"QF\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dizplai.com/v1/experiences")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Hartley Town v Riverside\",\n \"starts_at\": \"2026-11-21T19:45:00Z\",\n \"metadata\": {\n \"event_id\": \"ev_2041\",\n \"round\": \"QF\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "exp_01JBX7Q2T8M4K9R6V3N5P0WZCD",
"name": "Hartley Town v Riverside",
"status": "live",
"qr_image_url": null,
"starts_at": "2026-11-21T19:45:00Z",
"ends_at": null,
"metadata": {
"event_id": "ev_2041",
"round": "QF"
},
"locale": "en-GB",
"items": [
{
"id": "pol_01JBX7Q3A1B2C3D4E5F6G7H8J9",
"type": "poll",
"name": "Player of the match",
"experience_id": "exp_01JBX7Q2T8M4K9R6V3N5P0WZCD",
"status": "live",
"starts_at": null,
"ends_at": null,
"metadata": {
"event_id": "ev_2041"
},
"api_version": 1,
"created_at": "2026-11-20T15:02:11Z",
"updated_at": "2026-11-21T20:41:07Z",
"results_visibility": "after_vote",
"requires_sign_in": false,
"question": "Who was your player of the match?",
"options": [
{
"id": "opt_01M7WQND9RKTH6WF72R2VFKZ1S",
"label": "Jordan Mensah",
"votes": 2105,
"percent": 50
},
{
"id": "opt_01M7WQNDD71FCAQ370M9XTD2GA",
"label": "Kai Brennan",
"votes": 1263,
"percent": 30
},
{
"id": "opt_01M7WQNDECMSCTEM2HRAJT61R8",
"label": "Amara Osei",
"votes": 842,
"percent": 20
}
],
"total_votes": 4210,
"final": false
}
],
"created_at": "2026-11-20T15:02:11Z",
"updated_at": "2026-11-21T20:41:07Z"
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}Create an experience
It has no items yet, so fans don’t see it.
curl --request POST \
--url https://api.dizplai.com/v1/experiences \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "Hartley Town v Riverside",
"starts_at": "2026-11-21T19:45:00Z",
"metadata": {
"event_id": "ev_2041",
"round": "QF"
}
}
'import requests
url = "https://api.dizplai.com/v1/experiences"
payload = {
"name": "Hartley Town v Riverside",
"starts_at": "2026-11-21T19:45:00Z",
"metadata": {
"event_id": "ev_2041",
"round": "QF"
}
}
headers = {
"x-api-key": "<api-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-api-key': '<api-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'Hartley Town v Riverside',
starts_at: '2026-11-21T19:45:00Z',
metadata: {event_id: 'ev_2041', round: 'QF'}
})
};
fetch('https://api.dizplai.com/v1/experiences', 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.dizplai.com/v1/experiences",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Hartley Town v Riverside',
'starts_at' => '2026-11-21T19:45:00Z',
'metadata' => [
'event_id' => 'ev_2041',
'round' => 'QF'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.dizplai.com/v1/experiences"
payload := strings.NewReader("{\n \"name\": \"Hartley Town v Riverside\",\n \"starts_at\": \"2026-11-21T19:45:00Z\",\n \"metadata\": {\n \"event_id\": \"ev_2041\",\n \"round\": \"QF\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.dizplai.com/v1/experiences")
.header("x-api-key", "<api-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Hartley Town v Riverside\",\n \"starts_at\": \"2026-11-21T19:45:00Z\",\n \"metadata\": {\n \"event_id\": \"ev_2041\",\n \"round\": \"QF\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dizplai.com/v1/experiences")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Hartley Town v Riverside\",\n \"starts_at\": \"2026-11-21T19:45:00Z\",\n \"metadata\": {\n \"event_id\": \"ev_2041\",\n \"round\": \"QF\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "exp_01JBX7Q2T8M4K9R6V3N5P0WZCD",
"name": "Hartley Town v Riverside",
"status": "live",
"qr_image_url": null,
"starts_at": "2026-11-21T19:45:00Z",
"ends_at": null,
"metadata": {
"event_id": "ev_2041",
"round": "QF"
},
"locale": "en-GB",
"items": [
{
"id": "pol_01JBX7Q3A1B2C3D4E5F6G7H8J9",
"type": "poll",
"name": "Player of the match",
"experience_id": "exp_01JBX7Q2T8M4K9R6V3N5P0WZCD",
"status": "live",
"starts_at": null,
"ends_at": null,
"metadata": {
"event_id": "ev_2041"
},
"api_version": 1,
"created_at": "2026-11-20T15:02:11Z",
"updated_at": "2026-11-21T20:41:07Z",
"results_visibility": "after_vote",
"requires_sign_in": false,
"question": "Who was your player of the match?",
"options": [
{
"id": "opt_01M7WQND9RKTH6WF72R2VFKZ1S",
"label": "Jordan Mensah",
"votes": 2105,
"percent": 50
},
{
"id": "opt_01M7WQNDD71FCAQ370M9XTD2GA",
"label": "Kai Brennan",
"votes": 1263,
"percent": 30
},
{
"id": "opt_01M7WQNDECMSCTEM2HRAJT61R8",
"label": "Amara Osei",
"votes": 842,
"percent": 20
}
],
"total_votes": 4210,
"final": false
}
],
"created_at": "2026-11-20T15:02:11Z",
"updated_at": "2026-11-21T20:41:07Z"
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}Authorizations
Which app is calling, and its usage plan: a platform's secret key, from servers only, or an app's publishable key (pk_live_...), safe in app code. It identifies the app and grants nothing on its own.
A platform's short-lived issuer token, for the same client as the key.
Headers
Chosen by you. Recommended. Unique per request, honoured for 24 hours.
1 - 255Body
The item's name, as the hub card and on-air graphics show it.
1 - 200When it starts. Items inherit it as their default starts_at.
Optional. When it ends; moderation items expire after it.
Free-form tags: up to 50 keys of up to 40 characters, values up to 500. One reserved key, event_id: the event the item is about. Every other key is yours, and never interpreted.
Show child attributes
Show child attributes
BCP 47 language tag, such as en-GB. One language per experience. The hub's locale if you leave it out.
In a creator network, the hub that shows the experience. Required for networks, fixed once set.
^hub_[0-9A-HJKMNP-TV-Z]{26}$Response
The new experience.
^exp_[0-9A-HJKMNP-TV-Z]{26}$"exp_01JBX7Q2T8M4K9R6V3N5P0WZCD"
Worked out from its items: live if any item is, else hidden, else closed.
scheduled, live, hidden, closed, deleted The experience's QR code.
Free-form tags: up to 50 keys of up to 40 characters, values up to 500. One reserved key, event_id: the event the item is about. Every other key is yours, and never interpreted.
Show child attributes
Show child attributes
Every item, types mixed, in display order, results included.
Show child attributes
Show child attributes
RFC 3339, in UTC.
RFC 3339, in UTC.
A hub in a creator network: one creator's fan site, registered under the network's client ID. Present only in creator networks; a client without a network has no hub ID.
^hub_[0-9A-HJKMNP-TV-Z]{26}$
