Appearance
CRUD Operations
Every entity in your workspace gets a full set of CRUD endpoints. The entity name in the URL matches the entity name defined in your schema.
Endpoint Pattern
/api/v1/{orgSlug}/{workspaceSlug}/{entityName}
/api/v1/{orgSlug}/{workspaceSlug}/{entityName}/{id}List Records
http
GET /api/v1/acme-corp/sales/Customer?page=0&size=20
Authorization: Bearer sk_live_abc123...Response (200):
json
{
"data": [
{ "id": 1, "name": "Jane Doe", "email": "[email protected]" },
{ "id": 2, "name": "John Smith", "email": "[email protected]" }
],
"meta": {
"page": 0,
"size": 20,
"totalElements": 150,
"totalPages": 8
}
}See Pagination & Sorting for details on paging and sort parameters.
Get a Single Record
http
GET /api/v1/acme-corp/sales/Customer/42
Authorization: Bearer sk_live_abc123...Response (200):
json
{
"data": {
"id": 42,
"name": "Jane Doe",
"email": "[email protected]",
"age": 30
}
}Returns 404 if the record doesn't exist.
Create a Record
http
POST /api/v1/acme-corp/sales/Customer
Authorization: Bearer sk_live_abc123...
Content-Type: application/json
{
"name": "Jane Doe",
"email": "[email protected]",
"age": 30
}Response (201):
json
{
"data": {
"id": 43,
"name": "Jane Doe",
"email": "[email protected]",
"age": 30
}
}The id is generated automatically. Fields not included in the request default to null (if the column allows it).
Update a Record
http
PUT /api/v1/acme-corp/sales/Customer/42
Authorization: Bearer sk_live_abc123...
Content-Type: application/json
{
"name": "Jane Smith",
"email": "[email protected]"
}Response (200):
json
{
"data": {
"id": 42,
"name": "Jane Smith",
"email": "[email protected]",
"age": 30
}
}Only the fields you include are updated. Omitted fields keep their current values.
Delete a Record
http
DELETE /api/v1/acme-corp/sales/Customer/42
Authorization: Bearer sk_live_abc123...Response: 204 No Content
Returns 404 if the record doesn't exist.
Relationships
If your entities have relationships (e.g., an Order belongs to a Customer), you can include related data in responses using the expand query parameter and control which fields are returned with fields.
See Expanding Relationships and Field Selection for details.
Schema Migrations
When an admin changes a column type or adds constraints, a schema migration runs on the underlying database table. During this time, requests to the affected entity may return 503 Service Unavailable:
json
{
"error": {
"code": "SCHEMA_MIGRATION_IN_PROGRESS",
"message": "Table 'Customer' is currently being migrated. Please retry after the migration completes."
},
"retryAfterSeconds": 15
}The response includes a Retry-After header. Wait the specified number of seconds and retry.
Depending on the migration type, reads may still work while writes are blocked. Check the blocksReads and blocksWrites fields in the error response to determine which operations are affected. See Errors for the full response format.
Content Type
All request bodies must use Content-Type: application/json. Dates are formatted as ISO 8601 strings (2026-01-15T10:30:00Z).