v8

OpenAPI 3.1.02026-08-033623795.0 MB
Team Members

Create Team Member

Adds a member to an account's team with a system role. Identify them by exactly one of user_id or email. If the person has not yet accepted — or the email does not belong to a Whop account yet — an invitation is sent instead and the response is 202 with { "object": "team_member_invite", "invitation_sent": true }. If they already have a pending invite, the request fails with a 400. Custom roles cannot be granted via the API.

post/team_members

Headers

Idempotency-Keystring
Example:d9105228-4a08-46b1-8b91-42fed586d383

A unique key that makes this request safe to retry. See Idempotent requests.

Request body

account_idstring required

Account ID, prefixed biz_.

emailstring

Email address to invite. Mutually exclusive with user_id. If the email already belongs to a Whop account it is treated the same as passing that account's user_id; otherwise a pending invite is created for the email.

role'owner' | 'admin' | 'sales_manager' | 'moderator' | 'advertiser' required

The system role to grant.

user_idstring

The user to add to the team, prefixed user_. Mutually exclusive with email.

Response

Team member created.

account_idstring required

The account this membership belongs to, prefixed biz_.

created_atstring required

When the member joined or the invite was sent, as an ISO 8601 timestamp.

emailstring nullable required

The member's email address. For accepted members, null unless the caller holds the email read scope; for invites, the invited address.

idstring required

Team member ID — ausr_ for accepted members, ausri_ for pending invites.

is_agentboolean required

Whether this member is an agent (app-controlled account) rather than a human team member. Always false for invites.

role'owner' | 'admin' | 'sales_manager' | 'moderator' | 'advertiser' | 'app_manager' | 'support' | 'manager' | 'custom' required

The member's role on the account. custom means a bespoke dashboard-managed role; the API can read but not grant it.

status'joined' | 'pending' required

joined for accepted members, pending while the invite is pending.

updated_atstring required

When the membership was last updated, as an ISO 8601 timestamp.

Example response

{
  "role": "owner",
  "status": "joined"
}