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.
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
Field
Type
Required
Description
target
"member" | "invitation"
required
An existing teammate or a pending invitation in the active parent account.
id
string (uuid)
required
Membership or invitation ID from team.list_members or team.list_invites.
Over MCP the same operation is the tool team_get_client_access at https://app.chirply.io/api/mcp, same bearer token, same input.
Copy link
team.get_invite_linkreadadmin only
Get the acceptance link for a pending invitation — the “Copy link” button on the team page. Use it when the invitation email didn't arrive, or to hand someone their link over chat instead. ANYONE HOLDING THIS LINK CAN JOIN THE WORKSPACE at the invitation's role until it is accepted, expires (14 days), or is revoked with team.revoke_invite, so treat it like a password: send it to the invited person and nobody else. Reading it changes nothing and sends no email.
Over MCP the same operation is the tool team_get_invite_link 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
Field
Type
Required
Description
email
string (email)
required
Who to invite.
role
"member" | "admin"
optional
member or admin. Owners are promoted, not invited. Default: "member"
external
boolean
optional
Invite 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"
optional
For 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_ids
array of (string (uuid))
optional
Client account IDs from team.list_client_accounts when client_access_mode is selected. Empty for none or all. Default: []
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").
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
Field
Type
Required
Description
limit
integer
optional
Max rows to return (1–100). Default: 25
offset
integer
optional
Rows to skip. Default: 0
search
string
optional
Case-insensitive substring matched against each member's name and email address. Omit to list everyone.
role
"owner" | "admin" | "member"
optional
Return only members holding this role. Omit for all roles.
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.
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
Field
Type
Required
Description
invitation_id
string (uuid)
required
The pending invitation to email again, from team.list_invites.
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
Field
Type
Required
Description
target
"member" | "invitation"
required
Whether this is an existing membership or a pending invitation.
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
Field
Type
Required
Description
target
"member" | "invitation"
required
An existing teammate or a pending invitation in the active parent account.
id
string (uuid)
required
Membership or invitation ID from team.list_members or team.list_invites.
mode
"none" | "all" | "selected"
required
None, all current and future client accounts, or only the selected IDs.
client_ids
array of (string (uuid))
optional
IDs from team.list_client_accounts when mode is Selected; otherwise pass an empty list. Default: []
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
Field
Type
Required
Description
membership_id
string (uuid)
required
Membership ID in this account, from team.list_members.
record_scope
"all" | "own"
required
all = every record in the account (the default). own = only records assigned to them.