curl "https://api.bottari.ai/v1/data_sources/exampleDb001/query?filter_properties=title&filter_properties=exampleFld01" \
-X POST \
-H "Authorization: Bearer $BOTTARI_TOKEN" \
-H "Bottari-Version: 2026-03-11" \
-H "Content-Type: application/json" \
-d '{
"filter": {
"property": "Team",
"select": {
"equals": "Ops"
}
},
"sorts": [
{
"timestamp": "created_time",
"direction": "descending"
}
],
"page_size": 10
}'
{
"object": "list",
"results": [
{
"object": "page",
"id": "exampleRow01",
"created_time": "2026-01-15T02:30:00.000Z",
"last_edited_time": "2026-01-15T03:10:00.000Z",
"created_by": {
"object": "user",
"id": "11111111-1111-4111-8111-111111111111"
},
"last_edited_by": {
"object": "user",
"id": "11111111-1111-4111-8111-111111111111"
},
"in_trash": false,
"cover": null,
"icon": null,
"parent": {
"type": "data_source_id",
"data_source_id": "exampleDb001",
"database_id": "exampleDb001"
},
"is_archived": false,
"is_locked": false,
"properties": {
"Name": {
"id": "title",
"type": "title",
"title": [
{
"type": "text",
"text": {
"content": "Review January orders",
"link": null
},
"annotations": {
"bold": false,
"italic": false,
"strikethrough": false,
"underline": false,
"code": false,
"color": "default"
},
"plain_text": "Review January orders",
"href": null
}
]
},
"Team": {
"id": "exampleFld01",
"type": "select",
"select": {
"id": "exampleOpt01",
"name": "Ops",
"color": "blue"
}
}
},
"url": "https://app.bottari.ai/t/exampleTeam1/p/exampleRow01",
"public_url": null
}
],
"next_cursor": "eyJxIjoiZXhhbXBsZSJ9",
"has_more": true,
"type": "page_or_data_source",
"page_or_data_source": {},
"request_id": "33333333-3333-4333-8333-333333333333"
}
Databases and data sources
Query rows
Read a database’s rows with filters and sorts.
POST
/
v1
/
data_sources
/
{id}
/
query
curl "https://api.bottari.ai/v1/data_sources/exampleDb001/query?filter_properties=title&filter_properties=exampleFld01" \
-X POST \
-H "Authorization: Bearer $BOTTARI_TOKEN" \
-H "Bottari-Version: 2026-03-11" \
-H "Content-Type: application/json" \
-d '{
"filter": {
"property": "Team",
"select": {
"equals": "Ops"
}
},
"sorts": [
{
"timestamp": "created_time",
"direction": "descending"
}
],
"page_size": 10
}'
{
"object": "list",
"results": [
{
"object": "page",
"id": "exampleRow01",
"created_time": "2026-01-15T02:30:00.000Z",
"last_edited_time": "2026-01-15T03:10:00.000Z",
"created_by": {
"object": "user",
"id": "11111111-1111-4111-8111-111111111111"
},
"last_edited_by": {
"object": "user",
"id": "11111111-1111-4111-8111-111111111111"
},
"in_trash": false,
"cover": null,
"icon": null,
"parent": {
"type": "data_source_id",
"data_source_id": "exampleDb001",
"database_id": "exampleDb001"
},
"is_archived": false,
"is_locked": false,
"properties": {
"Name": {
"id": "title",
"type": "title",
"title": [
{
"type": "text",
"text": {
"content": "Review January orders",
"link": null
},
"annotations": {
"bold": false,
"italic": false,
"strikethrough": false,
"underline": false,
"code": false,
"color": "default"
},
"plain_text": "Review January orders",
"href": null
}
]
},
"Team": {
"id": "exampleFld01",
"type": "select",
"select": {
"id": "exampleOpt01",
"name": "Ops",
"color": "blue"
}
}
},
"url": "https://app.bottari.ai/t/exampleTeam1/p/exampleRow01",
"public_url": null
}
],
"next_cursor": "eyJxIjoiZXhhbXBsZSJ9",
"has_more": true,
"type": "page_or_data_source",
"page_or_data_source": {},
"request_id": "33333333-3333-4333-8333-333333333333"
}
Reads a list of rows. Trashed and archived rows are left out by default. With no sort, the most recently created rows come first.
This endpoint has its own rate limit of about 3 requests per second per integration. See Rate limits.
See Common rules for shared errors.
string
Optional. Only
2026-03-11 is accepted. Without it, the current version is used. A different value returns 400.string
required
The data source ID. Use the database ID.
string[]
Property names or IDs to include. An unknown property returns 400.
object
See Filters and sorts.
string
next_cursor from the previous response. The filter and sort have to match.number
default:"100"
1 to 100.
boolean
If
true, returns only trashed rows.boolean
If
true, returns only archived rows.string
Only
page is accepted.object[]
page objects. See Property values.string | null
The cursor for the next set.
boolean
true if there’s more.string
Always
page_or_data_source.Read every row
Query results have no limit on the total number of rows. Ifhas_more is true, send next_cursor as start_cursor and repeat until has_more is false.
curl https://api.bottari.ai/v1/data_sources/exampleDb001/query \
-X POST \
-H "Authorization: Bearer $BOTTARI_TOKEN" \
-H "Bottari-Version: 2026-03-11" \
-H "Content-Type: application/json" \
-d '{ "start_cursor": "eyJxIjoiZXhhbXBsZSJ9" }'
Errors
| Status | code | Cause |
|---|---|---|
| 400 | validation_error | An unknown body key, a wrong filter or sort, a cursor from another query, or an unknown filter_properties value. |
| 404 | object_not_found | The database doesn’t exist, isn’t connected, or is in the trash. |
| 429 | rate_limited | You went over a rate limit. |
curl "https://api.bottari.ai/v1/data_sources/exampleDb001/query?filter_properties=title&filter_properties=exampleFld01" \
-X POST \
-H "Authorization: Bearer $BOTTARI_TOKEN" \
-H "Bottari-Version: 2026-03-11" \
-H "Content-Type: application/json" \
-d '{
"filter": {
"property": "Team",
"select": {
"equals": "Ops"
}
},
"sorts": [
{
"timestamp": "created_time",
"direction": "descending"
}
],
"page_size": 10
}'
{
"object": "list",
"results": [
{
"object": "page",
"id": "exampleRow01",
"created_time": "2026-01-15T02:30:00.000Z",
"last_edited_time": "2026-01-15T03:10:00.000Z",
"created_by": {
"object": "user",
"id": "11111111-1111-4111-8111-111111111111"
},
"last_edited_by": {
"object": "user",
"id": "11111111-1111-4111-8111-111111111111"
},
"in_trash": false,
"cover": null,
"icon": null,
"parent": {
"type": "data_source_id",
"data_source_id": "exampleDb001",
"database_id": "exampleDb001"
},
"is_archived": false,
"is_locked": false,
"properties": {
"Name": {
"id": "title",
"type": "title",
"title": [
{
"type": "text",
"text": {
"content": "Review January orders",
"link": null
},
"annotations": {
"bold": false,
"italic": false,
"strikethrough": false,
"underline": false,
"code": false,
"color": "default"
},
"plain_text": "Review January orders",
"href": null
}
]
},
"Team": {
"id": "exampleFld01",
"type": "select",
"select": {
"id": "exampleOpt01",
"name": "Ops",
"color": "blue"
}
}
},
"url": "https://app.bottari.ai/t/exampleTeam1/p/exampleRow01",
"public_url": null
}
],
"next_cursor": "eyJxIjoiZXhhbXBsZSJ9",
"has_more": true,
"type": "page_or_data_source",
"page_or_data_source": {},
"request_id": "33333333-3333-4333-8333-333333333333"
}