Skip navigation

Events and streams

Events, schedules, chat, and QoS.

Live

The event object

FieldTypeDescription
idstringUnique identifier for the object.
typestringAvailable values: one-time, recurring

Create event

POST https://api.kinescope.io/v2/live/events

Creates a new live event. The event is in draft state until scheduled and enabled.

Create new event

FieldTypeDescription
namestringEvent name. Required
typestringAvailable values: recurring, one-time. Required
parent_idUUIDProject or folder ID for event. Not required
auto_startbooleanAutomatic start of the stream. Default false. Not required
protectedbooleanEnable encryption stream. Default false. Not required
time_shiftbooleanDefault false. Not required
reconnect_windowintegerDefault 600 seconds. Not required
scheduledobjectSettings for scheduled event. Available keys - 'time'. 'time' - broadcast start time. Not required
recordobjectSettings for saving videos after the stream is completed. Not required. Available keys - 'parent_id'. 'parent_id' - project or folder ID where will placed video after stream is completed. Not required
videoobjectSettings for video. Not required. Available keys - 'presets'. 'presets' - array of strings. Select qualities for videos. Available values - 360p 480p 720p 1080p 1440p 2160p. Not required
restreams[]object{}Not required. Every object include keys - "name", "url", "key", "description", "enabled". "name" - string. Required. "url" - string. Required. "key" - string. Required. "description" - string. Not required. "enabled" - boolean. Not required
latency_modestringAvailable values: standard, reduced. Default 'standard'. Not required.
show_membersboolShow/hide members of chat. Default true.
chat_activeboolChat enabled/disabled after stream ended. Default false.
chat_after_streamboolShow/hide chat after stream ended. Default true.
chat_previewboolShow/hide chat in video preview. Default true.
privacy_typestringWhere the player can be embedded. Available values: anywhere, nowhere, custom. Not required
privacy_domains[]stringDomains where the player can be embedded. Required if privacy_type is custom
privacy_email_domains[]stringEmail domains of viewers who can watch, e.g. company.com. Not required
privacy_shareobjectWho can watch. Available keys: "password", "link_hash", "sso". An empty object means anyone with the link. Not required
unique_codes_enabledbooleanAccess by unique codes. Default false. When true, "privacy_share" is reset. Not required

The keys of privacy_share:

FieldTypeDescription
passwordstringViewers enter this password to watch. At least 2 characters. Cannot be set together with "link_hash"
link_hashstringAccess by private link only. 6 letters or digits. The ready-to-use link is returned in "link"
ssobooleanAccess by workspace SSO. Available only if SSO is enabled for the workspace

If you don't pass any privacy fields, the event inherits the privacy settings of its project.

The response below does not match the request: reconnect_window comes back as 1800 instead of the 600 sent, chat_active as true instead of false, and video.presets as null. Whether the API normalises these values or the example is stale is not established — the example is left as recorded until the Live team confirms.

Request body (json)
{
  "name": "New event",
  "type": "recurring",
  "auto_start": true,
  "protected": false,
  "time_shift": false,
  "parent_id": "<UUID>",
  "reconnect_window": 600,
  "scheduled": {
    "time": "2022-12-19T00:05:41.634922Z"
  },
  "record": {
    "parent_id": "<UUID>"
  },
  "video": {
    "presets": [
      "360p",
      "1080p"
    ]
  },
  "restreams": [
    {
      "name": "Restream 1",
      "url": "rtmp://rtmp.kinescope.io/live",
      "key": "stream key"
    }
  ],
  "latency_mode": "standard",
  "show_members": true,
  "chat_active": false,
  "chat_after_stream": true,
  "chat_preview": true,
  "privacy_type": "custom",
  "privacy_domains": [
    "example.com"
  ],
  "privacy_share": {
    "password": "my password"
  }
}
Responses
{
  "data": {
    "id": "<UUID>",
    "workspace_id": "<UUID>",
    "parent_id": "<UUID>",
    "name": "New event",
    "subtitle": "New subtitle",
    "type": "recurring",
    "streamkey": "a6739c5535504feaa45da338dc62f752",
    "auto_start": true,
    "protected": false,
    "time_shift": false,
    "chat_after_stream": true,
    "chat_active": true,
    "record": {
      "parent_id": "<UUID>"
    },
    "video": {
      "presets": null
    },
    "audio": {
      "channel_mapping": null
    },
    "restreams": [
      {
        "id": "<UUID>",
        "event_id": "<UUID>",
        "name": "Restream 1",
        "url": "rtmp://rtmp.kinescope.io/live",
        "key": "stream key",
        "status": "disconnected",
        "enabled": true,
        "description": "",
        "created_at": "2022-11-15T12:25:04.095926Z",
        "updated_at": null
      }
    ],
    "reconnect_window": 1800,
    "play_link": "https://kinescope.io/bK3mQx7ZtNvRs2WdYpLc9F",
    "rtmp_link": "rtmp://rtmp.kinescope.io/live",
    "scheduled": {
      "time": "2022-12-19T00:05:41.634922Z"
    },
    "stream": {
      "id": "<UUID>",
      "event_id": "<UUID>",
      "status": "pending",
      "started_at": "2022-12-19T00:05:41.634922Z",
      "finished_at": null
    },
    "created_at": "2022-11-15T12:25:04.095926Z",
    "updated_at": null,
    "latency_mode": "standard",
    "privacy_type": "custom",
    "privacy_domains": [
      "example.com"
    ],
    "privacy_email_domains": [],
    "privacy_share": {
      "password": "my password"
    },
    "unique_codes_enabled": false,
    "poster": {
      "id": "<UUID>",
      "type": "image",
      "status": "done",
      "active": true,
      "original": "https://static.kinescopecdn.net/assets/event_default_poster.png",
      "md": "https://static.kinescopecdn.net/assets/event_default_poster.png",
      "sm": "https://static.kinescopecdn.net/assets/event_default_poster.png",
      "xs": "https://static.kinescopecdn.net/assets/event_default_poster.png",
      "from_time": 0,
      "to_time": 0
    }
  }
}

Schedule new stream

POST https://api.kinescope.io/v2/live/events/:event_id/stream

Schedules a new stream within the event. Returns the ingest URL and stream key.

Request body (json)
{
  "started_at": "2022-11-15T12:42:00.991558Z"
}
Responses
{
  "data": {
    "id": "<UUID>",
    "event_id": "<UUID>",
    "status": "pending",
    "started_at": "2022-11-15T12:42:00.991558Z",
    "finished_at": null
  }
}

Upload poster

POST https://uploader.kinescope.io/v2/poster

Uploads a custom poster image for a live event.

Headers
ParameterDescription
X-Event-ID4iUMUmb63dLAvnbsMRkSUX
X-Poster-URLurl to poster

Get event

GET https://api.kinescope.io/v2/live/events/:event_id

Retrieves the details of a single live event by its unique ID.

Responses
{
  "data": {
    "id": "<UUID>",
    "workspace_id": "<UUID>",
    "parent_id": "<UUID>",
    "name": "New event",
    "subtitle": "",
    "type": "one-time",
    "streamkey": "5cbb30742b9b4a02971abd4cdd7fb22f",
    "auto_start": false,
    "protected": false,
    "time_shift": true,
    "record": {
      "parent_id": null
    },
    "video": {
      "presets": []
    },
    "audio": {
      "channel_mapping": null
    },
    "restreams": [
      {
        "id": "<UUID>",
        "event_id": "<UUID>",
        "name": "23234",
        "url": "rtmp://rtmp.kinescope.io/live",
        "key": "23234234",
        "status": "disconnected",
        "enabled": false,
        "description": "",
        "created_at": "2026-03-03T10:55:22.991595Z",
        "updated_at": "2026-03-03T11:10:05.345611Z"
      }
    ],
    "reconnect_window": 600,
    "play_link": "https://kinescope.io/0cxfXwkKh4Wzzd1boAnQFE",
    "rtmp_link": "rtmp://rtmp.kinescope.io/live",
    "scheduled": {
      "time": null
    },
    "stream": {
      "id": "<UUID>",
      "event_id": "<UUID>",
      "status": "pending",
      "started_at": "2026-02-18T17:50:37.774745Z",
      "finished_at": null
    },
    "chat_after_stream": true,
    "chat_active": true,
    "chat_preview": true,
    "show_members": true,
    "created_at": "2026-02-18T17:50:37.774745Z",
    "updated_at": "2026-03-14T11:23:19.777707Z",
    "latency_mode": "standard",
    "allow_chat_links": false,
    "moderators": null,
    "privacy_type": "anywhere",
    "privacy_domains": [],
    "privacy_email_domains": [],
    "privacy_share": {},
    "unique_codes_enabled": false,
    "poster": {
      "id": "<UUID>",
      "type": "image",
      "media_id": "<UUID>",
      "status": "done",
      "active": true,
      "original": "https://kinescopecdn.net/<UUID>/posters/<UUID>/<UUID>.jpg",
      "md": "https://kinescopecdn.net/<UUID>/posters/<UUID>/md/<UUID>.jpg",
      "sm": "https://kinescopecdn.net/<UUID>/posters/<UUID>/sm/<UUID>.jpg",
      "xs": "https://kinescopecdn.net/<UUID>/posters/<UUID>/xs/<UUID>.jpg",
      "from_time": 0,
      "to_time": 0
    }
  }
}
{
  "error": {
    "code": 400404,
    "message": "not found"
  }
}

List events

GET https://api.kinescope.io/v2/live/events

Returns a list of live events. Results are paginated and can be filtered via query parameters.

Responses
{
  "meta": {
    "pagination": {
      "page": 1,
      "per_page": 100,
      "total": 0
    },
    "order": {
      "created_at": "desc",
      "name": "asc"
    }
  },
  "data": []
}

Event videos

GET https://api.kinescope.io/v2/live/events/:event_id/videos

Returns recordings produced by the event, ordered by creation time.

Responses
{
  "meta": {
    "pagination": {
      "page": 1,
      "per_page": 10,
      "total": 0
    },
    "order": {
      "created_at": "desc"
    }
  },
  "data": []
}

Event QoS

GET https://api.kinescope.io/v2/live/events/:event_id/qos

Returns quality-of-service statistics for the event's stream together with the last known publisher session — the RTMP host, client IP and country of the latest connection. The current stream is used; for a recurring event that has already finished, the most recent stream is taken.

The time window defaults to the stream lifetime — from started_at to finished_at (or now for a running stream) — and is capped at the last 12 hours of that window.

Query parameters:

  • stream_id — return data for a specific stream of this event instead of the current (or, for a finished recurring event, the most recent) one (optional). A stream from another event or workspace is not accessible: the request answers 404 Not Found with code 404404;
  • from — window start, YYYY-MM-DD or RFC 3339 YYYY-MM-DDTHH:MM:SSZ (optional, see above);
  • to — window end, same formats (optional, see above);
  • group_time — bucket size for the series (optional): 1m or minute, hour, day, week, month, or a duration like 30s or 5m. Default: 30 seconds.

status:

  • 4 — time difference between keyframes > 50%
  • 3 — time difference between keyframes > 20%
  • 5 — packet loss (possible causes: network problems, or the streamer's encoder cannot keep up with the video)

session is null when there is no recorded session for the stream. qos is the array of the events themselves (empty array when there is no data for the window).

Responses
{
  "session": {
    "host": "rtmp.kinescope.io",
    "client_ip": "1.2.3.4",
    "country": "RU"
  },
  "qos": [
    {
      "frame_rate": 30,
      "bitrate_video": 2438,
      "bitrate_audio": 156,
      "timestamp": "2026-03-07T09:01:30Z",
      "status": 0,
      "packet_loss": 0
    },
    {
      "frame_rate": 30,
      "bitrate_video": 2438,
      "bitrate_audio": 156,
      "timestamp": "2026-03-07T09:02:00Z",
      "status": 0,
      "packet_loss": 0
    }
  ]
}
{
  "error": {
    "code": 404404,
    "message": "no such entity"
  }
}

Chat

GET https://api.kinescope.io/v2/live/events/:event_id/stream/:stream_id/chat(.json|.csv|.txt)

Returns the chat log of the event in the requested format — JSON, CSV, or plain text.

Responses
{
  "data": [
    {
      "id": "<UUID>",
      "username": "example_user",
      "external_id": "kinescope_admin_e3ec44ca-8d9f-4ca9-a36f-69bfcae502a7",
      "is_admin": "true",
      "message": "ewd",
      "created_at": "2025-02-26T08:16:38.21562Z",
      "cteated_at_local": "2025-02-26T08:16:38.21562Z"
    },
    {
      "id": "<UUID>",
      "username": "example_user",
      "external_id": "kinescope_admin_e3ec44ca-8d9f-4ca9-a36f-69bfcae502a7",
      "is_admin": "true",
      "message": "wde",
      "created_at": "2025-02-26T08:16:38.722139Z",
      "cteated_at_local": "2025-02-26T08:16:38.722139Z"
    },
    {
      "id": "<UUID>",
      "username": "example_user",
      "external_id": "kinescope_admin_e3ec44ca-8d9f-4ca9-a36f-69bfcae502a7",
      "is_admin": "true",
      "message": "wde",
      "created_at": "2025-02-26T08:16:39.12707Z",
      "cteated_at_local": "2025-02-26T08:16:39.12707Z"
    },
    {
      "id": "<UUID>",
      "username": "example_user",
      "external_id": "kinescope_admin_e3ec44ca-8d9f-4ca9-a36f-69bfcae502a7",
      "is_admin": "true",
      "message": "wde",
      "created_at": "2025-02-26T08:16:39.451017Z",
      "cteated_at_local": "2025-02-26T08:16:39.451017Z"
    },
    {
      "id": "<UUID>",
      "username": "asasas",
      "external_id": "<UUID>",
      "is_admin": "false",
      "message": "dcad",
      "created_at": "2025-02-26T08:17:56.752304Z",
      "cteated_at_local": "2025-02-26T08:17:56.752304Z"
    }
  ]
}

Update event

PUT https://api.kinescope.io/v2/live/events/:event_id

Updates properties of a live event (title, description, scheduled time, restreams, etc.).

Only fields passed in the request are changed. Privacy fields are the same as in Create event: privacy_type, privacy_domains, privacy_email_domains, privacy_share, unique_codes_enabled. The event can be updated only while its stream is in the pending status.

To open access by unique codes, set unique_codes_enabled to true and generate codes with Create unique codes batch. If you set unique_codes_enabled to false, viewers who entered a code lose access.

Request body (json)
{
  "name": "Update event",
  "privacy_share": {
    "link_hash": "Ab12Cd"
  }
}
Responses
{
  "data": {
    "id": "<UUID>",
    "workspace_id": "<UUID>",
    "parent_id": "<UUID>",
    "name": "Update event",
    "subtitle": "Update subtitle",
    "type": "recurring",
    "streamkey": "a6739c5535504feaa45da338dc62f752",
    "auto_start": true,
    "protected": false,
    "time_shift": false,
    "chat_after_stream": true,
    "record": {
      "parent_id": "<UUID>"
    },
    "video": {
      "presets": null
    },
    "audio": {
      "channel_mapping": null
    },
    "restreams": [
      {
        "id": "<UUID>",
        "event_id": "<UUID>",
        "name": "Restream 1",
        "url": "rtmp://rtmp.kinescope.io/live",
        "key": "stream key",
        "status": "disconnected",
        "enabled": true,
        "description": "",
        "created_at": "2022-11-15T12:25:04.095926Z",
        "updated_at": null
      }
    ],
    "reconnect_window": 1800,
    "play_link": "https://kinescope.io/bK3mQx7ZtNvRs2WdYpLc9F",
    "rtmp_link": "rtmp://rtmp.kinescope.io/live",
    "scheduled": {
      "time": "2023-12-19T00:05:41.634922Z"
    },
    "stream": {
      "id": "<UUID>",
      "event_id": "<UUID>",
      "status": "pending",
      "started_at": "2023-12-19T00:05:41.634922Z",
      "finished_at": null
    },
    "created_at": "2022-11-15T12:25:04.095926Z",
    "updated_at": "2022-11-15T12:30:53.449823Z",
    "latency_mode": "standard",
    "privacy_type": "anywhere",
    "privacy_domains": [],
    "privacy_email_domains": [],
    "privacy_share": {
      "link_hash": "Ab12Cd",
      "link": "https://kinescope.io/bK3mQx7ZtNvRs2WdYpLc9F/plAb12Cd"
    },
    "unique_codes_enabled": false,
    "poster": {
      "id": "<UUID>",
      "type": "image",
      "status": "done",
      "active": true,
      "original": "https://static.kinescopecdn.net/assets/event_default_poster.png",
      "md": "https://static.kinescopecdn.net/assets/event_default_poster.png",
      "sm": "https://static.kinescopecdn.net/assets/event_default_poster.png",
      "xs": "https://static.kinescopecdn.net/assets/event_default_poster.png",
      "from_time": 0,
      "to_time": 0
    }
  }
}

Enable event

PUT https://api.kinescope.io/v2/live/events/:event_id/enable

Enables the event so that streams can be ingested and played back.

Finish event

PUT https://api.kinescope.io/v2/live/events/:event_id/complete

Marks the event as completed. Ingest endpoints stop accepting streams.

Update schedule stream

PUT https://api.kinescope.io/v2/live/events/:event_id/stream

Updates the scheduling of an upcoming stream (start time, expected duration).

Request body (json)
{
  "started_at": "2024-11-15T12:42:00.991558Z"
}
Responses
{
  "data": {
    "id": "<UUID>",
    "event_id": "<UUID>",
    "status": "pending",
    "started_at": "2024-11-15T12:42:00.991558Z",
    "finished_at": null
  }
}

Move event

PUT https://api.kinescope.io/v2/live/events/:event_id/move

Moves the event into a different project or folder.

Request body (json)
{
  "parent_id": "<UUID>"
}
Responses
{
  "data": {
    "id": "<UUID>",
    "workspace_id": "<UUID>",
    "parent_id": "<UUID>",
    "name": "Update event",
    "type": "recurring",
    "streamkey": "a6739c5535504feaa45da338dc62f752",
    "auto_start": true,
    "protected": false,
    "time_shift": false,
    "chat_after_stream": true,
    "chat_active": true,
    "record": {
      "parent_id": "<UUID>"
    },
    "video": {
      "presets": null
    },
    "audio": {
      "channel_mapping": null
    },
    "restreams": [
      {
        "id": "<UUID>",
        "event_id": "<UUID>",
        "name": "Restream 1",
        "url": "rtmp://rtmp.kinescope.io/live",
        "key": "stream key",
        "status": "disconnected",
        "enabled": true,
        "description": "",
        "created_at": "2022-11-15T12:25:04.095926Z",
        "updated_at": null
      }
    ],
    "reconnect_window": 1800,
    "play_link": "https://kinescope.io/bK3mQx7ZtNvRs2WdYpLc9F",
    "rtmp_link": "rtmp://rtmp.kinescope.io/live",
    "scheduled": {
      "time": null
    },
    "stream": {
      "id": "<UUID>",
      "event_id": "<UUID>",
      "status": "pending",
      "started_at": "2024-11-15T12:42:00.991558Z",
      "finished_at": null
    },
    "created_at": "2022-11-15T12:25:04.095926Z",
    "updated_at": "2022-11-15T12:46:31.301738Z",
    "latency_mode": "standard"
  }
}

Delete event

DELETE https://api.kinescope.io/v2/live/events/:event_id

Permanently deletes the live event. This action cannot be undone.

Unique codes

Unique codes restrict access to the event: a viewer enters a code before watching. Codes are generated in batches. An event can have up to 9999 active codes.

Create unique codes batch

POST https://api.kinescope.io/v2/live/events/:event_id/unique-codes

Generates a batch of unique codes for the event. Each code is 3 letters and 3 digits, e.g. KQX482. The first batch turns on unique_codes_enabled for the event.

FieldTypeDescription
namestringBatch name, up to 255 characters. Must be unique within the event. Required
codes_amountintegerNumber of codes, from 1 to 9999. Required
max_countintegerHow many times each code can be used, from 1 to 9999. Not required, no limit by default
sessions_per_codeintegerSessions per code, from 1 to 100. Not required, no limit by default
starts_atstringDate from which codes are valid, YYYY-MM-DD. Cannot be in the past. Default today. Not required
expires_atstringDate until which codes are valid, YYYY-MM-DD. Cannot be earlier than starts_at. Not required, no expiration by default
Request body (json)
{
  "name": "Promo batch",
  "codes_amount": 100,
  "max_count": 5,
  "sessions_per_code": 1,
  "starts_at": "2026-10-01",
  "expires_at": "2026-10-31"
}
Responses
{
  "data": {
    "id": "<UUID>",
    "entity_id": "<UUID>",
    "name": "Promo batch",
    "codes_count": 100,
    "used_count": 0,
    "max_count": 5,
    "sessions_per_code": 1,
    "starts_at": "2026-10-01T00:00:00Z",
    "expires_at": "2026-10-31T00:00:00Z",
    "created_at": "2026-09-24T09:40:12.123456Z"
  }
}

List unique codes batches

GET https://api.kinescope.io/v2/live/events/:event_id/unique-codes

Returns the event's batches of unique codes. Results are paginated. used_count is the number of codes that have been activated at least once.

Responses
{
  "meta": {
    "pagination": {
      "page": 1,
      "per_page": 25,
      "total": 1
    }
  },
  "data": [
    {
      "id": "<UUID>",
      "entity_id": "<UUID>",
      "name": "Promo batch",
      "codes_count": 100,
      "used_count": 12,
      "max_count": 5,
      "sessions_per_code": 1,
      "starts_at": "2026-10-01T00:00:00Z",
      "expires_at": "2026-10-31T00:00:00Z",
      "created_at": "2026-09-24T09:40:12.123456Z"
    }
  ]
}

Get unique codes batch

GET https://api.kinescope.io/v2/live/events/:event_id/unique-codes/:batch_id

Retrieves a single batch of unique codes.

Responses
{
  "data": {
    "id": "<UUID>",
    "entity_id": "<UUID>",
    "name": "Promo batch",
    "codes_count": 100,
    "used_count": 12,
    "max_count": 5,
    "sessions_per_code": 1,
    "starts_at": "2026-10-01T00:00:00Z",
    "expires_at": "2026-10-31T00:00:00Z",
    "created_at": "2026-09-24T09:40:12.123456Z"
  }
}

Download unique codes

GET https://api.kinescope.io/v2/live/events/:event_id/unique-codes/:batch_id/download

Downloads the batch codes as a CSV file. Activation dates are in the workspace time zone. The "Usage Limit" column is present only if the batch has max_count.

Responses
sep=,
Code,Activation Date,Times Used,Usage Limit
KQX482,2026-10-02T12:15:04+03:00,1,5
BMT907,,0,5

Delete unique codes batch

DELETE https://api.kinescope.io/v2/live/events/:event_id/unique-codes/:batch_id

Deletes the batch and all its codes. Viewers who entered these codes lose access. When the last batch is deleted, unique_codes_enabled is turned off for the event.

Responses
{
  "data": {
    "success": true
  }
}