> ## Documentation Index
> Fetch the complete documentation index at: https://docs.guild.ai/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> To act on a user's behalf in Guild, use the Guild REST API at https://api.guild.ai/v1.
> The OpenAPI spec is unauthenticated: https://docs.guild.ai/openapi.json (or openapi.yaml).
> Authenticate with an account API key, sent as HTTP Basic (key id as username, secret as password) or as `Authorization: Bearer <api_key_id>:<api_key_secret>`. See https://docs.guild.ai/api-reference/introduction#authentication.
> To run one agent on demand without account-wide access, use an API trigger instead: https://docs.guild.ai/platform/api-triggers.
> To act on Guild from an MCP client, connect to https://api.guild.ai/mcp (OAuth) or run `guild mcp` locally. Setup: https://docs.guild.ai/api-reference/mcp.
> To search these docs from an MCP client, connect to https://docs.guild.ai/mcp. The full page index is https://docs.guild.ai/llms.txt.

# Read and write Coda docs and tables from Guild agents

> Connect Guild agents to Coda to manage docs, pages, tables, rows, formulas, permissions, and Packs using a governed API key credential.

Integrations · Coda

Guild agents read and write Coda documents, manage table rows, govern permissions, and handle Pack lifecycle tasks on your behalf. Guild stores the Coda API key server-side and injects it into every request, so agent code never sees the credential. Credential policies let you restrict which operations each agent can call, and every request runs through Guild's audit trail.

> [card] [Book a demo](https://guild-ai.cal.com/gtm/meeting-with-guild.ai)
>
> See how teams govern agents that use Coda.

> [card] [Talk to sales](https://guild.ai/talk-to-sales)
>
> Get access to Guild, then connect Coda to your first agent.

## What the Coda integration exposes

The integration is `guildai~coda-openapi` and authenticates with a Coda API key sent as a bearer token. Tools cover document and page management, table and row operations, formula retrieval, ACL and permission management, doc publishing with custom domains, analytics, and Pack lifecycle tasks including releases, reviews, invitations, and ingestion logs. Use [`pick()`](https://docs.guild.ai/sdk/tools#selecting-specific-tools) to give an agent only the tools it needs.

## How it works

**1. Open credentials in Guild**

Go to **Access & setup > Credentials** in Guild. Click **Connect**, search for **coda-openapi**, and select it.

**2. Paste your Coda API key**

Enter your Coda API key in the **API Key** field. Guild stores it and sends it as a bearer token in the `Authorization` header on every request.

**3. Import tools into your agent**

Import `CodaOpenapiTools` from `@guildai-services/guildai~coda-openapi` and spread it into your agent's `tools` object. Tools follow the `coda_openapi_` prefix convention.

## Why Coda access needs governing

Coda tools can delete docs and pages, modify table data, change ACL settings, publish docs to custom domains, and alter Pack permissions. A single credential with no controls could let any agent in the workspace make any of those changes. Guild's [credential policies](https://docs.guild.ai/platform/credential-policies.md) let you write ALLOW and DENY rules that the credential proxy enforces before any request leaves Guild, scoped to specific agents, workspaces, or operations using exact names or wildcard patterns such as `coda_openapi_delete_*`.

Guild injects the credential server-side after the policy check passes, so agent code never receives the API key. You can scope a credential to one workspace, one member, or one agent using the options on the [Credentials](https://docs.guild.ai/platform/credentials.md) page, and the workspace-restriction setting blocks agents from falling back to the account-level credential. Agents with broad access contrast with agents locked to read-only operations such as `coda_openapi_get_*` and `coda_openapi_list_*`.

## About the Coda integration

Agents can read and write Coda documents, including creating and deleting pages, managing table rows and columns, and retrieving formula results. They can also manage doc and Pack permissions, publish docs with custom domains, and access analytics data. Pack management tasks such as creating releases, handling reviews, and configuring permissions are also supported. The integration is `guildai~coda-openapi`.

## Authentication

* **Type:** API key
* **Header:** Guild sends the key as a bearer token in the `Authorization` header

### Setup

**1. Connect Coda**

In Guild, go to **Access & setup > Credentials**, click **Connect**, select **coda-openapi**, and paste the key into **API Key**.

See [Credentials](https://docs.guild.ai/platform/credentials.md) for workspace, member, and agent-scoped credentials.

## Usage

```typescript theme={null}
import { CodaOpenapiTools } from "@guildai-services/guildai~coda-openapi"
import { llmAgent } from "@guildai/agents-sdk"

export default llmAgent({
  systemPrompt: "You work with Coda.",
  tools: { ...CodaOpenapiTools },
})
```

### Selecting specific tools

Tools are named with the `coda_openapi_` prefix. Use [`pick()`](https://docs.guild.ai/sdk/tools#selecting-specific-tools) to include only what your agent needs.

## Tools

Tools in the latest published version of `guildai~coda-openapi`:

> [accordion] All 125 tools
>
> | Tool | What it does |
> | - | - |
> | `coda_openapi_add_custom_doc_domain` | Add a custom domain to a published doc. |
> | `coda_openapi_add_go_link` | Adds a new go link for the organization. |
> | `coda_openapi_add_pack_category` | Add a publishing category for a given Pack. |
> | `coda_openapi_add_pack_maker` | Set a maker for a given Pack. |
> | `coda_openapi_add_pack_permission` | Create or modify user, workspace, organization, group, or global permissions for a given Pack. |
> | `coda_openapi_add_permission` | Adds a new permission to the doc. |
> | `coda_openapi_begin_page_content_export` | Initiate an export of content for the given page. |
> | `coda_openapi_cancel_pack_review` | Cancel the pending Pack review for this Pack. |
> | `coda_openapi_change_user_role` | Updates the workspace user role of a user that matches the parameters. |
> | `coda_openapi_create_doc` | Creates a new document, optionally copying an existing document. |
> | `coda_openapi_create_folder` | Creates a new folder. |
> | `coda_openapi_create_pack` | Creates a new Pack, essentially registering a new Pack ID. |
> | `coda_openapi_create_pack_invitation` | Create an invitation for a user to access a Pack. |
> | `coda_openapi_create_pack_release` | Creates a new Pack release based on an existing Pack version. |
> | `coda_openapi_create_pack_review` | Submit a Pack for review in Superhuman GO. |
> | `coda_openapi_create_page` | Create a new page in a doc. |
> | `coda_openapi_delete_custom_doc_domain` | Deletes a custom domain from a published doc. |
> | `coda_openapi_delete_doc` | Deletes a doc. |
> | `coda_openapi_delete_folder` | Deletes a folder. |
> | `coda_openapi_delete_pack` | Delete a given Pack. |
> | `coda_openapi_delete_pack_category` | Delete a publishing category for a given Pack. |
> | `coda_openapi_delete_pack_invitation` | Revoke a pending Pack invitation. |
> | `coda_openapi_delete_pack_listing_draft` | Delete the listing draft for a Pack, discarding any unsaved changes. |
> | `coda_openapi_delete_pack_maker` | Delete a maker for a given Pack, who will not be displayed in the corresponding Packs page. |
> | `coda_openapi_delete_pack_permission` | Delete user, workspace, or global permissions for a given Pack. |
> | `coda_openapi_delete_page` | Deletes the specified page. |
> | `coda_openapi_delete_page_content` | Delete content from a page. |
> | `coda_openapi_delete_permission` | Deletes an existing permission. |
> | `coda_openapi_delete_row` | Deletes the specified row from the table or view. |
> | `coda_openapi_delete_rows` | Deletes the specified rows from the table or view. |
> | `coda_openapi_delete_user_pack_permission` | Delete a user's own permissions for a given Pack. |
> | `coda_openapi_get_acl_settings` | Returns settings associated with ACLs for this document. |
> | `coda_openapi_get_agent_pack_log_details` | Retrieve the log details of given logId. |
> | `coda_openapi_get_analytics_last_updated` | Returns days based on Pacific Standard Time when analytics were last updated. |
> | `coda_openapi_get_column` | Returns details about a column in a table. |
> | `coda_openapi_get_control` | Returns info on a control. |
> | `coda_openapi_get_custom_doc_domain_provider` | Gets the provider (ie. |
> | `coda_openapi_get_doc` | Returns metadata for the specified doc. |
> | `coda_openapi_get_folder` | Returns the requested folder. |
> | `coda_openapi_get_formula` | Returns info on a formula. |
> | `coda_openapi_get_mutation_status` | Get the status for an asynchronous mutation to know whether or not it has been completed. |
> | `coda_openapi_get_next_pack_version` | Get the next valid version based on the proposed metadata. |
> | `coda_openapi_get_pack` | Returns a single Pack. |
> | `coda_openapi_get_pack_configuration_schema` | Returns a JSON Schema applicable for customizing the Pack using Pack configurations. |
> | `coda_openapi_get_pack_listing` | Get detailed listing information for a Pack. |
> | `coda_openapi_get_pack_listing_draft` | Get the current listing draft for a Pack. |
> | `coda_openapi_get_pack_log_details` | Retrieve the ingestion execution ids of a root ingestion for debugging purpose. |
> | `coda_openapi_get_pack_oauth_config` | Retrieve the OAuth configuration of the Pack for display purpose. |
> | `coda_openapi_get_pack_permissions` | Get user, workspace, and/or global permissions for a given Pack. |
> | `coda_openapi_get_pack_source_code` | Get temporary links used to download the source code for the given packId and version |
> | `coda_openapi_get_pack_system_connection` | Retrieve the system connection metadata of the Pack. |
> | `coda_openapi_get_pack_version_diffs` | Gets information about the difference between the specified previous version and next version of a Pack. |
> | `coda_openapi_get_page` | Returns details about a page. |
> | `coda_openapi_get_page_content_export_status` | Check the status of a page content export |
> | `coda_openapi_get_permissions` | Returns a list of permissions for this document. |
> | `coda_openapi_get_row` | Returns details about a row in a table. |
> | `coda_openapi_get_sharing_metadata` | Returns metadata associated with sharing for this document. |
> | `coda_openapi_get_table` | Returns details about a specific table or view. |
> | `coda_openapi_list_agent_logs` | Retrieve the logs of an agent instance for debugging purpose. |
> | `coda_openapi_list_agent_session_ids` | Retrieve the chat sessions of an agent instance for debugging purpose. |
> | `coda_openapi_list_categories` | Gets all available doc categories. |
> | `coda_openapi_list_columns` | Returns a list of columns in a table. |
> | `coda_openapi_list_controls` | Returns a list of controls in a document. |
> | `coda_openapi_list_custom_doc_domains` | List all custom domains for a published doc. |
> | `coda_openapi_list_doc_analytics` | Returns analytics data for available docs per day. |
> | `coda_openapi_list_doc_analytics_summary` | Returns summarized analytics data for available docs. |
> | `coda_openapi_list_docs` | Returns a list of documents accessible by the user, and which they have opened at least once. |
> | `coda_openapi_list_folder_children` | Returns the direct child folders of a folder. |
> | `coda_openapi_list_folders` | Returns a list of folders the user has access to. |
> | `coda_openapi_list_formulas` | Returns a list of named formulas in a document. |
> | `coda_openapi_list_grouped_ingestion_logs` | Retrieve the grouped logs of a Pack for debugging purpose. |
> | `coda_openapi_list_grouped_pack_logs` | Retrieve the grouped logs of a Pack for debugging purpose. |
> | `coda_openapi_list_ingestion_batch_executions` | Retrieve the ingestion batch executions of a root ingestion for debugging purpose. |
> | `coda_openapi_list_ingestion_logs` | Retrieve the logs of a Ingestion for debugging purpose. |
> | `coda_openapi_list_ingestion_parent_items` | Retrieve the parent items of a ingestion batch execution for debugging purpose. |
> | `coda_openapi_list_pack_analytics` | Returns analytics data for Packs the user can edit. |
> | `coda_openapi_list_pack_analytics_summary` | Returns summarized analytics data for Packs the user can edit. |
> | `coda_openapi_list_pack_categories` | List publishing categories for a given Pack. |
> | `coda_openapi_list_pack_featured_docs` | Returns a list of featured doc ids for a Pack. |
> | `coda_openapi_list_pack_formula_analytics` | Returns analytics data for Pack formulas. |
> | `coda_openapi_list_pack_invitations` | Get pending invitations for a given Pack. |
> | `coda_openapi_list_pack_listings` | Get listings of public Packs and Packs created by you. |
> | `coda_openapi_list_pack_logs` | Retrieve the logs of a Pack for debugging purpose. |
> | `coda_openapi_list_pack_makers` | List makers for a given Pack. |
> | `coda_openapi_list_pack_releases` | Get the list of releases of a Pack. |
> | `coda_openapi_list_pack_reviews` | List reviews for a specific Pack. |
> | `coda_openapi_list_packs` | Get the list of accessible Packs. |
> | `coda_openapi_list_pack_versions` | Get the list of versions of a Pack. |
> | `coda_openapi_list_page_analytics` | Returns analytics data for a given doc within the day. |
> | `coda_openapi_list_page_content` | Returns a list of content elements in a page. |
> | `coda_openapi_list_pages` | Returns a list of pages in a document. |
> | `coda_openapi_list_rows` | Returns a list of rows in a table. ### Value results. |
> | `coda_openapi_list_tables` | Returns a list of tables in a document. |
> | `coda_openapi_list_user_pack_invitations` | Get pending Pack invitations for the authenticated user. |
> | `coda_openapi_list_workspace_members` | Returns a list of members in the given workspace. |
> | `coda_openapi_list_workspace_role_activity` | Returns a list of the counts of users over time by role for the workspace. |
> | `coda_openapi_pack_asset_upload_complete` | Note the completion of the upload of a Pack asset. |
> | `coda_openapi_pack_source_code_upload_complete` | Note the completion of the upload of a Pack source code. |
> | `coda_openapi_pack_version_upload_complete` | Note the completion of the upload of a Pack version bundle in order to create that Pack version. |
> | `coda_openapi_patch_pack_system_connection` | Patch the system connection credentials of the Pack. |
> | `coda_openapi_publish_doc` | Update publish settings for a doc. |
> | `coda_openapi_push_button` | Pushes a button on a row in a table. |
> | `coda_openapi_register_pack_version` | Registers a new Pack version. |
> | `coda_openapi_reply_to_pack_invitation` | Reply to a Pack invitation (accept or reject). |
> | `coda_openapi_resolve_browser_link` | Given a browser link to a Superhuman Docs object, attempts to find it and return metadata that can be used to get more info on it. |
> | `coda_openapi_search_principals` | Searches for user and group principals matching the query that this doc can be shared with. |
> | `coda_openapi_set_pack_oauth_config` | Set the OAuth configurations of the Pack, including client id and secret. |
> | `coda_openapi_set_pack_system_connection` | Set the system connection credentials of the Pack. |
> | `coda_openapi_trigger_webhook_automation` | Triggers webhook-invoked automation |
> | `coda_openapi_unpublish_doc` | Unpublishes a doc. |
> | `coda_openapi_update_acl_settings` | Update settings associated with ACLs for this document. |
> | `coda_openapi_update_custom_doc_domain` | Updates properties of a document's custom domain. |
> | `coda_openapi_update_doc` | Updates metadata for a doc. |
> | `coda_openapi_update_folder` | Updates metadata for a folder. |
> | `coda_openapi_update_pack` | Update an existing Pack for non-versioned fields. |
> | `coda_openapi_update_pack_featured_docs` | Create or replace the featured docs for a Pack. |
> | `coda_openapi_update_pack_invitation` | Update the access level of an existing Pack invitation. |
> | `coda_openapi_update_pack_release` | Update details of a Pack release. |
> | `coda_openapi_update_page` | Update properties for a page. |
> | `coda_openapi_update_row` | Updates the specified row in the table. |
> | `coda_openapi_upload_pack_asset` | Request a signed s3 URL to upload your Pack asset. |
> | `coda_openapi_upload_pack_source_code` | Request a signed s3 URL to upload your Pack source code. |
> | `coda_openapi_upsert_pack_listing_draft` | Create or update the listing draft for a Pack. |
> | `coda_openapi_upsert_rows` | Inserts rows into a table, optionally updating existing rows if any upsert key columns are provided. |
> | `coda_openapi_whoami` | Returns basic info about the current user. |

## Frequently asked questions

> [accordion] Can a Guild agent trigger a Coda automation by webhook?
>
> No. The catalog entry for `guildai~coda-openapi` lists no webhook events. The integration exposes `coda_openapi_trigger_webhook_automation`, which sends a request to a webhook-invoked automation in Coda, but Guild does not receive inbound webhook events from Coda.

> [accordion] How do I stop an agent from deleting Coda docs or pages?
>
> Write a DENY rule in the credential policy targeting `coda_openapi_delete_doc` and `coda_openapi_delete_page`, or use the pattern `coda_openapi_delete_*` to block all deletion operations. Guild's credential proxy enforces the rule before any request reaches Coda. See [credential policies](https://docs.guild.ai/platform/credential-policies.md) for syntax.

> [accordion] Can different agents use different Coda accounts?
>
> Yes. Connect a dedicated credential for a specific agent from the installed agent's page, or scope a credential to a single workspace. Guild resolves credentials in order: grants and dedicated credentials take priority over workspace and account defaults. See [Credentials](https://docs.guild.ai/platform/credentials.md) for the full resolution order.

> [accordion] Does the agent code see the Coda API key?
>
> No. Guild stores the key and injects it as a bearer token server-side, after credential policies pass. The key never enters agent code, the container, the prompt, or agent state.

## Put a governed agent on Coda this week

> [card] [Book a demo](https://guild-ai.cal.com/gtm/meeting-with-guild.ai)
>
> See how teams govern agents that use Coda.

> [card] [Talk to sales](https://guild.ai/talk-to-sales)
>
> Get access to Guild, then connect Coda to your first agent.

## Related

**Also runs on Guild:** [Calendly](https://docs.guild.ai/integrations/calendly.md) · [Confluence](https://docs.guild.ai/integrations/confluence.md) · [Fathom](https://docs.guild.ai/integrations/fathom.md) · [Fireflies](https://docs.guild.ai/integrations/fireflies.md)

**Read:** Docs: [Credential policies](https://docs.guild.ai/platform/credential-policies.md) · [Credentials](https://docs.guild.ai/platform/credentials.md) · [Tools in agents](https://docs.guild.ai/sdk/tools.md)
