Skills coda
General-purpose Coda document manager via REST API v1. Supports listing/creating/updating/deleting docs, managing tables/rows/pages, triggering automations, and exploring doc structure. Requires CODA_API_TOKEN environment variable. Delete operations require explicit confirmation; publishing and permission changes require explicit user intent.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/0x7466/coda" ~/.claude/skills/openclaw-skills-coda && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/0x7466/coda" ~/.openclaw/skills/openclaw-skills-coda && rm -rf "$T"
skills/0x7466/coda/SKILL.mdCoda API Skill
Interact with the Coda REST API v1 to manage docs, tables, rows, pages, and automations.
When to Use
Use this skill when the user wants to:
- List, search, create, or delete Coda docs
- Read from or write to tables (insert, upsert, update, delete rows)
- Explore doc structure (pages, tables, columns, formulas, controls)
- Trigger automations (push buttons)
- Export doc content or analytics
When NOT to Use
- Do NOT use for general document editing advice unrelated to the API
- Do NOT use for Pack development (this skill covers Doc management, not Pack creation)
- Do NOT use for operations requiring Doc Maker permissions unless confirmed the user has them
Prerequisites
- API Token: Set environment variable
with your Coda API tokenCODA_API_TOKEN- Get token at: https://coda.io/account -> API Settings
- Python 3.7+ with
library installedrequests - Permissions: Some operations (create doc, update doc title, create page) require Doc Maker role in the workspace
CLI Tool Usage
The skill includes a Python CLI tool at
scripts/coda_cli.py:
# Setup export CODA_API_TOKEN="your_token_here" # List docs python scripts/coda_cli.py docs list --query "Project" # Get doc info python scripts/coda_cli.py docs get <doc-id> # Create doc python scripts/coda_cli.py docs create --title "My New Doc" # List tables in doc python scripts/coda_cli.py tables list <doc-id> # List rows in table python scripts/coda_cli.py rows list <doc-id> <table-id> # Insert row python scripts/coda_cli.py rows insert <doc-id> <table-id> --data '{"Name": "Task 1", "Status": "Done"}' # Update row python scripts/coda_cli.py rows update <doc-id> <table-id> <row-id> --data '{"Status": "In Progress"}' # Delete row (requires confirmation) python scripts/coda_cli.py rows delete <doc-id> <table-id> <row-id> # List pages python scripts/coda_cli.py pages list <doc-id> # Trigger automation (push button) python scripts/coda_cli.py automations trigger <doc-id> <button-id> # Force delete without confirmation (use with caution) python scripts/coda_cli.py docs delete <doc-id> --force
Workflow Guidelines
1. Doc ID Extraction
Coda doc IDs can be extracted from browser URLs:
- URL:
https://coda.io/d/_dAbCDeFGH/Project-Tracker - Doc ID:
(removeAbCDeFGH
prefix)_d
The CLI tool accepts both full URLs and raw IDs.
2. Rate Limit Handling
The API has strict rate limits:
- Read: 100 requests per 6 seconds
- Write (POST/PUT/PATCH): 10 requests per 6 seconds
- Write doc content: 5 requests per 10 seconds
- List docs: 4 requests per 6 seconds
The CLI tool automatically implements exponential backoff for 429 responses.
3. Asynchronous Operations
Write operations return HTTP 202 with a
requestId. The CLI tool optionally polls for completion using --wait flag.
4. Safety Guardrails
Delete Operations (rows, docs, pages, folders):
- Always requires explicit user confirmation in interactive mode
- Use
flag only in automation/scripts--force - Shows preview of what will be deleted
Publishing (
docs publish):
- Requires explicit
flag--confirm-publish - Cannot be combined with
--force
Permissions (
acl commands):
- Requires explicit
flag for any changes--confirm-permissions - Read operations (list permissions) are always allowed
Automation Triggers:
- Allowed without special flags but logged
- User should be aware that automations may trigger notifications or external actions
5. Pagination
List commands support:
: Maximum results (default 25, max varies by endpoint)--limit
: For fetching subsequent pages--page-token- CLI auto-follows pages with
flag--all
Common Patterns
Batch Row Operations
# Insert multiple rows from JSON file python scripts/coda_cli.py rows insert-batch <doc-id> <table-id> --file rows.json # Upsert rows (update if exists, insert if not) using key columns python scripts/coda_cli.py rows upsert <doc-id> <table-id> --file rows.json --keys "Email"
Sync Between Docs
# Export from source python scripts/coda_cli.py rows list <source-doc> <table-id> --format json > export.json # Import to destination python scripts/coda_cli.py rows insert-batch <dest-doc> <table-id> --file export.json
Explore Structure
# Get full doc structure python scripts/coda_cli.py docs structure <doc-id> # List all formulas python scripts/coda_cli.py formulas list <doc-id> # List all controls python scripts/coda_cli.py controls list <doc-id>
Error Handling
Common HTTP status codes:
: Bad request (invalid parameters)400
: Invalid/expired API token401
: Insufficient permissions (need Doc Maker role)403
: Resource not found404
: Rate limited (implement backoff)429
: Accepted but not yet processed (async operation)202
Security Considerations
- Token Storage: Never commit
to version controlCODA_API_TOKEN - Token Scope: The token has full access to all docs the user can access
- Workspace Restrictions: Creating docs requires Doc Maker role in target workspace
- Data Exposure: Row data may contain sensitive information; handle exports carefully
Examples
List and Filter Docs
python scripts/coda_cli.py docs list --is-owner --query "Project"
Create Doc from Template
python scripts/coda_cli.py docs create --title "Q4 Planning" --source-doc "template-doc-id"
Update Row Status
python scripts/coda_cli.py rows update AbCDeFGH grid-xyz row-123 \ --data '{"Status": "Complete", "Completed Date": "2024-01-15"}'
Delete Multiple Rows (with confirmation)
python scripts/coda_cli.py rows delete-batch AbCDeFGH grid-xyz \ --filter '{"Status": "Archived"}' \ --confirm "Delete all archived rows?"
Export Table to CSV
python scripts/coda_cli.py rows list AbCDeFGH grid-xyz --format csv > export.csv
Reference
- API Documentation: https://coda.io/developers/apis/v1
- OpenAPI Spec: https://coda.io/apis/v1/openapi.yaml
- Rate Limits: https://coda.io/developers/apis/v1#section/Rate-Limiting