{
  "schemaVersion": "1.0",
  "item": {
    "slug": "coda-io",
    "name": "Coda.io",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/simonfunk/coda-io",
    "canonicalUrl": "https://clawhub.ai/simonfunk/coda-io",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/coda-io",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=coda-io",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/api-endpoints.md",
      "scripts/coda.sh"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/coda-io"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/coda-io",
    "agentPageUrl": "https://openagent3.xyz/skills/coda-io/agent",
    "manifestUrl": "https://openagent3.xyz/skills/coda-io/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/coda-io/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Coda API Skill",
        "body": "Interact with Coda.io via its REST API v1. Base URL: https://coda.io/apis/v1"
      },
      {
        "title": "Setup",
        "body": "Get API token at https://coda.io/account → \"API settings\" → \"Generate API token\"\nSet env var: export CODA_API_TOKEN=\"<token>\"\nVerify: bash scripts/coda.sh whoami"
      },
      {
        "title": "Helper Script",
        "body": "scripts/coda.sh wraps common operations. Run bash scripts/coda.sh help for usage.\n\nExamples:\n\n# List docs\nbash scripts/coda.sh list-docs | jq '.items[].name'\n\n# List tables in a doc\nbash scripts/coda.sh list-tables AbCDeFGH | jq '.items[] | {id, name}'\n\n# List columns (discover IDs before writing)\nbash scripts/coda.sh list-columns AbCDeFGH grid-abc | jq '.items[] | {id, name}'\n\n# Read rows with column names\nbash scripts/coda.sh list-rows AbCDeFGH grid-abc 10 true | jq '.items'\n\n# Insert rows\necho '{\"rows\":[{\"cells\":[{\"column\":\"c-abc\",\"value\":\"Hello\"}]}]}' | \\\n  bash scripts/coda.sh insert-rows AbCDeFGH grid-abc\n\n# Upsert rows (match on key column)\necho '{\"rows\":[{\"cells\":[{\"column\":\"c-abc\",\"value\":\"Hello\"},{\"column\":\"c-def\",\"value\":42}]}],\"keyColumns\":[\"c-abc\"]}' | \\\n  bash scripts/coda.sh upsert-rows AbCDeFGH grid-abc\n\n# Share doc\nbash scripts/coda.sh share-doc AbCDeFGH user@example.com write"
      },
      {
        "title": "Workflow: Reading Data",
        "body": "list-docs → find the doc ID\nlist-tables <docId> → find the table ID\nlist-columns <docId> <tableId> → discover column IDs/names\nlist-rows <docId> <tableId> → read data"
      },
      {
        "title": "Workflow: Writing Data",
        "body": "Discover column IDs first (step 3 above)\nBuild row JSON with cells array using column IDs\ninsert-rows (new data) or upsert-rows (with keyColumns for idempotent writes)\nWrite ops return HTTP 202 + requestId → poll with mutation-status if confirmation needed"
      },
      {
        "title": "Key Concepts",
        "body": "IDs over names: Use resource IDs (stable) rather than names (user-editable)\nEventual consistency: Writes are async (HTTP 202). Poll mutation-status to confirm.\nPagination: List endpoints return nextPageToken. Pass as pageToken for next page.\nRate limits: Read 100/6s, Write 10/6s, Doc content write 5/10s. Respect 429 with backoff.\nFresh reads: Add header X-Coda-Doc-Version: latest to ensure non-stale data (may 400).\nvalueFormat: simple (default), simpleWithArrays, rich for structured data.\nDoc ID from URL: https://coda.io/d/Title_d<DOC_ID> → the part after _d is the doc ID."
      },
      {
        "title": "Direct curl (when script doesn't cover it)",
        "body": "curl -s -H \"Authorization: Bearer $CODA_API_TOKEN\" \\\n  \"https://coda.io/apis/v1/docs/{docId}/tables/{tableId}/rows?useColumnNames=true&limit=50\"\n\nFor writes:\n\ncurl -s -H \"Authorization: Bearer $CODA_API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -X POST -d '{\"rows\":[...]}' \\\n  \"https://coda.io/apis/v1/docs/{docId}/tables/{tableId}/rows\""
      },
      {
        "title": "Full API Reference",
        "body": "See references/api-endpoints.md for complete endpoint listing with parameters, body schemas, and response details.\n\nSearchable by section: Account, Folders, Docs, Pages, Tables, Columns, Rows, Formulas, Controls, Permissions, Publishing, Automations, Analytics, Miscellaneous."
      }
    ],
    "body": "Coda API Skill\n\nInteract with Coda.io via its REST API v1. Base URL: https://coda.io/apis/v1\n\nSetup\nGet API token at https://coda.io/account → \"API settings\" → \"Generate API token\"\nSet env var: export CODA_API_TOKEN=\"<token>\"\nVerify: bash scripts/coda.sh whoami\nHelper Script\n\nscripts/coda.sh wraps common operations. Run bash scripts/coda.sh help for usage.\n\nExamples:\n\n# List docs\nbash scripts/coda.sh list-docs | jq '.items[].name'\n\n# List tables in a doc\nbash scripts/coda.sh list-tables AbCDeFGH | jq '.items[] | {id, name}'\n\n# List columns (discover IDs before writing)\nbash scripts/coda.sh list-columns AbCDeFGH grid-abc | jq '.items[] | {id, name}'\n\n# Read rows with column names\nbash scripts/coda.sh list-rows AbCDeFGH grid-abc 10 true | jq '.items'\n\n# Insert rows\necho '{\"rows\":[{\"cells\":[{\"column\":\"c-abc\",\"value\":\"Hello\"}]}]}' | \\\n  bash scripts/coda.sh insert-rows AbCDeFGH grid-abc\n\n# Upsert rows (match on key column)\necho '{\"rows\":[{\"cells\":[{\"column\":\"c-abc\",\"value\":\"Hello\"},{\"column\":\"c-def\",\"value\":42}]}],\"keyColumns\":[\"c-abc\"]}' | \\\n  bash scripts/coda.sh upsert-rows AbCDeFGH grid-abc\n\n# Share doc\nbash scripts/coda.sh share-doc AbCDeFGH user@example.com write\n\nWorkflow: Reading Data\nlist-docs → find the doc ID\nlist-tables <docId> → find the table ID\nlist-columns <docId> <tableId> → discover column IDs/names\nlist-rows <docId> <tableId> → read data\nWorkflow: Writing Data\nDiscover column IDs first (step 3 above)\nBuild row JSON with cells array using column IDs\ninsert-rows (new data) or upsert-rows (with keyColumns for idempotent writes)\nWrite ops return HTTP 202 + requestId → poll with mutation-status if confirmation needed\nKey Concepts\nIDs over names: Use resource IDs (stable) rather than names (user-editable)\nEventual consistency: Writes are async (HTTP 202). Poll mutation-status to confirm.\nPagination: List endpoints return nextPageToken. Pass as pageToken for next page.\nRate limits: Read 100/6s, Write 10/6s, Doc content write 5/10s. Respect 429 with backoff.\nFresh reads: Add header X-Coda-Doc-Version: latest to ensure non-stale data (may 400).\nvalueFormat: simple (default), simpleWithArrays, rich for structured data.\nDoc ID from URL: https://coda.io/d/Title_d<DOC_ID> → the part after _d is the doc ID.\nDirect curl (when script doesn't cover it)\ncurl -s -H \"Authorization: Bearer $CODA_API_TOKEN\" \\\n  \"https://coda.io/apis/v1/docs/{docId}/tables/{tableId}/rows?useColumnNames=true&limit=50\"\n\n\nFor writes:\n\ncurl -s -H \"Authorization: Bearer $CODA_API_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -X POST -d '{\"rows\":[...]}' \\\n  \"https://coda.io/apis/v1/docs/{docId}/tables/{tableId}/rows\"\n\nFull API Reference\n\nSee references/api-endpoints.md for complete endpoint listing with parameters, body schemas, and response details.\n\nSearchable by section: Account, Folders, Docs, Pages, Tables, Columns, Rows, Formulas, Controls, Permissions, Publishing, Automations, Analytics, Miscellaneous."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/simonfunk/coda-io",
    "publisherUrl": "https://clawhub.ai/simonfunk/coda-io",
    "owner": "simonfunk",
    "version": "1.2.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/coda-io",
    "downloadUrl": "https://openagent3.xyz/downloads/coda-io",
    "agentUrl": "https://openagent3.xyz/skills/coda-io/agent",
    "manifestUrl": "https://openagent3.xyz/skills/coda-io/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/coda-io/agent.md"
  }
}