Skip to main content
GET
Browse and Edit Rows
Every /data endpoint needs the Intermediary plan or higher, on the database owner’s account — not the caller’s. Below that the answer is PLAN_RESTRICTED_FEATURE (403). It is also dashboard-session only: an API key gets API_KEY_SCOPE_DENIED (403) here, regardless of its scopes.
PostgreSQL and MySQL only. Schema, table, sort column and filter columns are all matched against the engine’s own catalog before any statement is built; an unknown name answers OBJECT_NOT_FOUND.
string
required
The ID of the database.
string
required
Table name, URL-encoded.
string
required
Schema the table belongs to.
number
1-based page. Defaults to 1.
number
Rows per page. Maximum 200; above that the request is rejected with 400.
string
Column to order by. Must exist in the table.
string
asc (default) or desc.
string
Free text; used with filter_field as a “contains” match.
string
Column the filter text applies to.
string
JSON array of { column, op, value }, up to 20 entries. op is one of =, !=, <, <=, >, >=, LIKE, IS NULL, IS NOT NULL — no raw SQL is accepted.
string
Workspace the database belongs to.

Response

object

Create, update and delete

Mutations require owner or admin in the workspace (the database owner always qualifies) and are recorded in the database activity log — the operation and the table, never the content.
string
/v1/databases/{id}/data/rows
Body: { schema, table, values }.
string
/v1/databases/{id}/data/rows
Body: { schema, table, primary_key, values }. The row is always identified by its complete primary key ({ "id": 42 }, or composite { "tenant_id": 1, "user_id": 9 }) — never by its position on the page. A request without a primary key is rejected.
string
/v1/databases/{id}/data/rows
Body: { schema, table, primary_keys } — up to 200 keys. All three answer { "response": { "affected": <number> } }. Request bodies are capped at 1 MB.