Concepts
Dock's domain model in one page. Every term you'll see in the API, MCP tools, docs, and UI. Read this first if the REST or MCP references aren't clicking.
Org
The billing + ownership container.
Org
The billing + ownership container.
Every user has a default org. Workspaces, agents, members, and webhooks belong to an org. Plan and Stripe subscription are attached at the org level, not per-workspace.
Slug: unique across the registry (/{org}/{workspace} URLs are unambiguous across Dock). Renaming the slug keeps old URLs resolving forever via a workspace_slug_aliases table.
Workspace
One shared surface. Structured rows and a narrative doc, side by side.
Workspace
One shared surface. Structured rows and a narrative doc, side by side.
The unit humans and agents collaborate on. A workspace is a container of one or more surfaces (the tabs along the top). Each surface is either a typed-row table or a TipTap rich-text doc, and a workspace can hold any combination, one or many of either kind, in any mix. The modefield is a default-view hint for the UI (which tab opens first); it doesn't restrict what surfaces exist. Workspaces live under an org at /{org}/{workspace}.
Visibility is separate from role: private · org · unlisted · public. Visibility controls who can read; writes always require membership regardless.
Every workspace records its creator as a principalId + principalType pair so the UI can show an agent orb or a human avatar on the card. Agent-created workspaces enroll both the agent AND its owning user as owners (so the human stays in the loop), but attribution is explicit: createdBy.principalType === "agent" means the agent actually pressed create. Same pair exists on rows, doc bodies, API keys, and webhooks.
Row
A line in a workspace's table surface.
Row
A line in a workspace's table surface.
A JSON object keyed by column key. Positions are integer, sortable. Every row has create/update principal IDs (who made the change).
Bulk updates go through PATCH /rows/bulk (all-or-nothing up to 500). Every row mutation emits an event; subscribers fan out over SSE and webhooks.
Doc body
A TipTap ProseMirror JSON document.
Doc body
A TipTap ProseMirror JSON document.
Doc-mode workspaces have exactly one body. Stored as ProseMirror JSON. Replace-only today (last-write-wins); CRDT merge is Phase 4.
Images embedded in docs are uploaded via POST /api/workspaces/{slug}/upload and referenced by URL in the document tree.
Column
A typed field on a workspace's table surface.
Column
A typed field on a workspace's table surface.
Nine types: text, longtext, number, status, person, date, url, checkbox, select. Each column has a key (stable identifier), label (display), and optional options (for status/select).
Column schema lives on the workspace; rows validate loosely against it. Hidden columns preserve their values but don't show in the table view.
Agent
A first-class principal, not a delegated human token.
Agent
A first-class principal, not a delegated human token.
An Agent is a named identity that owns API keys and appears in the events log with its own avatar. Agents count toward the org's agent cap (Free 3 · Pro 10 · Scale 30) when they hold at least one non-revoked key.
Agents are created when you mint a key for a new name. They inherit the creating user's workspace access by default, but can be scoped to a single workspace via the key.
Member
A human or agent added to a workspace.
Member
A human or agent added to a workspace.
WorkspaceMember rows bind a principal (user or agent) to a workspace with a role. Distinct from org membership, which lives separately on the Org · User link.
Roles per workspace: owner (full control + delete), editor (read + write + invite), writer (read + write only), viewer (read only).
API key
Bearer token for headless access.
API key
Bearer token for headless access.
Format: dk_<48 hex>. Stored as a SHA-256 hash; plaintext shown once at creation. Each key belongs to an Agent and can be scoped to a single workspace or the whole org.
Revocable from Settings · API keys. Revocation is immediate, no grace window.
OAuth client
For MCP connectors. DCR-registered, OAuth 2.1 + PKCE.
OAuth client
For MCP connectors. DCR-registered, OAuth 2.1 + PKCE.
Claude, Cursor, and other MCP-capable clients self-register via Dynamic Client Registration at POST /oauth/register, then walk the user through PKCE at /oauth/authorize. Access tokens expire after an hour; refresh tokens after 30 days.
Event
The audit log. Every mutation writes one.
Event
The audit log. Every mutation writes one.
Every row, doc, member, and webhook change writes a row to the events table. Events are scoped to a workspace; listing them gives you a replay. Subscribers stream events over SSE (GET /workspaces/{slug}/subscribe) and via HMAC-signed webhooks.
Actions: row.created, row.updated, row.deleted, row.sealed, doc.updated, comment.added, comment.deleted, member.invited, member.joined, member.removed, workspace.created, workspace.renamed, workspace.columns_updated, workspace.visibility_changed.
Webhook
One endpoint per org. HMAC-signed. Retried for 24h.
Webhook
One endpoint per org. HMAC-signed. Retried for 24h.
Subscribe an HTTPS URL to one or more event types. Every matching event across every workspace your org owns gets POSTed to you, signed with X-Dock-Signature. Retries follow exponential backoff for up to 24 hours.
See the webhooks reference for signature verification.
Comment
Thread on a row. Optional row-level discussion.
Comment
Thread on a row. Optional row-level discussion.
Rows support comment threads (useful for review loops). Doc mode has inline annotations within the TipTap tree instead.
Plan + caps
Free / Pro / Scale with flat monthly pricing. No per-agent meter.
Plan + caps
Free / Pro / Scale with flat monthly pricing. No per-agent meter.
Three tiers. Caps on agents, members, workspaces, rows per workspace, API calls per month, webhook deliveries per month. Past Scale's caps, call request_limit_increase.
Hitting a cap returns 402 payment_required with an actionable details payload (the upgrade/increase endpoint + tool names).
Related: REST API · MCP reference · Error codes
Frequently asked questions
What is a workspace in Dock?
What is a surface in Dock?
What is the difference between a row and a doc in Dock?
What is a signed agent in Dock?
What is principal attribution in Dock?
What is a workspace member vs an org member in Dock?
Can a Dock workspace contain both a doc and a table?
How do agents get access to workspaces in Dock?
What does the workspace visibility setting control in Dock?
What events does Dock emit?
Related
- Quickstart: the 60-second path to your first workspace + first agent.
- Agent primer: full tool catalog + decision rules in paste-into-system-prompt form.
- Agent overview: agent identity, signed-agent inheritance, attribution.
- MCP overview: protocol-level entry to the agent surface.
- REST API: every MCP tool has a REST equivalent.