google-docs

v2026.09.24

Read and edit Google Docs via the Docs v1 REST API. Use when the user mentions a Google Doc, reading a document's text, creating a doc, inserting or replacing text, or exporting a doc's content.

GitHub
Install command
npx skhub add acedatacloud/google-docs
Markdown
SKILL.md

Drive Google Docs via curl + jq. The user's OAuth bearer token is in $GOOGLE_DOCS_TOKEN; every call needs Authorization: Bearer $GOOGLE_DOCS_TOKEN. Base URL: https://docs.googleapis.com/v1/documents. The token carries documents.readonly (+ identity); writes need documents.

Failures are {"error":{"code","message","status"}} — show verbatim. 401 = re-install. 403 PERMISSION_DENIED on a write = read-only scope.

The doc id is the …/document/d/<ID>/edit segment of the URL.

D="https://docs.googleapis.com/v1/documents"; AUTH="Authorization: Bearer $GOOGLE_DOCS_TOKEN"
# Read the document. The body is a tree of structural elements; pull plain text:
curl -sS -H "$AUTH" "$D/DOC_ID" \
  | jq -r '.title, ([.body.content[]?.paragraph?.elements[]?.textRun?.content] | join(""))'

Create & edit

# Create an empty doc
curl -sS -X POST -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"title":"Meeting notes 2026-06-21"}' "$D" | jq '{documentId, title}'

# Insert text at the start (index 1) via batchUpdate (confirm first)
curl -sS -X POST -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"requests":[{"insertText":{"location":{"index":1},"text":"Hello\n"}}]}' \
  "$D/DOC_ID:batchUpdate" | jq '.documentId'

# Replace all occurrences of a placeholder
curl -sS -X POST -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"requests":[{"replaceAllText":{"containsText":{"text":"{{name}}","matchCase":true},"replaceText":"Alex"}}]}' \
  "$D/DOC_ID:batchUpdate" | jq '.replies'

Gotchas

  • The document model is index-based: text edits target character indices, and every insert shifts later indices — for multiple inserts, apply them back-to-front or recompute indices between calls.
  • To get clean Markdown/plain text, walk body.content[].paragraph.elements[] .textRun.content (the jq above). Tables / lists need deeper traversal.
  • Creating a doc puts it in the user's Drive root; use the google-drive skill to move/share it.
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

NOASSERTION

Source path

skills/google-docs

Default branch

main

Latest commit

57cc298

Tree SHA

acaa402