Skip to content

List files

GET
/v1/tenant/assets
curl --request GET \
--url 'https://api.keliplay.com/v1/tenant/assets?limit=200&offset=0&sort=createdAt&dir=asc&type=png&recursive=true' \
--header 'Authorization: Bearer <token>'

Lists the files in your media library. Files still uploading or importing are not included.

total counts files matching your filters. allTotal and allBytes cover the whole library.

Permission: assets.read.

limit
integer
default: 200 >= 1 <= 200

Items per page.

offset
integer
0

Items to skip before the page starts.

search
string
<= 200 characters

Match part of a file name, ignoring case.

sort
string
default: createdAt
Allowed values: createdAt filename sizeBytes

Field to sort by.

dir
string
default: desc
Allowed values: asc desc

Sort direction.

type
string
Allowed values: png jpeg webp gif mp3 ogg wav lottie video

Only files of this kind. video covers MP4 and WebM.

folderId
string
<= 64 characters

Only files in this folder. Send unfiled for files in no folder.

recursive
string
default: false
Allowed values: true false

With folderId, send true to also include files in folders inside it.

A page of files.

Media typeapplication/json
object
assets
required
Array<object>

A file in your media library.

object
id
required
string
url
required

Where the file is served from. Use it in configs, themes and pages.

string format: uri
filename
required
string
contentType
required
string
sizeBytes

Set once the upload is confirmed.

integer | null
folderId
required
string | null
sourceUrl

The URL an imported file came from.

string | null
importStatus

Null for uploaded files.

string | null
Allowed values: pending failed done
importError
string | null
importAttempts
integer
createdAt
required
string format: date-time
updatedAt
string format: date-time
confirmedAt

When the file became available. Null while it is still uploading or importing.

string | null format: date-time
total
required
integer
allTotal
required

Files in the whole library.

integer
allBytes
required

Bytes used by the whole library.

integer
storageConfigured
required

Whether uploads are available.

boolean
Example
{
"assets": [
{
"id": "0192f3a1-0000-7000-8000-0000000f2001",
"url": "https://cdn.example.com/media/autumn-banner.png",
"filename": "autumn-banner.png",
"contentType": "image/png",
"sizeBytes": 482113,
"folderId": "0192f3a1-0000-7000-8000-0000000f1001",
"sourceUrl": null,
"importStatus": null,
"importError": null,
"importAttempts": 0,
"createdAt": "2026-10-05T10:00:00.000Z",
"updatedAt": "2026-10-05T10:00:02.000Z",
"confirmedAt": "2026-10-05T10:00:02.000Z"
}
],
"total": 1,
"allTotal": 21,
"allBytes": 18350080,
"storageConfigured": true
}

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)."
}
}