Documentation

Admin Invitations

Invite new administrators to the platform

Issue Invite

Create and send an invitation to a new administrator.

Endpoint

POST/auth/admin/users/invitations

Issue an invitation to a new admin user. The invitation token is returned once and must be delivered securely to the invitee.

Headers

ParameterTypeRequiredDescription
AuthorizationstringYesBearer {access_token}
Content-TypestringYesapplication/json

Request Body- Invitation details

json
{
  "email": "admin@example.com",
  "full_name": "John Doe",
  "role": "operator",
  "expires_in_minutes": 1440
}

Response- Invitation created successfully

json
{
  "invite": {
    "invite_id": "550e8400-e29b-41d4-a716-446655440000",
    "email": "admin@example.com",
    "full_name": "John Doe",
    "role": "operator",
    "status": "pending",
    "expires_at": "2025-01-15T10:30:00Z",
    "invited_by": "660e8400-e29b-41d4-a716-446655440001",
    "created_at": "2025-01-14T10:30:00Z"
  },
  "token": "secure_invitation_token_here"
}

Error Responses

StatusCodeDescription
400validation_failedInvalid email format or role
403forbiddenAdmin role required
429rate_limit_exceededRate limit: 5/min, 50/day

Request Body Parameters

FieldTypeRequiredDescription
emailstringYesEmail address of the invitee
full_namestringNoFull name of the invitee
rolestringYesRole: admin, operator, viewer, or finance
expires_in_minutesintegerNoInvitation expiry time in minutes

List Invitations

Retrieve a paginated list of admin invitations.

Endpoint

GET/auth/admin/users/invitations

List all admin invitations with optional filtering.

Headers

ParameterTypeRequiredDescription
AuthorizationstringYesBearer {access_token}

Query Parameters

ParameterTypeRequiredDescription
statusstringNoFilter by status (comma-separated)Values: pending, accepted, cancelled, expired
emailstringNoFilter by email (partial match)
rolestringNoFilter by roleValues: admin, operator, viewer, finance
limitintegerNo (default: 20)Page size
offsetintegerNo (default: 0)Page offset

Response- List of invitations

json
{
  "invitations": [
    {
      "invite_id": "550e8400-e29b-41d4-a716-446655440000",
      "email": "admin@example.com",
      "full_name": "John Doe",
      "role": "operator",
      "status": "pending",
      "expires_at": "2025-01-15T10:30:00Z",
      "created_at": "2025-01-14T10:30:00Z"
    }
  ],
  "total": 1,
  "limit": 20,
  "offset": 0
}

Error Responses

StatusCodeDescription
403forbiddenAdmin role required

Resend Invitation

Resend an existing invitation with a new token.

Endpoint

POST/auth/admin/users/invitations/{inviteID}/resend

Resend an invitation. Generates a new token and optionally updates the expiration.

Headers

ParameterTypeRequiredDescription
AuthorizationstringYesBearer {access_token}

Path Parameters

ParameterTypeRequiredDescription
inviteIDstringYesUUID of the invitation

Query Parameters

ParameterTypeRequiredDescription
expires_in_minutesintegerNoNew expiration time in minutes

Response- Invitation resent

json
{
  "invite": {
    "invite_id": "550e8400-e29b-41d4-a716-446655440000",
    "email": "admin@example.com",
    "status": "pending",
    "expires_at": "2025-01-16T10:30:00Z"
  },
  "token": "new_secure_invitation_token"
}

Error Responses

StatusCodeDescription
404not_foundInvitation not found
429rate_limit_exceededRate limit: 5/min, 50/day

Cancel Invitation

Cancel a pending invitation.

Endpoint

POST/auth/admin/users/invitations/{inviteID}/cancel

Cancel an invitation. The invitation token will no longer be valid.

Headers

ParameterTypeRequiredDescription
AuthorizationstringYesBearer {access_token}

Path Parameters

ParameterTypeRequiredDescription
inviteIDstringYesUUID of the invitation to cancel

Response- No content on success

json

Error Responses

StatusCodeDescription
404not_foundInvitation not found
400invalid_statusInvitation already accepted or cancelled

Accept Invitation

Accept an invitation and create an admin account.

Endpoint

POST/auth/admin/invitations/accept

Accept an invitation using the secure token. This endpoint is unauthenticated - the token provides authorization.

Headers

ParameterTypeRequiredDescription
Content-TypestringYesapplication/json

Request Body- Invitation acceptance details

json
{
  "token": "secure_invitation_token",
  "password": "SecurePassword123!",
  "full_name": "John Doe"
}

Response- Account created successfully

json
{
  "user_id": "770e8400-e29b-41d4-a716-446655440002",
  "email": "admin@example.com",
  "role": "operator"
}

Error Responses

StatusCodeDescription
400validation_failedPassword must be at least 8 characters
401invite_invalidInvitation token invalid or expired
429rate_limit_exceededRate limit: 5/min, 30/day

Request Body Parameters

FieldTypeRequiredDescription
tokenstringYesSecure invitation token from email
passwordstringYesPassword (min 8 characters)
full_namestringNoOverride the invited name