Skip to content

Dashboard API

Dashboard API endpoints are under /dashboard/api/*.

For dashboard serving and same-origin deployment, see Dashboard UI.

Auth model:

  • Session cookie auth from Better Auth (/api/auth/*).
  • Project-scoped admin routes require X-Project-Id.

Required header for project-scoped routes:

Terminal window
X-Project-Id: <project-id>

Creates a dashboard user and bootstraps their first project.

Request body:

{
"name": "Jane Doe",
"email": "jane@example.com",
"password": "super-secret-password",
"projectName": "My Project"
}

Response:

  • 201: { "success": true }
  • 400: invalid JSON or missing required fields (name, email, password, projectName)

Returns projects for the authenticated user.

Response:

  • 200: { "projects": [{ "id": "...", "name": "...", "createdAt": "...", "role": "admin|user" }] }

Creates a project for the authenticated user.

Request body:

{
"name": "New Project"
}

Response:

  • 201: { "projectId": "...", "apiKey": "pulse_sk_...", "name": "New Project" }
  • 400: missing/empty name

These routes require session auth + X-Project-Id + project admin role.

Lists API keys for the selected project.

Response:

  • 200: { "keys": [{ "id": "...", "projectId": "...", "projectName": "...", "key": "pulse_sk_...", "name": "...", "lastUsedAt": "...", "createdAt": "..." }] }

Creates an API key for the selected project.

Request body:

{
"name": "CI Key"
}

name is optional. If omitted, default is "API Key".

Response:

  • 201: { "apiKey": "pulse_sk_..." }
  • 400: invalid request body

Renames an API key.

Request body:

{
"name": "New Key Name"
}

Response:

  • 200: { "success": true }
  • 400: missing/invalid name
  • 404: API key not found

Deletes an API key.

Response:

  • 200: { "success": true }
  • 404: API key not found

These routes require session auth + X-Project-Id + project admin role.

Lists project members.

Response:

  • 200: { "users": [{ "userId": "...", "name": "...", "email": "...", "role": "admin|user", "createdAt": "..." }] }

Adds a user to the selected project.

For an existing account, email is sufficient.
For a new account, provide name, email, and password.

Request body examples:

{
"email": "existing-user@example.com",
"role": "user"
}
{
"name": "New User",
"email": "new-user@example.com",
"password": "super-secret-password",
"role": "admin"
}

Response:

  • 201: { "user": { "userId": "...", "name": "...", "email": "...", "role": "admin|user", "createdAt": "..." } }
  • 400: invalid JSON or missing required fields
  • 409: user already belongs to the project

Session/account endpoints are exposed under /api/auth/* (for example sign-in, sign-out, session).