Introduction
README
Welcome to the BeeStreamed API documentation. This API allows you to interact with the BeeStreamed platform programmatically, enabling you to manage streaming events, analyze viewer data, and engage with your audience.
Authentication
All API requests require authentication using an access token. Include your token in the request header:
Authorization: Basic base64_encode({token_id}:{secret_key})
Core Resources
The API is organized around these main resources:
- Events - Create, manage, and control streaming events
- Analytics - Access viewer statistics and engagement metrics
- Chat - Manage chat messages and Q&A for events
- Client - Access channel information
- Polls - Create and manage polls for audience engagement
- Signup - Manage event registrations and attendees
Rate Limiting
The API implements rate limiting to ensure fair usage:
- 200 requests per minute for standard endpoints
- 3500 requests per minute for authenticated endpoints
If you exceed these limits, you'll receive a 429 Too Many Requests response.
Response Format
All API responses are returned in JSON format and include a status
field indicating the HTTP status code.
Error Handling
The API uses standard HTTP status codes to indicate success or failure:
- 200: Success
- 201: Resource created
- 400: Bad request
- 401: Unauthorized
- 403: Forbidden
- 404: Resource not found
- 405: Method not allowed
- 422: Validation error
- 429: Rate limit exceeded
- 500: Server error
Error responses include a message explaining what went wrong.
Authentication with Access Tokens
README
Overview
All API requests to Beestreamed require authentication using access tokens. Access tokens provide a secure way to authenticate requests without exposing sensitive credentials.
New access tokens can be created in the Manage Panel.
How to Use Access Tokens
Request Headers
Include your access token in the Authorization
header of your HTTP request using Basic authentication:
Authorization: Basic base64_encoded({token_id}:{secret_key})
Where base64_encoded({token_id}:{secret_key})
is the Base64 encoding of your token ID and secret key joined by a colon.
Example Request
# If your token_id is "abc123" and secret_key is "xyz789"
# First, encode "abc123:xyz789" in Base64, which gives "YWJjMTIzOnh5ejc4OQ=="
curl -X GET "https://api.beestreamed.com/events" \
-H "Authorization: Basic YWJjMTIzOnh5ejc4OQ=="
JavaScript Example
const tokenId = 'abc123';
const secretKey = 'xyz789';
const credentials = btoa(`${tokenId}:${secretKey}`);
fetch('https://api.beestreamed.com/events', {
headers: {
'Authorization': `Basic ${credentials}`
}
})
.then(response => response.json())
.then(data => console.log(data));
Token Lifecycle
- Validity: Access tokens are valid until their manually deleted
- Deletion: Tokens can be deleted through the management console
Security Best Practices
- Never share your token credentials in client-side code or public repositories
- Store tokens securely in your backend systems
- Use HTTPS for all API requests to ensure tokens are transmitted securely
Rate Limiting
Access token requests are subject to rate limiting. The current limits are:
Exceeding these limits will result in HTTP 429 (Too Many Requests) responses.
Introduction
README
The Events API allows you to create, manage, and control streaming events for your channel on the BeeStreamed platform. This introduction covers the key concepts and available endpoints.
Available Endpoints
Event Management
Event Resources
Event States
Events can have the following status values:
idle
- Event is created but not yet streaming
live
- Event is currently streaming
video
- Event is showing recorded video content
done
- Event has ended
force_live
- Event is forced to live state (for WebRTC)
Event Features
Each event can have various features enabled or disabled:
- Chat - Real-time messaging during events
- Q&A - Moderated question and answer functionality
- Signup - Registration form for attendees
- Countdown - Timer showing time until event starts
- Video Auto-Switch - Automatically switch to newest content
- Stream Recording - Save live streams as videos
Get Event Details
GET
Get event details for a specific event.
URL : /events/[EVENT_REF]
Method : GET
Authentication required : YES
Rate Limiting:
- Standard: 100 requests/minute
- Authenticated: 3600 requests/minute
Success Response
Code : 200 OK
Authenticated Response
{
"event_chat": false,
"event_client_ref": "abcd1234",
"event_created": "2023-09-21 15:43:05",
"event_date": "2023-09-23 17:43:05",
"event_desc": "This is a description of my event",
"event_embed_domain": null,
"event_id": 12345678,
"event_image": "my_cool_thumbnail.jpg",
"event_mux": "abdcefghijklmnopqrstuvwxyz0123456789",
"event_mux_playback": null,
"event_password": null,
"event_qa": true,
"event_recurring": 0,
"event_ref": "abcd12345678",
"event_signup": null,
"event_signup_form_msg": null,
"event_signup_required": false,
"event_signup_success_msg": null,
"event_status": "live",
"event_title": "A cool title",
"event_user_ref": "ABCD1234",
"event_webrtc": false
}
Public Response
{
"event_chat": false,
"event_date": "2023-09-23 17:43:05",
"event_desc": "This is a description of my event",
"event_mux_playback": null,
"event_qa": true,
"event_signup": null,
"event_signup_form_msg": null,
"event_signup_required": false,
"event_signup_success_msg": null,
"event_status": "live",
"event_title": "A cool title"
}
Error Responses
Condition : Event not found
Code : 404 NOT FOUND
{
"message": "Event with REF {event_ref} not found",
"status": 404
}
Condition : Not authorized to access event
Code : 403 FORBIDDEN
{
"message": "You are not authorized to access this event",
"status": 403
}
Notes
- Response fields vary based on authentication level
- Authenticated users receive full event details
- Public access receives limited event details
Get all events
GET
Get all events from the authenticated user.
URL : /events
Method : GET
Parameters
INT
maxResults (default 10)
INT
page (default 1)
INT
indexStart (default latest entry)
STRING
status (default all) idle, live, done or video
STRING
orderBy (default event created date) created / startDate
STRING
startDateFrom (Start date is start time of event)
STRING
startDateTo
STRING
search (Anything in title or description can be matched here)
Authentication required : YES
Success Response
Code : 200 OK
User API key
[
{
"event_chat": false,
"event_client_ref": "abcd1234",
"event_created": "2023-09-21 15:43:05",
"event_date": "2023-09-23 17:43:05",
"event_desc": "This is a description of my event",
"event_embed_domain": null,
"event_id": 12345678,
"event_image": "my_cool_thumbnail.jpg",
"event_mux": "abdcefghijklmnopqrstuvwxyz0123456789",
"event_mux_playback": null,
"event_password": null,
"event_qa": true,
"event_recurring": 0,
"event_ref": "abcd12345678",
"event_signup": null,
"event_signup_form_msg": null,
"event_signup_required": false,
"event_signup_success_msg": null,
"event_status": "live",
"event_title": "A cool title",
"event_user_ref": "ABCD1234"
},
{
"event_chat": false,
"event_client_ref": "abcd1234",
"event_created": "2023-09-27 12:11:53",
"event_date": "2023-10-12 10:30:00",
"event_desc": "I have a different description for my event",
"event_embed_domain": null,
"event_id": 87654321,
"event_image": "this_is_also_a_cool_thumbnail.jpg",
"event_mux": "0123456789abdcefghijklmnopqrstuvwxyz",
"event_mux_playback": null,
"event_password": null,
"event_qa": true,
"event_recurring": 0,
"event_ref": "abcd12345678",
"event_signup": null,
"event_signup_form_msg": null,
"event_signup_required": false,
"event_signup_success_msg": null,
"event_status": "video",
"event_title": "Another really cool title",
"event_user_ref": "1234ABCD"
}
]
Notes
- This only works using a user unique API key.
Create a new event
POST
Creating a new event as a user
URL : /events
Method : POST
Authentication required : YES
Success Response
Code : 201 Created
User API key
{
"event_ref": "abcd12345678",
"message": "Event created"
}
Notes
- This only works using a user unique API key.
- No parameters are needed to create a new event, to change event details use PATCH on the newly given "event_ref"
Update event data
PATCH
Update the event data using available parameters
URL : /events/[EVENT REF]
Method : PATCH
Parameters
STRING
title
STRING
desc or description
STRING
date (Must be formatted)
STRING
status (idle, live, video, done or force_live)
STRING
signup_form (Formatted with commas between each input i.e "Name, Email")
STRING
signup_success_msg (You can reference the signup input value with brackets enclosing the input name. i.e [Name])
STRING
signup_form_msg
STRING
signup_terms (Define custom terms for the signup form)
STRING
image (Idle thumbnail of event)
STRING
lang (Choose language of event, default is English "en")
STRING
qa_form_text (Define the text inside the Q&A form)
BOOL
signup (Signup toggle)
BOOL
chat (Chat toggle)
BOOL
qa (Q&A toggle)
BOOL
show_countdown (Countdown toggle)
BOOL
qa_email_required (Toggle email as a required input for joining qa)
BOOL
video_auto_Switch (Automatically switch the video to the newest finished live stream)
BOOL
save_stream_in_videos (Save live stream in to videos when live stream is done)
BOOL
save_stream_in_videos (Save live stream in to videos when live stream is done)
BOOL
show_logo (Toggle logo on event)
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"message": "Event updated",
"rows": 1
}
Notes
- This only works using a user unique API key.
- "rows" indicate how many rows were affected. If 0 then nothing was changed.
Delete event
DELETE
Permanently deletes a specified event
URL : /events/[EVENT REF]
Method : DELETE
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"message": "Event deleted",
"rows": 1
}
Notes
- This only works using a user unique API key.
- "rows" indicate how many rows were affected. If 0 then nothing was changed.
Get event image url
GET
Get image url from specific event
URL : /events/[EVENT REF]/image
Method : GET
Authentication required : YES
Success Response
Code : 200 OK
User API key + Global authentication
{
"data": {
"signed_url": "https://liveplatform-bucket-1.s3.eu-central-1.amazonaws.com/images/standard_webinar_dark.jpg?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEKv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDGV1LWNlbnRyYWwtMSJIMEYCIQCXvhDTLQ7VAixrAZA%2F%2BnxoqTVeiJuVGrc%2FdyDPdRdM4gIhAOGOz8sUW6JCC13ZbWPmIpk3XzFR1zufm8V3mw%2BvQvOcKs4FCNT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQARoMNjk2NTg4NDM1MzYxIgyBb6AptrtNlTSifcwqogUh9qPiQn9BUECGtrAY54U4Fl%2FjSpfWZz5g4DEOvqDMpM%2F26KASNXnTTj1FGoiuiQTXqpQk5gUhyeHhHVIjgtP74A5j1e37Z4eBFURVlx6VLe%2BkPykJvDnfi0DxmgHa0icUoWEI4z7jfX2s339tQ49TU%2BKLkzL4zXrCiv7wQY%2B%2FTqmt6jQKPISciI7ycYsW4WbHlxvjhNJBA%2BwJqbfshNrZNrXlGvpZBqtRwMfS8EDvgB3BdmjHyg8CuLk8BIdUgbtoiSY0wTLqOU2fqy2DgFQMbLPF6eXxymSznBnRVSi5XF6kwcmiwdYNe2LLGz%2FM40ic3HfAfTU2zgBfU1qY7c5%2BqYYWOEX6jRPH%2BVzKyRduasFy6j1CWzjO3xhVOW1jHx01D96URhv%2B0vJZNDg8c8jxv%2BSfa3CtyRRgQY06Zz5dLDWhYJUuzIf%2F2zV1dljnF8rjrOAbVFQ9XJPzBDWOt151s9mPExEJW2U1Gdr1Oi%2FYjgfTDo4wFJD7s2Reo5l1ZtwDXfLrAU89LjFpaP9hwhyT%2BM40WgKwoG8UawsOEaWS4l5oJrEp6uBzM8sG9XO%2BzG8qEFJddgEynNe0euxhEizQZNZpb3DmuCwNebL%2FRVuot7MYJcY0VEUbB5Yu9SdL6TQ1kX%2BV4DnqIQIxz%2Bic%2FhxqaDJHpis5Eik72yrcLClXbODvbqtuYpjO1bgi8htSL8znTdm7UBRblS8GEtqf%2BGT1WhTmgKFnKedsBo%2FXUSsrl8dxX4DnnsG%2FNoKBKA9fJsemAn95%2FlJpdbxXYDpUeEqY03OQRM65z7ZelJkUCc63AKkK3PDVs6AdxmtqR4E8zUNnzEr6Ywnuh9KBhOnxpIHYMxj3e3yhkEVAv4cpizXUe3XtYNqAEUsYxEckDq3ZMKZ9dTDGm%2F6pBjqwAVpLyJkFjfiXIHU%2B17IJwGh%2B8sJJqoGs0Z9TYt4mPjL40AE8n%2BvTaUiXV471YijkvFUQY100DamD7exBjijFRwhdDhisKyvTil4HTl3VnMM%2Bo2Lx1yStRaxWXEiL6WEkNrr1nAtmHrcchROTnyxeS%2BIbhg2%2FX2BDTfWk3gHLpHKwQ9AHz3zjRtmLxR3nGv5b5KIySaLVBY6s4ZxfZtDmM5JXKQk8Wdp8P1DqFxRy8tcj&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIA2EL7H76Q77GABGXP%2F20231030%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20231030T111039Z&X-Amz-SignedHeaders=host&X-Amz-Expires=1200&X-Amz-Signature=688ca0334edefae39057f6371f023d1fc6d85920bd7720c191c51f1f108d4283"
},
"status": 200
}
}
Notes
- The signed url is a temporary url which is only valid for up to 20 minutes, to use the link for longer request a new one
Get filtered MUX stream data
GET
Get stream data from MUX for a specific event; this includes stream status, view data and simulcast targets.
URL : /events/[EVENT REF]/stream
Method : GET
Authentication required : YES
Success Response
Code : 200 OK
{
"data": {
"view_data": [
{
"views": 0,
"viewers": 0,
"updated_at": "0001-01-01T00:00:00Z"
}
],
"status": "idle",
"reconnect_window": 60,
"simulcast_targets": [
{
"id": "A1b2C3d4E5F6g7H8i9J0k1L2m3N4o5P6q7R8s9T0",
"passthrough": "Target name",
"status": "idle",
"stream_key": "A1B2C3D4-E5F6G7H8-I9J0K1L2-M3N4O5P6",
"url": "rtmps://global-live.mux.com:443/app"
}
]
},
"status": 200
}
Response Fields
View Data
views
: Total number of views for the stream
viewers
: Current number of active viewers
updated_at
: Timestamp of last view data update
Stream Status
status
: Current stream status (idle, active, etc.)
reconnect_window
: Time window in seconds for stream reconnection
Simulcast Targets
id
: Unique identifier for the simulcast target
passthrough
: Display name or identifier for the target
status
: Current status of the simulcast target
stream_key
: Stream key for the target platform
url
: RTMP URL for the target platform
Notes
- The stream status can be used to determine if a stream is currently active
- Simulcast targets show all configured streaming destinations
- View data is updated periodically and may have a slight delay
Get logs from event
GET
Get list of logs from a specific event
URL : /events/[EVENT REF]/log
Method : GET
Authentication required : YES
Success Response
Code : 200 OK
User API key
[
{
"events_log_client_ref": "g5zp39",
"events_log_created": "2024-06-19 10:58:48",
"events_log_event_ref": "bnomxr897pqw",
"events_log_id": 6561,
"events_log_ref": "giiqj9jp5q0s",
"events_log_response": {
"webrtc": true
},
"events_log_type": "update",
"events_log_user_ref": "E0QRGZ",
"row_num": 293
},
{
"events_log_client_ref": "g5zp39",
"events_log_created": "2024-06-19 10:29:56",
"events_log_event_ref": "bnomxr897pqw",
"events_log_id": 6556,
"events_log_ref": "60xvodpldhul",
"events_log_response": {
"webrtc": false
},
"events_log_type": "update",
"events_log_user_ref": "E0QRGZ",
"row_num": 292
}
]
Get event rtmp key
GET
Get RTMP key from specific event
URL : /events/[EVENT REF]/rtmp
Method : GET
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"data": {
"key": "aee49e2b-c0e6-08c7-cea1-56dbd9fafb9b",
"server": "rtmps://global-live.mux.com:443/app"
},
"status": 200
}
Send bulk signup emails
POST
Send bulk emails for signups on specific event
URL : /events/[EVENT REF]/sendemails
Method : POST
Parameters
BOOL
excludeSent (Excludes everyone that has already received an email)
BOOL
excludeNotSent (Excludes everyone that hasn't received an email)
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"message": "Emails sent successfully",
"status": 200
}
Notes
- ecludeSent and excludeNotSent cannot be used at the same time
Delete Simulcast Target
DELETE
Remove a simulcast target from an event
URL : /events/[EVENT REF]/simulcast
Method : DELETE
Query Parameters :
target_id=[string]
: ID of the simulcast target to delete
Authentication required : YES
Success Response
Code : 200 OK
Content
{
"message": "Simulcast target deleted",
"status": 200
}
Error Responses
Condition : If target_id is missing
Code : 400 BAD REQUEST
{
"error": "target_id_required",
"status": 400
}
Condition : If deletion fails
Code : 400 BAD REQUEST
{
"error": "delete_failed",
"status": 400
}
Notes
- The simulcast target must belong to the specified event
- Deleting a target immediately stops the simulcast to that destination
Create Simulcast Target
POST
Create a new simulcast target for a specific event
URL : /events/[EVENT REF]/simulcast
Method : POST
Authentication required : YES
Request Body
{
"url": "rtmp://a.rtmp.youtube.com/live2",
"passthrough": "youtube-stream",
"stream_key": "xxxx-xxxx-xxxx-xxxx"
}
Success Response
Code : 200 OK
Content
{
"message": "Simulcast target created",
"status": 200
}
Notes
- Creates a new simulcast target associated with the event
- The request body must include
url
, passthrough
, and stream_key
Start WebRTC Stream
POST
Start WebRTC stream for a specific event
URL : /events/[EVENT REF]/startwebrtcstream
Method : POST
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"message": "Livestream started",
"status": 200
}
Notes
- No parameters are needed to start a WebRTC stream
Stop WebRTC Stream
POST
Stop WebRTC stream for a specific event
URL : /events/[EVENT REF]/stopwebrtcstream
Method : POST
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"message": "Livestream ended successfully",
"status": 200
}
Notes
- No parameters are needed to stop a WebRTC stream
Get current stream stats
GET
Get current stream stats from specific event
URL : /events/[EVENT REF]/stream
Method : GET
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"data": {
"reconnect_window": 60,
"status": "disabled",
"view_data": [
{
"updated_at": "0001-01-01T00:00:00Z",
"viewers": 0,
"views": 0
}
]
},
"status": 200
}
Create a new event image
POST
Creating a new event image as a user
URL : /events/[EVENT REF]/upload
Method : POST
Parameters
STRING
filename (Full file name with extenstion. Extenstions must be of types png, jpg or jpeg)
Authentication required : YES
Success Response
Code : 201 Created
User API key
{
"data": {
"asset_ref": "abcdefgh12345678",
"upload_url": "https://liveplatform-bucket-1.s3.eu-central-1.amazonaws.com/images/abcdefgh1234.jpg?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEKv%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaDGV1LWNlbnRyYWwtMSJIMEYCIQCXvhDTLQ7VAixrAZA%2F%2BnxoqTVeiJuVGrc%2FdyDPdRdM4gIhAOGOz8sUW6JCC13ZbWPmIpk3XzFR1zufm8V3mw%2BvQvOcKs4FCNT%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQARoMNjk2NTg4NDM1MzYxIgyBb6AptrtNlTSifcwqogUh9qPiQn9BUECGtrAY54U4Fl%2FjSpfWZz5g4DEOvqDMpM%2F26KASNXnTTj1FGoiuiQTXqpQk5gUhyeHhHVIjgtP74A5j1e37Z4eBFURVlx6VLe%2BkPykJvDnfi0DxmgHa0icUoWEI4z7jfX2s339tQ49TU%2BKLkzL4zXrCiv7wQY%2B%2FTqmt6jQKPISciI7ycYsW4WbHlxvjhNJBA%2BwJqbfshNrZNrXlGvpZBqtRwMfS8EDvgB3BdmjHyg8CuLk8BIdUgbtoiSY0wTLqOU2fqy2DgFQMbLPF6eXxymSznBnRVSi5XF6kwcmiwdYNe2LLGz%2FM40ic3HfAfTU2zgBfU1qY7c5%2BqYYWOEX6jRPH%2BVzKyRduasFy6j1CWzjO3xhVOW1jHx01D96URhv%2B0vJZNDg8c8jxv%2BSfa3CtyRRgQY06Zz5dLDWhYJUuzIf%2F2zV1dljnF8rjrOAbVFQ9XJPzBDWOt151s9mPExEJW2U1Gdr1Oi%2FYjgfTDo4wFJD7s2Reo5l1ZtwDXfLrAU89LjFpaP9hwhyT%2BM40WgKwoG8UawsOEaWS4l5oJrEp6uBzM8sG9XO%2BzG8qEFJddgEynNe0euxhEizQZNZpb3DmuCwNebL%2FRVuot7MYJcY0VEUbB5Yu9SdL6TQ1kX%2BV4DnqIQIxz%2Bic%2FhxqaDJHpis5Eik72yrcLClXbODvbqtuYpjO1bgi8htSL8znTdm7UBRblS8GEtqf%2BGT1WhTmgKFnKedsBo%2FXUSsrl8dxX4DnnsG%2FNoKBKA9fJsemAn95%2FlJpdbxXYDpUeEqY03OQRM65z7ZelJkUCc63AKkK3PDVs6AdxmtqR4E8zUNnzEr6Ywnuh9KBhOnxpIHYMxj3e3yhkEVAv4cpizXUe3XtYNqAEUsYxEckDq3ZMKZ9dTDGm%2F6pBjqwAVpLyJkFjfiXIHU%2B17IJwGh%2B8sJJqoGs0Z9TYt4mPjL40AE8n%2BvTaUiXV471YijkvFUQY100DamD7exBjijFRwhdDhisKyvTil4HTl3VnMM%2Bo2Lx1yStRaxWXEiL6WEkNrr1nAtmHrcchROTnyxeS%2BIbhg2%2FX2BDTfWk3gHLpHKwQ9AHz3zjRtmLxR3nGv5b5KIySaLVBY6s4ZxfZtDmM5JXKQk8Wdp8P1DqFxRy8tcj&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIA2EL7H76Q77GABGXP%2F20231030%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20231030T112939Z&X-Amz-SignedHeaders=host&X-Amz-Expires=1200&X-Amz-Signature=46bc0d477c2e6749255abf0402c332dfcd5db5162cb881cc441acd02b808165d"
},
"message": "Asset created",
"status": 201
}
Notes
- This creates a new upload url which is valid for up to 20 minutes, whatever is uploaded to this url can be retrieved via the Asset REF.
Introduction
README
The Analytics API provides access to viewer statistics and engagement metrics for your streams and videos.
Available Endpoints
Analytics Metrics
The API provides access to various metrics:
- Views - Total number of content views
- Viewers - Unique individuals who viewed content
- Watch Time - Total time spent watching content
- Average Watch Time - Average time per viewer
- Engagement - Interaction metrics (chat, polls, Q&A)
- Geographic Distribution - Viewer locations
- Device Types - Platforms used to access content
Timeframes
Most analytics endpoints accept a timeframe
parameter to specify the time range for the data:
timeframe=1609459200,1612137600
This represents a start and end timestamp in Unix time format (seconds since epoch).
Authentication
All analytics endpoints require authentication via:
Authorization: Basic {token_id}:{token_secret}
Rate Limiting
Analytics endpoints follow the standard rate limiting:
- Standard: 100 requests/minute
- Authenticated: 3600 requests/minute
Common Parameters
Many analytics endpoints support these common parameters:
timeframe
: Comma-separated Unix timestamps (start,end)
limit
: Number of results per page (default varies by endpoint)
page
: Page number for pagination
Get overall analytics data
GET
Get aggregate metrics for an event.
URL : /analytics/[EVENT REF]/overall
Method : GET
Authentication required : YES
Query Parameters :
metric_id
: Type of metric to measure (default: "views")
measurement
: Type of measurement to perform (default: "count")
timeframe
: Unix timestamps in seconds (format: "start_timestamp,end_timestamp")
Success Response
Code : 200 OK
{
"data": {
"metric": "metric_name",
"value": "aggregate_value",
"measurement": "measurement_type"
},
"status": 200
}
Error Responses
Condition : Not authorized to access event
Code : 403 FORBIDDEN
{
"message": "You are not authorized to access this event",
"status": 403
}
Notes
- Provides aggregate metrics for the specified timeframe
- Different measurements can be applied to the same metric
Get analytics timeseries data
GET
Get time-based analytics data for viewing patterns.
URL : /analytics/[EVENT REF]/timeseries
Method : GET
Authentication required : YES
Query Parameters :
group_by
: Time unit to group the data by (default: "minute") (options: "day", "hour", "ten_minute", "minute") Timeframe must be less than 1 hour for "minute" and 6 hours for "ten_minute".
timeframe
: Unix timestamps in seconds (format: "start_timestamp,end_timestamp")
Success Response
Code : 200 OK
{
"data": [
{
"timestamp": "unix_timestamp",
"value": "view_count"
}
],
"status": 200
}
Error Responses
Condition : Not authorized to access event
Code : 403 FORBIDDEN
{
"message": "You are not authorized to access this event",
"status": 403
}
Notes
- Data points are grouped by the specified time unit
- Timeframe must be valid Unix timestamps in seconds
Get analytics breakdown data
GET
Get analytics data grouped by specific criteria for an event.
URL : /analytics/[EVENT REF]/breakdown
Method : GET
Authentication required : YES
Query Parameters :
metric_id
: Type of metric to analyze (default: "views")
group_by
: (Required) Criteria to group the data by
timeframe
: Unix timestamps in seconds (format: "start_timestamp,end_timestamp")
Success Response
Code : 200 OK
{
"data": [
{
"group": "group_value",
"value": "metric_value"
}
],
"status": 200
}
Error Responses
Condition : Missing required group_by parameter
Code : 400 BAD REQUEST
{
"message": "Group by is required",
"status": 400
}
Condition : Not authorized to access event
Code : 403 FORBIDDEN
{
"message": "You are not authorized to access this event",
"status": 403
}
Notes
- The group_by parameter is required for this endpoint
- Timeframe must be valid Unix timestamps in seconds
Get analytics views data
GET
Get detailed view data for an event.
URL : /analytics/[EVENT REF]/views
Method : GET
Authentication required : YES
Query Parameters :
timeframe
: Unix timestamps in seconds (format: "start_timestamp,end_timestamp")
limit
: Number of results per page (default: 25)
page
: Page number for pagination (default: 1)
order
: Sort order for results (default: "desc", options: "asc" or "desc")
Success Response
Code : 200 OK
{
"data": {
"views": [
{
"view_id": "string",
"view_start": "timestamp",
"view_end": "timestamp",
"view_duration": "integer"
}
],
"total_row_count": "integer",
"timeframe": ["start_timestamp", "end_timestamp"]
},
"status": 200
}
Error Responses
Condition : Not authorized to access event
Code : 403 FORBIDDEN
{
"message": "You are not authorized to access this event",
"status": 403
}
Notes
- Results are paginated
- View duration is provided in seconds
- Timeframe must be valid Unix timestamps in seconds
Get analytics viewer data
GET
Get detailed viewer data for a specific viewer of an event.
URL : /analytics/[EVENT REF]/viewers/[VIEWER ID]
Method : GET
Authentication required : YES
Query Parameters :
timeframe
: Unix timestamps in seconds (format: "start_timestamp,end_timestamp")
limit
: Number of results per page (default: 25)
page
: Page number for pagination (default: 1)
order
: Sort order for results (default: "desc", options: "asc" or "desc")
Success Response
Code : 200 OK
{
"data": {
"viewer_data": {
"viewer_id": "string",
"first_view": "timestamp",
"last_view": "timestamp",
"total_views": "integer",
"total_duration": "integer"
},
"interaction_data": {
// Optional additional interaction data if available
}
},
"status": 200
}
Error Responses
Condition : Viewer ID is required
Code : 400 BAD REQUEST
{
"message": "Viewer ID is required",
"status": 400
}
Condition : Not authorized to access event
Code : 403 FORBIDDEN
{
"message": "You are not authorized to access this event",
"status": 403
}
Notes
- Viewer ID is required in the URL path
- Interaction data is included when available
- Timeframe must be valid Unix timestamps in seconds
Introduction
README
The Chat API allows you to manage chat messages and interactions for your streaming events.
Available Endpoints
Chat Features
The Chat API supports two types of messaging:
- Standard Chat - Public messages visible to all viewers
- Q&A - Moderated questions that can be answered by hosts
Message States
Chat messages can have different status values:
public
- Visible to all viewers
hidden
- Hidden from public view (moderated)
Q&A messages can have these status values:
new
- Newly submitted question
approved
- Question approved for display
archived
- Question archived (no longer active)
Moderation
The API allows for message moderation through the PATCH endpoint, enabling:
- Hiding inappropriate messages
- Approving questions for Q&A
- Adding replies to questions
Authentication
All chat endpoints require authentication via:
Authorization: Basic {token_id}:{token_secret}
Rate Limiting
Chat endpoints follow the standard rate limiting:
- Standard: 100 requests/minute
- Authenticated: 3600 requests/minute
Message Types
The chat system supports two types of messages:
- Regular chat messages
- Q&A messages (when
qa=true
)
Status Values
Messages can have different status values depending on type:
Chat messages:
public
- Visible to all users
hidden
- Hidden from public view
Q&A messages:
approved
- Approved for display
archived
- Archived and hidden
Get chat messages
GET
Get chat messages in a list form, choose how many results you want and which page you want to see.
URL : /chat/[EVENT REF]
Method : GET
Parameters
BOOL
qa (default false)
INT
maxResults (default 10)
INT
page (default 1)
INT
indexStart (default latest entry)
Authentication required : YES
Success Response
Code : 200 OK
User API key
[
{
"chat_created": "2023-10-17 15:52:10",
"chat_deleted_time": null,
"chat_email": "john@doe.com",
"chat_event_ref": "abcd12345678",
"chat_id": 33,
"chat_message": "I'm writing in the chat right now",
"chat_name": "John Doe",
"chat_ref": "1234ABCD",
"chat_status": "public",
"row_num": 2
},
{
"chat_created": "2023-10-17 15:57:49",
"chat_deleted_time": null,
"chat_email": "joe@mama.com",
"chat_event_ref": "abcd12345678",
"chat_id": 34,
"chat_message": "This is Joe's mama writing",
"chat_name": "Joe Mama",
"chat_ref": "ABCD1234",
"chat_status": "public",
"row_num": 1
}
]
Global authentication
[
{
"chat_created": "2023-10-17 15:52:10",
"chat_id": 33,
"chat_message": "I'm writing in the chat right now",
"chat_name": "John Doe",
"chat_ref": "1234ABCD",
"row_num": 1
},
{
"chat_created": "2023-10-17 15:57:49",
"chat_id": 33,
"chat_message": "This is Joe's mama writing",
"chat_name": "Joe Mama",
"chat_ref": "ABCD1234",
"row_num": 1
}
]
Notes
- The indexStart parameter uses the chat_id / qa_id to know where to start from.
- row_num is used to indicate how many results there are in total when using pagination.
Create new message
POST
Creating a new message on a specific event
URL : /chat/[EVENT REF]
Method : POST
Parameters
BOOL
qa (default false)
STRING
name (required)
STRING
email (required)
STRING
message (required)
Authentication required : YES
Success Response
Code : 201 Created
Global authentication & User API key
{
"chat_ref": "ABCD1234",
"message": "Message created"
}
Update message
PATCH
Update the message data using available parameters
URL : /chat/[EVENT REF]/[CHAT/QA REF]
Method : PATCH
Parameters
STRING
status (Chat: "public, hidden" Q&A: "approved, archived")
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"message": "Updated message",
"rows": 1
}
Notes
- This only works using a user unique API key.
- "rows" indicate how many rows were affected. If 0 then nothing was changed.
Introduction
README
The Polls API allows you to create and manage interactive polls for your streaming events. This introduction covers the key concepts and available endpoints for poll management.
Available Endpoints
- Get Polls - Retrieve polls for an event
- Create Poll - Create a new poll for an event
- Update Poll - Modify an existing poll
- Delete Poll - Remove a poll
- Get Poll Entries - Retrieve poll responses
Poll Structure
A poll consists of:
- Question - The main poll question
- Options - Available answer choices
- Status - Current state of the poll (active/inactive)
Poll Entries
Poll entries represent viewer responses to polls and include:
- Selected option
- Timestamp
- Viewer identifier
Usage Examples
Creating a Poll
POST /events/{event_ref}/polls
{
"question": "What feature would you like to see next?",
"options": [
"Mobile app",
"More analytics",
"Custom branding",
"API improvements"
],
"active": true
}
Retrieving Poll Results
GET /events/{event_ref}/polls/{poll_ref}/entries
Get polls
GET
Get all polls for an event or get a specific poll
URL : /polls/[EVENT REF]
or /polls/[EVENT REF]/[POLL REF]
Method : GET
Parameters (for listing polls)
INT
maxResults (default 10)
INT
page (default 1)
INT
indexStart (default latest entry)
Authentication required : YES
Success Response
Code : 200 OK
Response for poll list
{
"data": [
{
"poll_ref": "abc123",
"poll_event_ref": "event123",
"poll_question": "What is your favorite color?",
"poll_options": ["Red", "Blue", "Green"],
"poll_active": true,
"poll_created": "2024-01-20 15:30:00"
}
],
"status": 200
}
Response for single poll
{
"data": {
"poll_ref": "abc123",
"poll_event_ref": "event123",
"poll_question": "What is your favorite color?",
"poll_options": ["Red", "Blue", "Green"],
"poll_active": true,
"poll_created": "2024-01-20 15:30:00"
},
"status": 200
}
Create new poll
POST
Create a new poll for a specific event
URL : /polls/[EVENT REF]
Method : POST
Request Body
{
"question": "What is your favorite color?",
"options": ["Red", "Blue", "Green"]
}
Authentication required : YES
Success Response
Code : 201 Created
{
"poll_ref": "abc123",
"message": "Poll created",
"status": 201
}
Notes
- Both
question
and options
are required in the request body
options
must be an array of strings
Update poll
PATCH
Update poll state or add votes to poll options
URL : /polls/[EVENT REF]/[POLL REF]
Method : PATCH
Parameters
For updating state:
BOOL
state (Set poll active/inactive state)
For voting:
BOOL
vote (Must be true)
INT
option_index (Index of the option being voted for)
STRING
email (optional)
STRING
name (optional)
Authentication required : YES
Success Response
Code : 200 OK
Response for state update
{
"message": "Poll state updated",
"status": 200
}
Response for vote
{
"message": "Vote updated",
"updated_rows": 1,
"status": 200
}
Notes
- Client authentication required for updating poll state
- Email and name are optional when voting but can be used for tracking entries
Delete poll
DELETE
Delete a specific poll
URL : /polls/[EVENT REF]/[POLL REF]
Method : DELETE
Authentication required : YES
Success Response
Code : 200 OK
{
"message": "Poll deleted",
"status": 200
}
Notes
- Client authentication required
- Deleting a poll will also delete all associated entries
Get poll entries
GET
Get all entries for a specific poll
URL : /polls/[EVENT REF]/[POLL REF]/entries
Method : GET
Parameters
INT
maxResults (default 10)
INT
page (default 1)
INT
indexStart (default latest entry)
STRING
search (Search by email or name)
Authentication required : YES
Success Response
Code : 200 OK
{
"data": [
{
"poll_entry_id": 123,
"poll_entry_poll_ref": "abc123",
"poll_entry_email": "user@example.com",
"poll_entry_name": "John Doe",
"poll_entry_option_index": 1,
"poll_entry_created": "2024-01-20 15:30:00",
"poll_entry_row_number": 1
}
],
"status": 200
}
Notes
- The row_number field can be used for pagination purposes
- Search parameter will match against both email and name fields
Introduction
README
The Signup API allows you to manage event registrations and attendee information. This introduction will help you understand how to work with signup data and functionality.
Available Endpoints
- Create Signup - Register an attendee for an event
- Get Signups - Retrieve signup entries for an event
- Update Signup - Modify signup information
Signup Form
Each event can have a customized signup form with various field types:
- Name
- Email
- Phone
- Custom fields
Usage Examples
Creating a Signup
POST /events/{event_ref}/signup
{
"name": "John Doe",
"email": "john@example.com",
"phone": "+1234567890",
"custom_field": "Additional information"
}
Get signup details
GET
Get signup details from a specific event
URL : /signup/[EVENT REF]/[SIGNUP REF]
Method : GET
Authentication required : YES
Success Response
Code : 200 OK
{
"signup_data":
{
"name": "John Doe",
"email": "john@doe.com",
"company": "Doe Corp."
},
"signup_date": "2023-09-06 11:25:35",
"signup_date_visited": null,
"signup_email_sent": 1,
"signup_ref": "abcdefghijklmn1234567890",
"signup_visited": 0
}
Create new signup
POST
Creating a new signup on a specific event
URL : /signup/[EVENT REF]
Method : POST
Parameters
Parameters may be defined by the users on each event. Check "event_signup" data column under "Get event details" for an example of this.
STRING
name (required)
STRING
email (required)
STRING
message (required)
Authentication required : YES
Success Response
Code : 201 Created
Global authentication & User API key
{
"signup_ref": "ABCD1234",
"message": "Signup created"
}
Get all signups
GET
Get all signups from the authenticated user.
URL : /signup/[EVENT REF]
Method : GET
Parameters
INT
maxResults (default 10)
INT
page (default 1)
INT
indexStart (default latest entry)
Authentication required : YES
Success Response
Code : 200 OK
User API key
[
{
"row_num": 2,
"signup_data":
{
"name": "John Doe",
"email": "john@doe.com",
"company": "Doe Corp."
},
"signup_date": "2023-10-23 22:07:37",
"signup_date_visited": "2023-10-25 12:14:34",
"signup_email_sent": 1,
"signup_event_ref": "abcdefgh1234",
"signup_id": 12,
"signup_ref": "abcdefghijklmn1234567890",
"signup_visited": 1
},
{
"row_num": 1,
"signup_data":
{
"name": "Joe Mama",
"email": "joe@mama.com",
"company": "Joe's Mama's Bakery"
},
"signup_date": "2023-10-23 22:06:09",
"signup_date_visited": null,
"signup_email_sent": 0,
"signup_event_ref": "abcdefgh1234",
"signup_id": 12,
"signup_ref": "1234567890abcdefghijklmn",
"signup_visited": 0
},
]
Notes
- This only works using a user unique API key.
- The indexStart parameter uses the chat_id / qa_id to know where to start from.
- row_num is used to indicate how many results there are in total when using pagination.
Introduction
README
The Videos API allows you to manage video content in your Beestreamed account.
Available Endpoints
Video Upload
Video Processing
Video States
Videos can have the following status values:
processing
- Video is being processed
ready
- Video is ready for playback
error
- Video processing encountered an error
deleted
- Video has been marked for deletion
Video Features
Each video can have various features enabled or disabled:
- Downloadable - Allow viewers to download the video
- Public/Private - Control video visibility
- Auto-publish - Automatically publish video when processing completes
- Chapters - Define sections within the video
- Custom Thumbnail - Use a custom image as the video thumbnail
Get video details
GET
Get details from a specific video
URL : /videos/[VIDEO REF]
Method : GET
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"data": {
"video_client_ref": "g5zp39",
"video_date": "2024-06-19 10:17:54",
"video_delete_date": 0,
"video_deleted": 0,
"video_delivery_current": 72,
"video_delivery_next_update": 1719009155,
"video_delivery_paid": 0,
"video_event_ref": null,
"video_id": 275,
"video_mux_asset_id": "LGbqMZ8lS213tmO1OPCSA9bbqiWorz001iuiO3WG0168Y",
"video_mux_data": {
"asset_id": "LGbqMZ8lS213tmO1OPCSA9bbqiWorz001iuiO3WG0168Y",
"details": {
"aspect_ratio": "16:9",
"frame_rate": 24,
"resolution": "1080p",
"resolution_tag": "HD"
},
"duration": 78.95833333333333,
"playback_id": "JOlubbhBPwU6HPktGkgrh6T3yzN7EAPe1hdcST6b9pQ"
},
"video_mux_sync": 0,
"video_ref": "pvg36jbfxxmdtochgwjtdcnuyp1tve1o",
"video_title": "TEST STREAM FOR VIDEOSDK"
},
"status": 200
}
Notes
- This only works using a user unique API key.
Get all videos
GET
Get all videos from the authenticated user.
URL : /videos
Method : GET
Parameters
INT
maxResults (default 10)
INT
page (default 1)
INT
indexStart (default latest entry)
STRING
startDateFrom (Start date is creation date of video)
STRING
startDateTo
STRING
search (Anything in title)
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"data": [
{
"row_num": 12,
"video_client_ref": "g5zp39",
"video_date": "2024-06-19 10:17:54",
"video_delete_date": 0,
"video_deleted": 0,
"video_delivery_current": 72,
"video_delivery_next_update": 1719009155,
"video_delivery_paid": 0,
"video_event_ref": null,
"video_id": 275,
"video_mux_asset_id": "LGbqMZ8lS213tmO1OPCSA9bbqiWorz001iuiO3WG0168Y",
"video_mux_data": {
"asset_id": "LGbqMZ8lS213tmO1OPCSA9bbqiWorz001iuiO3WG0168Y",
"details": {
"aspect_ratio": "16:9",
"frame_rate": 24,
"resolution": "1080p",
"resolution_tag": "HD"
},
"duration": 78.95833333333333,
"playback_id": "JOlubbhBPwU6HPktGkgrh6T3yzN7EAPe1hdcST6b9pQ"
},
"video_mux_sync": 0,
"video_ref": "pvg36jbfxxmdtochgwjtdcnuyp1tve1o",
"video_title": "TEST STREAM FOR VIDEOSDK"
},
{
"row_num": 11,
"video_client_ref": "g5zp39",
"video_date": "2024-06-18 14:10:47",
"video_delete_date": 0,
"video_deleted": 0,
"video_delivery_current": 932,
"video_delivery_next_update": 1719023682,
"video_delivery_paid": 0,
"video_event_ref": "wdml7mti13cz",
"video_id": 274,
"video_mux_asset_id": "H02LZjuDqHWwSbVo4wlPR024bYNWL1yBZRg8wUyE4jZpA",
"video_mux_data": {
"asset_id": "H02LZjuDqHWwSbVo4wlPR024bYNWL1yBZRg8wUyE4jZpA",
"details": {
"aspect_ratio": "16:9",
"frame_rate": 25,
"resolution": "1080p",
"resolution_tag": "UHD"
},
"duration": 88.884,
"playback_id": "w4qmVq51YP0002Pz7ArakmEMYEMWEmHRibqy4p9REnKNQ"
},
"video_mux_sync": 1,
"video_ref": "lio2wth4jyo53pwa8at7uu895vqqez22",
"video_title": "Experian - Innovation Summit 2024 - with subtitles.mp4"
},
{
"row_num": 10,
"video_client_ref": "g5zp39",
"video_date": "2024-06-18 14:06:37",
"video_delete_date": 0,
"video_deleted": 0,
"video_delivery_current": 1528,
"video_delivery_next_update": 1719023675,
"video_delivery_paid": 0,
"video_event_ref": "s3u7ph3tbuvk",
"video_id": 273,
"video_mux_asset_id": "Igs01HNyekAvRlakbyP8Mz99wyv1yAgXOUTGXK5oeye00",
"video_mux_data": {
"asset_id": "Igs01HNyekAvRlakbyP8Mz99wyv1yAgXOUTGXK5oeye00",
"details": {
"aspect_ratio": "16:9",
"frame_rate": 25,
"resolution": "1080p",
"resolution_tag": "UHD"
},
"duration": 66.275667,
"playback_id": "tYBjsyej01YHC02VSwj004Mi9Y02fCXjwKUeT8F6Na00GSeI"
},
"video_mux_sync": 1,
"video_ref": "whclyu2vput6gplz5yf6x7vjwe1k3216",
"video_title": "Wunderman20230220_Ad_video_done.mp4"
},
{
"row_num": 9,
"video_client_ref": "g5zp39",
"video_date": "2024-06-14 17:46:16",
"video_delete_date": 0,
"video_deleted": 0,
"video_delivery_current": 270,
"video_delivery_next_update": 1718998347,
"video_delivery_paid": 0,
"video_event_ref": null,
"video_id": 233,
"video_mux_asset_id": "p42VC2gKhyegTPVaFVFoS63Nkq02PTOhiGwkYdeEL8Xs",
"video_mux_data": {
"asset_id": "p42VC2gKhyegTPVaFVFoS63Nkq02PTOhiGwkYdeEL8Xs",
"details": {
"aspect_ratio": "16:9",
"frame_rate": 24,
"resolution": "720p",
"resolution_tag": "HD"
},
"duration": 447.75,
"playback_id": "Qx3KNC9XHJGqjC6VGXP1F6XQgKfykTo388QZsZ12jXk"
},
"video_mux_sync": 1,
"video_ref": "dqnetln5a5kxgd2hp4lly62ef8d6mv4n",
"video_title": "Upgrading an M1 MacBook Air to 2TB! - SSD Storage Upgrade.mp4"
},
{
"row_num": 8,
"video_client_ref": "g5zp39",
"video_date": "2024-06-07 15:11:33",
"video_delete_date": 0,
"video_deleted": 0,
"video_delivery_current": 716,
"video_delivery_next_update": 1718983924,
"video_delivery_paid": 0,
"video_event_ref": null,
"video_id": 231,
"video_mux_asset_id": "K6TomEQMuyywCiUsw9gu024Y9Vg7SOWowjrpGEFgaTEQ",
"video_mux_data": {
"asset_id": "K6TomEQMuyywCiUsw9gu024Y9Vg7SOWowjrpGEFgaTEQ",
"details": {
"aspect_ratio": "16:9",
"frame_rate": 30,
"resolution": "1080p",
"resolution_tag": "HD"
},
"duration": 67.533333,
"playback_id": "f012Atj3nqKxowRiGrLLKCavFxh00LnMV024re00lRuNZ84"
},
"video_mux_sync": 1,
"video_ref": "hlxg4vd1zqpqbjs4v56f8jn88nh8v508",
"video_title": "0103-africa.mp4"
}
],
"status": 200
}
Notes
- This only works using a user unique API key.
Create video
POST
Creating a new video
URL : /videos
Method : POST
Parameters
STRING
title (required)
STRING
asset_id (required) MUX Asset ID
Authentication required : YES
Success Response
Code : 201 Created
User API key
{
"video_ref": "abcd12345678",
"message": "Video created",
"status": 201
}
Notes
- This only works using a user unique API key.
Update video data
PATCH
Update the video data using available parameters
URL : /videos/[VIDEO REF]
Method : PATCH
Parameters
STRING
title
STRING
event_ref (Create link between event and video)
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"message": "Event updated",
"rows": 1
}
Notes
- This only works using a user unique API key.
- "rows" indicate how many rows were affected. If 0 then nothing was changed.
- Creating a link between a video and an event will remove any existing link. Set to null or "" to remove a link without replacing.
Delete video
DELETE
Permanently deletes a specified video
URL : /videos/[VIDEO REF]
Method : DELETE
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"message": "Video deleted",
"rows": 1
}
Notes
- This only works using a user unique API key.
- "rows" indicate how many rows were affected. If 0 then nothing was changed.
- Video will still be available, but unwatchable until remaining delivery has been counted.
Create upload link
POST
Creates a new upload link for videos
URL : /videos/upload
Method : POST
Parameters
INT
duration (required) Duration of video in seconds
Authentication required : YES
Success Response
Code : 201 Created
User API key
{
"data": {
"data": {
"url": "https://storage.googleapis.com/video-storage-us-east1-uploads/zd01Pe2bNpYhxbrwYABgFE01twZdtv4M00kts2i02GhbGjc?Expires=1610112458&GoogleAccessId=mux-direct-upload%40mux-cloud.iam.gserviceaccount.com&Signature=LCu4PMoKUo%2BJkWQAUwB9WU4bWVVfW3K5bZxSxEptBz3DrjbFxNyGvs0sriyJupZh9Jdb6FxKWFIRbxEetfnAAiesOvSPH%2F1GlIichmGg3YfebfxiX77%2B6ToFF6FMkJucBo284PD90AVLHhKagOea2VsbdO0fh78MAxGH9sEspyQ2uJEfYWjHFqYQ9smJyIuM3CYOmN5HKPgRWy2yUqzV7OTMe%2FivPO4%2FX6XiiN2J4nTmy83252CJUsHIvbiGctfKxcNI6b23UVN4B1tJTVgyxTOZiBQCkMLkD%2FEe5OhoAkvJgkqENRr0q3swO0IChDDWjrh7OTMwqvWGwAoVXEGiHg%3D%3D&upload_id=ABg5-UznTdib1HhOAMjdHhWIYqBbwmSYM6dVKyPe3v33uTeEE8gkN5QzvR3cei6uSZOSrjPn7bdvvDH3nhsrLBq8AjWY2qE4UQ",
"timeout": 3600,
"status": "waiting",
"new_asset_settings": {
"playback_policies": [
"public"
],
"encoding_tier": "baseline",
"mp4_support": "capped-1080p"
},
"id": "zd01Pe2bNpYhxbrwYABgFE01twZdtv4M00kts2i02GhbGjc",
"cors_origin": "https://example.com/"
}
},
"status": 201
}
Notes
- If an upload is already in progress, it will instead return the status of that upload. (Same output as GET /videos/upload/[UPLOAD ID])
Get upload status
GET
Get upload status of specific upload
URL : /videos/upload/[UPLOAD ID]
Method : GET
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"data": {
"timeout": 3600,
"status": "asset_created",
"new_asset_settings": {
"playback_policies": [
"public"
],
"encoding_tier": "baseline",
"mp4_support": "capped-1080p"
},
"id": "YzoCL01HHOtAVYq4Ds9zekdHJ2XqL9e8ukPWbr01KhtvM",
"asset_id": "AnFVqAVXfb7vVL3ypSQDMnJZunnb8nkwe02O00p2gK8P00"
}
}
Notes
- This only works using a user unique API key.
Get video download link
GET
Gets master file of video as a download link
URL : /videos/[VIDEO REF]/master
Method : GET
Authentication required : YES
Success Response
Code : 200 OK
User API key + Global authentication
Preparing download
{
"data": "preparing",
"status": 200
}
Master download ready
{
"data": "https://master.mux.com/jEwsJfK02Ae2GQkPacSY4N2uts9EKiJC3/master.mp4?skid=default&signature=NjY3YTkxMWJfN2M0MzMzYzFiMTIyZTJjZjAxZmE1YzgyNDY5YWY0NjcyZDQ0ZjcxMTcxYTY1ZWYyYmIxZmI1NWYwY2RhYTQwMQ==",
"status": 200
}
Notes
- Depending on the duration and resolution of the video, the preparation of the downlink can vary.
Introduction
README
The Client API provides access to channel information and management features.
Available Endpoints
Channel Connections
Channel Branding
Client Resources
A channel has various resources and settings:
- Name - Channel display name
- Subdomain - Custom subdomain for accessing content
- Logo - Channel branding image
- Connections - Integrations with external platforms
- Usage - Resource consumption metrics
Get channel details
GET
Channels are referenced as [Client REF or Client Subdomain]
Get public available channel details
URL : /client/[Client REF or Client Subdomain]
Method : GET
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"client_id": 1,
"client_name": "My Company Name",
"client_ref": "abc123",
"client_subdomain": "mycompanyname"
},
Global authentication
{
"client_name": "My Company Name",
"client_ref": "abc123",
"client_subdomain": "mycompanyname"
}
Get channel logo image
GET
Gets the image of the set channel logo
URL : /client/[Client REF or Client Subdomain]/image
Method : GET
Parameters
BOOL
light (Set to true to retrieve light version of channel logo)
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"data": {
"signed_url": "https://liveplatform-bucket-1.s3.eu-central-1.amazonaws.com/images/17000445481061980967.png?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHYaDGV1LWNlbnRyYWwtMSJGMEQCIBljEZnZM%2BLN%2BBtHrfsZm3wpp2FKhwzb79gvimwdPZFfAiAdyCqFuJMTXhM0WniVEgTrLJKbrcv0ci2NgFce0J0pqSrOBQi%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAEaDDY5NjU4ODQzNTM2MSIMWVj%2BmP2fxY0r4yFuKqIFN1y4PCU3AEmnKPZJEqgfrYL0ytXjHUfhgpxIXMydphA8SeHsH9%2FLyVZglP4Wzcu6A0hmdmrixRfjosCdc2WaDbiem0hfzrOzVNDPx8be8r03doGb4q21E3ftrlmu2u6AJu5LfE53NS7ptIlxBXw%2BI7CyZ5P8qj9a4jgCbOmuu844hEh9wB9OE%2BszNQbfAheMrQZd20elk0Og90ZuzUv7cZ4jpf0IMLqsnsdOBCOusa7cmiLugDYc2YhZpZNgw274HdAE9G4RlDoeJ7TaVLiwAytLbPrfsU6lcsgkhhqdOnU7eK5YFMMa4TIj%2FsdjuKt5XwxXN1NtZ0oZjLckznPxQfYw5B92NscngloP3DQKCKemBSDbE1jDdLyq%2FwwWPMD2a9C%2Bf9LIJbgDOl%2B10yVuVcwN5SWXlaL%2FC9WLjUzz2QdkNu4D5r6VNNDqEu1qLX%2Ff6cWQG1b5vNuJLRK3hYVNJyukMYoGcxiGVbNEESsSnQg5ACAJVHHvAFIGaY8YEG9UGw41m5P1oZGF4FD0KipUSQDyZy8OYNhuUETLKZTw7L%2FHLldYHUcdhJfnAAOFRg9NbOB5CiVmHLbQhPeXTVpK3ObiIQ%2F3IchuU1P%2B7CX1hApcLTpMLETSFCpOoL%2FHzPiuAHKPLP12RrYYLUZQI48OrgajyG5d4Yz7KveMNdm6sQj%2BhxlK1095JlbUUFBNTjBoKS77bb2Omh6Rz6k6ryWboM%2B1wM%2FPYF5Zjmqo9zmdISCehHDU1mD1JqyZNTyV6OunmbcS%2FwcfN0j75GHQMyWgsJpKqyyowawsloagwGjaoDo1YTPxwuyRWYuXjEYbJlP52oCvmvreUy3dbGudKM2rzWhRhZg7FlVKqqdBmXJLwdsafEYMNN%2BCx31XarT5nocwO8Mw0PbiqgY6sgGEEJiVtKxz5QFljeFak0eoqLQOnA2zw4NzbklgAe%2BCrbMoMuxgwoxZ2whlccOMB%2BB%2FgBIwjHkUGZDu%2BNxYpoWzRvT6FN1dR4u2x79gPaiff7d5riaCDO6S792AxJ%2Fjiq7Mn8K7OfNvlU%2BjvfsNrfnGEaZjY3U4qwZgto9QthM%2FtGZ2%2B4DY9PGFKE6WefN670aiJqX%2FFb0YWDK6wtxPuxe1VZ%2F9yf9KF1fk5DWcL0NWdEy4&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIA2EL7H76QSGUDAQTQ%2F20231118%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T141244Z&X-Amz-SignedHeaders=host&X-Amz-Expires=1200&X-Amz-Signature=d7896553f15ad87627bea980b7f0268b60f9c4c6e4c95553c7164e9f2e578bd8"
},
"status": 200
}
Notes
- The signed url is a temporary url which is only valid for up to 20 minutes, to use the link for longer request a new one
Upload client logo image
POST
Uploads an image for the logo of the given client
URL : /client/[CLIENT REF or CLIENT SUBDOMAIN]/image
Method : POST
Parameters
STRING
filename (required)
Authentication required : YES
Success Response
Code : 201 Created
Global authentication & User API key
{
"asset_ref": "ABCD1234",
"upload_url": "https://liveplatform-bucket-1.s3.eu-central-1.amazonaws.com/images/17000445481061980967.png?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHYaDGV1LWNlbnRyYWwtMSJGMEQCIBljEZnZM%2BLN%2BBtHrfsZm3wpp2FKhwzb79gvimwdPZFfAiAdyCqFuJMTXhM0WniVEgTrLJKbrcv0ci2NgFce0J0pqSrOBQi%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F8BEAEaDDY5NjU4ODQzNTM2MSIMWVj%2BmP2fxY0r4yFuKqIFN1y4PCU3AEmnKPZJEqgfrYL0ytXjHUfhgpxIXMydphA8SeHsH9%2FLyVZglP4Wzcu6A0hmdmrixRfjosCdc2WaDbiem0hfzrOzVNDPx8be8r03doGb4q21E3ftrlmu2u6AJu5LfE53NS7ptIlxBXw%2BI7CyZ5P8qj9a4jgCbOmuu844hEh9wB9OE%2BszNQbfAheMrQZd20elk0Og90ZuzUv7cZ4jpf0IMLqsnsdOBCOusa7cmiLugDYc2YhZpZNgw274HdAE9G4RlDoeJ7TaVLiwAytLbPrfsU6lcsgkhhqdOnU7eK5YFMMa4TIj%2FsdjuKt5XwxXN1NtZ0oZjLckznPxQfYw5B92NscngloP3DQKCKemBSDbE1jDdLyq%2FwwWPMD2a9C%2Bf9LIJbgDOl%2B10yVuVcwN5SWXlaL%2FC9WLjUzz2QdkNu4D5r6VNNDqEu1qLX%2Ff6cWQG1b5vNuJLRK3hYVNJyukMYoGcxiGVbNEESsSnQg5ACAJVHHvAFIGaY8YEG9UGw41m5P1oZGF4FD0KipUSQDyZy8OYNhuUETLKZTw7L%2FHLldYHUcdhJfnAAOFRg9NbOB5CiVmHLbQhPeXTVpK3ObiIQ%2F3IchuU1P%2B7CX1hApcLTpMLETSFCpOoL%2FHzPiuAHKPLP12RrYYLUZQI48OrgajyG5d4Yz7KveMNdm6sQj%2BhxlK1095JlbUUFBNTjBoKS77bb2Omh6Rz6k6ryWboM%2B1wM%2FPYF5Zjmqo9zmdISCehHDU1mD1JqyZNTyV6OunmbcS%2FwcfN0j75GHQMyWgsJpKqyyowawsloagwGjaoDo1YTPxwuyRWYuXjEYbJlP52oCvmvreUy3dbGudKM2rzWhRhZg7FlVKqqdBmXJLwdsafEYMNN%2BCx31XarT5nocwO8Mw0PbiqgY6sgGEEJiVtKxz5QFljeFak0eoqLQOnA2zw4NzbklgAe%2BCrbMoMuxgwoxZ2whlccOMB%2BB%2FgBIwjHkUGZDu%2BNxYpoWzRvT6FN1dR4u2x79gPaiff7d5riaCDO6S792AxJ%2Fjiq7Mn8K7OfNvlU%2BjvfsNrfnGEaZjY3U4qwZgto9QthM%2FtGZ2%2B4DY9PGFKE6WefN670aiJqX%2FFb0YWDK6wtxPuxe1VZ%2F9yf9KF1fk5DWcL0NWdEy4&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIA2EL7H76QSGUDAQTQ%2F20231118%2Feu-central-1%2Fs3%2Faws4_request&X-Amz-Date=20231118T141244Z&X-Amz-SignedHeaders=host&X-Amz-Expires=1200&X-Amz-Signature=d7896553f15ad87627bea980b7f0268b60f9c4c6e4c95553c7164e9f2e578bd8"
}
Get usage for channel
GET
Gets current estimated total usage for channel
URL : /client/[Client REF]/usage
Method : GET
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"data": {
"currency": "eur",
"total": 15.138370833333333,
"types": {
"delivery_total": {
"cost": 0.2245375,
"unit_cost": 0.002875,
"usage": 78.1
},
"emails_total": {
"cost": 0.171,
"unit_cost": 0.003,
"usage": 57
},
"encoding_total": {
"cost": 14.626833333333334,
"unit_cost": 0.095,
"usage": 153.96666666666667
},
"ondemand_total": {
"cost": 0.116,
"unit_cost": 0.00725,
"usage": 16
}
}
},
"status": 200
}
Get all connections
GET
Get all user connections from channel
URL : /client/[CLIENT REF]/connections
Method : GET
Parameters
INT
maxResults (default 10)
INT
page (default 1)
INT
indexStart (default latest entry)
STRING
search (Anything in title or description can be matched here)
BOOL
active (default true)
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"data": [
{
"conn_ref": "UJBOHFzzTmN2tLFk5pv6QG22Rvby860R",
"conn_user_ref": "E0QRGZ",
"data": {
"user_client_ref": "g5zp39",
"user_email": "invoice@beestreamed.com",
"user_first": "Bee",
"user_last": "Streamed",
"user_ref": "E0QRGZ"
},
"row_num": 1
},
{
"conn_ref": "2smi2o66ifupm0wgc3p88gc7l81k3bho",
"conn_user_ref": "we3b2e3mtu7r",
"data": {
"user_client_ref": "g5zp39",
"user_email": "frederik.larsenbang@gmail.com",
"user_first": "Frederik",
"user_last": "Bang",
"user_ref": "we3b2e3mtu7r"
},
"row_num": 2
}
],
"status": 200
}
Create channel connection
POST
Accept a channel connection
URL : /client/[Client REF]/connections
Method : POST
Parameters
Authentication required : YES
Success Response
Code : 200 OK
User Session key
{
"message": "Connection accepted!",
"status": 200
}
Delete user connection
DELETE
Delete user connection
URL : /client/[CLIENT REF]/connections
Method : delete
Parameters
STRING
connref (required)
Authentication required : YES
Success Response
Code : 200 OK
User Session key
{
"message": "Connection deleted!",
"status": 200
}
Introduction
README
The User API allows you to manage user accounts and preferences. This introduction will help you understand the available endpoints and concepts for user management.
Available Endpoints
User Resources
User Management
The User API provides endpoints for managing user accounts, including:
- Retrieving user profile information
- Updating user details
- Managing email preferences
- Accessing user-specific settings
Authentication
All User API endpoints require authentication with a valid access token. User operations are restricted to the authenticated user's own account.
Data Privacy
User data is handled according to our privacy policy. Personal information is protected and only accessible to the authenticated user or authorized administrators.
Delete organization connection
DELETE
Delete organization connection
URL : /user/[SESSION KEY]/connections
Method : delete
Parameters
STRING
connref (required)
Authentication required : YES
Success Response
Code : 200 OK
User Session key
{
"message": "Connection deleted!",
"status": 200
}
Get all connections
GET
Get all organization connections from user
URL : /user/[SESSION REF]/connections
Method : GET
Parameters
INT
maxResults (default 10)
INT
page (default 1)
INT
indexStart (default latest entry)
STRING
search (Anything in title or description can be matched here)
BOOL
active (default true)
Authentication required : YES
Success Response
Code : 200 OK
User API key
{
"data": [
{
"conn_client_ref": "Ki0hne",
"conn_ref": "ANQSPe2oU51U5lR3UVvBJNiak7W6pmwS",
"data": {
"client_logo": "ol9vozodapjfo6et",
"client_logo_light": "8hlmoubhw4h9oc3q",
"client_name": "Experian",
"client_ref": "Ki0hne",
"client_subdomain": "experian"
},
"row_num": 1
},
{
"conn_client_ref": "g5zp39",
"conn_ref": "UJBOHFzzTmN2tLFk5pv6QG22Rvby860R",
"current": true,
"data": {
"client_logo": "5b8mpgkaocs5wb4v",
"client_logo_light": "y17li9bemabtzto0",
"client_name": "TestOrg",
"client_ref": "g5zp39",
"client_subdomain": "testorg"
},
"row_num": 2
}
],
"status": 200
}
Notes
- This only works using a user unique session key.
Accept organization connection
POST
Accept an organization connection
URL : /user/[SESSION KEY]/connections
Method : POST
Parameters
STRING
connref (required)
Authentication required : YES
Success Response
Code : 200 OK
User Session key
{
"message": "Connection accepted!",
"status": 200
}
Introduction
webhook Webhook
Webhooks is the recommended way to receive updates from Beestreamed. Please try and make use of the webhooks where usable instead of polling data. It's better for you and for us.
Creation of webhooks
New webhooks can be created in the Manage Panel.
You are able to specify which types of data your webhook will listen for. You can choose one or multiple per webhook: "event, video, signup, poll and billing".
Signatures
Each webhook will has it's own secret key which can be used to verify a webhooks posting data on your endpoint.
All webhooks are sent with the header X-Beestreamed-Signature
. This signature can be used with your secret and verified via HMAC.
PHP Example
$payload = file_get_contents('php://input');
$receivedSignature = $_SERVER['HTTP_X_BEESTREAMED_SIGNATURE'] ?? '';
$secret = 'your_secret_here';
$expectedSignature = hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expectedSignature, $receivedSignature)) {
http_response_code(401);
exit('Invalid signature');
}
echo 'Signature valid';
JavaScript Example
const http = require('http');
const crypto = require('crypto');
const secret = 'your_secret_here';
const server = http.createServer((req, res) => {
if (req.method !== 'POST') {
res.writeHead(405);
return res.end('Method not allowed');
}
let body = '';
req.on('data', chunk => {
body += chunk;
});
req.on('end', () => {
const receivedSignature = req.headers['x-beestreamed-signature'] || '';
const expectedSignature = crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
const isValid = crypto.timingSafeEqual(
Buffer.from(expectedSignature),
Buffer.from(receivedSignature)
);
if (!isValid) {
res.writeHead(401);
return res.end('Invalid signature');
}
res.writeHead(200);
res.end('Signature valid');
});
});
server.listen(3000);
Python example
from flask import Flask, request, abort
import hmac
import hashlib
app = Flask(__name__)
secret = b'your_secret_here'
@app.route('/webhook', methods=['POST'])
def webhook():
payload = request.data
received_signature = request.headers.get('X-Beestreamed-Signature', '')
expected_signature = hmac.new(secret, payload, hashlib.sha256).hexdigest()
if not hmac.compare_digest(expected_signature, received_signature):
abort(401, 'Invalid signature')
return 'Signature valid'
if __name__ == '__main__':
app.run(port=3000)
Available Webhooks
Video
Event
Billing
Poll
Signup
billing.invoice.created
webhook Webhook
This webhook is triggered when a new invoice is created for a client.
Payload
{
"type": "billing.invoice.created",
"data": {
// Invoice data
}
}
Description
The billing.invoice.created
webhook notifies you when a new invoice has been generated for a client. This typically happens at the end of a billing cycle.
Common Use Cases
- Synchronizing invoice data with external accounting systems
- Notifying finance teams about new invoices
- Updating client portals with new billing information
- Triggering custom invoice delivery processes
billing.invoice.payment.failed
webhook Webhook
This webhook is triggered when an invoice payment attempt has failed.
Payload
{
"type": "billing.invoice.payment.failed",
"data": {
// Invoice data
}
}
Description
The billing.invoice.payment.failed
webhook notifies you when a payment attempt for an invoice has failed. This may be due to expired payment methods, insufficient funds, or other payment processing issues.
Common Use Cases
- Notifying clients about failed payment attempts
- Triggering alternative payment collection workflows
- Updating accounting systems with payment failure status
- Initiating account management actions for repeated failures
- Scheduling payment retry attempts
billing.invoice.payment.succeeded
webhook Webhook
This webhook is triggered when an invoice payment is successfully processed.
Payload
{
"type": "billing.invoice.payment.succeeded",
"data": {
// Invoice data
}
}
Description
The billing.invoice.payment.succeeded
webhook notifies you when a payment for an invoice has been successfully processed. The invoice status will be updated to "paid".
Common Use Cases
- Updating accounting systems with payment confirmation
- Triggering receipt generation and delivery
- Notifying clients about successful payment processing
- Updating internal systems for billing reconciliation
- Releasing any service holds due to pending payments
billing.invoice.updated
webhook Webhook
This webhook is triggered when an invoice's status or details are updated.
Payload
{
"type": "billing.invoice.updated",
"data": {
// Invoice data
}
}
Description
The billing.invoice.updated
webhook notifies you when an invoice's status or details have been updated. Status changes can include transitions from "processing" to "payment_required" or "unpaid" to "paid".
Common Use Cases
- Tracking invoice status changes in external systems
- Updating payment status in accounting software
- Notifying clients about invoice payment requirements
- Updating dashboard displays with current invoice status
event.created
webhook Webhook
This webhook is triggered when an event has been created.
Payload
{
"type": "event.created",
"data": {
"event_id": 597,
"event_ref": "Hm0Ee8Pj6Me8",
"event_title": "New event",
"event_mux": "eEjTrQJRYtryIXw61R8EWjKRrJPW3IfMfW3xRnrMj9Q",
"event_desc": "",
"event_created": "2025-04-27 20:25:13",
"event_date": "2025-04-28 22:25:08 +02:00",
"event_recurring": 0,
"event_status": "idle",
"event_embed_domain": null,
"event_user_ref": "client_actor",
"event_password": null,
"event_signup": [
{
"title": "Navn",
"type": "name"
},
{
"title": "Email",
"type": "email"
}
],
"event_signup_success_msg": "Thank you for signing up!",
"event_signup_form_msg": null,
"event_signup_required": false,
"event_qa": false,
"event_chat": false,
"event_client_ref": "g5zp39",
"event_image": null,
"event_mux_playback": "KuAf6pLkzqHYjmtbkB3eaTUG0100rhpyFwaZmJQL5zrHg",
"event_mux_asset": null,
"event_mux_asset_id": null,
"event_lang": "en",
"event_show_logo": true,
"event_qa_email_required": true,
"event_qa_form_text": null,
"event_show_countdown": true,
"event_custom_signup": false,
"event_test": "null",
"event_delivered_minutes": 0,
"event_delivered_minutes_archive": 0,
"event_mux_asset_replaced": 0,
"event_email_html": "<html> <head> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/> <meta http-equiv=\"Content-Type\" content=\"text\/html charset=UTF-8\" \/> <\/head> <body style=\"color: #fff; margin: 0 auto; padding: 0px 20px; padding-top: 40px; font-family: arial; text-align: center; max-width: 100%; background-color: #111;\"> \t<img src=\"https:\/\/beestreamed.com\/assets\/logo_white.png\" style=\"margin: 0 auto; width: 342px; height: 36px;\"\/> <div style=\"margin: 0 auto; padding-top: 40px; padding-bottom: 40px; max-width: 500px; text-align: center;\"> <p style=\"width: 100%; font-size: 16px; line-height: 24px; text-align: left; margin-bottom: 35px;\"> Hello [NAME], <br \/> <br \/> Thank you for signing up to our event! To watch it click the button below. <\/p> <a href=\"https:\/\/beestreamed.com\/event?id=[EVENT_REF]&signup=[SIGNUP_REF]\" style=\"color: #fff; padding: 15px 25px; border-radius: 5px; text-align: center; background-color: #EF9328; max-width: 150px; text-decoration: none; margin-top: 30px; font-size: 16px;\" > Watch event <\/a> <\/div> <div style=\"margin-top: auto; display: flex; gap: 10px; padding-bottom: 20px; padding-top: 60px; font-size: 14px; opacity: 0.75; width: 100%;\"> <a href=\"https:\/\/beestreamed.com\" target=\"_blank\" style=\"color: #bbb;\">Beestreamed<\/a> <a href=\"https:\/\/beestreamed.com\/privacy\" target=\"_blank\" style=\"color: #bbb; margin-left: 5px;\">Privacy policies<\/a> <a href=\"https:\/\/beestreamed.com\/tos\" target=\"_blank\" style=\"color: #bbb; margin-left: 5px;\">Terms of service<\/a> <\/div> <\/body> <\/html>",
"event_webrtc": true,
"event_email_title": "Beestreamed | Link to event",
"event_signup_auto_email": false,
"event_signup_terms_custom": null,
"event_sessions": 0,
"event_custom_player": false,
"event_video_ref": "",
"event_video_auto_switch": 1,
"event_save_stream_in_videos": 1,
"event_mux_is_live": 0,
"event_enabled": 1,
"event_legacy": 0,
"event_videosdk_room": "gfyc-s3fm-yum3",
"event_time_zone": "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris",
"event_subtitles": 0,
"event_summary": null,
"event_summary_cooldown": 0,
"event_hidden": false,
"event_speaker_request": false,
"event_chat_form_text": null,
"event_signup_email": 1,
"event_advanced": false,
"event_redirect": false,
"event_redirect_url": null,
"event_signup_btn_text": null,
"event_date_unix": 1745871908,
"event_timezone": "Europe\/Berlin"
},
"id": "Fd3Ap2Ij5Gb1Jm2Kc2Fc6Oo7Nl4Ce0Jn_24d70ce16236c7f39ec32e70b2e8b495",
"timestamp": 1745785514
}
Description
The event.created
webhook notifies you when an event has been created.
Common Use Cases
- Keeping external calendars in sync with new events
- Triggering workflows based on event creation
event.deleted
webhook Webhook
This webhook is triggered when an event has been deleted.
Payload
{
"type": "event.deleted",
"data": {
"event_ref": "Me5Fg4Lk4Ie5"
},
"id": "Il4Aa3Aj4Oe8Hg6Dm7Np4Hb2Le3Ja9Ka_cec2d7f6f083477fc8d7d9f11c3ddb60",
"timestamp": 1745784111
}
Description
The event.deleted
webhook notifies you when an event has been deleted.
Common Use Cases
- Keeping external calendars in sync with event updates
- Notifying participants about a cancelled event
- Triggering workflows based on an event
event.updated
webhook Webhook
This webhook is triggered when an event's details are updated.
Payload
{
"type": "event.updated",
"data": {
"event_id": 597,
"event_ref": "Hm0Ee8Pj6Me8",
"event_title": "This is my mega cool event",
"event_mux": "eEjTrQJRYtryIXw61R8EWjKRrJPW3IfMfW3xRnrMj9Q",
"event_desc": "See my cool event for a cool presentation!",
"event_created": "2025-04-27 20:25:13",
"event_date": "2025-04-28 22:25:08 +02:00",
"event_recurring": 0,
"event_status": "idle",
"event_embed_domain": null,
"event_user_ref": "client_actor",
"event_password": null,
"event_signup": [
{
"title": "Navn",
"type": "name"
},
{
"title": "Email",
"type": "email"
}
],
"event_signup_success_msg": "Thank you for signing up!",
"event_signup_form_msg": null,
"event_signup_required": false,
"event_qa": false,
"event_chat": false,
"event_client_ref": "g5zp39",
"event_image": null,
"event_mux_playback": "KuAf6pLkzqHYjmtbkB3eaTUG0100rhpyFwaZmJQL5zrHg",
"event_mux_asset": null,
"event_mux_asset_id": null,
"event_lang": "en",
"event_show_logo": true,
"event_qa_email_required": true,
"event_qa_form_text": null,
"event_show_countdown": true,
"event_custom_signup": false,
"event_test": "null",
"event_delivered_minutes": 0,
"event_delivered_minutes_archive": 0,
"event_mux_asset_replaced": 0,
"event_email_html": "<html> <head> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/> <meta http-equiv=\"Content-Type\" content=\"text\/html charset=UTF-8\" \/> <\/head> <body style=\"color: #fff; margin: 0 auto; padding: 0px 20px; padding-top: 40px; font-family: arial; text-align: center; max-width: 100%; background-color: #111;\"> \t<img src=\"https:\/\/beestreamed.com\/assets\/logo_white.png\" style=\"margin: 0 auto; width: 342px; height: 36px;\"\/> <div style=\"margin: 0 auto; padding-top: 40px; padding-bottom: 40px; max-width: 500px; text-align: center;\"> <p style=\"width: 100%; font-size: 16px; line-height: 24px; text-align: left; margin-bottom: 35px;\"> Hello [NAME], <br \/> <br \/> Thank you for signing up to our event! To watch it click the button below. <\/p> <a href=\"https:\/\/beestreamed.com\/event?id=[EVENT_REF]&signup=[SIGNUP_REF]\" style=\"color: #fff; padding: 15px 25px; border-radius: 5px; text-align: center; background-color: #EF9328; max-width: 150px; text-decoration: none; margin-top: 30px; font-size: 16px;\" > Watch event <\/a> <\/div> <div style=\"margin-top: auto; display: flex; gap: 10px; padding-bottom: 20px; padding-top: 60px; font-size: 14px; opacity: 0.75; width: 100%;\"> <a href=\"https:\/\/beestreamed.com\" target=\"_blank\" style=\"color: #bbb;\">Beestreamed<\/a> <a href=\"https:\/\/beestreamed.com\/privacy\" target=\"_blank\" style=\"color: #bbb; margin-left: 5px;\">Privacy policies<\/a> <a href=\"https:\/\/beestreamed.com\/tos\" target=\"_blank\" style=\"color: #bbb; margin-left: 5px;\">Terms of service<\/a> <\/div> <\/body> <\/html>",
"event_webrtc": true,
"event_email_title": "Beestreamed | Link to event",
"event_signup_auto_email": false,
"event_signup_terms_custom": null,
"event_sessions": 0,
"event_custom_player": false,
"event_video_ref": "",
"event_video_auto_switch": 1,
"event_save_stream_in_videos": 1,
"event_mux_is_live": 0,
"event_enabled": 1,
"event_legacy": 0,
"event_videosdk_room": "gfyc-s3fm-yum3",
"event_time_zone": "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris",
"event_subtitles": 0,
"event_summary": null,
"event_summary_cooldown": 0,
"event_hidden": false,
"event_speaker_request": false,
"event_chat_form_text": null,
"event_signup_email": 1,
"event_advanced": false,
"event_redirect": false,
"event_redirect_url": null,
"event_signup_btn_text": null,
"event_date_unix": 1745871908,
"event_timezone": "Europe\/Berlin"
},
"keys_updated": [
"event_title",
"event_desc"
],
"id": "Go5Nb4Kf8Ma0Bj8Kp9Ae0Kf5La0Bi3Jj_b9771f3ddcd538cc870ab643b5cd29ac",
"timestamp": 1745786551
}
Description
The event.updated
webhook notifies you when any event details are changed. This includes modifications to metadata, schedule information, or other event properties.
Common Use Cases
- Keeping external calendars in sync with event updates
- Notifying participants about event changes
- Updating marketing materials when event details change
- Triggering workflows based on modified event parameters
event.updated.status
webhook Webhook
This webhook is triggered when an event's status changes.
Payload
{
"type": "event.updated.status",
"data": {
"event_ref": "Hm0Ee8Pj6Me8",
"status": "idle"
},
"id": "Bf8Da0Gk1Mb6Ca4Bk0Ii3Ih9Lj9Ke3Ni_30c2ed9d0ba1986c9a3170e65460edf2",
"timestamp": 1745786454
}
Description
The event.updated.status
webhook notifies you when an event's status changes. Status transitions can include changes like "scheduled" to "live", "live" to "ended", or other status changes in the event lifecycle.
Common Use Cases
- Updating user interfaces to reflect current event status
- Sending notifications when events go live
- Triggering recording processes when events end
- Managing resource allocation based on event state
event.updated.streamkey.disabled
webhook Webhook
This webhook is triggered when an event's stream key is disabled.
Payload
{
"type": "event.updated.streamkey.disabled",
"data": {
"event_ref": "Hm2Gb0Pf0Cn3"
},
"message": "Event stream key disabled",
"id": "Ja7Od6Kc6Jf3Lo5Kf6Ec0Mm1Eh9Ch8Jh_b8fbedbf39744c6f4e6f4ce0f6c66372",
"timestamp": 1745834155
}
Description
The event.updated.streamkey.disabled
webhook notifies you when an event's stream key has been disabled. This may occur due to security violations, administrative actions, or other policy enforcement reasons.
Common Use Cases
- Notifying event owners that streaming capability has been disabled
- Triggering security investigations for stream key disablement
- Updating user interfaces to reflect disabled streaming state
- Logging compliance-related stream key disablements
event.updated.streamkey.reset
webhook Webhook
This webhook is triggered when an event's stream key is reset.
Payload
{
"type": "event.updated.streamkey.reset",
"data": {
"event_ref": "Hm0Ee8Pj6Me8",
"key": "59f71f6b-3b8d-a98e-766f-21593f4f1c15",
"server": "rtmps://global-live.mux.com:443/app"
},
"message": "Event stream key reset",
"id": "Li0Of8He7Kh0Gp6Oc2Ng0Jo2Kj4Cf1Jd_0bfeb9516ace74027333bfd8fcee3850",
"timestamp": 1745786643
}
Description
The event.updated.streamkey.reset
webhook notifies you when an event's stream key has been reset. This typically happens for security reasons or upon user request.
Common Use Cases
- Updating broadcasting software with new stream keys
- Notifying event organizers about stream key changes
- Logging security-related stream key resets
- Triggering security alerts if multiple resets occur
poll.created
webhook Webhook
This webhook is triggered when a new poll is created.
Payload
{
"type": "poll.created",
"data": {
"poll_id": 150,
"poll_ref": "Hb4Oe5Gj",
"poll_event_ref": "Hm2Gb0Pf0Cn3",
"poll_data": {
"options": [
{
"option": "Yes",
"entries": 0
},
{
"option": "No",
"entries": 0
}
],
"question": "Did you find our webinar helpful?"
},
"poll_active": false,
"poll_archived": 0,
"poll_created": "2025-04-28 09:53:48",
"results_hidden": false
},
"id": "Ip8Aa8Na0Ob4Ab5Ig5Cf9Ag4Kk0Pe4Da_dbd208ee64fe2e8cf4e3b0bafe8ff7a0",
"timestamp": 1745834028
}
Description
The poll.created
webhook notifies you when a new poll has been created for an event. The poll is initially created in an inactive state and will need to be activated before it can receive responses.
Common Use Cases
- Synchronizing polls with external engagement platforms
- Updating moderator interfaces with new poll availability
- Preparing poll visualization components
- Tracking poll creation for analytics purposes
poll.deleted
webhook Webhook
This webhook is triggered when a poll is deleted.
Payload
{
"type": "poll.deleted",
"data": {
"poll_ref": "Hb4Oe5Gj"
},
"id": "Hm1If4Hj2Oj5Hj4Bb2Eg2Dj7Jf5Bh4Ik_f645b2e9c5be307a303e1db7152a089c",
"timestamp": 1745834063
}
Description
The poll.deleted
webhook notifies you when a poll has been deleted.
Common Use Cases
- Updating poll management interfaces to reflect a deleted poll
signup.created
webhook Webhook
This webhook is triggered when a new signup entry is created for an event.
Payload
{
"type": "signup.created",
"data": {
"signup_ref": "Ck5Ao4Db2Kf5Aj9Kn1El4Pb2",
"signup_date": "2025-04-28 09:52:15",
"signup_data": {
"name": "John Doe",
"email": "john@doe.com"
},
"signup_email_sent": 0,
"signup_visited": 0,
"signup_date_visited": null,
"signup_mux_viewer_id": null
},
"id": "Fa0Kp1Eg9Ba3Ak4Bl3Km0Jn3Mm0Od1Jh_e0aabc97ff1d0e17b4a9f7e233eac3cf",
"timestamp": 1745833935
}
Description
The signup.created
webhook notifies you when a new user has signed up for an event. This occurs when a user completes the signup form for an event.
Common Use Cases
- Syncing attendee data with CRM systems
- Triggering additional welcome or confirmation emails
- Updating event attendance projections
- Logging signup information for compliance purposes
video.delivery.updated
webhook Webhook
This webhook is triggered when video delivery has been updated.
Payload
{
"type": "video.delivery.updated",
"data": {
"video_id": 848,
"video_ref": "Df4Me0Li0Kd4Mm8Ge5Jj3Ok3Di8Mi1Cp",
"video_mux_data": {
"details": {
"frame_rate": 30,
"resolution": "1080p",
"aspect_ratio": "16:9",
"resolution_tag": "HD"
},
"asset_id": "uM4lKBbtPhE2GiXeQUe7dT7q7SS9iyG02UEMV007bVdtI",
"duration": 34.933333,
"playback_id": "ILLNi3D7Bubdaa8pClZKgJANRaw3shWqdFKTxg00M5Rk"
},
"video_client_ref": "g5zp39",
"video_event_ref": null,
"video_date": "2025-04-28 09:16:38",
"video_title": "This is my cool video",
"video_mux_asset_id": "uM4lKBbtPhE2GiXeQUe7dT7q7SS9iyG02UEMV007bVdtI",
"video_mux_sync": 1,
"video_delivery_current": 1485,
"video_delivery_next_update": 1745918198,
"video_deleted": 0,
"video_delete_date": 0,
"video_delivery_paid": 0,
"video_temp": 0,
"video_delivery_last_update": 1745831798,
"video_public": 0,
"video_tags": {
"tags": [
"Fun",
"Explainer"
]
},
"video_description": null,
"video_total_views": 0,
"video_slug": null
},
"delivery": {
"new_delivery": 1485,
"added_delivery": 485,
"next_update": 1745877045,
"last_update": 1745790645,
"total_views": 23
},
"id": "Ha1Fc3Gn0Gc9Io2Jh3Oc0Eh0Io8Pk3Fa_b64acd67ebcd23c3e125adfbf8904823",
"timestamp": 1745833845
}
Description
The video.delivery.updated
webhook notifies you when the delivery usage of a video has been updated.
Common Use Cases
- Syncing video delivery date with external systems
- Tracking usage of videos
video.upload.created
webhook Webhook
This webhook is triggered when a video is created from an event
Payload
{
"type": "video.event.created",
"data": {
"video_id": 845,
"video_ref": "Kh6Mf9Kf3Ie5Ag2Da1Dp5Cn0Bh0Fo4Gb",
"video_mux_data": {
"asset_id": "ELpcQLFt7konzHAQe1D01QuJIA5m8bO8zgn9B9mQaVFQ",
"playback_id": "8h4vGamsmrhvieusQNLZ1V94CAhlaCWi48y8o015v6RY"
},
"video_client_ref": "g5zp39",
"video_event_ref": null,
"video_date": "2025-04-28 09:02:04",
"video_title": "my-video.mov",
"video_mux_asset_id": "ELpcQLFt7konzHAQe1D01QuJIA5m8bO8zgn9B9mQaVFQ",
"video_mux_sync": 0,
"video_delivery_current": 0,
"video_delivery_next_update": 1745917324,
"video_deleted": 0,
"video_delete_date": 0,
"video_delivery_paid": 0,
"video_temp": 1,
"video_delivery_last_update": null,
"video_public": 0,
"video_tags": {
"tags": []
},
"video_description": null,
"video_total_views": 0,
"video_slug": null
},
"id": "Ka0Gn8Hh1Af3Bk2Fj6Nn0Hh0Cn0Ni6Ca_a612a73e568a6fd78e0598639b25dcaf",
"timestamp": 1745830925
}
Description
The video.event.created
webhook notifies you when a new video has been created from an event.
video.updated
webhook Webhook
This webhook is triggered when video details have been updated.
Payload
{
"type": "video.updated",
"data": {
"video_id": 848,
"video_ref": "Df4Me0Li0Kd4Mm8Ge5Jj3Ok3Di8Mi1Cp",
"video_mux_data": {
"details": {
"frame_rate": 30,
"resolution": "1080p",
"aspect_ratio": "16:9",
"resolution_tag": "HD"
},
"asset_id": "uM4lKBbtPhE2GiXeQUe7dT7q7SS9iyG02UEMV007bVdtI",
"duration": 34.933333,
"playback_id": "ILLNi3D7Bubdaa8pClZKgJANRaw3shWqdFKTxg00M5Rk"
},
"video_client_ref": "g5zp39",
"video_event_ref": null,
"video_date": "2025-04-28 09:16:38",
"video_title": "This is my cool video",
"video_mux_asset_id": "uM4lKBbtPhE2GiXeQUe7dT7q7SS9iyG02UEMV007bVdtI",
"video_mux_sync": 1,
"video_delivery_current": 0,
"video_delivery_next_update": 1745918198,
"video_deleted": 0,
"video_delete_date": 0,
"video_delivery_paid": 0,
"video_temp": 0,
"video_delivery_last_update": 1745831798,
"video_public": 0,
"video_tags": {
"tags": [
"Fun",
"Explainer"
]
},
"video_description": null,
"video_total_views": 0,
"video_slug": null
},
"keys_updated": [
"video_title",
"video_tags"
],
"id": "Ha1Fc3Gn0Gc9Io2Jh3Oc0Eh0Io8Pk3Fa_b64acd67ebcd23c3e125adfbf8904823",
"timestamp": 1745833845
}
Description
The video.updated
webhook notifies you when metadata or other details of a video have been updated. This can include changes to the title, description, thumbnail, tags, or other video attributes.
Common Use Cases
- Syncing video metadata with external systems
- Updating search indexes when video information changes
- Triggering notifications to users about updated content
- Maintaining audit logs of content changes
video.upload.created
webhook Webhook
This webhook is triggered when a video is created from an upload.
Payload
{
"type": "video.upload.created",
"data": {
"video_id": 845,
"video_ref": "Kh6Mf9Kf3Ie5Ag2Da1Dp5Cn0Bh0Fo4Gb",
"video_mux_data": {
"asset_id": "ELpcQLFt7konzHAQe1D01QuJIA5m8bO8zgn9B9mQaVFQ",
"playback_id": "8h4vGamsmrhvieusQNLZ1V94CAhlaCWi48y8o015v6RY"
},
"video_client_ref": "g5zp39",
"video_event_ref": null,
"video_date": "2025-04-28 09:02:04",
"video_title": "my-video.mov",
"video_mux_asset_id": "ELpcQLFt7konzHAQe1D01QuJIA5m8bO8zgn9B9mQaVFQ",
"video_mux_sync": 0,
"video_delivery_current": 0,
"video_delivery_next_update": 1745917324,
"video_deleted": 0,
"video_delete_date": 0,
"video_delivery_paid": 0,
"video_temp": 1,
"video_delivery_last_update": null,
"video_public": 0,
"video_tags": {
"tags": []
},
"video_description": null,
"video_total_views": 0,
"video_slug": null
},
"id": "Ka0Gn8Hh1Af3Bk2Fj6Nn0Hh0Cn0Ni6Ca_a612a73e568a6fd78e0598639b25dcaf",
"timestamp": 1745830925
}
Description
The video.created.upload
webhook notifies you when a video has been created from an upload.
video.upload.done
webhook Webhook
This webhook is triggered when a video upload is done.
Payload
{
"type": "video.upload.done",
"data": {
"upload_id": 242,
"upload_ref": "Ik3Li5Nj4Cm0An7Ko1Eb3Mn8Ej3Ma1Do",
"upload_video_ref": null,
"upload_user_ref": "E0QRGZ",
"upload_client_ref": "g5zp39",
"upload_created": "2025-04-28 09:01:53",
"upload_mux_id": "02KRfJHPiEfDE8FoJT1Z2KuLJHx02A502r5hiKhcnzfmGY",
"upload_mux_expire_date": 1745834513,
"upload_status": "done",
"upload_title": "my-video.mov",
"upload_duration": 0
},
"id": "Oo4Dh2Bm0Pk1En4Ko0On3Kb1Pf1Kd9Hj_3a4d1af492848cf1608eaf5650031bd0",
"timestamp": 1745830924
}
Description
The video.upload.done
webhook notifies you when a video upload has been completed successfully.
Common Use Cases
- Updating status indicators in user interfaces
- Monitoring upload pipeline for bottlenecks
- Triggering notifications if a video upload is done
video.upload.new
webhook Webhook
This webhook is triggered when a new video upload is initiated.
Payload
{
"type": "video.upload.new",
"data": {
"upload_ref": "Bb3Pn1Af8Pd0Ga8Nk6Je0Io1Hg2Mm2Cj",
"upload_title": "my-video.mov",
"upload_data": {
"id": "G101800ntH8KatkZq8Q9GZDdZbiW2LolNSNRrkyxpJitE",
"timeout": 3600,
"status": "waiting",
"new_asset_settings": {
"master_access": "none",
"mp4_support": "standard",
"normalize_audio": false
},
"cors_origin": "https://manage.beestreamed.com",
"url": "https://storage.googleapis.com/video-storage-gcp-us-east1-vop1-uploads/TgzsHGi5fj5jbg68uLNdKF?Expires=1745835388&GoogleAccessId=uploads-gcp-us-east1-vop1%40mux-video-production.iam.gserviceaccount.com&Signature=k0fRD5UjZU%2Fs8sCOPHqTM3AdJ9Wkl7a%2B%2BDb4HhyKhuBYat55s1fwDre%2BCBhcU%2BPWwyhTGzTQotj1KuciuOAx4RS0NZLt3beJycmbvqutbHA%2BP%2Bsdy808%2F%2FPuANV3mzgE7pPI10KHyXDqQ8U7qsqvb1MCLHbxShc57H8pLqlc19PKBKeBEgT7aOseYwW4xa3QBKMOZWL0fYLsn5K6x2406aq41D2j5D%2FY0YG3%2FMVH1lM2ceDJFdNuGQP%2BDCTqtMjxCEA68CV8ujkezcg7xPHfvOG6ahbyNpMvsiB%2B9gSBC%2Bg1pXSR0u1kFXiXOn4hlseaqMHBcQJTB0CSsMwZtMo%2BIw%3D%3D&upload_id=AAO2Vwrw4opX4zSBCGqN2L2JXlFLS1vo-VIGbSiIoU8lt2o52CQiJ6n1UgpKy_z-14t-9u8AMc0o9vbsoaBwZOW7W6h9ElkfMcrKFLN23RwtMA"
}
},
"id": "Oj4Ef4Kc3Nb4Cb8Eg8Mk5Ol2Jg3Ii3Ab_6a4a18409d0ce7ca9600ebddd2a72288",
"timestamp": 1745831788
}
Description
The video.upload.new
webhook notifies you when a user starts uploading a new video to your platform. This is the initial notification before the upload process is completed.
Common Use Cases
- Tracking when users initiate new uploads
- Preparing backend systems for upcoming video processing
- Updating user interface to show upload in progress
video.upload.pending
webhook Webhook
This webhook is triggered when a video upload is in a pending state, typically waiting for processing.
Payload
{
"type": "video.upload.pending",
"data": {
"upload_ref": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
},
"id": "Ng0Lb1Dl3Gc8Ml4Jh4Ml2Pb1Ph3Ei1Fh_99642bebbf798375317ea0a56ae83787",
"timestamp": 1745786775
}
Description
The video.upload.pending
webhook notifies you when a video upload has been received but is waiting in a queue for processing or requires additional actions before it can be completed.
Common Use Cases
- Updating status indicators in user interfaces
- Monitoring upload pipeline for bottlenecks
- Providing users with estimated wait times
- Triggering notifications if a video remains pending for too long