Know the shapes before you call.
Every operation follows the same rules for addresses, values and bodies. Learn them once here.
Base URL and paths
The base URL is https://api.appenda.app/v1. The workspace comes from your
key, never from the path:
curl https://api.appenda.app/v1/tables/tbl_67ad65ba34a7bbfc643711b8531cba3f \
-H "Authorization: Bearer $APPENDA_API_KEY"
The version is part of the path; see Versioning.
Values
| Value | Format |
|---|---|
| Ids | Opaque strings with a type prefix, such as ws_2e056e042c3953f816e10bb208432f9e or tbl_67ad65ba34a7bbfc643711b8531cba3f. An object made in the desktop app keeps its own id (table_…), so do not parse ids or match their prefix or length. |
| Timestamps | RFC 3339 strings in UTC, such as 2026-10-21T14:03:12.000Z |
| Missing values | null |
| Numbers and booleans | JSON numbers and JSON true or false, never strings |
| Property names | snake_case, such as created_at |
| Enum values | snake_case, such as single_select |
An id from another workspace answers 404, the same as an id that does not
exist.
Date-time values, such as since and until, are read at their explicit
offset. Responses use UTC with a trailing Z. Date-only values use
YYYY-MM-DD and stay on that calendar day.
A filter on a date field compares calendar days: it takes YYYY-MM-DD or a
relative date such as past_7_days, and refuses a time. On a field with a time,
a day runs midnight to midnight in your workspace's time zone. Relative dates,
such as "today", also follow its calendar and week-start setting. A workspace
without a regional setting uses UTC and a Monday week start.
Responses
A single object comes back as {"data": {...}}. A list comes back as
{"data": [...], "meta": {"next_cursor": null, "has_more": false}}; see
Pagination. Bulk writes may return counts in meta.
Responses grow. New fields and new enum values can appear at any time, so make your client ignore what it does not know.
Search
Search works inside one table. Search records takes a search text that
matches, ignoring case, across the table's text fields, together with an
optional filter and sort. There is no search across several tables: to find a
company in every table, search each table in turn.
What each field type holds, and what happens to values when a type changes, is on Field types.
Requests
- Send bodies as
application/json. - A body may nest at most 16 levels deep and contain at most 96 KiB. A larger
body is refused with
413. - An unknown field is refused with
422, so a typo never passes silently. - A record write takes at most 100 records and 256 KiB once written.
- Before retrying a write, see Retry safely.