curl --request POST \
--url https://api.dizplai.com/v1/polls \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"experience_id": "exp_01JBX7Q2T8M4K9R6V3N5P0WZCD",
"status": "hidden",
"metadata": {
"event_id": "ev_2041"
},
"name": "Player of the match",
"question": "Who was your player of the match?",
"options": [
{
"label": "Jordan Mensah"
},
{
"label": "Kai Brennan"
},
{
"label": "Amara Osei"
}
]
}
'import requests
url = "https://api.dizplai.com/v1/polls"
payload = {
"experience_id": "exp_01JBX7Q2T8M4K9R6V3N5P0WZCD",
"status": "hidden",
"metadata": { "event_id": "ev_2041" },
"name": "Player of the match",
"question": "Who was your player of the match?",
"options": [{ "label": "Jordan Mensah" }, { "label": "Kai Brennan" }, { "label": "Amara Osei" }]
}
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({
experience_id: 'exp_01JBX7Q2T8M4K9R6V3N5P0WZCD',
status: 'hidden',
metadata: {event_id: 'ev_2041'},
name: 'Player of the match',
question: 'Who was your player of the match?',
options: [{label: 'Jordan Mensah'}, {label: 'Kai Brennan'}, {label: 'Amara Osei'}]
})
};
fetch('https://api.dizplai.com/v1/polls', 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/polls",
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([
'experience_id' => 'exp_01JBX7Q2T8M4K9R6V3N5P0WZCD',
'status' => 'hidden',
'metadata' => [
'event_id' => 'ev_2041'
],
'name' => 'Player of the match',
'question' => 'Who was your player of the match?',
'options' => [
[
'label' => 'Jordan Mensah'
],
[
'label' => 'Kai Brennan'
],
[
'label' => 'Amara Osei'
]
]
]),
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/polls"
payload := strings.NewReader("{\n \"experience_id\": \"exp_01JBX7Q2T8M4K9R6V3N5P0WZCD\",\n \"status\": \"hidden\",\n \"metadata\": {\n \"event_id\": \"ev_2041\"\n },\n \"name\": \"Player of the match\",\n \"question\": \"Who was your player of the match?\",\n \"options\": [\n {\n \"label\": \"Jordan Mensah\"\n },\n {\n \"label\": \"Kai Brennan\"\n },\n {\n \"label\": \"Amara Osei\"\n }\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/polls")
.header("x-api-key", "<api-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"experience_id\": \"exp_01JBX7Q2T8M4K9R6V3N5P0WZCD\",\n \"status\": \"hidden\",\n \"metadata\": {\n \"event_id\": \"ev_2041\"\n },\n \"name\": \"Player of the match\",\n \"question\": \"Who was your player of the match?\",\n \"options\": [\n {\n \"label\": \"Jordan Mensah\"\n },\n {\n \"label\": \"Kai Brennan\"\n },\n {\n \"label\": \"Amara Osei\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dizplai.com/v1/polls")
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 \"experience_id\": \"exp_01JBX7Q2T8M4K9R6V3N5P0WZCD\",\n \"status\": \"hidden\",\n \"metadata\": {\n \"event_id\": \"ev_2041\"\n },\n \"name\": \"Player of the match\",\n \"question\": \"Who was your player of the match?\",\n \"options\": [\n {\n \"label\": \"Jordan Mensah\"\n },\n {\n \"label\": \"Kai Brennan\"\n },\n {\n \"label\": \"Amara Osei\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"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
}{
"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>"
}
]
}{
"type": "<string>",
"title": "<string>",
"status": 499,
"request_id": "<string>",
"detail": "<string>",
"errors": [
{
"pointer": "<string>",
"message": "<string>"
}
]
}Create a poll
Created hidden unless you send status scheduled or live, so fans see it only once itβs made live.
curl --request POST \
--url https://api.dizplai.com/v1/polls \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"experience_id": "exp_01JBX7Q2T8M4K9R6V3N5P0WZCD",
"status": "hidden",
"metadata": {
"event_id": "ev_2041"
},
"name": "Player of the match",
"question": "Who was your player of the match?",
"options": [
{
"label": "Jordan Mensah"
},
{
"label": "Kai Brennan"
},
{
"label": "Amara Osei"
}
]
}
'import requests
url = "https://api.dizplai.com/v1/polls"
payload = {
"experience_id": "exp_01JBX7Q2T8M4K9R6V3N5P0WZCD",
"status": "hidden",
"metadata": { "event_id": "ev_2041" },
"name": "Player of the match",
"question": "Who was your player of the match?",
"options": [{ "label": "Jordan Mensah" }, { "label": "Kai Brennan" }, { "label": "Amara Osei" }]
}
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({
experience_id: 'exp_01JBX7Q2T8M4K9R6V3N5P0WZCD',
status: 'hidden',
metadata: {event_id: 'ev_2041'},
name: 'Player of the match',
question: 'Who was your player of the match?',
options: [{label: 'Jordan Mensah'}, {label: 'Kai Brennan'}, {label: 'Amara Osei'}]
})
};
fetch('https://api.dizplai.com/v1/polls', 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/polls",
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([
'experience_id' => 'exp_01JBX7Q2T8M4K9R6V3N5P0WZCD',
'status' => 'hidden',
'metadata' => [
'event_id' => 'ev_2041'
],
'name' => 'Player of the match',
'question' => 'Who was your player of the match?',
'options' => [
[
'label' => 'Jordan Mensah'
],
[
'label' => 'Kai Brennan'
],
[
'label' => 'Amara Osei'
]
]
]),
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/polls"
payload := strings.NewReader("{\n \"experience_id\": \"exp_01JBX7Q2T8M4K9R6V3N5P0WZCD\",\n \"status\": \"hidden\",\n \"metadata\": {\n \"event_id\": \"ev_2041\"\n },\n \"name\": \"Player of the match\",\n \"question\": \"Who was your player of the match?\",\n \"options\": [\n {\n \"label\": \"Jordan Mensah\"\n },\n {\n \"label\": \"Kai Brennan\"\n },\n {\n \"label\": \"Amara Osei\"\n }\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/polls")
.header("x-api-key", "<api-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"experience_id\": \"exp_01JBX7Q2T8M4K9R6V3N5P0WZCD\",\n \"status\": \"hidden\",\n \"metadata\": {\n \"event_id\": \"ev_2041\"\n },\n \"name\": \"Player of the match\",\n \"question\": \"Who was your player of the match?\",\n \"options\": [\n {\n \"label\": \"Jordan Mensah\"\n },\n {\n \"label\": \"Kai Brennan\"\n },\n {\n \"label\": \"Amara Osei\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dizplai.com/v1/polls")
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 \"experience_id\": \"exp_01JBX7Q2T8M4K9R6V3N5P0WZCD\",\n \"status\": \"hidden\",\n \"metadata\": {\n \"event_id\": \"ev_2041\"\n },\n \"name\": \"Player of the match\",\n \"question\": \"Who was your player of the match?\",\n \"options\": [\n {\n \"label\": \"Jordan Mensah\"\n },\n {\n \"label\": \"Kai Brennan\"\n },\n {\n \"label\": \"Amara Osei\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"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
}{
"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>"
}
]
}{
"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
A new poll.
^exp_[0-9A-HJKMNP-TV-Z]{26}$"exp_01JBX7Q2T8M4K9R6V3N5P0WZCD"
The item's name, as the hub card and on-air graphics show it.
1 - 200The question fans answer.
1 - 3001 - 10 elementsShow child attributes
Show child attributes
Optional. It opens then (status scheduled until it does).
Optional. It closes then.
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
Where a new item starts. hidden by default, so fans see it only once it's made live; scheduled needs starts_at.
hidden, scheduled, live When fans may see results: live, after_vote, after_close (once votes have stopped) or hidden. Platform reads always include them; fan app reads hold them back until the item closes, unless live.
live, after_vote, after_close, hidden True if only signed-in fans may vote or post. If you leave it out, your account's setting.
Supporting text under the question.
300Response
The new item, the same shape as GET /polls/{poll_id}.
Poll, results included.
^pol_[0-9A-HJKMNP-TV-Z]{26}$"pol_01JBX7Q3A1B2C3D4E5F6G7H8J9"
^exp_[0-9A-HJKMNP-TV-Z]{26}$"exp_01JBX7Q2T8M4K9R6V3N5P0WZCD"
The item's status: values are added, never removed. scheduled: waits for starts_at, then goes live. live: taking votes. hidden: not shown to fans; the state underneath is kept, so making it live or closed again restores it. closed: votes have stopped. deleted: retired; reads still return it, with this status.
scheduled, live, hidden, closed, deleted When it opens. Null when it opens on demand.
When it closes. Null otherwise.
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
The major version of the widget type's own API, kept for the item's life.
x >= 1RFC 3339, in UTC.
RFC 3339, in UTC.
When fans may see results: live, after_vote, after_close (once votes have stopped) or hidden. Platform reads always include them; fan app reads hold them back until the item closes, unless live.
live, after_vote, after_close, hidden Fans who voted. Null until the first result.
x >= 0True once votes have stopped and been recounted: the official result.
The question fans answer.
1 - 300Show child attributes
Show child attributes
Supporting text under the question.
300
