Skip to content

Records API

All record endpoints use app-scoped paths: /api/apps/{app}/tables/{table}/records.

GET /api/apps/{app}/tables/{table}/records

Supports pagination, sorting, filtering, and field selection via query parameters. The response is an envelope:

{
"data": [ { "id": "...", "title": "..." } ],
"pagination": {
"limit": 20,
"next_cursor": "...",
"has_more": true
}
}

Restrict the returned columns with ?fields=title,status (comma-separated).

GET /api/apps/{app}/tables/{table}/records?limit=25&page=2

Default limit is 20, maximum is 100. Pagination is cursor-based: list responses include a pagination object with next_cursor, prev_cursor, and has_more. Pass ?after=<cursor> (or ?before=<cursor>) to page through results, or ?page=N to jump to an offset-based page. Exact totals are opt-in via ?include_total=true.

GET /api/apps/{app}/tables/{table}/records?sort=-created_at

Prefix a field with - for descending order; without the prefix it is ascending. Combine multiple sort keys with commas, e.g. ?sort=status,-created_at.

GET /api/apps/{app}/tables/{table}/records?filter=eq(status,'active')

See Filter Syntax for the full query language.

POST /api/apps/{app}/tables/{table}/records
Content-Type: application/json
{
"title": "Website Redesign",
"budget": "25000.00",
"status": "active"
}

Returns the created record object directly (HTTP 201).

GET /api/apps/{app}/tables/{table}/records/{id}
PATCH /api/apps/{app}/tables/{table}/records/{id}
Content-Type: application/json
{
"status": "completed"
}

Partial updates — only include the fields you want to change.

DELETE /api/apps/{app}/tables/{table}/records/{id}

All deletes are soft deletes. Deleted records are excluded from queries but preserved in the database.

Batch requests carry an action (create, update, or delete) and the operands for that action.

POST /api/apps/{app}/tables/{table}/records/batch
Content-Type: application/json
{
"action": "create",
"records": [
{"title": "Task 1", "status": "active"},
{"title": "Task 2", "status": "draft"},
{"title": "Task 3", "status": "active"}
]
}

Updates and deletes target records by id, ids, or a filter:

POST /api/apps/{app}/tables/{table}/records/batch
Content-Type: application/json
{
"action": "update",
"target": {"type": "filter", "filter": "eq(status,'draft')"},
"changes": {"status": "active"}
}
GET /api/search?q=query&preview=true

Global search across all tables the user has access to. The preview=true parameter enables ranked full-text results with highlights. Without it, only counter (e.g. ABC-123) and UUID-format queries are supported. See Search for details.