Get a channel
const url = 'https://api.keliplay.com/v1/channels/example';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.keliplay.com/v1/channels/example \ --header 'Authorization: Bearer <token>'Returns one channel and its campaigns in timeline order. A campaign with no start time comes first, then the rest by start time.
Permission: campaigns.read.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The channel’s id.
Responses
Section titled “Responses”The channel and its campaigns.
object
object
Plays allowed per player across every campaign on this channel.
Plays allowed per player per day across every campaign on this channel.
A campaign as listed on its channel’s timeline.
object
draft: being set up. Players cannot see it.active: live on its channel, during its live window.paused: hidden for now. Plays and results are kept.archived: finished and put away. Can be restored.
When winners are drawn.
manual: when you call the draw operation.auto_on_session_end: after each play ends.auto_on_schedule: once, atscheduleAt.
Example
{ "channel": { "id": "0192f3a1-0000-7000-8000-00000000c001", "name": "Homepage banner", "status": "active", "betweenCampaigns": null, "maxPlaysPerParticipant": null, "maxPlaysPerParticipantPerDay": 3, "playLimitTimezone": "Europe/London", "createdAt": "2026-09-01T09:00:00.000Z", "updatedAt": "2026-09-01T09:00:00.000Z" }, "campaigns": [ { "id": "0192f3a1-0000-7000-8000-0000000ca001", "name": "Autumn wheel", "status": "active", "gameSlug": "spin-wheel", "liveFrom": "2026-10-01T00:00:00.000Z", "liveUntil": "2026-10-31T23:59:59.000Z", "prize": { "label": "Free coffee" }, "winnerSelectionTrigger": "manual" } ]}The API key is missing, malformed or revoked.
object
object
Stable and safe to branch on.
invalid_request(400): the request is not valid.unauthorized(401): missing, malformed or revoked API key.upgrade_required(402): not in your plan, or a plan limit is reached.forbidden(403): the key lacks a permission, or the action is not allowed.not_found(404): nothing with that id in your account.conflict(409): clashes with the current state.confirmation_required(409): repeat withconfirm=true. Folder deletion only.rate_limited(429): wait forRetry-Afterseconds.internal_error(500) andservice_unavailable(503): try again later.
Written for a person. May change; do not parse it.
object
The failing field, dot separated, such as prize.label.
object
Example
{ "error": { "code": "unauthorized", "message": "Invalid or revoked API key." }}The API key does not carry the permission this needs, or the request is not allowed.
object
object
Stable and safe to branch on.
invalid_request(400): the request is not valid.unauthorized(401): missing, malformed or revoked API key.upgrade_required(402): not in your plan, or a plan limit is reached.forbidden(403): the key lacks a permission, or the action is not allowed.not_found(404): nothing with that id in your account.conflict(409): clashes with the current state.confirmation_required(409): repeat withconfirm=true. Folder deletion only.rate_limited(429): wait forRetry-Afterseconds.internal_error(500) andservice_unavailable(503): try again later.
Written for a person. May change; do not parse it.
object
The failing field, dot separated, such as prize.label.
object
Example
{ "error": { "code": "forbidden", "message": "Your role does not allow this (draws.run)." }}Nothing with that id exists in your account.
object
object
Stable and safe to branch on.
invalid_request(400): the request is not valid.unauthorized(401): missing, malformed or revoked API key.upgrade_required(402): not in your plan, or a plan limit is reached.forbidden(403): the key lacks a permission, or the action is not allowed.not_found(404): nothing with that id in your account.conflict(409): clashes with the current state.confirmation_required(409): repeat withconfirm=true. Folder deletion only.rate_limited(429): wait forRetry-Afterseconds.internal_error(500) andservice_unavailable(503): try again later.
Written for a person. May change; do not parse it.
object
The failing field, dot separated, such as prize.label.
object
Example
{ "error": { "code": "not_found", "message": "Channel 0192f3a1-0000-7000-8000-00000000c009 not found." }}