Skip to main content

Usernames and workspace slugs

OpenDocs has two human-readable identifiers and they do different things. They're easy to confuse, so the API exposes a check endpoint for each.

UsernameWorkspace slug
What it identifiesA personA workspace (team or solo)
Where it appears in URLsopendocs.cc/@<username> (profile page)opendocs.cc/<workspace-slug>/<post-slug> (published documents)
ScopeGlobal across the platformGlobal across the platform
Chosen atOnboarding step 1Onboarding step 2 / when creating a new workspace
Check endpointGET /api/v1/usernames/checkGET /api/v1/workspace/check-slug
Normalizationlowercaselowercase, - separators
tip

If you're building CLI/agent tooling and need to construct the URL a newly-published document will live at, use the workspace slug from GET /api/v1/meonboarding.workspace.slug, not the username.

GET /api/v1/usernames/check

Check whether a username is valid, normalized, and currently available.

Auth

No auth required.

Request

GET /api/v1/usernames/check?username=pat

Query parameters

NameTypeRequiredDescription
usernamestringYesThe username to validate

Success response

{
"available": true,
"normalized": "pat",
"reason": null
}

Invalid or reserved response

{
"available": false,
"normalized": "docs",
"reason": "reserved"
}

reason can be:

  • invalid — failed format validation (length, allowed characters)
  • reserved — matches a reserved route name like docs, pricing, faq
  • null — when available: true

Notes

  • Usernames are normalized to lowercase.
  • Reserved route names (docs, pricing, faq, and similar) are blocked.
  • The username is used as the personal-profile path (opendocs.cc/@<username>), not the document URL.

GET /api/v1/workspace/check-slug

Check whether a workspace slug is valid, normalized, and currently available. This is the check you want for anything URL-related — published documents live under the workspace slug.

Auth

Session auth required (onboarding flow).

Request

GET /api/v1/workspace/check-slug?slug=acme-docs

Query parameters

NameTypeRequiredDescription
slugstringYesThe workspace slug to validate

Success response

{
"available": true,
"normalized": "acme-docs"
}

Unavailable response

{
"available": false,
"reason": "Workspace slug is already taken."
}

Notes

  • Workspace slugs are normalized to lowercase and allow a–z, 0–9, and -.
  • Reserved slugs (shared with reserved usernames — docs, pricing, faq, and similar) are blocked.
  • The workspace slug is what appears in every published document's URL: opendocs.cc/<workspace-slug>/<post-slug>.