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/registernoneRegister a user; returns a bearer token.
POST/v1/auth/loginnoneVerify 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/forgotnoneEmail a password-reset code.
PUT/v1/auth/forgot/:tokennoneConsume a reset token; set a new password.

Tenants ​

Base: /api/v1/dashboard/tenants

MethodPathPermissionDescription
GET/tenantsnoneList the caller's tenants (paginated).
POST/tenantsnoneCreate 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/menoneCaller'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/extended-accessprojects.viewPer-capability extended-access status.
POST/projects/:projectId/extended-access/requestprojects.updateRequest capabilities (capabilities[], pii).
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/admin, Authorization: Bearer <jwt> plus a platform canAdmin('…') permission. This surface sits above organizations; an organization role never grants admin access (no resolveTenant).

MethodPathPermissionDescription
GET/menoneCaller'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.

Extended access ​

Gate project capabilities per project. The registry currently defines ai (the AI OCR driver) and pii (reading the extracted identity/address data back). Each capability is a separate request/grant, so an admin can approve one and leave another pending. Project owners request capabilities (under Projects); admins list, review, grant, and revoke here.

MethodPathPermissionDescription
GET/extended-accessadmin.extended_access.viewList grants; filter by status/capability.
GET/extended-access/countadmin.extended_access.viewCount of pending requests (for the nav badge).
GET/extended-access/projects/:projectIdadmin.extended_access.viewA project's grants across every capability.
POST/extended-access/grantadmin.extended_access.manageGrant a capability (project_id, capability).
POST/extended-access/revokeadmin.extended_access.manageRevoke a capability (project_id, capability).

A PII request carries pii: { categories: ["identity","address"], timing: "before" | "after", justification }. Once granted, the extracted data is read only through the server SDK's sessions.retrieve() (secret key); it is never sent to the browser widget or included in webhooks. See Extracted PII.

Released under the MIT License.