API reference
Every request this version of Tesria answers: 200 of them, grouped by area. It is made from the OpenAPI document your Tesria serves, each time this site is published, so it lists what exists rather than what someone remembered to write down.
Two more ways to see the same thing, on your own server:
https://your-server/api/docs: the interactive reference, with every request’s fields and answers, and a Test Request button to try one. It needs no account to read.https://your-server/api/openapi.json: the document itself, for tools that generate a client library from an OpenAPI description.
Reading the list
Each line is the method and the path.
{id}and the like are filled in:GET /api/pages/{id}becomesGET /api/pages/2f9a…. After it come the query parameters it takes and the fields of its JSON body, when it has any.A read-only token may use any GET. Anything else needs a token with full access, and some of it needs a right on the instance or the space as well. What you may not see answers
404, exactly as if it did not exist.A token cannot manage its account: API tokens, the password, sessions, two-factor and the profile answer
token_not_allowed. Those are done in a browser.Administration is listed for completeness. Each of those requests needs the same right as its tab in Administration.
Spaces
Spaces: list, create, read, change, archive, delete, and which exports each allows.
GET /api/spacesquery: includeArchivedPOST /api/spacesbody: key, name, descriptionGET /api/spaces/{key}PUT /api/spaces/{key}body: name, description, iconKind, iconValue, iconColor, treeStyleDELETE /api/spaces/{key}body: confirmKey, password, codePOST /api/spaces/{key}/archiveGET /api/spaces/{key}/deletion-previewPUT /api/spaces/{key}/exportsbody: markdown, html, pdf, site, packPOST /api/spaces/{key}/unarchive
Pages
Pages: the tree, reading and writing, history, moving and copying, drafts and the trash.
POST /api/pagesbody: spaceId, parentPageId, title, contentJsonGET /api/pages/{id}PUT /api/pages/{id}body: title, contentJson, changeComment, baseVersionDELETE /api/pages/{id}POST /api/pages/{id}/copybody: spaceId, parentPageId, includeChildrenDELETE /api/pages/{id}/draftPUT /api/pages/{id}/emojibody: emojiPUT /api/pages/{id}/layoutbody: fullWidthPUT /api/pages/{id}/movebody: parentPageId, index, spaceIdPOST /api/pages/{id}/publishbody: title, contentJsonDELETE /api/pages/{id}/purgePOST /api/pages/{id}/restoreGET /api/pages/{id}/versionsGET /api/pages/{id}/versions/{number}POST /api/pages/{id}/versions/{number}/restorePOST /api/pages/draftbody: spaceId, parentPageIdGET /api/pages/trashquery: spaceIdGET /api/pages/treequery: spaceId
Search
Full-text search across everything the caller may see.
GET /api/searchquery: q, spaceId
Labels
Labels on pages, and finding pages by label.
GET /api/labelsGET /api/labels/{name}/pagesGET /api/pages/{pageId}/labelsPOST /api/pages/{pageId}/labelsbody: nameDELETE /api/pages/{pageId}/labels/{name}
Comments
Comments on a page or on a few words of it, and replies.
PUT /api/comments/{id}body: bodyDELETE /api/comments/{id}POST /api/comments/{id}/reopenPOST /api/comments/{id}/resolveGET /api/pages/{pageId}/commentsPOST /api/pages/{pageId}/commentsbody: body, parentCommentId, anchorJson
Attachments
Files attached to pages: upload, list, download, remove.
GET /api/attachments/{id}DELETE /api/attachments/{id}GET /api/attachments/{id}/downloadGET /api/attachments/{id}/viewGET /api/pages/{pageId}/attachmentsPOST /api/pages/{pageId}/attachmentsbody: a file (multipart form)
Templates
Page templates, for a space or the whole wiki.
GET /api/templatesquery: spaceIdPOST /api/templatesbody: spaceId, name, description, contentJsonPUT /api/templates/{id}body: name, descriptionDELETE /api/templates/{id}
Watches
Watching a page or a space, to be notified of changes.
GET /api/pages/{pageId}/watchPOST /api/pages/{pageId}/watchDELETE /api/pages/{pageId}/watchGET /api/spaces/{key}/watchPOST /api/spaces/{key}/watchDELETE /api/spaces/{key}/watch
Notifications
The bell: what the caller has been told about.
GET /api/notificationsquery: unreadOnly, takePOST /api/notifications/{id}/readPOST /api/notifications/read-allGET /api/notifications/unread-count
Permissions
Who may view, edit or administer a space, and restrictions on single pages.
GET /api/pages/{pageId}/restrictionsPOST /api/pages/{pageId}/restrictionsbody: principalType, principalId, operationDELETE /api/pages/{pageId}/restrictions/{id}GET /api/spaces/{key}/permissionsPOST /api/spaces/{key}/permissionsbody: principalType, principalId, operationDELETE /api/spaces/{key}/permissionsDELETE /api/spaces/{key}/permissions/{id}
Groups
Named sets of people, for sharing with a team at once.
GET /api/groupsPOST /api/groupsbody: name, descriptionPUT /api/groups/{id}body: name, descriptionDELETE /api/groups/{id}GET /api/groups/{id}/membersPOST /api/groups/{id}/membersbody: userIdDELETE /api/groups/{id}/members/{userId}GET /api/users
Export
A page as Markdown, HTML or PDF, a space as a website or a wiki pack, and importing a pack.
GET /api/export-progress/{id}GET /api/pages/{id}/exportquery: formatGET /api/spaces/{key}/export/packquery: progressGET /api/spaces/{key}/export/sitequery: audience, progressPOST /api/spaces/import
Blocks
Live content (a page’s children, recent changes and the rest), resolved for the caller.
GET /api/pages/{hostId}/blocks/{kind}
Embeds
Link previews and embeds, from the sites on the allowed list.
GET /api/embeds/resolvequery: urlGET /api/embeds/unfurlquery: url
Media
Avatars and space icons.
GET /api/media/avatars/{userId}PUT /api/media/avatars/mebody: a file (multipart form)DELETE /api/media/avatars/mePUT /api/media/avatars/me/variantbody: variantGET /api/media/space-icons/{key}PUT /api/media/space-icons/{key}body: a file (multipart form)DELETE /api/media/space-icons/{key}
Webhooks
Webhooks for a space: calls to your program when something happens.
GET /api/spaces/{key}/webhooksPOST /api/spaces/{key}/webhooksbody: url, eventsDELETE /api/spaces/{key}/webhooks/{id}
API tokens
The caller’s own API tokens. Only from a browser session: a token cannot manage tokens.
GET /api/api-tokensPOST /api/api-tokensbody: name, readOnly, expiresInDaysDELETE /api/api-tokens/{id}
Auth
Signing in and out, the caller’s own account, sessions and two-factor. Only GET /api/auth/me answers a token.
POST /api/auth/loginbody: email, passwordPOST /api/auth/login/totpbody: challenge, codePOST /api/auth/logoutGET /api/auth/mePUT /api/auth/mebody: displayNamePUT /api/auth/me/emailbody: currentPassword, emailPUT /api/auth/me/notificationsbody: emailNotificationsPUT /api/auth/me/onboardingbody: tourCompleted, tourSkipped, tipsEnabled, dismissTip, resetTips, resetTourPUT /api/auth/me/passwordbody: currentPassword, newPasswordGET /api/auth/me/recovery-codesPOST /api/auth/me/recovery-codesbody: currentPasswordPOST /api/auth/me/recovery-codes/acknowledgeGET /api/auth/me/sessionsDELETE /api/auth/me/sessions/{id}DELETE /api/auth/me/sessions/othersPOST /api/auth/me/totp/disablebody: currentPassword, codePOST /api/auth/me/totp/enablebody: codePOST /api/auth/me/totp/setupbody: currentPasswordGET /api/auth/oidc/loginquery: returnUrlGET /api/auth/oidc/statusPOST /api/auth/reauthbody: password, codePOST /api/auth/recover/codebody: email, code, newPasswordPOST /api/auth/recover/emailbody: emailPOST /api/auth/recover/tokenbody: token, newPasswordGET /api/auth/recovery-optionsPOST /api/auth/registerbody: email, displayName, password, inviteToken
Collaboration
Editing at the same time: the short-lived token the editor opens a page with.
GET /api/pages/{id}/collab-token
Instance
What an anonymous visitor may know about this Tesria: its name, branding and version.
GET /api/instance
Setup
The first-run setup wizard.
GET /api/setupPOST /api/setup/completePOST /api/setup/steps/{key}body: skipped
Admin
Administration: people, roles, invites, spaces, security, backups, settings, branding, API tokens and the dashboard. Each needs its own right.
GET /api/admin/aboutPOST /api/admin/about/checkGET /api/admin/about/noticesGET /api/admin/api-tokensDELETE /api/admin/api-tokens/{id}GET /api/admin/api-tokens/activityquery: tokenId, takeGET /api/admin/api-tokens/summaryquery: daysPOST /api/admin/audit/verifyGET /api/admin/backupsquery: includeRemovedPOST /api/admin/backups/{label}/restorebody: confirmLabel, password, code, atGET /api/admin/backups/{label}/restore-previewquery: atPOST /api/admin/backups/{label}/restore-testGET /api/admin/backups/jobs/{id}PUT /api/admin/backups/policybody: enabled, keepCount, keepDaysPOST /api/admin/backups/policy/previewbody: enabled, keepCount, keepDaysPOST /api/admin/backups/restore/cancelPOST /api/admin/backups/restore/discard-keptbody: confirmLabel, password, code, atPOST /api/admin/backups/restore/undobody: confirmLabel, password, code, atPOST /api/admin/backups/runPOST /api/admin/backups/targets/{slot}/copyPOST /api/admin/backups/targets/{slot}/testGET /api/admin/brandingPUT /api/admin/brandingbody: brandName, display, signInArrangement, themePolicy, accentPolicy, accentName, accentLight, accentDarkPOST /api/admin/branding/accent-previewbody: light, darkPUT /api/admin/branding/faviconbody: a file (multipart form)DELETE /api/admin/branding/faviconPUT /api/admin/branding/logobody: a file (multipart form)DELETE /api/admin/branding/logoPUT /api/admin/branding/logo-darkbody: a file (multipart form)DELETE /api/admin/branding/logo-darkPOST /api/admin/branding/resetGET /api/admin/dashboardquery: rangeDaysGET /api/admin/invitesPOST /api/admin/invitesbody: email, expiresInDays, sendEmail, messageDELETE /api/admin/invites/{id}GET /api/admin/invites/emailGET /api/admin/rolesPOST /api/admin/rolesbody: name, description, tier, copyFromPUT /api/admin/roles/{roleId}body: name, descriptionDELETE /api/admin/roles/{roleId}PUT /api/admin/roles/{roleId}/permissionsbody: permissionsPOST /api/admin/roles/{roleId}/resetPOST /api/admin/roles/reviewGET /api/admin/security/alertsquery: statusPOST /api/admin/security/alerts/{id}/acknowledgebody: notePOST /api/admin/security/alerts/{id}/resolvebody: noteGET /api/admin/security/blocksPOST /api/admin/security/blocksbody: cidr, reason, expiresInHoursDELETE /api/admin/security/blocks/{id}GET /api/admin/security/eventsquery: kind, severity, takeGET /api/admin/security/limitsGET /api/admin/security/overviewGET /api/admin/settingsPUT /api/admin/settingsbody: instanceName, baseUrl, allowPublicRegistration, allowPublicSpaces, emailEnabled, smtpHost, smtpPort, smtpUsername, smtpPassword, smtpFromAddress, smtpTls, requireTotpForAdmins, embedAllowlist, loginRateLimitPerMinute, anonymousRateLimitPerMinute, tokenMintLimitPerHour, lockoutThreshold, lockoutBaseSeconds, lockoutMaxSeconds, smtpProvider, microsoftClientId, microsoftClientSecret, microsoftTenant, googleClientId, googleClientSecret, restrictImageHosts, imageAllowlistPOST /api/admin/settings/email/oauth/{provider}/startPOST /api/admin/settings/email/oauth/completebody: addressPOST /api/admin/settings/email/oauth/disconnectGET /api/admin/settings/email/providersPOST /api/admin/settings/email/testGET /api/admin/spacesPUT /api/admin/spaces/{key}/publicbody: isPublic, publicCommentsPOST /api/admin/spaces/{key}/recover-accessGET /api/admin/tailscaleGET /api/admin/usersPOST /api/admin/users/{userId}/disable-two-factorPOST /api/admin/users/{userId}/reset-passwordPOST /api/admin/users/{userId}/revoke-sessionsPOST /api/admin/users/{userId}/revoke-tokensPUT /api/admin/users/{userId}/rolebody: role, roleIdPUT /api/admin/users/{userId}/statusbody: statusPOST /api/admin/users/{userId}/transfer-ownershipPOST /api/admin/users/{userId}/unlock
Audit
The audit log.
GET /api/auditquery: targetType, targetId, take
Health
Whether this Tesria is running (/api/health); the version too, to a signed-in caller.
GET /api/health
Applies to | Tesria 0.6 and later |
|---|---|
Updated | September 24, 2026 |
Changes | Revised. |