← All action domains

Team

14 operations. Call each with POST https://app.chirply.io/api/v1/actions/<name> and a bearer token; the response is { "data": { "action", "summary", "result" } }. A read badge means the operation changes nothing; write requires the credential’s write scope.

Change a member's role

team.change_rolewriteconfirmadmin only

Change what a teammate can do in this account. Promoting to owner grants full control including billing, so only an owner (or the platform team) can hand the owner role out or take it away — an admin cannot. Nobody can change their own role, and demoting the last remaining owner is refused, since an organization must always keep one.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
user_idstring (uuid)requiredThe member's user id (from team.list_members).
role"owner" | "admin" | "member"requiredowner, admin, or member.

Example

curl -X POST https://app.chirply.io/api/v1/actions/team.change_role \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "role": "owner"
  }'
Test with your API key

Over MCP the same operation is the tool team_change_role at https://app.chirply.io/api/mcp, same bearer token, same input.

View feature access

team.get_accessreadadmin only

Read the feature restrictions for a team member or invitation. Null means all features allowed by their role.

Parameters

FieldTypeRequiredDescription
target"member" | "invitation"requiredWhether this is an existing membership or a pending invitation.
idstring (uuid)requiredMembership or invitation ID in this account.

Example

curl -X POST https://app.chirply.io/api/v1/actions/team.get_access \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "member",
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool team_get_access at https://app.chirply.io/api/mcp, same bearer token, same input.

View client account access

team.get_client_accessreadadmin only

Read whether an existing teammate or pending invitation can access no client accounts, every current and future client account, or a selected set. This reads the parent account's assignment; separately granted direct client memberships remain independent.

Parameters

FieldTypeRequiredDescription
target"member" | "invitation"requiredAn existing teammate or a pending invitation in the active parent account.
idstring (uuid)requiredMembership or invitation ID from team.list_members or team.list_invites.

Example

curl -X POST https://app.chirply.io/api/v1/actions/team.get_client_access \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "member",
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool team_get_client_access at https://app.chirply.io/api/mcp, same bearer token, same input.

Invite a teammate

team.invitewriteconfirmadmin only

Creates an invitation and sends a real email inviting someone to join this account as a member, an admin, or an EXTERNAL client who only ever reaches Team Chat — a real message to a real person, billed to the account's own email provider. The email contains a 14-day acceptance link; owners can only be made by changing an existing member's role. The invitation is created FIRST and always survives: if the email cannot be sent (the account has no verified sending domain, or the provider failed), the invitation still exists and stays pending, `email_sent` comes back false with the reason in `delivery_status`, and the link can be handed over with team.get_invite_link or the email retried with team.resend_invite.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
emailstring (email)requiredWho to invite.
role"member" | "admin"optionalmember or admin. Owners are promoted, not invited. Default: "member"
externalbooleanoptionalInvite them as an EXTERNAL member — a client, or someone who works for one, rather than staff. They reach Team Chat and nothing else: no contacts, no revenue, no settings, only the channels somebody explicitly adds them to, and they cannot see the room list or the staff directory. They do NOT consume a paid team seat. Forces the role to member; an external admin is not a thing. Default: false
client_access_mode"none" | "all" | "selected"optionalFor a teammate invited to a parent account: none, every current and future client account, or selected client accounts. Account owners choose this; chat-only clients always get none. Default: "none"
client_account_idsarray of (string (uuid))optionalClient account IDs from team.list_client_accounts when client_access_mode is selected. Empty for none or all. Default: []

Example

curl -X POST https://app.chirply.io/api/v1/actions/team.invite \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "ada@example.com"
  }'
Test with your API key

Over MCP the same operation is the tool team_invite at https://app.chirply.io/api/mcp, same bearer token, same input.

Choose client accounts

team.list_client_accountsreadadmin only

List active client accounts belonging to this parent account, for assigning teammate access. Reads names and IDs only; grants nothing.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/team.list_client_accounts \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool team_list_client_accounts at https://app.chirply.io/api/mcp, same bearer token, same input.

List pending invitations

team.list_invitesreadadmin only

List invitations to this account that haven't been accepted or revoked yet, including which have passed their 14-day expiry and which invite an external client limited to Team Chat (`is_external`, stored with role member and shown as "Client — chat only").

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0

Example

curl -X POST https://app.chirply.io/api/v1/actions/team.list_invites \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

Over MCP the same operation is the tool team_list_invites at https://app.chirply.io/api/mcp, same bearer token, same input.

List team members

team.list_membersread

List everyone with access to this account — name, email, role (owner/admin/member), whether they are an external client limited to Team Chat (`is_external`; such a person is stored with role member and shown as "Client — chat only"), and when they joined. Optionally narrowed by a name/email search or a single role, and returned a page at a time, exactly as the Team screen does.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
searchstringoptionalCase-insensitive substring matched against each member's name and email address. Omit to list everyone.
role"owner" | "admin" | "member"optionalReturn only members holding this role. Omit for all roles.

Example

curl -X POST https://app.chirply.io/api/v1/actions/team.list_members \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

Over MCP the same operation is the tool team_list_members at https://app.chirply.io/api/mcp, same bearer token, same input.

Remove a teammate

team.remove_memberwriteconfirmadmin only

Remove someone's access to this account. They lose the account immediately; their records (contacts, notes, calls) stay. Removing an owner takes an owner (or the platform team) — an admin cannot remove one — though anyone may remove themselves to leave. The last owner can never be removed.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
user_idstring (uuid)requiredThe member to remove.

Example

curl -X POST https://app.chirply.io/api/v1/actions/team.remove_member \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool team_remove_member at https://app.chirply.io/api/mcp, same bearer token, same input.

Resend

team.resend_invitewriteconfirmadmin only

Sends the invitation email again for an invitation that is still pending — a real email to a real person, billed to the account's own email provider. Use it after a mail outage, or once the account has connected a verified sending domain and wants invitations created before that to actually go out. It does NOT create a new invitation and does not change the existing link, its role, or its 14-day expiry, so an invitation that was already emailed will simply be emailed a second time. If the send fails again the invitation is left untouched and still pending.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
invitation_idstring (uuid)requiredThe pending invitation to email again, from team.list_invites.

Example

curl -X POST https://app.chirply.io/api/v1/actions/team.resend_invite \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "invitation_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool team_resend_invite at https://app.chirply.io/api/mcp, same bearer token, same input.

Revoke an invitation

team.revoke_invitewriteadmin only

Cancel a pending invitation so its link stops working. The person can be invited again afterwards.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe invitation to revoke.

Example

curl -X POST https://app.chirply.io/api/v1/actions/team.revoke_invite \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool team_revoke_invite at https://app.chirply.io/api/mcp, same bearer token, same input.

Save feature access

team.set_accesswriteconfirmadmin only

Set the features a team member may use, or the restrictions inherited when an invitation is accepted. Restricts data access and available actions; does not send an email or change the person’s role. Owners retain full access.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
target"member" | "invitation"requiredWhether this is an existing membership or a pending invitation.
idstring (uuid)requiredMembership or invitation ID in this account.
featuresarray of ("projects" | "team_chat" | "automations" | "contacts" | "pipeline" | "conversations" | … 8 more) (or null)requiredAllowed feature IDs. Null retains role-based access; an empty list grants no features.

Example

curl -X POST https://app.chirply.io/api/v1/actions/team.set_access \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "member",
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "features": [
      "projects"
    ]
  }'
Test with your API key

Over MCP the same operation is the tool team_set_access at https://app.chirply.io/api/mcp, same bearer token, same input.

Save client access

team.set_client_accesswriteconfirmowner only

Grant or remove a teammate's access to client accounts from the parent account. All includes client accounts created later; Selected includes only the IDs supplied. A pending invitation applies on acceptance. Removing an assignment immediately removes memberships created by this setting; separately granted direct client memberships remain. Sends no email and incurs no charge.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
target"member" | "invitation"requiredAn existing teammate or a pending invitation in the active parent account.
idstring (uuid)requiredMembership or invitation ID from team.list_members or team.list_invites.
mode"none" | "all" | "selected"requiredNone, all current and future client accounts, or only the selected IDs.
client_idsarray of (string (uuid))optionalIDs from team.list_client_accounts when mode is Selected; otherwise pass an empty list. Default: []

Example

curl -X POST https://app.chirply.io/api/v1/actions/team.set_client_access \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "member",
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "mode": "none"
  }'
Test with your API key

Over MCP the same operation is the tool team_set_client_access at https://app.chirply.io/api/mcp, same bearer token, same input.

Set what they can see

team.set_record_scopewriteconfirmadmin only

Choose whether a team member sees every record in the account or only the ones assigned to them — their own contacts, the conversations on those contacts, and the messages, calls, deals and tasks that hang off them. This is a different axis from feature access, which decides which TOOLS they can open: a narrowed member can have Contacts and Conversations and still see only their own book. Enforced by the database, not just the screens, so it applies to the API and to exports as well. An owner always sees the whole account and cannot be narrowed. Setting this to "own" does not assign anybody anything — a member with no assigned contacts will see an empty list until you assign some, which is what contacts.assign and contacts.assign_by_number are for.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
membership_idstring (uuid)requiredMembership ID in this account, from team.list_members.
record_scope"all" | "own"requiredall = every record in the account (the default). own = only records assigned to them.

Example

curl -X POST https://app.chirply.io/api/v1/actions/team.set_record_scope \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "membership_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "record_scope": "all"
  }'
Test with your API key

Over MCP the same operation is the tool team_set_record_scope at https://app.chirply.io/api/mcp, same bearer token, same input.

The machine-readable version of this page is GET https://app.chirply.io/api/v1/actions?domain=team — same operations, with full JSON Schemas. Authentication, errors and rate limits are covered in the API documentation home.