Set the pre-game page
const url = 'https://api.keliplay.com/v1/game-instances/example/intro';const options = { method: 'PUT', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"blocks":[{"id":"logo","type":"logo","when":"always","maxWidth":180},{"id":"title","type":"heading","when":"always","text":"Spin to win","align":"center"},{"id":"welcome-back","type":"text","when":"returning","text":"Welcome back. You have another spin today.","align":"center"},{"id":"play","type":"play","when":"always","label":"Spin now","noPlaysLeftLabel":"Come back tomorrow"}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PUT \ --url https://api.keliplay.com/v1/game-instances/example/intro \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "blocks": [ { "id": "logo", "type": "logo", "when": "always", "maxWidth": 180 }, { "id": "title", "type": "heading", "when": "always", "text": "Spin to win", "align": "center" }, { "id": "welcome-back", "type": "text", "when": "returning", "text": "Welcome back. You have another spin today.", "align": "center" }, { "id": "play", "type": "play", "when": "always", "label": "Spin now", "noPlaysLeftLabel": "Come back tomorrow" } ] }'Replaces the pre-game page. The page must hold exactly one play block.
Send null as the whole body to go back to the default.
Limits: 20 blocks, 8 images, videos and animations in total, 1 video, 2 animations, 2,000 characters of text, 16 KB in all. Animations must come from your media library.
If your plan does not include the pre-game page, players see the default page instead. Your saved page is kept.
Permission: intro.write.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The campaign’s id.
Request Bodyrequired
Section titled “Request Bodyrequired”The page in front of the game. Exactly one play block. At most 20
blocks, 8 images, videos and animations, 1 video, 2 animations, 2,000
characters of text and 16 KB in all.
object
A block on the pre-game page. Any shared block type, plus play: the
button that starts the game. play takes an optional label (up to 40
characters) and noPlaysLeftLabel (up to 60), shown when the player
has no plays left.
when is one of always (default), first_play, returning, or
no_plays_left.
object
An https URL, or a file from your media library.
Example
{ "blocks": [ { "id": "logo", "type": "logo", "when": "always", "maxWidth": 180 }, { "id": "title", "type": "heading", "when": "always", "text": "Spin to win", "align": "center" }, { "id": "welcome-back", "type": "text", "when": "returning", "text": "Welcome back. You have another spin today.", "align": "center" }, { "id": "play", "type": "play", "when": "always", "label": "Spin now", "noPlaysLeftLabel": "Come back tomorrow" } ]}Responses
Section titled “Responses”The saved page.
object
False when no page is set and page is the default.
The page in front of the game. Exactly one play block. At most 20
blocks, 8 images, videos and animations, 1 video, 2 animations, 2,000
characters of text and 16 KB in all.
object
A block on the pre-game page. Any shared block type, plus play: the
button that starts the game. play takes an optional label (up to 40
characters) and noPlaysLeftLabel (up to 60), shown when the player
has no plays left.
when is one of always (default), first_play, returning, or
no_plays_left.
object
An https URL, or a file from your media library.
Example
{ "arranged": true, "page": { "blocks": [ { "id": "title", "type": "heading", "when": "always", "text": "Spin to win", "align": "center" }, { "id": "play", "type": "play", "when": "always", "label": "Spin now" } ] }}The request is not valid. details lists each field that failed, where there is one.
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": "invalid_request", "message": "Invalid request json.", "details": [ { "path": "name", "message": "Too small, expected string to have >=1 characters" } ] }}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." }}