Developer docs

Build on approved documents

VersoDocs exposes the published (Current) version of your organization's documents to code, CI and AI agents. Drafts and proposals in progress never leave VersoDocs. Agents work inside the approval workflow: they propose changes and review proposals (advisory verdicts only), and on Pro can publish a proposal only after people approved it.

Three ways in

All three share one credential system, one per-key rate limit and one plan table, so the same key works everywhere and a limit never differs between surfaces. A machine-readable OpenAPI 3.1 spec describes the REST API.

Quickstart

  1. Create an API key. In VersoDocs, open Organization settings → Developer (owners and admins) and create a key. It starts with vsd_ and is shown once.
  2. Find your org slug: it is the segment after /org/ in any VersoDocs URL (versodocs.com/org/acme/… → acme).
  3. Call the API:
bash
export VERSODOCS_TOKEN=vsd_…
curl -H "Authorization: Bearer $VERSODOCS_TOKEN" \
  "https://versodocs.com/api/v1/orgs/acme/docs?limit=5"

Then read one document as Markdown, by the path shown in its URL:

bash
curl -H "Authorization: Bearer $VERSODOCS_TOKEN" \
  "https://versodocs.com/api/v1/orgs/acme/docs/by-path?path=eng/apis/payments-api&format=md"

Connect an AI agent instead (no key needed: it signs in with OAuth on first use):

bash
claude mcp add --transport http versodocs https://versodocs.com/api/mcp

Or pull specs into a repository:

bash
npx -y @versodocs/cli@0 login --org acme
npx -y @versodocs/cli@0 pull --folder eng/specs --out-dir docs/specs

Authentication

Every request carries Authorization: Bearer <token>. Two credential kinds exist, and both count toward the plan's key limit:

CredentialPrefixLifetimeValid on
API key (Settings → Developer)vsd_Until revokedREST API, MCP server, CLI (incl. versodocs pr-check)
OAuth access token (one-click MCP connect)vsd_at_1 hour (refresh token vsd_rt_ rotates, 30 days)MCP server only (/api/mcp); the REST API answers 401

Keys are organization-scoped: the org comes from the credential, and a key used against another org's URL gets 404. Revocation is immediate.

Plan access matrix

Every plan includes API access. Limits are per key (or per connected app) and shared across REST, MCP and the CLI.

FreeTeamPro
Active keys + connected apps1520
Rate limit (per key)30 req/min120 req/min600 req/min
Burst30 requests120 requests300 requests
Scopes (API key)docs:readdocs:read proposals:reviewdocs:read docs:propose proposals:review docs:write proposals:publish
Scopes (one-click connection)docs:readdocs:read docs:propose proposals:reviewdocs:read docs:propose proposals:review docs:write proposals:publish
Agent proposals—25 / month, one-click connections onlyUnlimited, keys and connections
Workspaces visibleThe active workspaceAll workspacesAll, or one (scoped key)
FeatureFreeTeamProWhere
Read Current docs✓✓✓RESTGET docsGET docs/{documentId}GET docs/by-pathGET webhooksPOST webhooksDELETE webhooks/{webhookId}GET webhooks/samplesMCPsearch_docslist_docsget_doccheck_referenceCLIloginpullstatuscheck
Version history—✓✓RESTGET docs/{documentId}/versions?version=N (doc reads)MCPlist_versionsCLIpull --version Npull --frozen
Version diffs—✓✓RESTGET docs/{documentId}/diffMCPdiff_versionsCLIdiffcheck (change summary)
Search—✓✓RESTGET searchGET docs?q=
Workspace tree—✓✓RESTGET treeMCPget_doc_tree
Attachments—✓✓RESTGET docs/{documentId}/attachmentsGET docs/{documentId}/attachments/{attachmentId}MCPlist_attachmentsget_attachment_url
CI spec check—✓✓RESTGET docs/{documentId}/currentGET docs/currentCLIpr-check
Agent context pack + llms.txt—✓✓RESTGET context-packGET llms.txtMCPget_context_pack
Jira + Linear issue links—✓✓RESTGET docs/{documentId}/issue-linksPOST docs/{documentId}/issue-linksGET proposals/{proposalId}/issue-linksPOST proposals/{proposalId}/issue-linksMCPlist_linkslink_issue
Propose changes—25 / month, one-click connections only✓RESTPOST docs/{documentId}/proposalsPOST docs/{documentId}/attachmentsPOST docs/{documentId}/attachments/{attachmentId}/confirmMCPpropose_changeupload_attachment
Review proposals—✓✓RESTGET proposalsGET proposals/{proposalId}POST proposals/{proposalId}/commentsPATCH proposals/{proposalId}/comments/{commentId}GET docs/{documentId}/commentsPOST docs/{documentId}/commentsPATCH docs/{documentId}/comments/{commentId}POST proposals/{proposalId}/reviewsMCPlist_proposalsget_proposalcomment_on_proposalresolve_commentsubmit_reviewlist_document_commentscomment_on_documentresolve_document_comment
Revise & close agent proposals—One-click connections only✓RESTPATCH proposals/{proposalId}POST proposals/{proposalId}/closeMCPupdate_proposalclose_proposal
Manage docs & folders——✓RESTPOST docsPATCH docs/{documentId}DELETE docs/{documentId}POST foldersPATCH folders/{folderId}DELETE folders/{folderId}MCPcreate_doccreate_folderrename_docmove_docdelete_doc
Publish approved proposals——✓RESTPOST proposals/{proposalId}/publishMCPpublish_proposal
API audit log——✓API calls and MCP tool calls are sampled into the org audit log.
Workspace-scoped keys——✓Bind a key to a single workspace in Settings → Developer.

A call outside the org's plan returns 403 with code: "plan_feature", the required_plan and an upgrade_url. MCP lists the tools whose scope the credential holds; a plan-locked one returns the same explanation as a tool error. See pricing.

For AI agents

These docs are also published as plain Markdown for LLMs and coding agents, following the llms.txt convention:

To let an agent read your organization's own approved documents, connect it to the MCP server.