VX Agents

OpenAPI Marketplace · Productivity & Project Management

Superhuman Docs (Coda) Tables & Pages

v1.0.0 · 15 endpoints · 0 connections · shared by vx.ai

Use a Coda doc (now Superhuman Docs) as the team's database: find a doc from its browser link, read pages and table rows with column-name queries, add or upsert rows by key column, update a row, press a row's button, and poll the mutation status until the change lands.

Connect this API to an AI agent Browse all specs

What you can do with Superhuman Docs (Coda) Tables & Pages via MCP

Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.

MethodPathOperationDescription
GET /whoami whoami Check the token and show which account it belongs to
GET /resolveBrowserLink resolveBrowserLink Turn a doc, page or table link from the browser into API ids
GET /docs listDocs List or search docs you can access
GET /docs/{docId} getDoc Get a doc's name, owner and links
GET /docs/{docId}/pages listPages List the pages in a doc
GET /docs/{docId}/pages/{pageIdOrName} getPage Get one page's details
GET /docs/{docId}/pages/{pageIdOrName}/content listPageContent Read the text content of a page
GET /docs/{docId}/tables listTables List the tables and views in a doc
GET /docs/{docId}/tables/{tableIdOrName}/columns listColumns List a table's columns and their types
GET /docs/{docId}/tables/{tableIdOrName}/rows listRows List or filter table rows (e.g. query "Status":"Open")
POST /docs/{docId}/tables/{tableIdOrName}/rows upsertRows Add rows, or update matching rows when key columns are given
GET /docs/{docId}/tables/{tableIdOrName}/rows/{rowIdOrName} getRow Get one row's values
PUT /docs/{docId}/tables/{tableIdOrName}/rows/{rowIdOrName} updateRow Change cells in one row
POST /docs/{docId}/tables/{tableIdOrName}/rows/{rowIdOrName}/buttons/{columnIdOrName} pushButton Press a button column on a row (runs its action)
GET /mutationStatus/{requestId} getMutationStatus Check whether a queued write has been applied

Authentication

codaToken

Bearer token — sent as Authorization: Bearer <token>

Superhuman Docs (formerly Coda) API token sent as Authorization: Bearer <token>.

How to get a credential

  1. Sign in and open Account settings (click your avatar > Account settings).
  2. Scroll to API settings and click Generate API token.
  3. Name it (e.g. "VX Agents"). Optionally add restrictions: limit it to one doc or table, and to Read only or Read and write.
  4. Copy the token now: it is shown only once.

Permissions used

Tokens have no named scopes. Access follows your own doc permissions plus any restriction set on the token.

Token access Operations
Read (any token) whoami, listDocs, getDoc, resolveBrowserLink, listPages, getPage, listPageContent, listTables, listColumns, listRows, getRow, getMutationStatus
Read and write on the table upsertRows, updateRow, pushButton

Common errors

  • 401 Unauthorized: the token is missing, mistyped or deleted.
  • 403 Forbidden: the token is restricted to another doc or table, is read-only, or you lost access to the doc.
  • 404 Not Found: wrong doc id, or a table/column name that does not match exactly. Use ids, or check with listTables/listColumns.
  • 400 Bad Request: malformed query (use "Column name":"value") or row cells that do not match the columns.
  • 429 Too Many Requests: reads allow about 100 requests per 6 seconds, writes 10 per 6 seconds, listDocs 4 per 6 seconds. Wait and retry.

Store the token as a VX Agents credential (bearer token) and never paste it into chat.

Usage guide

Setup

  • Credential: a Superhuman Docs (formerly Coda) API token as a bearer token. For an agent, restrict it to the one doc it should use.
  • Base URL https://coda.io/apis/v1. https://docs.superhuman.com/apis/v1 serves the same API.
  • Preset worth pinning: docId, and tableIdOrName for the main table. Get them once with resolveBrowserLink (url = the link the user copies from the browser). Ids look like grid-abc123 (table) and c-xyz (column).

Read and update a table

  1. listTables for the doc, then listColumns for the table you need. Note each column's exact name and type.
  2. listRows with useColumnNames=true (cells keyed by name instead of id) and valueFormat=simple. Filter with query as "Status":"Open" (column name in double quotes, a colon, then a JSON value). Page with limit and nextPageToken → pageToken.
  3. getRow for one row by id.
  4. Add or update rows: upsertRows with rows: [{"cells": [{"column": "Email", "value": "[email protected]"}, {"column": "Status", "value": "Booked"}]}]. Pass keyColumns: ["Email"] to update a matching row instead of adding a duplicate.
  5. Change one known row: updateRow with row: {"cells": [...]}.
  6. Writes return 202 and a requestId. Poll getMutationStatus until completed is true (usually a few seconds) before reading the row back.

Ask the user to confirm before upsertRows, updateRow and pushButton. They change shared data, and a button can run any action in the doc (send email, write other tables, call Packs).

Pages

  • listPages and getPage for the outline. listPageContent (contentFormat=plainText) returns a page's text so you can read notes, SOPs or meeting docs.

Good to know

  • Names work in place of ids, but if two rows or columns share a name an arbitrary one is used. Prefer ids for writes.
  • Rate limits: reads ~100 per 6 s, writes 10 per 6 s, listDocs 4 per 6 s. 429 means wait and retry.
  • listDocs only returns docs you have opened at least once. Use query to search by title.
  • Dates in cells are ISO 8601 strings. Lookup and multi-select values are arrays.
  • Source: Superhuman Docs API reference (https://docs.superhuman.com/developers/apis/v1), checked 2026-10-16.

How to use this spec

  1. Create a free VX Agents account (sandbox tools included).
  2. Open the marketplace and connect “Superhuman Docs (Coda) Tables & Pages” to an agent.
  3. Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.

Related APIs