Skip to main content

Overview

The Team Management API enables programmatic control over team members, roles, and client brand assignments. Base Endpoint: /v1/team Required Scopes:
  • admin:team - Manage team members
Agency Tier Only — Team management requires Agency subscription.

List Team Members

Get all team members in your agency account.

GET /v1/team/members

curl https://api.branddna.app/v1/team/members \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

{
  "data": [
    {
      "id": "usr_abc123",
      "email": "sarah@agency.com",
      "name": "Sarah Chen",
      "role": "owner",
      "status": "active",
      "client_access": "all",
      "created_at": "2025-01-15T10:00:00Z",
      "last_active": "2026-01-27T14:00:00Z"
    },
    {
      "id": "usr_def456",
      "email": "marcus@agency.com",
      "name": "Marcus Lee",
      "role": "admin",
      "status": "active",
      "client_access": "all",
      "created_at": "2025-02-01T10:00:00Z",
      "last_active": "2026-01-27T13:30:00Z"
    },
    {
      "id": "usr_ghi789",
      "email": "jordan@agency.com",
      "name": "Jordan Taylor",
      "role": "member",
      "status": "active",
      "client_access": "assigned",
      "assigned_clients": ["cln_001", "cln_002", "cln_005"],
      "created_at": "2025-03-10T10:00:00Z",
      "last_active": "2026-01-27T12:00:00Z"
    }
  ]
}
Roles:
  • owner - Full account access (billing, team management)
  • admin - Team and client management (no billing access)
  • member - Assigned client access only

Invite Team Member

Send invitation to join your agency account.

POST /v1/team/invitations

curl https://api.branddna.app/v1/team/invitations \
  -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "alex@agency.com",
    "name": "Alex Rivera",
    "role": "member",
    "client_ids": ["cln_001", "cln_003"]
  }'

Request Parameters

ParameterTypeRequiredDescription
emailstringYesTeam member’s email address
namestringNoTeam member’s full name
rolestringYesadmin or member (cannot create owners)
client_idsarrayNoClient brand IDs to assign (members only)
messagestringNoCustom invitation message (max 200 chars)

Response

{
  "data": {
    "invitation_id": "inv_xyz789",
    "email": "alex@agency.com",
    "role": "member",
    "status": "pending",
    "expires_at": "2026-02-03T14:23:45Z",
    "invitation_url": "https://branddna.app/join/inv_xyz789"
  }
}
Invitation expires in 7 days.

Get Invitation Status

Check if invitation has been accepted.

GET /v1/team/invitations/:invitation_id

curl https://api.branddna.app/v1/team/invitations/inv_xyz789 \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

{
  "data": {
    "invitation_id": "inv_xyz789",
    "email": "alex@agency.com",
    "role": "member",
    "status": "accepted",
    "accepted_at": "2026-01-28T09:15:00Z",
    "user_id": "usr_jkl012"
  }
}
Status Values:
  • pending - Not yet accepted
  • accepted - User joined team
  • expired - Invitation expired (7 days)
  • revoked - Invitation canceled

Revoke Invitation

Cancel a pending invitation.

DELETE /v1/team/invitations/:invitation_id

curl https://api.branddna.app/v1/team/invitations/inv_xyz789 \
  -X DELETE \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

{
  "data": {
    "invitation_id": "inv_xyz789",
    "revoked": true
  }
}

Update Team Member

Change team member role or client assignments.

PATCH /v1/team/members/:user_id

curl https://api.branddna.app/v1/team/members/usr_jkl012 \
  -X PATCH \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "role": "admin",
    "client_ids": ["cln_001", "cln_002", "cln_003"]
  }'

Request Parameters

ParameterTypeDescription
rolestringadmin or member
client_idsarrayClient brand IDs (overwrites existing)
Cannot change owner role via API. Use web interface to transfer ownership.

Remove Team Member

Remove a team member from your account.

DELETE /v1/team/members/:user_id

curl https://api.branddna.app/v1/team/members/usr_jkl012 \
  -X DELETE \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

{
  "data": {
    "user_id": "usr_jkl012",
    "removed": true,
    "seat_released": true
  }
}
Effects:
  • User loses access immediately
  • Seat remains billed through end of billing period
  • User’s analyses/tasks remain in system

List Client Brands

Get all client brands in your agency account.

GET /v1/team/clients

curl https://api.branddna.app/v1/team/clients \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

{
  "data": [
    {
      "client_id": "cln_001",
      "name": "Acme SaaS",
      "url": "https://acmesaas.com",
      "assigned_members": ["usr_abc123", "usr_def456", "usr_ghi789"],
      "analysis_count": 23,
      "created_at": "2025-06-01T10:00:00Z"
    }
  ]
}

Assign Members to Client

Update client brand access for team members.

POST /v1/team/clients/:client_id/members

curl https://api.branddna.app/v1/team/clients/cln_001/members \
  -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "user_ids": ["usr_ghi789", "usr_jkl012"]
  }'

Request Parameters

ParameterTypeDescription
user_idsarrayTeam member IDs to assign (replaces existing)
Note: Owners and admins always have access to all clients.

Team Activity Log

Retrieve audit log of team actions.

GET /v1/team/activity

curl "https://api.branddna.app/v1/team/activity?days=7" \
  -H "Authorization: Bearer YOUR_API_KEY"

Query Parameters

ParameterTypeDefaultDescription
daysinteger7Activity in last N days (max: 90)
user_idstringFilter by team member
actionstringFilter by action type

Response

{
  "data": [
    {
      "id": "act_001",
      "user_id": "usr_abc123",
      "user_email": "sarah@agency.com",
      "action": "invited_member",
      "details": {
        "invited_email": "alex@agency.com",
        "role": "member"
      },
      "timestamp": "2026-01-27T14:23:45Z",
      "ip_address": "192.0.2.1"
    }
  ]
}
Action Types:
  • invited_member - Sent team invitation
  • removed_member - Removed team member
  • updated_role - Changed member role
  • assigned_client - Assigned member to client
  • exported_pdf - Generated client report

Use Cases

Automated Onboarding

Auto-invite new employees to Brand DNA when they join

Client Provisioning

Automatically assign team when new client project starts

SSO Integration

Sync team roster with Okta, Azure AD, or Google Workspace

Audit & Compliance

Export activity logs for security audits
Final API page: Webhooks