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
| Parameter | Type | Required | Description |
|---|
email | string | Yes | Team member’s email address |
name | string | No | Team member’s full name |
role | string | Yes | admin or member (cannot create owners) |
client_ids | array | No | Client brand IDs to assign (members only) |
message | string | No | Custom 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
| Parameter | Type | Description |
|---|
role | string | admin or member |
client_ids | array | Client 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
| Parameter | Type | Description |
|---|
user_ids | array | Team 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
| Parameter | Type | Default | Description |
|---|
days | integer | 7 | Activity in last N days (max: 90) |
user_id | string | — | Filter by team member |
action | string | — | Filter 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
Related Pages