Skip to main content
Appenda
Sign inDownload

See what changed in the API.

Every change to the public API is listed here by date, newest first. For changes to the desktop app, see Release notes.

Versions and deprecations

New operations, optional fields and enum values can arrive at any time, so ignore what you do not know. A breaking change is deprecated first: the deprecated operation keeps working for at least 90 days, answering with Deprecation and Sunset headers. The full policy, with stability levels and header formats, is on Versioning.

2026-11-11

Changed

  • A run group takes up to 60 enrichment fields, one for each enrichment column a table can now have, and up to 6,000,000 calls. Its stages and each stage's depends_on can hold up to 60 items.

2026-11-10

Added

  • A bot's provider_kind and an agent request's via_agent.kind take antigravity, for Google Antigravity.

2026-11-09

Added

  • A bot's provider_kind and an agent request's via_agent.kind take grok, for Grok Build.

2026-11-08

Added

  • A bot's provider_kind and an agent request's via_agent.kind take gemini, for Gemini CLI, and github_copilot, for GitHub Copilot CLI.

2026-11-07

Changed

  • Start a list import needs a signed-in session for now, so it has left the API reference. An API token is refused 401 with session_required, on a dry_run too, and nothing is charged. A token's import was charged and then wrote no records. Starting one with a token comes back once imports write their records on the server. Get a list import, List list imports and Stop a list import still take a token.

2026-11-05

Changed

  • List records and Search records stop a page near 4 MiB instead of refusing it with response_too_large, so a page of wide records can hold fewer than limit items while meta.has_more is true. Follow meta.next_cursor as usual.
  • Add a block answers 201, like every other create (it answered 200).
  • A block's layout.height is optional and deprecated: a block is as tall as its content, and no view uses the value. Update a block and the other block routes are now titled Add a block, Update a block, Move a block and Delete a block.

2026-11-04

Changed

  • Role refusals name the failure: role_change_denied, role_name_taken, role_protected, role_limit_reached and role_invalid replace denied, name_taken, protected, limit and invalid, at the same statuses.
  • The Errors table lists only the codes an API token can meet. Sign-in, trial, billing and invitation codes answered only to Appenda's apps are left out.
  • force_confirmation_required says to send confirm_force: true, and output_path_empty asks for a dotted path.

2026-11-03

Changed

  • Get provider usage is now Get credit usage, under Credits.
  • Whose key paid is one vocabulary. Get a run's and Get a list import's credits.key_source, and usage key_source, answer appenda or own (they answered appenda_credits / own_api_key and managed / byok).

Added

  • A run reads the same in Start a run, Get a run and List runs: each answers object: "run" and record_count. Get a run and List runs also name the table_id, field_id, provider and action. Get a run counts its records as records_done, records_found, records_empty, records_skipped and records_failed, and documents outcome_class_counts and waiting_for.
  • Stop a multi-field run is POST /v1/run-groups/{group_id}/stop, the way every other job stops.
  • Credit amounts have a JSON number beside each integer: the balance's available_decimal, plan_allotment_decimal, rollover_decimal, used_this_period_decimal and spend_cap.monthly_credits_decimal, a transaction's credits_decimal, usage credits_decimal, and a run's or list import's credits.estimated_decimal and credits.used_decimal. They equal the integers today, since credits are charged whole.
  • A credit transaction answers created_at.
  • Integrations and actions list the keys they run on as key_sources: ["appenda", "own"]; key_source (either) is deprecated.
  • Counts name records, not rows: records_added, records_read, records_to_add, records_done, records_found, records_to_create, records_to_update and usage record_count sit beside the deprecated rows_* names, which keep their values until at least 2027-02-01.
  • A human label is name: an integration's actions and an action's inputs answer name beside label, and a CSV import mapping that creates a field takes name (label still works; send one of the two).
  • Start a run and Preview a run take credential_id alone to run on that key; credential_source is no longer needed with it.

Deprecated

  • requested_rows on a run (use record_count), and Get a run's completed_rows, succeeded_rows, no_result_rows, skipped_rows, failed_rows and needs_review_rows (use the records_* counts). They keep their values until at least 2027-02-01.
  • DELETE /v1/run-groups/{group_id} (now titled Stop a run group). It keeps working until at least 2027-02-01 and answers Deprecation and Sunset headers.
  • A credit transaction's at (use created_at), until at least 2027-02-01.
  • label on integration actions, action inputs and CSV import mappings, and provider_id / method_id on an enrichment field's configuration (use provider and action). They keep working until at least 2027-02-01.

2026-11-02

Changed

  • Start a CSV import answers 202 instead of 201, with a Location header naming the import. Poll it with Get a CSV import. A held start answers 202 too, with the approval in the body.
  • Import a CSV is deprecated in favour of the CSV import job (Start a CSV import). It keeps working until at least 2027-02-01 and answers Deprecation and Sunset headers.
  • A held Start a list import is now documented: it answers 202 with the approval to poll in Location. A start that runs still answers 201.
  • A CSV import reports status (running, succeeded or stopped), in the same words as runs and list imports; state is deprecated. Start a list import answers the import's id; job_id is deprecated.

2026-10-31

Changed

  • Previewing or starting a run on a field that uses the workspace's default key, when the workspace has no key for that integration, answers 422 own_key_required instead of 403 forbidden. Add the key in Settings → Integrations and retry. A run group answers the same when none of its fields has a key, and leaves out the fields without one (listed in skipped).
  • A run group, a run preview or a run start with a field whose action isn't priced per record on Appenda credits answers 422 credits_unavailable, with param naming the field, instead of 403 forbidden. An automatic run on such a field stops with the reason credits_unavailable.

2026-10-22

Added

2026-10-21

Added

  • Idempotency-Key is optional on every write. An identical request within 10 minutes is answered with the first response instead of acting twice.
  • Without an Idempotency-Key, creating a table, field or view that already exists with the same definition returns the existing one.
  • Guide pages for authentication, conventions, pagination, errors, rate limits, credits and this changelog.

Changed

  • The reference lists only operations an API key can call, each with a short title, a description and an example.
  • Errors are documented once, on Errors, instead of on every operation.

FAQs

Will my integration break without warning?
No. A breaking change is deprecated first, and a deprecated operation keeps working for at least 90 days.
How do I hear about changes?
Check this page. Deprecated operations also answer with Deprecation and Sunset headers.