List draws
const url = 'https://api.keliplay.com/v1/game-instances/example/winner-selection/runs';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/game-instances/example/winner-selection/runs \ --header 'Authorization: Bearer <token>'Lists the campaign’s 100 most recent draws, newest first.
Permission: results.read.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The campaign’s id.
Responses
Section titled “Responses”The draws.
object
One draw. Every draw is recorded and can be verified.
object
When winners are drawn.
manual: when you call the draw operation.auto_on_session_end: after each play ends.auto_on_schedule: once, atscheduleAt.
The API key that triggered it, if one did.
The algorithm used, as in winnerSelectionAlgorithm.
object
How equal scores are ordered, for score_highest.
Only entries made at or after this time count.
Only entries made before this time count.
How many eligible entries the draw picked from.
Example
{ "runs": [ { "id": "0192f3a1-0000-7000-8000-0000000d0001", "gameInstanceId": "0192f3a1-0000-7000-8000-0000000ca001", "triggeredBy": "manual", "triggeredByApiKeyId": "0192f3a1-0000-7000-8000-0000000ce001", "idempotencyKey": "draw-2026-10-31-final", "algorithm": "random_uniform", "algorithmConfigSnapshot": { "maxWinners": 3 }, "entriesSnapshotCount": 412, "status": "completed", "failureReason": null, "executedAt": "2026-10-31T18:00:01.000Z", "createdAt": "2026-10-31T18:00:00.000Z" } ]}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." }}