Skip to main content
The Users API allows tenant administrators to list existing users and invite new ones. User creation uses a privacy-safe response that does not reveal whether an email is already registered.

Base path

/api/v1/users

List users

GET /api/v1/users
Returns a paginated list of users for the current tenant, ordered by creation date (newest first). Only returns non-sensitive fields.

Query parameters

ParameterRequiredTypeDescription
limitNointegerMaximum results per page. Default 25.
cursorNostringCursor for keyset pagination.

Response 200

{
  "data": [
    {
      "id": "usr_001",
      "name": "Jane Smith",
      "email": "jane@example.com",
      "image": null,
      "role": "admin",
      "lastLoginAt": "2026-03-16T10:00:00.000Z",
      "createdAt": "2026-02-01T12:00:00.000Z",
      "updatedAt": "2026-03-16T10:00:00.000Z"
    }
  ],
  "pagination": {
    "total": 5,
    "limit": 25,
    "hasMore": false,
    "nextCursor": null
  }
}

Invite a user

POST /api/v1/users
Creates a new user account for the tenant. If the email is already registered, the response is identical to a successful creation to prevent email enumeration.

Request body

FieldRequiredTypeDescription
emailYesstringValid email address.
nameNostring | nullUser display name.
roleNoenumviewer (default), editor, admin.

Example request

{
  "email": "jane@example.com",
  "name": "Jane Smith",
  "role": "editor"
}

Response 201

{
  "message": "If this email is not already registered, an account has been created."
}
The response message is intentionally vague for security. The same 201 status and message is returned regardless of whether the user already existed.

Error codes

CodeReason
400Validation error (invalid email, invalid role).
415Content-Type is not application/json.

Role requirements

MethodMinimum role
GETadmin
POSTadmin