Docs
Call the API
Create the table in the dashboard, copy the project key, then call REST. Paths use your project slug and table slug. The examples below use the demo shop and customers.
Authentication
Send the key on every request. Browser calls are allowed. A missing key and a wrong key are both rejected.
Authorization: Bearer sk_live_… Content-Type: application/json
Endpoints
| Method | Path | What it does |
|---|---|---|
| GET | /api/v1/shop/customers | List every row. Returns data and count. |
| POST | /api/v1/shop/customers | Create a row. Send the field slugs as JSON. |
| GET | /api/v1/shop/customers/:id | Read one row. |
| PATCH | /api/v1/shop/customers/:id | Change only the fields you send. |
| DELETE | /api/v1/shop/customers/:id | Remove one row. The body is empty. |
List rows
curl https://asaanapi.com/api/v1/shop/customers \
-H "Authorization: Bearer sk_live_…"
{
"data": [
{
"id": "ac18fefd335ce6dd",
"email": "ada@example.com",
"name": "Ada",
"createdAt": "2026-09-20T17:29:32.497Z",
"updatedAt": "2026-09-20T17:29:32.497Z"
}
],
"count": 1
}Filter and page
Add a field slug to keep rows where that value matches exactly. count is the full match, and data is the page. limit is 1 to 100. offset skips that many matches. sort is a field slug, id, createdAt, or updatedAt. order is asc or desc.
curl "https://asaanapi.com/api/v1/shop/customers?name=Ada&sort=name&order=asc&limit=20" \ -H "Authorization: Bearer sk_live_…"
Search
q keeps rows whose id or any field contains that text, ignoring case. It stacks with exact field filters, sort, and paging. count is the number of matches before the page is cut. A blank q is ignored. q is always search, even when a field uses that slug. The same box is on the Records tab.
curl "https://asaanapi.com/api/v1/shop/customers?q=ada&limit=20" \ -H "Authorization: Bearer sk_live_…"
Create a row
The body uses field slugs. Text is a string, number is a JSON number, and boolean is true or false. Required fields must be present. A field that is not on the table is rejected.
curl https://asaanapi.com/api/v1/shop/customers \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"email":"lee@example.com","name":"Lee"}'
201
{
"id": "39b67a6acdb831af",
"email": "lee@example.com",
"name": "Lee",
"createdAt": "2026-09-24T20:51:51.462Z",
"updatedAt": "2026-09-24T20:51:51.462Z"
}Update and delete
curl -X PATCH https://asaanapi.com/api/v1/shop/customers/39b67a6acdb831af \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"name":"Leah"}'
curl -X DELETE https://asaanapi.com/api/v1/shop/customers/39b67a6acdb831af \
-H "Authorization: Bearer sk_live_…"PATCH returns the updated row. DELETE returns 204 and an empty body.
Errors
- 401 Missing Authorization Bearer token, or the key does not belong to that project.
- 400 The body is not JSON.
- 404 The table or the row does not exist.
- 422 A required field is missing, the type is wrong, or the field is unknown.
- 429 The project is over its monthly request limit.
Limits
Free is 1 project, 5 tables, and 50,000 requests a month. Pro is 10 projects, 25 tables each, and 1,000,000 requests a month. Each REST call counts. The dashboard shows the latest calls.
Start free