Lists
The methods in this section create and delete lists, change their fields and manage records: add, read, update and delete them. For example, your website can keep a "Coffee shop menu" list up to date, and the bot shows it to people.
How a list is structured
A list has two parts:
- The schema — the list's name and its fields. The methods on the Lists and fields page work with it. Method names call it exactly that:
getListSchema,createListSchema. - Records — the rows of the list with field values. The methods on the Records page work with them.
Lists belong to a project. A list can be created in a project or in a bot — in that case it also goes to the project of that bot. The API gives access to all lists in the projects owned by the key holder: both those created in bots and those created directly in the project.
Identifiers
| What | What it looks like | Where to get it |
|---|---|---|
List (schema_id, id in responses) |
A 24-character string: 6650a1f2c3d4e5f6a7b8c9d0 |
Responses of getListSchemas and createListSchema |
Record (item_id, id in responses) |
A 24-character string, like a list's | Responses of getListItems and addListItem |
Field (slug) |
Letters, digits, - and _, preferably Latin: price |
Keys of the fields object in the getListSchema response |
Project (project_uuid, project in responses) |
A UUID: 3f2b8c1e-… |
The project's address in your account: /projects/<uuid>/… |
Bot (bot_id) |
A number | The bot's address in your account: /bots/12345/… |
| Contact | A number | The contact methods |
The slug is the field's name in templates: the value is stored in the record under it, and the bot's blocks read it by the same name. Fields created in your account get it automatically; through the API you set it yourself.
Field types
The type is set in the type parameter when the field is created and cannot be changed later.
type |
Type in your account | What to send | What comes back |
|---|---|---|---|
string |
"Text" | A string | A string |
number |
"Number" | A number or a string with a number: 12, "4.5" |
A number |
bool |
"Yes/No" | true or false (1 and 0 work too) |
true or false |
date |
"Date" | A date in any common format: "2026-10-15" |
A date and time in UTC: "2026-10-15T00:00:00.000000Z" |
datetime |
"Date and time" | A date and time: "2026-10-15 14:30" or "2026-10-15T14:30:00-05:00" |
A date and time in UTC |
money |
"Money" | An amount in dollars, euros, etc.: 4.5 or 12.99 |
The amount in the same units: 4.5 |
file |
"File" | An object with a link — see below | An object describing the file |
image |
"Image" | An object with a link — see below | An object describing the file |
contact |
"Contact ID" | A contact ID | The contact ID |
bot |
"Bot ID" | A bot ID | The bot ID |
An empty field comes back as null.
Date and time
A time without a time zone is treated as UTC: "2026-10-15 14:30" is saved as 14:30 UTC. To send local time, add the offset: "2026-10-15T14:30:00-05:00". A date field does not cut off the time: if you send a date with a time, the time is kept.
Money
The currency is set on the field when the field is created (currency) and is not sent with records. It is a three-letter ISO 4217 code: USD, EUR, GBP. In createListSchema the currency can be omitted — then it is USD; in addListSchemaField it is required. An unknown code — 422.
Send amounts in main units — dollars, not cents. An amount is rounded to the currency's decimal places (two for the dollar and the euro), halves rounded up: 0.295 is saved as 0.30.
Files and images
The value of a file or image field is an object. Through the API you can only store a link to a file that is available on the internet:
{
"url": "https://example.com/menu/cappuccino.jpg",
"storage": "url",
"name": "cappuccino.jpg",
"type": "image"
}
| Key | Required | Description |
|---|---|---|
url |
yes | An http:// or https:// link |
storage |
yes | Always "url" |
name |
no | File name |
type |
no | Kind of file: image, video, audio or document |
mime_type |
no | MIME type: image/jpeg |
size |
no | Size in bytes |
caption |
no | Caption |
Warning
Without
"storage": "url", or with a link of another kind (nothttp/https), the value is silently not saved — the field ends upnull, and there is no error.
Other keys (such as uuid or path) are ignored: the field stores only the external link, and the response returns it exactly as you sent it. A link to a file in the platform's storage — the kind that responses contain for files uploaded in your account — can only be stored within your own account; a link to another account's file is not saved, and the field ends up null. If you send updateListItem the file that is already in the record, for example a whole record from getListItems, it stays as it was.
In responses, a file is described by an object with the keys type, mime_type, created_at, name, size, storage, caption, meta (width, height, duration, codec) and url. Links to files uploaded in your account are temporary: download the file right away or request the record again.
Contact and bot
contact and bot fields take an ID. The contact must belong to your bot and the bot must be yours, otherwise the response is 403. An ID that does not exist fails validation — 422.
Besides the value of the field itself, the record gets the service keys contact_id or bot_id — the filter in getListItems works on them. If a list has several such fields, they hold the value of the last one.
Field settings
| Parameter | Type | Default | Description |
|---|---|---|---|
is_required |
boolean | true |
"Required field": a record without a value is not added |
is_hidden |
boolean | false |
"Hide field from interface": the field is not shown in the table of records in your account. The API returns it as usual |
is_encryptable |
boolean | false |
"Encrypt field": the value is stored encrypted. The API returns it decrypted. In your account encryption exists only for the string and number types — use it only for them. Filters do not work on encrypted fields |
Important
By default, a field created through the API is required — unlike in your account. If a field may stay empty, send
"is_required": false.
Limits
- Up to 5000 lists per project.
- From 1 to 30 fields when a list is created.
- List and field names — up to 255 characters.
- Service field names cannot be used:
id,_id,contact,contact_id,bot,bot_id,user,user_id,project,project_id,data,schema_id,created_at,updated_at,deleted_atand any name starting with__. For such aslugthe API responds with422and the text "The slug is reserved.".
General rules — the key, request rate, error codes — are described on the API page.
Methods
| Method | What it does |
|---|---|
getListSchemas |
All lists of your projects |
getListSchema |
One list with its fields |
createListSchema |
Create a list |
deleteListSchema |
Delete a list |
addListSchemaField |
Add a field |
deleteListSchemaField |
Delete a field |
getListItems |
Records of a list with filtering and sorting |
addListItem |
Add a record |
updateListItem |
Update a record |
deleteListItem |
Delete a record |