> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Coda

The Coda connector lets your AI agent act in each user's Coda account. Each user connects their own Coda access token once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 37 tools.

**Authentication:** Bearer Token
**Categories:** Productivity, Files & Documents, Collaboration
**Tools:** 37: 26 read, 11 write, 0 destructive
**Users sign in with:** Access token
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=CODA)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Coda connection

   In **AgentKit > Connections**, create a Coda connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'coda'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Coda:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'coda_current_user_get',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "coda"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Coda:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="coda_current_user_get",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Coda credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'coda_browser_link_resolve',
  toolInput: {
    url: '<url>',
  },
  connector: 'coda',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="coda_browser_link_resolve",
    tool_input={
        "url": "<url>",
    },
    connection_name="coda",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `coda_browser_link_resolve`

Resolve Browser Link · Read-only

Turn a Coda URL copied from the browser into the object it points to (a doc, page, table, row and so on).
Returns the object's type, id, name, API link and browser link.
Use coda_browser_link_resolve when the user gives you a Coda URL and you need IDs for other tools. Use coda_docs_list to find a doc by name instead.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `url` (`string`, required): Coda URL copied from the browser. Example: https://coda.io/d/Launch-Status_dAbCDeFGH/Launch-Status_sumnO.
- `degrade_gracefully` (`boolean`, optional): If true and the linked object was deleted, resolve the nearest object that still exists, up to the doc itself, instead of returning an error. Defaults to false.

Example input: `{"url":"<url>"}`

### `coda_column_get`

Get Column · Read-only

Get details about one column in a Coda table or view.
Returns the column's id, name, whether it is the display column, whether it is calculated and its formula, default value, format (type and options), and parent table.
Use coda_column_get for one column's type and settings. Use coda_columns_list to see all columns in a table.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `column_id_or_name` (`string`, required): ID of the column, e.g. c-tuVwxYz. Get it from coda_columns_list. A column name also works, but Coda discourages names because users can rename columns.
- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `table_id_or_name` (`string`, required): ID of the table or view, e.g. grid-pqRst-U. Get it from coda_tables_list. A table name also works, but Coda discourages names because users can rename tables.

Example input: `{"column_id_or_name":"<column_id_or_name>","doc_id":"<doc_id>","table_id_or_name":"<table_id_or_name>"}`

### `coda_columns_list`

List Columns · Read-only

List the columns of a table or view in a Coda doc.
Returns a page of columns with each column's id, name, whether it is the display column, whether it is calculated (and its formula), default value and format, plus nextPageToken when more exist.
Use coda_columns_list to find column IDs before reading or writing rows. Use coda_column_get for one column's details.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `table_id_or_name` (`string`, required): ID of the table or view, e.g. grid-pqRst-U. Get it from coda_tables_list. A table name also works, but Coda discourages names because users can rename tables.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Defaults to 25. Maximum 100. Example: 10. Default: `25`.
- `page_token` (`string`, optional): Opaque token for the next page of results. Pass the nextPageToken value from the previous response; leave empty for the first page.
- `visible_only` (`boolean`, optional): If true, return only visible columns. Applies to base tables only, not views. Defaults to false.

Example input: `{"doc_id":"<doc_id>","table_id_or_name":"<table_id_or_name>"}`

### `coda_control_get`

Get Control · Read-only

Get one control in a Coda doc, including its type and current value.
Returns the control's id, name, parent page, control type (such as button, slider, select or date picker) and value.
Use coda_control_get to read a control's current value. Use coda_controls_list to find the control ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `control_id_or_name` (`string`, required): ID of the control, e.g. ctrl-cDefGhij. Get it from coda_controls_list. A control name also works, but Coda discourages names because users can rename controls.
- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).

Example input: `{"control_id_or_name":"<control_id_or_name>","doc_id":"<doc_id>"}`

### `coda_controls_list`

List Controls · Read-only

List the controls (buttons, sliders, select lists, date pickers and other inputs) in a Coda doc.
Returns a page of controls with each control's id, name and parent page, plus nextPageToken when more exist.
Use coda_controls_list to find a control ID. Use coda_control_get to read a control's type and current value.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `limit` (`integer`, optional): Maximum number of results to return in one page. Defaults to 25. Example: 10. Default: `25`.
- `page_token` (`string`, optional): Opaque token for the next page of results. Pass the nextPageToken value from the previous response; leave empty for the first page.
- `sort_by` (`string`, optional): Sort order for the results. The only supported value is `name` (alphabetical). Leave empty for the default order. One of: `name`.

Example input: `{"doc_id":"<doc_id>"}`

### `coda_current_user_get`

Get Current User · Read-only

Get the Coda user that the connected API token belongs to.
Returns the user's name, email login, picture link, home workspace, the token's name, and whether the token is scoped (restricted to certain docs or to read-only access).
Use coda_current_user_get to confirm which account is connected or to get the user's workspace ID for coda_folder_create or coda_docs_list.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `coda_doc_acl_settings_get`

Get Doc ACL Settings · Read-only

Get a Coda doc's doc-wide sharing settings.
Returns whether editors can change permissions, whether viewers can copy the doc, and whether viewers can request editing access.
Use coda_doc_acl_settings_get for doc-wide sharing rules. Use coda_doc_permissions_list for the individual people and groups with access.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).

Example input: `{"doc_id":"<doc_id>"}`

### `coda_doc_get`

Get Doc · Read-only

Get metadata for one Coda doc by its ID.
Returns the doc's id, name, owner, browser link, icon, created and updated times, folder, workspace, publishing settings, and size counts (pages, tables, rows).
Use coda_doc_get when you already have a doc ID. Use coda_docs_list to find a doc by name or browse the docs you can access.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).

Example input: `{"doc_id":"<doc_id>"}`

### `coda_doc_permissions_list`

List Doc Permissions · Read-only

List who a Coda doc is shared with and at what access level.
Returns a page of permissions with each permission's id, principal (an email, group, domain, workspace or anyone) and access (readonly, comment or write), plus nextPageToken when more exist.
Use coda_doc_permissions_list to audit a doc's sharing. Use coda_doc_acl_settings_get for doc-wide sharing settings, or coda_doc_sharing_metadata_get for what the user is allowed to share.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `limit` (`integer`, optional): Maximum number of results to return in one page. Defaults to 25. Example: 10. Default: `25`.
- `page_token` (`string`, optional): Opaque token for the next page of results. Pass the nextPageToken value from the previous response; leave empty for the first page.

Example input: `{"doc_id":"<doc_id>"}`

### `coda_doc_principals_search`

Search Doc Principals · Read-only

Search for users and groups that a Coda doc can be shared with, by name or email.
Returns up to 20 matching users (name, email login, picture) and up to 20 groups (id and name).
Use coda_doc_principals_search to look up a person or group before sharing a doc. Use coda_doc_permissions_list to see who the doc is already shared with.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `query` (`string`, required): Name or email to search for. Example: jane or jane@example.com. An empty query returns no results.

Example input: `{"doc_id":"<doc_id>","query":"<query>"}`

### `coda_doc_sharing_metadata_get`

Get Doc Sharing Metadata · Read-only

Get what the current user is allowed to do when sharing a Coda doc.
Returns booleans for whether the user can share the doc, share it with the workspace, share it with the organization, and copy it.
Use coda_doc_sharing_metadata_get to check sharing rights before sharing. Use coda_doc_permissions_list to see who already has access.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).

Example input: `{"doc_id":"<doc_id>"}`

### `coda_docs_list`

List Docs · Read-only

List the Coda docs the user can access and has opened at least once, most recently used first, optionally filtered by owner, folder, workspace, starred or published state, or a search term.
Returns a page of docs with each doc's id, name, owner, browser link, folder, workspace and created and updated times, plus nextPageToken when more results exist.
Use coda_docs_list to browse or find a doc by name. Use coda_doc_get when you already have the doc ID, or coda_browser_link_resolve when you have a doc URL.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `folder_id` (`string`, optional): Return only docs in this folder. Folder IDs start with fl-, e.g. fl-1Ab234; get them from coda_folders_list.
- `in_gallery` (`boolean`, optional): If true, return only docs visible in the Coda gallery.
- `is_owner` (`boolean`, optional): If true, return only docs the user owns.
- `is_published` (`boolean`, optional): If true, return only published docs.
- `is_starred` (`boolean`, optional): If true, return only starred docs; if false, only docs that are not starred. Leave empty for both.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Defaults to 25. Example: 10. Default: `25`.
- `minimum_access` (`string`, optional): Return only docs where the user has at least this access level: `readonly`, `comment`, or `write` (write covers editors and managers). One of: `readonly`, `comment`, `write`.
- `page_token` (`string`, optional): Opaque token for the next page of results. Pass the nextPageToken value from the previous response; leave empty for the first page.
- `query` (`string`, optional): Search term matched against doc titles. Example: Roadmap.
- `source_doc` (`string`, optional): Return only docs copied from this source doc ID. Example: AbCDeFGH.
- `workspace_id` (`string`, optional): Return only docs in this workspace. Workspace IDs start with ws-, e.g. ws-1Ab234; coda_current_user_get returns the user's workspace.

Example input: `{}`

### `coda_folder_children_list`

List Folder Children · Read-only

List the direct subfolders of a Coda folder.
Returns a page of subfolders with each one's id, name, description, visibility, created time, edit permission, workspace and browser link, plus restrictedFolderIds for subfolders the user can't open, and nextPageToken when more exist.
Use coda_folder_children_list to walk a folder tree. Use coda_docs_list with folder_id for the docs in a folder.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `folder_id` (`string`, required): ID of the folder, e.g. fl-1Ab234. Get it from coda_folders_list.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Defaults to 25. Example: 10. Default: `25`.
- `page_token` (`string`, optional): Opaque token for the next page of results. Pass the nextPageToken value from the previous response; leave empty for the first page.

Example input: `{"folder_id":"<folder_id>"}`

### `coda_folder_get`

Get Folder · Read-only

Get details about one Coda folder.
Returns the folder's id, name, description, icon, icon color, created time, whether the user can edit it, workspace and browser link.
Use coda_folder_get when you have a folder ID. Use coda_folders_list to find one, or coda_docs_list with folder_id for the docs inside it.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `folder_id` (`string`, required): ID of the folder, e.g. fl-1Ab234. Get it from coda_folders_list.

Example input: `{"folder_id":"<folder_id>"}`

### `coda_folders_list`

List Folders · Read-only

List the Coda folders the user can access, optionally only those in one workspace or only starred ones.
Returns a page of folders with each folder's id, name, description, icon, created time, edit permission, workspace and browser link, plus nextPageToken when more exist.
Use coda_folders_list to find a folder ID. Use coda_folder_children_list for the subfolders of one folder, or coda_docs_list with folder_id for the docs in it.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `is_starred` (`boolean`, optional): If true, return only starred folders; if false, only folders that are not starred. Leave empty for all.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Defaults to 25. Example: 10. Default: `25`.
- `page_token` (`string`, optional): Opaque token for the next page of results. Pass the nextPageToken value from the previous response; leave empty for the first page.
- `workspace_id` (`string`, optional): Return only folders in this workspace, e.g. ws-1Ab234. coda_current_user_get returns the user's workspace.

Example input: `{}`

### `coda_formula_get`

Get Formula · Read-only

Get one named formula in a Coda doc, including its current computed value.
Returns the formula's id, name, parent page and value.
Use coda_formula_get to read a formula's result. Use coda_formulas_list to find the formula ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `formula_id_or_name` (`string`, required): ID of the named formula, e.g. f-fgHijkLm. Get it from coda_formulas_list. A formula name also works, but Coda discourages names because users can rename formulas.

Example input: `{"doc_id":"<doc_id>","formula_id_or_name":"<formula_id_or_name>"}`

### `coda_formulas_list`

List Formulas · Read-only

List the named formulas in a Coda doc.
Returns a page of formulas with each formula's id, name and parent page, plus nextPageToken when more exist.
Use coda_formulas_list to find a formula ID. Use coda_formula_get to read a formula's current value.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `limit` (`integer`, optional): Maximum number of results to return in one page. Defaults to 25. Example: 10. Default: `25`.
- `page_token` (`string`, optional): Opaque token for the next page of results. Pass the nextPageToken value from the previous response; leave empty for the first page.
- `sort_by` (`string`, optional): Sort order for the results. The only supported value is `name` (alphabetical). Leave empty for the default order. One of: `name`.

Example input: `{"doc_id":"<doc_id>"}`

### `coda_mutation_status_get`

Get Mutation Status · Read-only

Check whether an asynchronous Coda write (such as a row insert, row update, page create or update, button push or automation trigger) has finished.
Returns completed (true or false) and a warning message if the change only partly applied.
Use coda_mutation_status_get with the requestId from a write tool. Status is kept for about a day after the change.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `request_id` (`string`, required): The requestId returned by a write tool such as coda_rows_upsert, coda_row_update, coda_page_create or coda_page_update.

Example input: `{"request_id":"<request_id>"}`

### `coda_page_content_list`

List Page Content · Read-only

Read the content of a page in a Coda doc as a list of content elements (paragraphs, headings, list items and so on) in plain text.
Returns a page of elements with each element's id, type and text, plus nextPageToken when more content exists.
Use coda_page_content_list to read a page's text directly. Use coda_page_export_begin to get the whole page as an HTML or Markdown file, or coda_page_get for page metadata only.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `page_id_or_name` (`string`, required): ID of the page, e.g. canvas-IjkLmnO. Get it from coda_pages_list. A page name also works, but Coda discourages names because users can rename pages, and duplicate names resolve to an arbitrary page.
- `content_format` (`string`, optional): Format to return content in. The only supported value is `plainText` (default). One of: `plainText`. Default: `plainText`.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Defaults to 50. Maximum 500. Example: 10. Default: `50`.
- `page_token` (`string`, optional): Opaque token for the next page of results. Pass the nextPageToken value from the previous response; leave empty for the first page.

Example input: `{"doc_id":"<doc_id>","page_id_or_name":"<page_id_or_name>"}`

### `coda_page_export_status_get`

Get Page Export Status · Read-only

Check the status of a page export started with coda_page_export_begin.
Returns the export id, status (inProgress, complete or failed), a downloadLink for the file once complete, and an error message if it failed.
Use coda_page_export_status_get after coda_page_export_begin, repeating until the status is complete. The download link expires after a short time.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `page_id_or_name` (`string`, required): ID of the page, e.g. canvas-IjkLmnO. Get it from coda_pages_list. A page name also works, but Coda discourages names because users can rename pages, and duplicate names resolve to an arbitrary page.
- `request_id` (`string`, required): The requestId returned by coda_page_export_begin (its id field).

Example input: `{"doc_id":"<doc_id>","page_id_or_name":"<page_id_or_name>","request_id":"<request_id>"}`

### `coda_page_get`

Get Page · Read-only

Get details about one page in a Coda doc.
Returns the page's id, name, subtitle, icon, cover image, content type, hidden state, parent and child pages, authors, created and updated times, and browser link.
Use coda_page_get for a page's metadata. Use coda_page_content_list to read the page's text, or coda_page_export_begin to export it as HTML or Markdown.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `page_id_or_name` (`string`, required): ID of the page, e.g. canvas-IjkLmnO. Get it from coda_pages_list. A page name also works, but Coda discourages names because users can rename pages, and duplicate names resolve to an arbitrary page.

Example input: `{"doc_id":"<doc_id>","page_id_or_name":"<page_id_or_name>"}`

### `coda_pages_list`

List Pages · Read-only

List the pages in a Coda doc, including subpages.
Returns a page of results with each page's id, name, subtitle, icon, content type, hidden state, parent and child pages, and browser link, plus nextPageToken when more pages exist.
Use coda_pages_list to find a page ID. Use coda_page_get for one page's details, or coda_page_content_list to read the text on a page.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `limit` (`integer`, optional): Maximum number of results to return in one page. Defaults to 25. Example: 10. Default: `25`.
- `page_token` (`string`, optional): Opaque token for the next page of results. Pass the nextPageToken value from the previous response; leave empty for the first page.

Example input: `{"doc_id":"<doc_id>"}`

### `coda_row_get`

Get Row · Read-only

Get one row from a Coda table or view.
Returns the row's id, name, index, browser link, created and updated times, parent table, and cell values keyed by column ID (or name).
Use coda_row_get when you already have a row ID. Use coda_rows_list to find rows or filter by a column value.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `row_id_or_name` (`string`, required): ID of the row, e.g. i-tuVwxYz. Get it from coda_rows_list. A row name (the value in the table's display column) also works, but if several rows share that value an arbitrary one is used.
- `table_id_or_name` (`string`, required): ID of the table or view, e.g. grid-pqRst-U. Get it from coda_tables_list. A table name also works, but Coda discourages names because users can rename tables.
- `use_column_names` (`boolean`, optional): If true, the row values are keyed by column name instead of column ID. Coda discourages this because names break when columns are renamed. Defaults to false.
- `value_format` (`string`, optional): Format of the cell values in the response. `simple` (default) returns strings, numbers and booleans, with multi-value cells as comma-separated text; `simpleWithArrays` returns multi-value cells as JSON arrays; `rich` returns lossless structured values (Markdown text, currency and date objects, linked-row references). One of: `simple`, `simpleWithArrays`, `rich`.

Example input: `{"doc_id":"<doc_id>","row_id_or_name":"<row_id_or_name>","table_id_or_name":"<table_id_or_name>"}`

### `coda_rows_list`

List Rows · Read-only

List rows in a Coda table or view, optionally filtered by a column value and sorted by creation, update or natural order.
Returns a page of rows with each row's id, name, index, browser link, created and updated times, and cell values keyed by column ID (or name), plus nextPageToken and nextSyncToken.
Use coda_rows_list to read or search table data. Use coda_row_get when you already have a row ID.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `table_id_or_name` (`string`, required): ID of the table or view, e.g. grid-pqRst-U. Get it from coda_tables_list. A table name also works, but Coda discourages names because users can rename tables.
- `limit` (`integer`, optional): Maximum number of results to return in one page. Defaults to 25. Example: 10. Default: `25`.
- `page_token` (`string`, optional): Opaque token for the next page of results. Pass the nextPageToken value from the previous response; leave empty for the first page.
- `query` (`string`, optional): Filter rows by one column value, written as <column_id_or_name>:<json value>. Column names must be in double quotes and string values must be JSON-quoted. Examples: c-tuVwxYz:"Apple" or "Status":"Done" or c-AbCd:42.
- `sort_by` (`string`, optional): Row order: `createdAt` (default, oldest first), `natural` (the order shown in the table or view in the UI), or `updatedAt` (by last value change). One of: `createdAt`, `natural`, `updatedAt`.
- `sync_token` (`string`, optional): nextSyncToken from a previous full listing. Pass it to get only rows changed since that call.
- `use_column_names` (`boolean`, optional): If true, the row values are keyed by column name instead of column ID. Coda discourages this because names break when columns are renamed. Defaults to false.
- `value_format` (`string`, optional): Format of the cell values in the response. `simple` (default) returns strings, numbers and booleans, with multi-value cells as comma-separated text; `simpleWithArrays` returns multi-value cells as JSON arrays; `rich` returns lossless structured values (Markdown text, currency and date objects, linked-row references). One of: `simple`, `simpleWithArrays`, `rich`.
- `visible_only` (`boolean`, optional): If true, return only visible rows and columns. Defaults to false.

Example input: `{"doc_id":"<doc_id>","table_id_or_name":"<table_id_or_name>"}`

### `coda_table_get`

Get Table · Read-only

Get details about one table or view in a Coda doc.
Returns the table's id, name, type, parent page, parent table (for views), display column, row count, sorts, layout, filter info, created and updated times, and browser link.
Use coda_table_get for a table's metadata. Use coda_columns_list for its columns, or coda_rows_list for its rows.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `table_id_or_name` (`string`, required): ID of the table or view, e.g. grid-pqRst-U. Get it from coda_tables_list. A table name also works, but Coda discourages names because users can rename tables.
- `use_updated_table_layouts` (`boolean`, optional): If true, the layout field reports `detail` and `form` for detail and form layouts instead of `masterDetail` for both. Defaults to false.

Example input: `{"doc_id":"<doc_id>","table_id_or_name":"<table_id_or_name>"}`

### `coda_tables_list`

List Tables · Read-only

List the tables and views in a Coda doc.
Returns a page of results with each table's id, name, type (table or view), parent page and browser link, plus nextPageToken when more exist.
Use coda_tables_list to find a table ID. Use coda_table_get for one table's details such as row count and display column, or coda_rows_list to read its rows.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `limit` (`integer`, optional): Maximum number of results to return in one page. Defaults to 25. Example: 10. Default: `25`.
- `page_token` (`string`, optional): Opaque token for the next page of results. Pass the nextPageToken value from the previous response; leave empty for the first page.
- `sort_by` (`string`, optional): Sort order for the results. The only supported value is `name` (alphabetical). Leave empty for the default order. One of: `name`.
- `table_types` (`string`, optional): Comma-separated list of table types to include: `table`, `view`. Leave empty to include both. Example: table.

Example input: `{"doc_id":"<doc_id>"}`

### `coda_automation_trigger`

Trigger Automation · Write

Run a Coda doc automation whose trigger is set to "Webhook invoked", optionally passing a JSON payload the automation can read.
Returns a requestId; the automation runs asynchronously, so check coda_mutation_status_get with the requestId if you need to confirm.
Use coda_automation_trigger to run a webhook-invoked automation. Use coda_row_button_push to press a button in a table row instead.
The automation must already exist with a Webhook invoked trigger; its rule ID is shown in the automation's settings.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `rule_id` (`string`, required): ID of the automation rule to run, e.g. grid-auto-b3Jmey6jBS. It appears in the doc's automation settings when the rule's trigger is "Webhook invoked".
- `payload` (`object`, optional): JSON object to send to the automation. The automation can read it through Step 1 Result. Leave empty to send an empty object. Example: {"customer": "Acme", "amount": 120}.

Example input: `{"doc_id":"<doc_id>","rule_id":"<rule_id>"}`

### `coda_doc_create`

Create Doc · Write

Create a new Coda doc, either blank or as a copy of an existing doc, optionally in a given folder and with a first page of content.
Returns the new doc's id, name, browser link, owner, folder, workspace and created time.
Use coda_doc_create to start a new doc. Use coda_page_create to add a page to a doc that already exists.
The user must be a Doc Maker in the target workspace.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `folder_id` (`string`, optional): ID of the folder to create the doc in, e.g. fl-1Ab234 (from coda_folders_list). Defaults to the user's personal folder.
- `initial_page_content` (`string`, optional): Content for the doc's first page, written in the format chosen in initial_page_content_format. Ignored when copying a source doc. Example: # Goals\n- Ship v2.
- `initial_page_content_format` (`string`, optional): Format of initial_page_content: `markdown` (default) or `html`. One of: `markdown`, `html`. Default: `markdown`.
- `initial_page_name` (`string`, optional): Name of the doc's first page. Ignored when copying a source doc. Example: Overview.
- `source_doc` (`string`, optional): ID of an existing doc to copy. Leave empty to create a blank doc. Example: AbCDeFGH.
- `timezone` (`string`, optional): IANA time zone for the doc, used for date and time formulas. Example: America/Los_Angeles.
- `title` (`string`, optional): Title of the new doc. Example: Q3 Planning.

Example input: `{}`

### `coda_doc_update`

Update Doc · Write

Rename a Coda doc or change its icon.
Returns an empty object on success.
Use coda_doc_update to change doc-level metadata. Use coda_page_update to change a page's name or content.
Changing the title requires Doc Maker rights in the doc's workspace.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `icon_name` (`string`, optional): Name of a Coda icon to set on the doc, e.g. rocket. Leave empty to keep the current icon.
- `title` (`string`, optional): New title for the doc. Leave empty to keep the current title. Example: Q3 Planning (final).

Example input: `{"doc_id":"<doc_id>"}`

### `coda_folder_create`

Create Folder · Write

Create a new folder in a Coda workspace.
Returns the new folder's id, name, description, created time, workspace and browser link.
Use coda_folder_create to add a folder. Use coda_folder_update to rename an existing one.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the new folder. Example: Marketing.
- `workspace_id` (`string`, required): ID of the workspace to create the folder in, e.g. ws-1Ab234. coda_current_user_get returns the user's workspace.
- `description` (`string`, optional): Description of the folder. Example: Campaign plans and briefs.

Example input: `{"name":"<name>","workspace_id":"<workspace_id>"}`

### `coda_folder_update`

Update Folder · Write

Rename a Coda folder or change its description.
Returns the updated folder's id, name, description, workspace and browser link.
Use coda_folder_update to change a folder's name or description. Use coda_folder_create to add a new folder.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `folder_id` (`string`, required): ID of the folder, e.g. fl-1Ab234. Get it from coda_folders_list.
- `description` (`string`, optional): New description for the folder. Leave empty to keep it.
- `name` (`string`, optional): New name for the folder. Leave empty to keep it. Example: Marketing 2026.

Example input: `{"folder_id":"<folder_id>"}`

### `coda_page_create`

Create Page · Write

Create a new page in a Coda doc, either a canvas page with Markdown or HTML content or a page that embeds an external URL, optionally as a subpage of another page.
Returns the new page's id and a requestId; the page is created asynchronously, so check coda_mutation_status_get with the requestId if you need to confirm it.
Use coda_page_create to add a page to an existing doc. Use coda_page_update to change or add content on an existing page, or coda_doc_create to start a new doc.
The user must be a Doc Maker in the doc's workspace.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `content` (`string`, optional): Content for a canvas page, written in the format chosen in content_format. Ignored for embed pages. Example: # Agenda\n- Review metrics.
- `content_format` (`string`, optional): Format of content: `markdown` (default) or `html`. One of: `markdown`, `html`. Default: `markdown`.
- `embed_render_method` (`string`, optional): How to render the embed: `standard` or `compatibility` (use compatibility if the site doesn't display in standard mode). Only for embed pages. One of: `standard`, `compatibility`.
- `embed_url` (`string`, optional): URL to embed. Required when page_type is `embed`. Example: https://example.com/dashboard.
- `icon_name` (`string`, optional): Name of a Coda icon for the page, e.g. notes.
- `image_url` (`string`, optional): URL of a cover image for the page. Example: https://example.com/cover.png.
- `name` (`string`, optional): Name of the new page. Example: Meeting Notes.
- `page_type` (`string`, optional): Kind of page to create: `canvas` (default) for a normal page with content, or `embed` for a page that shows an external URL (set embed_url). One of: `canvas`, `embed`. Default: `canvas`.
- `parent_page_id` (`string`, optional): ID of an existing page to nest the new page under, e.g. canvas-IjkLmnO (from coda_pages_list). Leave empty for a top-level page.
- `subtitle` (`string`, optional): Subtitle shown under the page name. Example: Weekly sync notes.

Example input: `{"doc_id":"<doc_id>"}`

### `coda_page_export_begin`

Begin Page Export · Write

Start exporting a Coda page's content as an HTML or Markdown file.
Returns an export request id and its status; the export runs asynchronously.
Use coda_page_export_begin to get a page as a file. Then call coda_page_export_status_get with the returned id until the status is complete and a downloadLink is present. Use coda_page_content_list to read page text directly instead.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `output_format` (`string`, required): File format for the export: `markdown` or `html`. One of: `markdown`, `html`.
- `page_id_or_name` (`string`, required): ID of the page, e.g. canvas-IjkLmnO. Get it from coda_pages_list. A page name also works, but Coda discourages names because users can rename pages, and duplicate names resolve to an arbitrary page.

Example input: `{"doc_id":"<doc_id>","output_format":"markdown","page_id_or_name":"<page_id_or_name>"}`

### `coda_page_update`

Update Page · Write

Update a page in a Coda doc: rename it, change its subtitle, icon, cover image or hidden state, and append, prepend or replace its content with Markdown or HTML.
Returns the page id and a requestId; the update is applied asynchronously, so check coda_mutation_status_get with the requestId if you need to confirm it.
Use coda_page_update to edit an existing page. Use coda_page_create to add a new page, or coda_doc_update to rename the doc itself.
Changing the page name or icon requires Doc Maker rights in the doc's workspace.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `page_id_or_name` (`string`, required): ID of the page, e.g. canvas-IjkLmnO. Get it from coda_pages_list. A page name also works, but Coda discourages names because users can rename pages, and duplicate names resolve to an arbitrary page.
- `content` (`string`, optional): New content to write to the page, in the format chosen in content_format. Leave empty to leave the content unchanged. Example: ## Action items\n- Send recap.
- `content_format` (`string`, optional): Format of content: `markdown` (default) or `html`. One of: `markdown`, `html`. Default: `markdown`.
- `element_id` (`string`, optional): ID of a content element on the page (from coda_page_content_list) to insert relative to, instead of the start or end of the page. Only used when content is set.
- `icon_name` (`string`, optional): Name of a Coda icon to set on the page, e.g. notes. Leave empty to keep it.
- `image_url` (`string`, optional): URL of a new cover image for the page. Leave empty to keep it.
- `insertion_mode` (`string`, optional): Where to put the new content: `append` (default) adds it at the end, `prepend` at the start, and `replace` overwrites the existing page content. Only used when content is set. One of: `append`, `prepend`, `replace`. Default: `append`.
- `is_hidden` (`boolean`, optional): Set true to hide the page from the doc's page list, false to show it. Leave empty to keep the current state.
- `name` (`string`, optional): New name for the page. Leave empty to keep it. Example: Meeting Notes (archived).
- `subtitle` (`string`, optional): New subtitle for the page. Leave empty to keep it.

Example input: `{"doc_id":"<doc_id>","page_id_or_name":"<page_id_or_name>"}`

### `coda_row_button_push`

Push Row Button · Write

Press a button in a Coda table row, running whatever action the button column is set up to do.
Returns a requestId plus the row and column IDs; the action runs asynchronously, so check coda_mutation_status_get with the requestId if you need to confirm.
Use coda_row_button_push to trigger a button column's action on one row. Use coda_automation_trigger to run a doc automation instead.
The button can change anything in the doc, including other tables, and run Pack actions.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `column_id_or_name` (`string`, required): ID of the column, e.g. c-tuVwxYz. Get it from coda_columns_list. A column name also works, but Coda discourages names because users can rename columns. It must be a button column.
- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `row_id_or_name` (`string`, required): ID of the row, e.g. i-tuVwxYz. Get it from coda_rows_list. A row name (the value in the table's display column) also works, but if several rows share that value an arbitrary one is used.
- `table_id_or_name` (`string`, required): ID of the table or view, e.g. grid-pqRst-U. Get it from coda_tables_list. A table name also works, but Coda discourages names because users can rename tables.

Example input: `{"column_id_or_name":"<column_id_or_name>","doc_id":"<doc_id>","row_id_or_name":"<row_id_or_name>","table_id_or_name":"<table_id_or_name>"}`

### `coda_row_update`

Update Row · Write

Update cell values in one existing row of a Coda table.
Returns the row id and a requestId; the update is applied asynchronously within a few seconds, so check coda_mutation_status_get with the requestId if you need to confirm.
Use coda_row_update to change a known row by ID. Use coda_rows_upsert to add rows or update rows matched by key columns.
Get column IDs from coda_columns_list and the row ID from coda_rows_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `cells` (`array`, required): Cells to change. Each cell names a column (ID preferred, or name) and its new value: text, a number, a boolean, or a list for multi-select columns. Cells you leave out are unchanged. Example: [{"column": "c-tuVwxYz", "value": "Done"}].
- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `row_id_or_name` (`string`, required): ID of the row, e.g. i-tuVwxYz. Get it from coda_rows_list. A row name (the value in the table's display column) also works, but if several rows share that value an arbitrary one is used.
- `table_id_or_name` (`string`, required): ID of the table or view, e.g. grid-pqRst-U. Get it from coda_tables_list. A table name also works, but Coda discourages names because users can rename tables.
- `disable_parsing` (`boolean`, optional): If true, Coda stores the values exactly as sent and does not try to parse them (for example, it won't turn "$5" into a currency or "2024-01-15" into a date). Defaults to false.

Example input: `{"cells":[{"column":"c-tuVwxYz","value":"Done"}],"doc_id":"<doc_id>","row_id_or_name":"<row_id_or_name>","table_id_or_name":"<table_id_or_name>"}`

### `coda_rows_upsert`

Insert or Upsert Rows · Write

Add one or more rows to a Coda base table, or update matching rows instead when key columns are given (upsert).
Returns a requestId and the IDs of added rows; rows are written asynchronously within a few seconds, so check coda_mutation_status_get with the requestId if you need to confirm.
Use coda_rows_upsert to add rows or upsert by key. Use coda_row_update to change one known row by its ID.
Works on base tables only, not views. Get column IDs from coda_columns_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `doc_id` (`string`, required): ID of the Coda doc. Get it from coda_docs_list, or from the doc's URL: it is the part after `_d` in a link like https://coda.io/d/Project-Tracker_dAbCDeFGH (here AbCDeFGH).
- `rows` (`array`, required): Rows to insert. Each row has a cells list, and each cell names a column (ID preferred, or name) and the value to put in it. Values can be text, numbers, booleans, or lists for multi-select columns. Example: [{"cells": [{"column": "c-tuVwxYz", "value": "Apple"}, {"column": "c-AbCdEfG", "value": 3}]}].
- `table_id_or_name` (`string`, required): ID of the table or view, e.g. grid-pqRst-U. Get it from coda_tables_list. A table name also works, but Coda discourages names because users can rename tables.
- `disable_parsing` (`boolean`, optional): If true, Coda stores the values exactly as sent and does not try to parse them (for example, it won't turn "$5" into a currency or "2024-01-15" into a date). Defaults to false.
- `key_columns` (`array`, optional): Column IDs (or names) that identify a row for upserting. When set, an incoming row whose values in these columns match an existing row updates that row (every matching row, if several match) instead of adding a new one. Leave empty to always insert. Example: ["c-tuVwxYz"].

Example input: `{"doc_id":"<doc_id>","rows":[],"table_id_or_name":"<table_id_or_name>"}`

## Related

Other Productivity connectors ([all 144](/agentkit/connectors/?category=productivity)):

- [Slack](/agentkit/connectors/slack/): Scalekit connector, OAuth, 96 tools
- [Microsoft 365](/agentkit/connectors/microsoft365/): Scalekit connector, OAuth, 317 tools
- [Notion](/agentkit/connectors/notion/): Scalekit connector, OAuth, 51 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
