Skip to content

Set the pre-game page

PUT
/v1/game-instances/{campaignId}/intro
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.

campaignId
required
string

The campaign’s id.

Media typeapplication/json
One of:

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
blocks
required
Array
>= 1 items <= 20 items

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
id
required
string
>= 1 characters <= 64 characters
type
required
string
text
string
<= 600 characters
align
string
default: center
Allowed values: start center
url

An https URL, or a file from your media library.

string
<= 2048 characters
posterUrl
string
<= 2048 characters
alt
string
<= 120 characters
maxWidth
integer
>= 60 <= 720
autoplay
boolean
loop
boolean
controls
boolean
speed
number
>= 0.25 <= 2
size
string
Allowed values: sm md lg
type
required
string
Allowed values: logo heading text play image lottie video divider spacer
when
string
default: always
Allowed values: always first_play returning no_plays_left
label
string
>= 1 characters <= 40 characters
noPlaysLeftLabel
string
>= 1 characters <= 60 characters
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"
}
]
}

The saved page.

Media typeapplication/json
object
arranged
required

False when no page is set and page is the default.

boolean
page
required

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
blocks
required
Array
>= 1 items <= 20 items

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
id
required
string
>= 1 characters <= 64 characters
type
required
string
text
string
<= 600 characters
align
string
default: center
Allowed values: start center
url

An https URL, or a file from your media library.

string
<= 2048 characters
posterUrl
string
<= 2048 characters
alt
string
<= 120 characters
maxWidth
integer
>= 60 <= 720
autoplay
boolean
loop
boolean
controls
boolean
speed
number
>= 0.25 <= 2
size
string
Allowed values: sm md lg
type
required
string
Allowed values: logo heading text play image lottie video divider spacer
when
string
default: always
Allowed values: always first_play returning no_plays_left
label
string
>= 1 characters <= 40 characters
noPlaysLeftLabel
string
>= 1 characters <= 60 characters
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.

Media typeapplication/json
object
error
required
object
code
required

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 with confirm=true. Folder deletion only.
  • rate_limited (429): wait for Retry-After seconds.
  • internal_error (500) and service_unavailable (503): try again later.
string
Allowed values: invalid_request unauthorized upgrade_required forbidden not_found conflict confirmation_required rate_limited internal_error service_unavailable
message
required

Written for a person. May change; do not parse it.

string
details
One of:
Array<object>
object
path
required

The failing field, dot separated, such as prize.label.

string
message
required
string
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.

Media typeapplication/json
object
error
required
object
code
required

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 with confirm=true. Folder deletion only.
  • rate_limited (429): wait for Retry-After seconds.
  • internal_error (500) and service_unavailable (503): try again later.
string
Allowed values: invalid_request unauthorized upgrade_required forbidden not_found conflict confirmation_required rate_limited internal_error service_unavailable
message
required

Written for a person. May change; do not parse it.

string
details
One of:
Array<object>
object
path
required

The failing field, dot separated, such as prize.label.

string
message
required
string
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.

Media typeapplication/json
object
error
required
object
code
required

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 with confirm=true. Folder deletion only.
  • rate_limited (429): wait for Retry-After seconds.
  • internal_error (500) and service_unavailable (503): try again later.
string
Allowed values: invalid_request unauthorized upgrade_required forbidden not_found conflict confirmation_required rate_limited internal_error service_unavailable
message
required

Written for a person. May change; do not parse it.

string
details
One of:
Array<object>
object
path
required

The failing field, dot separated, such as prize.label.

string
message
required
string
Example
{
"error": {
"code": "forbidden",
"message": "Your role does not allow this (draws.run)."
}
}

Nothing with that id exists in your account.

Media typeapplication/json
object
error
required
object
code
required

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 with confirm=true. Folder deletion only.
  • rate_limited (429): wait for Retry-After seconds.
  • internal_error (500) and service_unavailable (503): try again later.
string
Allowed values: invalid_request unauthorized upgrade_required forbidden not_found conflict confirmation_required rate_limited internal_error service_unavailable
message
required

Written for a person. May change; do not parse it.

string
details
One of:
Array<object>
object
path
required

The failing field, dot separated, such as prize.label.

string
message
required
string
Example
{
"error": {
"code": "not_found",
"message": "Channel 0192f3a1-0000-7000-8000-00000000c009 not found."
}
}