canonical: https://jentic.com/apis/coda.io/coda

# Coda API

The Coda API lets developers and AI agents interact with Coda docs the same way the editor does - listing and creating docs, sharing and publishing them, walking the page tree, and reading or writing rows in tables. It also exposes formulas, controls, automations, packs, analytics, account whoami, and ACL management for fine-grained sharing. Coda publishes the spec at coda.io/apis/v1/openapi.json and authenticates with Bearer API tokens that can optionally be restricted to specific docs, tables, or read/write scopes.

## For AI agents

Read and write Coda doc rows, manage pages and tables, share and publish docs, and inspect formulas, controls and automations across 124 endpoints.

## Scope

Does not run Coda Pack code, send Coda automation triggers from outside the doc, or replace the doc editor - use for reading and writing Coda doc rows, pages, and ACLs only.

## Capabilities

- List, search, create, copy, and delete Coda docs via the /docs endpoints
- Read, insert, upsert, update, and delete table rows via /docs/{docId}/tables/{tableIdOrName}/rows
- Walk the page tree, fetch page content, and export pages via /docs/{docId}/pages and /export
- Manage doc sharing and permissions through /docs/{docId}/acl/permissions and /acl/settings
- Publish or unpublish a doc with PUT and DELETE /docs/{docId}/publish
- Inspect formulas, controls, and column definitions across a doc to power agentic workflows

## Use cases

### Two-Way Sync Between Coda and a Backend

Keep a Coda table and an internal database aligned by reading rows on a schedule and writing changes back. POST /docs/{docId}/tables/{tableIdOrName}/rows supports insert and upsert, GET on the same path streams rows with pagination, and the X-Coda-Doc-Version header forces a fresh read when staleness is unacceptable. Most teams stand up a working sync in well under a day.

Example prompt: Upsert a list of order rows into the 'Orders' table via POST /docs/{docId}/tables/Orders/rows with keyColumns set to ['order_id'].

### Doc Sharing and Publishing Automation

Programmatically share new docs with the right teams and publish customer-facing docs. POST /docs/{docId}/acl/permissions adds a principal, GET /docs/{docId}/acl/permissions lists the current ACL, and PUT /docs/{docId}/publish takes the doc public with optional discoverability controls. Useful for templated workspace provisioning when a new project starts.

Example prompt: Add the email alex@example.com as an editor on doc id abc123 by POSTing to /docs/abc123/acl/permissions.

### Page and Content Export

Pull doc content out of Coda for use in another system - a wiki migration, a static site, or an LLM ingestion pipeline. POST /docs/{docId}/pages/{pageIdOrName}/export starts an export, GET on the matching /export/{requestId} polls until it is ready, and GET /docs/{docId}/pages/{pageIdOrName}/content returns the live page content. Combined this gives a deterministic, version-pinned snapshot.

Example prompt: Begin an export of page 'Roadmap' via POST /docs/{docId}/pages/Roadmap/export, then poll the resulting /export/{requestId} until status is complete.

### Doc Templates and Workspace Onboarding

Spin up a new Coda doc from a template each time a project starts. POST /docs creates a doc (optionally cloning from an existing doc id), PATCH /docs/{docId} renames or moves it, and the ACL endpoints share it with the right people in one go. Repeatable in seconds with a single workflow.

Example prompt: Create a new Coda doc from sourceDoc id template-doc-id via POST /docs and rename it to 'Q3 Planning' with PATCH /docs/{docId}.

### AI Agent Coda Workflows via Jentic

An AI assistant uses Jentic to read and write Coda rows on behalf of a user without storing the Bearer token. The agent searches for 'insert a row into a Coda table', loads the schema for POST /docs/{docId}/tables/{tableIdOrName}/rows, and executes - Jentic injects the API token from the vault and respects scoped tokens that limit the agent to specific docs or tables.

Example prompt: Use Jentic to search for 'insert a Coda row', load the POST /docs/{docId}/tables/{tableIdOrName}/rows schema, and add a row to the 'Inbox' table.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /docs | List available docs |
| POST | /docs | Create a new doc |
| GET | /docs/{docId}/tables/{tableIdOrName}/rows | List rows in a table |
| POST | /docs/{docId}/tables/{tableIdOrName}/rows | Insert or upsert rows |
| POST | /docs/{docId}/acl/permissions | Share a doc by adding a permission |
| PUT | /docs/{docId}/publish | Publish a doc to the web |
| POST | /docs/{docId}/pages/{pageIdOrName}/export | Begin a page content export |

## Key resources

- **Docs** — List, create, copy, share, publish, and inspect Coda docs
- **Pages** — Walk the page tree, read content, update, delete, and export pages
- **Tables and Columns** — Inspect tables and their column definitions
- **Rows** — Read, insert, upsert, update, and delete rows in a table
- **ACL** — Manage permissions and sharing settings on a doc
- **Formulas and Controls** — Inspect named formulas and control values inside a doc
- **Mutations** — Track the status of asynchronous edits via /mutationStatus

## Why Jentic

- **Setup:** Wiring Coda by hand means learning its bearer auth, targeting coda.io/apis/v1, and handling paging and retries across a large doc-manipulation surface yourself. Through Jentic you install once, import the Coda API from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** Coda puts the doc id in the URL path (/docs/{docId}/...), so a rule can pin your agent to one doc for reading and writing its rows. You choose the operations it may call, so ones that change sharing or visibility like editing ACL permissions or publishing are not included unless you add them.
- **Credential handling:** Your Coda token is stored once, encrypted, by your own Jentic One instance and added to the Authorization header at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'insert a Coda row' or 'share a Coda doc', and Jentic returns the matching Coda operation with its parameter schema so the agent builds a row payload without reading the full reference.

## Related APIs

- **Notion** — Notion is a competing block-based docs and database platform with a similar API surface.
- **Airtable** — Airtable is a database-first competitor with strong relational and view tooling.
- **ClickUp** — ClickUp handles task and project management for teams using Coda for narrative docs.
- **monday.com** — monday.com is a work-management platform that often pairs with Coda for documentation.

## FAQ

### What authentication does the Coda API use?

The Coda API uses HTTP Bearer authentication with a UUID-format API token created at https://coda.io/account. Tokens can be restricted by object (specific docs or tables) and by operation (read, write, or both). Through Jentic the token is stored encrypted in the vault and added to the Authorization header at execution time.

### Can I insert and upsert rows into a Coda table?

Yes. POST /docs/{docId}/tables/{tableIdOrName}/rows accepts a list of rows for insert, and the same endpoint supports upsert via the keyColumns parameter. Writes are asynchronous - the response returns 202 with a requestId you can pass to /mutationStatus to confirm the edit was applied.

### What are the rate limits for the Coda API?

Coda enforces per-user rate limits that vary by category (read, write, write-doc-content, list-docs, analytics) and returns 429 when exceeded. The exact numeric limits are not published in the spec and may change, so callers should treat 429 responses as the source of truth and back off with exponential retry.

### How do I share a Coda doc with someone through Jentic?

Search Jentic for 'share a Coda doc', load the POST /docs/{docId}/acl/permissions schema, and execute with the principal email and access level (reader, writer, etc.). Install the SDK with pip install jentic and call it via the async client.

### Can I export a Coda page as Markdown?

Yes. POST /docs/{docId}/pages/{pageIdOrName}/export starts an export job with the desired output format, and GET /docs/{docId}/pages/{pageIdOrName}/export/{requestId} polls for completion and returns the download link. Use this for wiki migrations or LLM ingestion.

### Why do my row writes return 202 instead of 200?

Coda processes mutations asynchronously to keep edits consistent with collaborator changes. The 202 response includes a requestId; pass it to the mutation status endpoint to find out whether the edit succeeded, failed, or is still pending. Plan around a few seconds of write latency.

### Can I limit what my agent is allowed to do with the Coda API?

Yes. Because you run Jentic One yourself, your own rules decide which Coda operations and credentials the agent may use. Since Coda puts the doc id in the URL path (/docs/{docId}/...), a rule can pin the agent to a single doc and restrict it to reading and writing that doc's rows. Operations that change sharing or visibility, such as editing ACL permissions via /docs/{docId}/acl/permissions or publishing a doc, stay excluded unless you add them.
