Dashboard

Team Management API

Last Updated: January 5, 2026
Feature: Multi-User Team Support

The Team Management API enables organizations to collaborate on VerifyHuman with multiple users, role-based permissions, and secure invitation workflows.


Table of Contents


Overview

Multi-User Team Support allows organizations to:

Key Features:


Roles & Permissions

Permission Owner Admin Member
View dashboard
View verifications
Create API keys
Manage API keys Own only
View reports
Export reports
View credits/billing
Manage subscription
Invite members
Remove members
Change roles
Delete organization

Role Descriptions

Owner

Admin

Member


Plan Limits

Team size is limited by subscription plan:

Plan Max Team Members
Free 1 (owner only)
Starter 3
Growth 10
Pro 25
Enterprise Unlimited

Note: Pending invitations count toward the team limit.


API Endpoints

All endpoints require session authentication (logged-in user).

GET /api/team/members

List all team members in your organization.

Response (200):

{
  "members": [
    {
      "id": 1,
      "user_id": 123,
      "email": "owner@company.com",
      "name": "John Owner",
      "role": "owner",
      "joined_at": "2025-01-01T00:00:00Z",
      "last_active": "2025-12-31T10:30:00Z"
    },
    {
      "id": 2,
      "user_id": 456,
      "email": "admin@company.com",
      "name": "Jane Admin",
      "role": "admin",
      "joined_at": "2025-06-15T00:00:00Z",
      "last_active": "2025-12-30T15:00:00Z"
    },
    {
      "id": 3,
      "user_id": 789,
      "email": "member@company.com",
      "name": "Bob Member",
      "role": "member",
      "joined_at": "2025-09-01T00:00:00Z",
      "last_active": "2025-12-29T09:00:00Z"
    }
  ],
  "total": 3,
  "limit": 10
}

POST /api/team/invite

Send an invitation to a new team member.

Required Role: Owner or Admin

Request Body:

{
  "email": "newuser@company.com",
  "role": "member"
}

Parameters:

Field Type Required Description
email String Yes Email address to invite
role String Yes Role to assign: admin or member

Response (201):

{
  "message": "Invitation sent successfully",
  "invite": {
    "id": 5,
    "email": "newuser@company.com",
    "role": "member",
    "expires_at": "2025-01-14T00:00:00Z",
    "created_at": "2025-01-07T00:00:00Z"
  }
}

Notes:


POST /api/team/invite/accept

Accept a team invitation using the token from email.

Request Body:

{
  "token": "invite_abc123xyz456..."
}

Response (200):

{
  "message": "Invitation accepted",
  "organization": "Acme Corp",
  "role": "member"
}

Errors:


PATCH /api/team/members/{id}/role

Change a team member's role.

Required Role: Owner

Request Body:

{
  "role": "admin"
}

Response (200):

{
  "message": "Role updated successfully",
  "member": {
    "id": 3,
    "email": "member@company.com",
    "role": "admin"
  }
}

Restrictions:


DELETE /api/team/members/{id}

Remove a member from the team.

Required Role: Owner or Admin

Response (200):

{
  "message": "Member removed successfully"
}

Restrictions:


GET /api/team/invites

List pending invitations.

Required Role: Owner or Admin

Response (200):

{
  "invites": [
    {
      "id": 5,
      "email": "pending@company.com",
      "role": "member",
      "invited_by": "owner@company.com",
      "created_at": "2025-01-05T00:00:00Z",
      "expires_at": "2025-01-12T00:00:00Z"
    }
  ],
  "total": 1
}

DELETE /api/team/invites/{id}

Cancel a pending invitation.

Required Role: Owner or Admin

Response (200):

{
  "message": "Invitation cancelled"
}

Invitation Workflow

Sending Invitations

  1. Owner/Admin initiates - Goes to Team page, enters email and role
  2. System validates - Checks team limit and existing membership
  3. Email sent - Invitation email with secure token link
  4. 7-day expiry - Invitation expires if not accepted

Accepting Invitations

  1. Recipient clicks link - Opens invite page
  2. Account check:
    • If logged in: Direct acceptance
    • If no account: Creates account first
    • If different account: Must log out and log in with invited email
  3. Join team - Added to organization with assigned role
  4. Access granted - Immediate access to team resources

Invitation Email Template

Subject: You've been invited to join [Organization] on VerifyHuman

Hi,

[Inviter Name] has invited you to join [Organization] as a [Role] on VerifyHuman.

Click below to accept:
[Accept Invitation Button]

This invitation expires in 7 days.

If you didn't expect this invitation, you can safely ignore this email.

— The VerifyHuman Team

Dashboard Access

Team Page

Access team management at: Dashboard > Team

Features:

Activity Visibility

Team members share visibility into:

Private to each member:


Error Handling

Validation Errors (400):

{
  "error": "Invalid email format"
}

Permission Denied (403):

{
  "error": "Only owners can change member roles"
}

Team Limit Reached (403):

{
  "error": "Team limit reached. Upgrade your plan for more members.",
  "current": 10,
  "limit": 10
}

Not Found (404):

{
  "error": "Team member not found"
}

Common Errors:

Error Cause Solution
Team limit reached At plan maximum Upgrade plan or remove members
Email already on team Duplicate invite Member already exists
Invalid invitation token Expired or used Request new invitation
Cannot remove owner Tried to delete owner Transfer ownership first
Permission denied Insufficient role Contact owner/admin

See Also