Skip to main content
Every endpoint, grouped by resource. New to the API? Start with the REST API guide for base URLs, auth, and conventions. All paths are relative to the API origin unless noted. The Auth column shows what a route requires: No (public), User (signed-in session), Principal (session or API key), or a specific credential.

Health and Auth

MethodPathAuthPurpose
GET/healthNoService health
GET/POST/api/auth/*Cookie/OAuthBetter Auth handlers
GET/.well-known/oauth-protected-resourceNoMCP protected resource metadata
GET/.well-known/oauth-authorization-serverNoOAuth authorization server metadata
POST/mcpBearerMCP JSON-RPC endpoint

Profile and Path Resolution

MethodPathAuthPurpose
GET/api/profile/meUserCurrent profile
GET/api/profile/username-availability/:usernameNoCheck username
POST/api/profile/usernameUserClaim username
GET/api/profile/projectsPrincipalList projects visible through memberships
GET/api/profile/artifactsPrincipalList owned artifacts
GET/api/by-path/:usernameNoList public projects in workspace
GET/api/by-path/:username/:projectSlugOptionalResolve project and visible artifacts
GET/api/by-path/:username/:projectSlug/:slugOptionalResolve artifact by path
GET/api/slug-preview/:username/:projectSlug/:slugNoPreview artifact URL
Claim username body:
{
  "username": "alice"
}

Projects

MethodPathAuthPurpose
GET/api/projects/slug-availability/:username/:slugPrincipalCheck project slug
POST/api/projectsPrincipalCreate project by workspace slug
Create project body:
{
  "ownerUsername": "alice",
  "slug": "default",
  "title": "Default",
  "icon": "*",
  "description": "Optional"
}

Artifacts

MethodPathAuthPurpose
GET/api/artifacts/slug-availability/:username/:projectSlug/:slugPrincipalCheck artifact slug
POST/api/artifactsPrincipalCreate artifact and first version
GET/api/artifacts/:artifactIdOptionalGet artifact metadata
GET/api/artifacts/:artifactId/permissionsPrincipalCurrent principal permissions
DELETE/api/artifacts/:artifactIdPrincipalSoft-delete artifact
POST/api/artifacts/:artifactId/versionsPrincipalAppend version
POST/api/artifacts/:artifactId/versions/:versionNumber/restorePrincipalRestore old version
GET/api/artifacts/:artifactId/versionsOptionalList versions
GET/api/artifacts/:artifactId/contentOptionalGet source content
GET/api/artifacts/:artifactId/thumbnailOptionalGet thumbnail
GET/api/artifacts/:artifactId/accessPrincipalRead access settings
PATCH/api/artifacts/:artifactId/accessPrincipalUpdate access settings
GET/api/artifacts/:artifactId/diffOptionalDiff two versions
Create artifact body:
{
  "ownerUsername": "alice",
  "projectSlug": "default",
  "slug": "report",
  "type": "md",
  "title": "Report",
  "description": "Optional",
  "content": "# Report",
  "changelog": "Initial publish",
  "access": {
    "publicView": true,
    "publicEdit": false
  }
}
Update body:
{
  "content": "# Report v2",
  "changelog": "Refresh",
  "expectedLatestVersion": 1
}
Access body:
{
  "publicView": false,
  "publicEdit": false,
  "viewerEmails": ["teammate@example.com"]
}
Version list query:
QueryTypeDefaultMax
limitpositive integer50100
Content query:
QueryTypePurpose
versionpositive integerOptional version number; latest when omitted
Diff query:
QueryTypeRequired
frompositive integerYes
topositive integerYes

Workspaces

MethodPathAuthPurpose
GET/api/workspacesPrincipalList workspaces
GET/api/workspaces/slug-availability/:slugPrincipalCheck team slug
POST/api/workspacesPrincipalCreate team workspace
GET/api/workspaces/:workspaceId/projectsPrincipalList workspace projects
GET/api/workspaces/:workspaceId/projects/slug-availability/:slugPrincipalCheck workspace project slug
POST/api/workspaces/:workspaceId/projectsPrincipalCreate workspace project
GET/api/workspaces/:workspaceId/artifactsPrincipalList workspace artifacts
POST/api/workspaces/:workspaceId/artifactsPrincipalCreate workspace artifact
GET/api/workspaces/:workspaceId/membersPrincipalList members
GET/api/workspaces/:workspaceId/seat-usagePrincipalSeat usage and plan info
PATCH/api/workspaces/:workspaceId/members/:userIdPrincipalChange member role
DELETE/api/workspaces/:workspaceId/members/:userIdPrincipalRemove member
GET/api/workspaces/:workspaceId/audit-eventsUserWorkspace audit events
Create team body:
{
  "slug": "acme",
  "name": "Acme"
}
Create workspace project body:
{
  "slug": "design",
  "title": "Design",
  "icon": "*",
  "description": "Optional"
}

Workspace Invitations

MethodPathAuthPurpose
POST/api/workspaces/:workspaceId/invitationsPrincipalInvite member
GET/api/workspaces/:workspaceId/invitationsPrincipalList pending invitations
POST/api/workspace-invitations/:invitationId/revokePrincipalRevoke invitation
POST/api/workspace-invitations/:invitationId/resendPrincipalResend invitation
POST/api/workspace-invitations/acceptUserAccept invitation token
Invitation body:
{
  "email": "teammate@example.com",
  "role": "member"
}

Sharing and Audit

MethodPathAuthPurpose
POST/api/artifacts/:artifactId/share-linksPrincipalCreate share link
GET/api/artifacts/:artifactId/share-linksPrincipalList share links
POST/api/share-links/:shareLinkId/revokePrincipalRevoke share link
GET/api/share/:tokenNoResolve active share link
GET/api/audit-eventsUserAccount or artifact audit events
Create share link body:
{
  "role": "viewer",
  "expiresAt": "2026-06-30T12:00:00.000Z"
}
Audit query:
QueryTypePurpose
artifactIdstringOptional artifact filter
limitpositive integer, max 100Defaults to 50

API Keys

MethodPathAuthPurpose
GET/api/api-keysPrincipalList API keys
POST/api/api-keysPrincipalCreate API key
DELETE/api/api-keys/:apiKeyIdPrincipalRevoke API key
Create key body:
{
  "name": "ci",
  "scopes": ["artifacts:read", "artifacts:create", "artifacts:update"]
}

Billing

MethodPathAuthPurpose
GET/api/billing/plansNoPlans, Dodo products, meters
GET/api/billing/meUserCurrent plan and usage
POST/api/billing/checkoutUserCreate checkout session
POST/api/billing/portalUserCreate billing portal session
POST/api/billing/storage-snapshotUserRecord current user’s storage snapshot
POST/api/internal/billing/storage-snapshotsCron secretRecord snapshots for active accounts
POST/api/webhooks/dodoDodo signatureBilling webhook
Checkout body:
{
  "planId": "builder"
}