The API has two endpoints: GET for reading data and POST for creating, updating, and deleting records.
Read records from any accessible table with pagination, search, and filtering.
| Parameter | Required | Default | Description |
|---|---|---|---|
table | Yes | - | Table name (e.g., 'product', 'order', 'user') |
page | No | 1 | Page number |
pageSize | No | 20 | Records per page (max 100) |
search | No | '' | Search term |
ofield | No | 'updatedAt' | Sort field |
odir | No | 'desc' | Sort direction: 'asc' or 'desc' |
filters | No | - | JSON-encoded filter array |
category | No | - | Filter by category |
tags | No | - | Comma-separated tags |
All GET requests require the Authorization header:
Authorization: Bearer lbkey_GENERATED_KEYhttps://www.linkbase.house/api/v1/data?table=order&page=1&pageSize=10
https://www.linkbase.house/api/v1/data?table=order&id=YOUR_RECORD_IDhttps://www.linkbase.house/api/v1/data?table=product&search=coffee&pageSize=5
Pass a JSON array as the filters parameter. Each filter needs filterKey, filterOp, and filterValue.
https://www.linkbase.house/api/v1/data?table=product&filters=[{"filterKey":"status","filterOp":"EQUALS","filterValue":"live"}]The search parameter matches against searchable fields, including nested ones like customer name and email on orders.
https://www.linkbase.house/api/v1/data?table=order&search=prospect@example.com&pageSize=5
200{
"data": [
{ "id": "abc123", "number": "ORD-001", "status": "completed", ... }
],
"meta": { "total": 42, "page": 1, "pageSize": 10, "totalPages": 5, "hasMore": true }
}Create, update, or delete records. The action field determines the operation.
| Field | Type | Description |
|---|---|---|
tableName | string | Target table name |
action | string | create, update, or delete |
data | object | Record data. Include id for update/delete. |
Successful write operations trigger webhooks and other side effects (e.g., cache invalidation) by default. This is controlled by the enableSideEffects setting on each API key. Disable it if your key is used for bulk imports or migrations where you don't want webhook noise.
All POST requests use the same URL with these headers:
POST https://www.linkbase.house/api/v1/data
Authorization: Bearer lbkey_GENERATED_KEY
Content-Type: application/json{
"tableName": "user",
"action": "create",
"data": { "name": "Jane Doe", "email": "jane@example.com" }
}201{
"data": { "id": "cuid123", "name": "Jane Doe", "email": "jane@example.com", ... }
}{
"tableName": "user",
"action": "update",
"data": { "id": "YOUR_RECORD_ID", "accountBalance": 50.00 }
}{
"tableName": "user",
"action": "delete",
"data": { "id": "YOUR_RECORD_ID" }
}{ "data": [...], "meta": { "total": 42, "page": 1, "pageSize": 20 } }{ "data": { ... } }{ "error": { "code": "FORBIDDEN", "message": "No permission for table 'order' action 'delete'" } }