Skip to main content
Appenda
Sign inDownload

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

ValueFormat
IdsOpaque 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.
TimestampsRFC 3339 strings in UTC, such as 2026-10-21T14:03:12.000Z
Missing valuesnull
Numbers and booleansJSON numbers and JSON true or false, never strings
Property namessnake_case, such as created_at
Enum valuessnake_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 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.

FAQs

Why was my request refused for a field I did not mean to send?
Requests are strict: any field an operation does not know is refused with 422. Check the spelling against the API reference.
Are timestamps in my time zone?
No. Every timestamp is UTC, marked with a trailing Z. Convert to local time in your client.