Skip to content

Dashboard API

The management surface used by the dashboard UI. Auth: Authorization: Bearer <jwt>.

Tenant-scoped routes run through resolveTenant (the caller must be an active member) and a can('…') permission guard. The required permission is listed per route below.

Auth

Base: /api/v1/auth — no auth unless noted.

MethodPathAuthDescription
POST/v1/auth/registerRegister a user; returns a bearer token.
POST/v1/auth/loginVerify credentials; issue a session token.
GET/v1/auth/meJWTThe authenticated user.
DELETE/v1/auth/logoutJWTRevoke the current token.
POST/v1/auth/invitations/acceptJWTAccept a tenant invitation by token.
POST/v1/auth/forgotEmail a password-reset code.
PUT/v1/auth/forgot/:tokenConsume a reset token; set a new password.

Tenants

Base: /api/v1/dashboard/tenants

MethodPathPermissionDescription
GET/tenantsList the caller's tenants (paginated).
POST/tenantsCreate a tenant; seeds roles; caller = owner.
GET/tenants/:tenantIdtenants.viewShow the tenant.
PATCH/tenants/:tenantIdtenants.updateUpdate name / logo / settings.

Members & invitations

Base: /api/v1/dashboard/tenants/:tenantId

MethodPathPermissionDescription
GET/meCaller's role / direct / effective perms.
GET/membersmembers.viewList members (paginated).
GET/members/:memberIdmembers.viewMember detail.
PATCH/members/:memberIdmembers.updateChange a member's role.
POST/invitationsmembers.inviteInvite an email with a role.
GET/members/:memberId/permissionsmembers.viewMember's role / direct / effective perms.
POST/members/:memberId/permissionsmembers.updateGrant a direct tenant permission.
DELETE/members/:memberId/permissions/:permissionmembers.updateRevoke a direct permission.

Projects & project members

Base: /api/v1/dashboard/tenants/:tenantId/projects

MethodPathPermissionDescription
GET/projectsprojects.viewList projects (paginated).
POST/projectsprojects.createCreate a project.
GET/projects/:projectIdprojects.viewShow a project.
PATCH/projects/:projectIdprojects.updateUpdate name/status/settings/branding/thresholds.
GET/projects/:projectId/ai-accessprojects.viewAI-processing access status for the project.
POST/projects/:projectId/ai-access/requestprojects.updateRequest AI document processing.
GET/projects/:projectId/membersmembers.viewList project members.
POST/projects/:projectId/membersmembers.updateAdd a tenant member to the project.
PATCH/projects/:projectId/members/:memberIdmembers.updateChange a project member's role.
DELETE/projects/:projectId/members/:memberIdmembers.removeRemove a project member.

API keys

Base: /api/v1/dashboard/tenants/:tenantId/projects/:projectId/api-keys

MethodPathPermissionDescription
GET/api-keysapi_keys.viewList keys (secret never returned).
POST/api-keysapi_keys.createMint a key — plaintext secret returned once.
DELETE/api-keys/:keyIdapi_keys.revokeRevoke a key.

Webhooks

Base: /api/v1/dashboard/tenants/:tenantId/projects/:projectId/webhooks

MethodPathPermissionDescription
GET/webhookswebhooks.viewList endpoints (secret never returned).
POST/webhookswebhooks.createRegister an endpoint; secret returned once.
PATCH/webhooks/:webhookIdwebhooks.updateUpdate url / events / status.
DELETE/webhooks/:webhookIdwebhooks.deleteDelete an endpoint.
POST/webhooks/:webhookId/testwebhooks.testQueue a sample delivery.

See Webhooks for the payload and signature.

Sessions & reviews

Base: /api/v1/dashboard/tenants/:tenantId

MethodPathPermissionDescription
GET/sessionssessions.viewList sessions; filter by status, decision_reason, project_id.
GET/sessions/:idsessions.viewSession detail.
POST/sessions/:id/approvereviews.approveApprove; optional reason.
POST/sessions/:id/rejectreviews.rejectReject; optional reason.
POST/sessions/:id/request-retryreviews.request_retryRequest a kind retry (document/selfie/full).
POST/sessions/:id/assignreviews.assignAssign to a reviewer (user_id).
POST/sessions/:id/suspiciousreviews.noteFlag as suspicious.
POST/sessions/:id/notesreviews.noteAttach a reviewer note.

Audit logs

MethodPathPermissionDescription
GET/audit-logsaudit_logs.viewList audit entries; filter by action, entity_type.

Roles & permissions

Base: /api/v1/dashboard/tenants/:tenantId

MethodPathPermissionDescription
GET/permissionssettings.viewThe permission catalogue, grouped.
GET/rolessettings.viewList roles (paginated).
POST/rolessettings.updateCreate a custom role with permissions.
GET/roles/:roleIdsettings.viewShow a role with its permission names.
PATCH/roles/:roleIdsettings.updateUpdate a role's name / description / perms.

Admin (platform)

Base: /api/v1/adminAuthorization: Bearer <jwt> plus a platform canAdmin('…') permission. This surface sits above organizations; an organization role never grants admin access (no resolveTenant).

MethodPathPermissionDescription
GET/meCaller's admin standing (empty for non-admins).
GET/settingsadmin.settings.viewPlatform settings.
PATCH/settingsadmin.settings.updateUpdate platform settings.
GET/organizationsadmin.organizations.viewList organizations (paginated).
GET/organizations/:organizationIdadmin.organizations.viewOrganization detail + counts.
GET/organizations/:organizationId/projectsadmin.organizations.viewThe organization's projects (paginated).
GET/usersadmin.users.viewList users (paginated).
GET/users/:userIdadmin.users.viewUser detail.
POST/users/:userId/adminadmin.users.manageGrant platform admin.
DELETE/users/:userId/adminadmin.users.manageRevoke platform admin (never the last admin).
POST/users/:userId/statusadmin.users.manageSet account standing: active/restricted/suspended.
POST/users/:userId/passwordadmin.users.manageReset a user's password.
GET/audit-logsadmin.audit.viewPlatform audit log.

AI document-processing access

Gate the AI OCR driver per project. Project owners request access (under Projects); admins list, grant, and revoke it here.

MethodPathPermissionDescription
GET/ai-accessadmin.ai_processing.viewList grants/requests; filter by status.
GET/ai-access/countadmin.ai_processing.viewCount of pending requests (for the nav badge).
POST/ai-access/grantadmin.ai_processing.manageGrant a project (project_id).
POST/ai-access/revokeadmin.ai_processing.manageRevoke a project (project_id).

Released under the MIT License.