RingEX Admin — Tools Reference¶
Full reference for every tool available on the RingEX Admin server. Tools are listed alphabetically — use the on-page navigation ("On this page") to jump to a specific tool.
Experimental
This server is experimental. Its endpoint, tool names, and input schemas may change, and the server may be withdrawn, without the notice periods described in the deprecation policy.
Most admin tools are action-based: they take an action argument that selects a strict argument variant. Pick exactly one variant and don't mix fields between variants — the server rejects calls that do. The single-purpose tools (delete_call_queue, delete_ivr_prompt, delete_site, get_admin_setup_status, search_admin_audit_log) take no action argument; each tool's parameter table below is authoritative.
Write tools require a two-step confirmation
Tools that change configuration return status: "confirmation_required" with a plan and a single-use confirmationToken on the first call, without changing anything. Show the plan to the user, and only after explicit approval repeat the identical arguments plus the token. Tokens expire after about five minutes and are refused if the affected objects changed in the meantime.
assign_phone_number¶
Assigns an existing account phone number — from inventory or from another assignment — to a user, IVR menu, or call queue, or makes it a company number. Can also swap one number for another. It never buys numbers; use read_phone_numbers to find existing numbers and their ids.
The main company number cannot be reassigned with assign except to a company role, and it cannot be swapped with replace.
Server: RingEX Admin
Access: Write — confirmation required
Actions¶
| Action | Required | Optional | What it does |
|---|---|---|---|
assign |
phoneNumberId, destination |
confirmationToken |
Points the number at an extension or makes it a company number. |
replace |
phoneNumberId, targetPhoneNumberId |
confirmationToken |
Swaps one number for another — e.g. a temporary number for a ported-in number. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | assign or replace. |
phoneNumberId |
✅ | The number being assigned or replaced. |
destination |
✅ (assign) | Either { "type": "extension", "extensionId": "..." } — a user, IVR menu, or call queue extension that gets the number as its direct number — or { "type": "company_number", "usageType": "CompanyNumber" \| "MainCompanyNumber" }. |
targetPhoneNumberId |
✅ (replace) | The other number RingCentral swaps it with. |
confirmationToken |
— | Token from the preview call. Send identical arguments plus this token to execute. |
Example¶
Changes live call routing
Both actions change where inbound calls ring, so both require the two-step confirmation described at the top of this page.
replace semantics are not yet validated against a live tenant
Exactly what RingCentral does to both numbers during a swap has not been exercised end to end. Test replace on a non-production account first.
bulk_move_users¶
Moves up to 50 extensions to another site, in three steps: preview resolves every extension and returns a plan, execute starts the move, and status reports per-extension results. Execution is asynchronous — execute returns a taskId that you poll with status.
Extensions already in the target site are skipped. A task can finish with some moves failed, which is reported as partial_failure rather than success. Use read_users for extension ids and read_sites for site ids.
Server: RingEX Admin
Access: Write — confirmation required
Actions¶
| Action | Required | What it does |
|---|---|---|
preview |
extensionIds, targetSiteId |
Resolves each extension, shows its current site, and returns a plan plus a confirmationToken. Nothing changes. |
execute |
extensionIds, targetSiteId, confirmationToken |
Starts the move and returns a taskId. |
status |
taskId |
Returns per-extension Success / Fail results for the task. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | preview, execute, or status. |
extensionIds |
✅ (preview, execute) | Numeric extension ids from read_users. At most 50. |
targetSiteId |
✅ (preview, execute) | Destination site id from read_sites. Use main-site to move users to the main site. |
taskId |
✅ (status) | Task id returned by execute. |
confirmationToken |
✅ (execute) | Token returned by preview. |
Example¶
Asynchronous and partially fallible
Always poll status after execute. A partial_failure result means some extensions moved and others did not.
delete_call_queue¶
Permanently deletes one call queue after checking what depends on it. The dependency check looks for phone numbers assigned to the queue, IVR menus that route to it, and other queues that overflow to it. If any exist — or a check could not be completed — the result is blocked with the list of blockers and no token is issued.
Queue members are not a blocker; they are removed along with the queue.
Server: RingEX Admin
Access: Destructive — confirmation required
Parameters¶
| Parameter | Required | Description |
|---|---|---|
callQueueId |
✅ | Queue to delete, from read_call_queues. |
confirmationToken |
— | Token from the preview call. Send the same callQueueId plus this token to execute. |
Example¶
The check is deliberately limited
It does not inspect user or site call-handling rules that forward to the queue, a site operator, or call monitoring and paging groups that include it, and it reads at most 50 IVR menus and 50 other queues. Larger accounts are reported as an incomplete check and blocked. Review those places yourself before approving. Deletion cannot be undone with this tool.
delete_ivr_prompt¶
Permanently deletes one IVR audio prompt. The call is refused while any IVR menu still plays the prompt, and also when the menu scan cannot prove that none does — the refusal lists which menus to change first with manage_ivr.
Server: RingEX Admin
Access: Destructive — confirmation required
Parameters¶
| Parameter | Required | Description |
|---|---|---|
promptId |
✅ | Prompt to delete, from read_ivr_media. |
confirmationToken |
— | Token from the preview call. Send the same promptId plus this token to execute. |
Example¶
Cannot be undone
To restore a deleted prompt you must upload the audio again with manage_ivr_media.
delete_role¶
Permanently deletes one custom role. Standard roles cannot be deleted. The first call finds every user who holds the role and returns the role, the affected users, and the replacement role.
You must state what happens to those users: pass replacementRoleId (added to each holder before deletion) or, only when nobody holds the role, noAssignments: true. A wrong assertion is refused. The call also refuses if the account is too large to verify every assignment, or if more than 50 users hold the role.
Server: RingEX Admin
Access: Destructive — confirmation required
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | delete. |
roleId |
✅ | Role id from read_roles. |
replacementRoleId |
✅ (if anyone holds the role) | Role added to every current holder before deletion. |
noAssignments |
— | true to assert nobody holds the role. Verified against current assignments and rejected if wrong. |
confirmationToken |
— | Token from the preview call. |
Example¶
Requires role-management permission
The role is re-read after deletion; a partial status means a step did not finish, and the result says which.
delete_routing_rule¶
Deletes one custom company answering rule or one extension interaction rule. Default company rules (BusinessHours, AfterHours) and built-in extension state rules (work-hours, after-hours, dnd, forward-all-calls, agent) cannot be deleted — change them with manage_routing_rules instead.
Server: RingEX Admin
Access: Destructive — confirmation required
Actions¶
| Action | Required | Optional | What it does |
|---|---|---|---|
delete_company_rule |
ruleId |
confirmationToken |
Deletes a custom company answering rule. |
delete_extension_rule |
extensionId, ruleId |
confirmationToken |
Deletes one extension's interaction rule. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | delete_company_rule or delete_extension_rule. |
ruleId |
✅ | Rule to delete, from read_call_routing. |
extensionId |
✅ (extension rules) | Extension that owns the rule. |
confirmationToken |
— | Token from the preview call. |
Example¶
Legacy API
Company rules use RingCentral's legacy call-handling API because no replacement exists. The result reads the rule back to verify it is gone.
delete_site¶
Permanently deletes one empty site. The first call checks that the site has no members and no phone numbers assigned to it. If anything depends on the site, the status is blocked with the list of blockers — move users with bulk_move_users or manage_sites assign_members, and reassign numbers, first.
The main site (main-site) cannot be deleted.
Server: RingEX Admin
Access: Destructive — confirmation required
Parameters¶
| Parameter | Required | Description |
|---|---|---|
siteId |
✅ | Site id from read_sites. main-site is not accepted. |
confirmationToken |
— | Token from the preview call. |
Example¶
Not every dependency is detected
Queues, IVR menus, and routing rules that point at the site are not checked. Review those yourself before approving.
disable_user¶
Sets one user extension's status to Disabled. It never deletes the extension. Only extensions of type User are accepted, and you cannot disable your own account.
Server: RingEX Admin
Access: Destructive — confirmation required
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | disable. |
extensionId |
✅ | Numeric extension id from read_users. |
reason |
— | Voluntarily or Involuntarily. Recorded by RingCentral. |
comment |
— | Short internal note recorded with the status change. |
confirmationToken |
— | Token from the preview call. |
Example¶
Phone numbers, devices, and licences stay assigned
Disabling does not release them. Handle those separately. The status is re-read afterwards; partial means the change could not be verified.
get_admin_setup_status¶
Read-only first-run checklist for a new RingEX account. Inspects whether the account has a site, a main company number, initial users, company business hours, and basic inbound routing, then returns an ordered checklist with the recommended next step.
A check that cannot be read with the administrator's permissions is reported as unknown rather than failing the whole checklist. Site administrators cannot be verified from account-level reads, so that check is always unknown — use read_users with action: "get_assignments" for a specific person.
Server: RingEX Admin
Access: Read-only
Parameters¶
This tool takes no parameters.
Example¶
Good opening move
Run this against a new account before anything else; it tells you which of the other admin tools to reach for next.
manage_call_queues¶
Creates and updates call queues and manages who answers them. It never deletes a queue — use delete_call_queue.
Ringing order (round robin, simultaneous, fixed order) is part of call handling rules and is not configured here.
Server: RingEX Admin
Access: Write — confirmation required for some actions
Actions¶
| Action | Required | Optional | Confirmation |
|---|---|---|---|
create |
name |
extensionNumber, siteId, memberExtensionIds, confirmationToken |
✅ |
update |
callQueueId |
name, extensionNumber, status, siteId, editableMemberStatus, alertTimerSeconds, serviceLevel |
— |
set_members |
callQueueId |
addedExtensionIds, removedExtensionIds, confirmationToken |
When adding more than one member, or removing anyone |
set_overflow |
callQueueId |
enabled, overflowQueueIds, confirmationToken |
✅ |
set_presence |
callQueueId, members |
— | — |
set_agent_presence |
extensionId, queues |
— | — |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | One of the actions above. |
callQueueId |
✅ (most actions) | Queue id from read_call_queues. |
extensionId |
✅ (set_agent_presence) | The agent whose availability changes across the listed queues. |
name |
✅ (create) | Queue display name, up to 100 characters. |
extensionNumber |
— | 2–8 digit extension number for the queue. |
siteId |
— | Site that owns the queue, from read_sites. |
status |
— | Enabled or Disabled. |
memberExtensionIds |
— | Initial members on create. Up to 50. |
addedExtensionIds / removedExtensionIds |
— | Members to add or remove on set_members. Up to 50 each. |
editableMemberStatus |
— | Whether members may change their own queue availability. |
alertTimerSeconds |
— | Seconds before queue members are notified of a queued call. |
serviceLevel |
— | Object with thresholdSeconds and abandonedThresholdSeconds (0–86400), goalPercent (0–100), and includeAbandonedCalls. |
enabled |
— | Whether overflow is turned on (set_overflow). |
overflowQueueIds |
— | Queues that receive overflow calls. An empty list clears them. Up to 10. |
members |
✅ (set_presence) | Array of up to 50 { extensionId, acceptCurrentQueueCalls }. |
queues |
✅ (set_agent_presence) | Array of up to 50 { callQueueId, acceptCalls } for one agent. |
confirmationToken |
— | Token from the preview call, for the actions that need it. |
Examples¶
Overflow loops are refused
set_overflow changes live routing and refuses a configuration that would create a loop between queues. Actions that run without confirmation are verified by re-reading the queue.
Queue creation is not yet validated against a live tenant
RingCentral's exact requirements for creating a queue have not been exercised end to end. Test create on a non-production account first.
manage_ivr¶
Creates and changes IVR (auto-attendant) menus — their name, greeting, and key-press destinations. It never deletes a menu, prompt, or extension, and only works in your own account.
update replaces the complete key-action list, not a delta. A menu whose current settings cannot be copied exactly is refused rather than rewritten. Upload audio with manage_ivr_media first.
Server: RingEX Admin
Access: Write — confirmation required for some actions
Actions¶
| Action | Required | Optional | Confirmation |
|---|---|---|---|
create |
name |
extensionNumber, siteId, prompt, keyActions |
— |
update |
menuId |
name, prompt, keyActions, confirmationToken |
✅ |
create_destination |
type, name, contactEmail |
extensionNumber, siteId |
— |
attach_prompt |
menuId, promptId |
confirmationToken |
✅ |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | One of the actions above. |
menuId |
✅ (update, attach_prompt) | Menu id from read_call_routing get_ivr. |
name |
✅ (create, create_destination) | Display name, up to 256 characters. |
extensionNumber |
— | 2–8 digit extension number. RingCentral assigns one if omitted. |
siteId |
— | Site that owns the menu, from read_sites. |
prompt |
— | Either { "mode": "Audio", "promptId": "..." } or { "mode": "TextToSpeech", "text": "..." }, where text is up to 1000 characters. |
keyActions |
— | The complete new key-action list (up to 13 entries). Each is { input, action, extensionId?, phoneNumber? }. input is 0–9, Star, Hash, or NoInput. action is one of Connect, Voicemail, DialByName, Transfer, Repeat, ReturnToRoot, ReturnToPrevious, Disconnect, ReturnToTopLevelMenu, DoNothing, ConnectToOperator. extensionId is required for Connect and Voicemail and not allowed otherwise; phoneNumber is required for Transfer and not allowed otherwise. |
type |
✅ (create_destination) | Announcement (plays a message) or Voicemail (takes a message). |
contactEmail |
✅ (create_destination) | Contact email for the new extension — voicemail notifications go here. |
promptId |
✅ (attach_prompt) | Audio prompt id from read_ivr_media, or the id returned by a manage_ivr_media upload. |
confirmationToken |
— | Token from the preview call. |
Examples¶
{
"action": "create",
"name": "Main Auto-Attendant",
"extensionNumber": "8000",
"prompt": {
"mode": "TextToSpeech",
"text": "Thanks for calling. Press 1 for sales, 2 for support."
},
"keyActions": [
{ "input": "1", "action": "Connect", "extensionId": "402304099" },
{ "input": "2", "action": "Connect", "extensionId": "402304100" },
{ "input": "NoInput", "action": "ConnectToOperator" }
]
}
Key actions are replaced wholesale
On update, omitted keys are removed. Read the menu first with read_call_routing and send the full intended list.
manage_ivr_media¶
Uploads and replaces the audio files that IVR menus play. It does not generate speech from text, and it never deletes a prompt — use delete_ivr_prompt.
WAV and MP3 are recommended; files over 10 MB are refused. Attach an uploaded prompt to a menu with manage_ivr.
Server: RingEX Admin
Access: Write — confirmation required for some actions
Actions¶
| Action | Required | Optional | Confirmation |
|---|---|---|---|
upload |
— | file, contentBase64, fileName, contentType, description |
— |
replace |
promptId |
file, contentBase64, fileName, contentType, description, confirmationToken |
When any menu uses the old prompt |
rename |
promptId, filename |
— | — |
replace uploads a new prompt and repoints every menu that currently plays the old prompt to it, leaving the old prompt in place. Menus with settings the tool cannot copy exactly are left unchanged and reported as failed.
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | upload, replace, or rename. |
promptId |
✅ (replace, rename) | Existing prompt from read_ivr_media. |
file |
— | ChatGPT file reference (download_url + file_id) for the audio file. |
contentBase64 |
— | Exact standard base64 audio bytes, for clients without file-parameter transformation. Provide fileName with it. Not a path, URL, or data URL. |
fileName |
— | Audio file name with extension, e.g. welcome.wav. Required with contentBase64. |
filename |
✅ (rename) | The new file name for the prompt. Renaming cannot change the audio. |
contentType |
— | Audio MIME type. Inferred from the file extension when omitted. |
description |
— | Optional description of the prompt contents. |
confirmationToken |
— | Token from the preview call. |
Example¶
Two ways to supply audio
Use file when your client supports file references, or contentBase64 plus fileName when it doesn't.
manage_roles¶
Creates and updates custom roles and manages role assignments. It never deletes a role — use delete_role. Requires an administrator with role-management permission.
assign and bulk_assign refuse your own account, and you cannot remove a role from yourself.
Server: RingEX Admin
Access: Write — confirmation required for some actions
Actions¶
| Action | Required | Optional | Confirmation |
|---|---|---|---|
create |
name, permissionIds |
description |
— |
update |
roleId |
name, description, permissionIds, confirmationToken |
When permissionIds is given |
assign |
extensionId, roleIds |
confirmationToken |
✅ |
assign_default |
extensionId |
confirmationToken |
✅ |
bulk_assign |
roleId |
addExtensionIds, removeExtensionIds, confirmationToken |
✅ |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | One of the actions above. |
roleId |
✅ (update, bulk_assign) | Role id from read_roles. |
name |
✅ (create) | Role display name, up to 128 characters. |
description |
— | Role description, up to 2000 characters. |
permissionIds |
✅ (create) | Permission ids from read_roles list_permissions. On update this is the complete new permission list, not a delta. Up to 300. |
extensionId |
✅ (assign, assign_default) | Extension to change. |
roleIds |
✅ (assign) | Roles to add to the user. Up to 10. |
addExtensionIds / removeExtensionIds |
— | Users to add to or remove from the role on bulk_assign. Up to 50 each. |
confirmationToken |
— | Token from the preview call. |
Example¶
Assigning a role can take others away
RingCentral may change the roles a user already holds when a new role is assigned. The preview shows the user's current roles, and the result lists previousRoles and any lostRoleIds so a loss is visible. assign_default is not validated on a live tenant — check the result.
manage_routing_rules¶
Creates and updates call-handling rules and business hours at both company and extension scope. It never deletes a rule — use delete_routing_rule — and never changes the company forward-all override, which is set_emergency_call_redirect.
Inspect current rules with read_call_routing first.
Server: RingEX Admin
Access: Write — confirmation required for some actions
Actions¶
| Action | Scope | Required | Optional | Confirmation |
|---|---|---|---|---|
create_company_rule |
Company | name |
ruleType, enabled, schedule, callHandlingAction, destinationExtensionId, confirmationToken |
✅ |
update_company_rule |
Company | ruleId |
name, enabled, schedule, callHandlingAction, destinationExtensionId, confirmationToken |
✅ |
set_company_hours |
Company | weeklyRanges |
confirmationToken |
✅ |
update_state_rule |
Extension | extensionId, stateId, route |
confirmationToken |
✅ |
create_interaction_rule |
Extension | extensionId, displayName, enabled, condition, route |
— | — |
update_interaction_rule |
Extension | extensionId, ruleId |
displayName, enabled, condition, route |
— |
set_user_hours |
Extension | extensionId, weeklyRanges |
— | — |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | One of the actions above. |
ruleId |
✅ (update_company_rule, update_interaction_rule) | Rule id from read_call_routing. update_state_rule uses stateId instead. |
extensionId |
✅ (extension scope) | Extension the rule belongs to. |
name |
✅ (create_company_rule) | Company rule name, up to 30 characters. |
ruleType |
— | BusinessHours, AfterHours, or Custom. |
enabled |
✅ (create_interaction_rule) | Whether the rule is active. Optional elsewhere; defaults to true. |
schedule |
— | { kind: "preset", ref: "BusinessHours" \| "AfterHours" }, { kind: "weekly", weeklyRanges: {...} }, or { kind: "dates", ranges: [...] }. |
callHandlingAction |
— | Operator (play the company greeting, forward to the operator), Disconnect, or Bypass (forward to destinationExtensionId). |
destinationExtensionId |
✅ (with Bypass) |
Extension that receives the call. |
weeklyRanges |
✅ (hours actions) | Complete weekly schedule keyed by day name, each day an array of { from, to } in HH:MM. Omitted or empty days have no business hours. |
stateId |
✅ (update_state_rule) | work-hours, after-hours, dnd, forward-all-calls, or agent. |
displayName |
✅ (create_interaction_rule) | Rule name, up to 64 characters. |
condition |
✅ (create_interaction_rule) | { type: "state", stateId: "work-hours" \| "after-hours" } or { type: "callers", callers: [{ phoneNumber, name }] } — up to 20 callers. |
route |
✅ (state and interaction rules) | One of: voicemail (needs extensionId and greetingPresetId), extension (needs extensionId), phone_number (needs phoneNumber and name), or ring_extensions (needs extensionIds — up to 10 — and ringMode of at_once or in_order, plus optional durationSeconds between 10 and 300). |
confirmationToken |
— | Token from the preview call. |
Examples¶
{
"action": "create_interaction_rule",
"extensionId": "402304004",
"displayName": "Known spam caller",
"enabled": true,
"condition": {
"type": "callers",
"callers": [{ "phoneNumber": "+14155550199", "name": "Spam" }]
},
"route": {
"type": "voicemail",
"extensionId": "402304004",
"greetingPresetId": "preset-default"
}
}
Voicemail is required as the terminal target
RingCentral rejects the dnd state rule and interaction rules with a plain extension route — use a voicemail route, whose greetingPresetId you copy from read_call_routing get_extension_rules. Company rules use the legacy call-handling API; extension rules use the newer API, which some legacy-routing accounts may not support.
Extension-scope rules are not yet validated against a live tenant
The request bodies for extension-scope actions follow the OpenAPI contract but have not been exercised end to end. Test them on a non-production account first.
manage_sites¶
Creates and updates RingEX sites and manages their members, administrators, and IVR key actions. It never deletes a site — use delete_site.
The main site (main-site), site business hours, and site main-number assignment are not supported here.
Server: RingEX Admin
Access: Write — confirmation required for some actions
Actions¶
| Action | Required | Optional | Confirmation |
|---|---|---|---|
create |
name, administratorExtensionId |
extensionNumber, callerIdName, email, siteAccess, code |
— |
update |
siteId |
name, extensionNumber, callerIdName, email, siteAccess |
— |
assign_members |
siteId, addExtensionIds, removeExtensionIds |
confirmationToken |
When changing more than one member |
assign_admin |
siteId, extensionId |
confirmationToken |
✅ |
set_ivr |
siteId |
topMenuId, keyActions, confirmationToken |
✅ |
create creates the site and then assigns the required administrator. If that second step fails, the result has status partial so you can retry with assign_admin.
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | One of the actions above. |
siteId |
✅ (most actions) | Site id from read_sites. main-site is not accepted for changes. |
name |
✅ (create) | Site name, up to 100 characters. |
administratorExtensionId |
✅ (create) | Extension that will administer the new site. Every site needs at least one. |
extensionId |
✅ (assign_admin) | Extension that becomes an administrator of the site. |
extensionNumber |
— | Site extension number, up to 8 digits. |
callerIdName |
— | Caller ID name shown to callers. RingCentral allows at most 15 characters. |
email |
— | Site contact email. |
siteAccess |
— | Limited or Unlimited — whether users of the site can reach other sites by dialing extensions. |
code |
— | Site code. |
addExtensionIds / removeExtensionIds |
✅ (assign_members) | Numeric extension ids to add or remove. Up to 50 each; pass an empty array for the side you aren't changing. |
topMenuId |
— | Extension id of the site's top IVR menu. |
keyActions |
— | Replaces the site's key actions with exactly this list (up to 10). Each is { input, action, extensionId? } where input is 0, Star, Hash, or NoInput and action is Repeat, ReturnToRoot, ReturnToPrevious, ReturnToTopLevelMenu, Connect, ConnectToIncomingCallRoutingSelection, ConnectToOperator, Disconnect, or DoNothing. extensionId is required for Connect and not allowed otherwise. Note this enum is not the same as manage_ivr's. |
confirmationToken |
— | Token from the preview call. |
Example¶
set_ivr changes live call routing
It always returns a preview with the current and requested settings before anything changes.
manage_users¶
Creates and updates users. It never disables or deletes users, never resets passwords, and never assigns phone numbers — those are disable_user and assign_phone_number.
Look up users with read_users, sites with read_sites, and roles with read_roles first.
Server: RingEX Admin
Access: Write — confirmation required for some actions
Actions¶
| Action | Required | Optional | Confirmation |
|---|---|---|---|
create |
user |
confirmationToken |
✅ |
apply_template |
templateId, user |
confirmationToken |
✅ |
bulk_create |
users |
confirmationToken |
✅ |
update |
extensionId |
firstName, lastName, department, jobTitle, mobilePhone, businessPhone, extensionNumber, siteId |
— |
create, apply_template, and bulk_create consume licenses and change the directory, so all three preview first. update changes an existing extension directly.
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | One of the actions above. |
user |
✅ (create, apply_template) | Object with firstName, lastName, email (required) plus optional extensionNumber, department, jobTitle, siteId, and — for create only — roleIds (up to 5). Under apply_template, roleIds is not accepted at all and siteId is only allowed when the template does not fix a site. |
users |
✅ (bulk_create) | Array of up to 20 user objects, same shape as user. Results are returned per user. |
templateId |
✅ (apply_template) | Server-owned organizational template. See the ringex://admin/organizational-templates resource. |
extensionId |
✅ (update) | Numeric extension id of the user to change. |
firstName, lastName, department, jobTitle |
— | Contact fields, up to 64 characters each. |
mobilePhone, businessPhone |
— | Phone numbers. |
extensionNumber |
— | 2–10 digit extension number. RingCentral assigns one when omitted on create. |
siteId |
— | Site id from read_sites. Omit, or use main-site, for the main site. |
confirmationToken |
— | Token from the preview call. |
Examples¶
{
"action": "create",
"user": {
"firstName": "Dana",
"lastName": "Reyes",
"email": "[email protected]",
"jobTitle": "Support Engineer",
"siteId": "88001122"
}
}
{
"action": "bulk_create",
"users": [
{ "firstName": "Dana", "lastName": "Reyes", "email": "[email protected]" },
{ "firstName": "Sam", "lastName": "Okafor", "email": "[email protected]" }
]
}
Add Dana Reyes ([email protected]) as a user in the Dallas site.
Never retry an unknown outcome blindly
A partial result lists which step failed. Verify with read_users before retrying.
read_call_queues¶
Read-only lookup of call queues, their members, overflow settings, and member availability. Never changes anything.
How phones ring (round robin, simultaneous, fixed order) is part of call handling rules and is not returned here.
Server: RingEX Admin
Access: Read-only
Actions¶
| Action | Required | Optional | What it returns |
|---|---|---|---|
list |
page, perPage |
memberExtensionId |
Queues, optionally only those a given extension belongs to. |
get |
callQueueId |
— | One queue with its service-level settings. |
list_members |
callQueueId, page, perPage |
— | Member extension ids. Resolve names with read_users. |
get_overflow |
callQueueId |
— | Overflow settings and destination queues. |
get_presence |
callQueueId |
— | Each member's queue availability. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | One of the actions above. |
callQueueId |
✅ (most actions) | Numeric call queue id. |
memberExtensionId |
— | Only return queues this extension is a member of. |
page |
✅ (list actions) | Page number, 1–1000. Defaults to 1. |
perPage |
✅ (list actions) | Results per page, 1–100. Defaults to 50. |
Example¶
Permission
This tool requires read access.
read_call_recording_settings¶
Read-only view of how call recording is configured for the account. It returns settings only, not recordings — use read_company_call_log and read_company_call_recordings for those. Never changes anything.
Server: RingEX Admin
Access: Read-only
Actions¶
| Action | Required | Optional | What it returns |
|---|---|---|---|
get_settings |
— | — | The automatic and on-demand recording settings and greeting modes. |
list_extensions |
— | — | Extensions that have automatic recording turned on, and which call direction is recorded. |
list_greetings |
— | greetingType |
The recording announcement greetings, optionally by type. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | get_settings, list_extensions, or list_greetings. |
greetingType |
— | StartRecording, StopRecording, or AutomaticRecording. Omit to list every type. |
Example¶
Permission
This tool requires read access.
read_call_routing¶
Read-only inspection of how inbound calls are routed — IVR menus, business hours, company answering rules, the forward-all override, per-extension call-handling rules, and what a given phone number actually rings.
It describes the configured routing; it does not simulate a call or evaluate business hours.
Server: RingEX Admin
Access: Read-only
Actions¶
| Action | Required | Optional | What it returns |
|---|---|---|---|
get_ivr |
— | menuId |
All IVR menus, or one menu with its prompt and key-press destinations. |
get_business_hours |
— | extensionId |
Company weekly hours, or one extension's. |
get_company_rules |
page, perPage |
ruleId |
Company answering rules, or one rule. |
get_forward_all |
— | — | The company forward-all override. |
get_extension_rules |
extensionId |
— | One extension's call-handling rules — names and enabled state only. Ring groups and conditions are not returned. |
get_by_number |
phoneNumber |
— | What the number rings: an IVR menu with its key-press destinations, a call queue with overflow, a user extension, or — for a company number — the enabled company rules and forward-all state. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | One of the actions above. |
menuId |
— | Omit to list all IVR menus. |
extensionId |
— | Omit for company business hours; set for one extension. Required for get_extension_rules. |
ruleId |
— | Omit to list company answering rules. |
phoneNumber |
✅ (get_by_number) | 7–15 digits, optionally with a leading +. |
page |
✅ (list actions) | Page number, 1–1000. Defaults to 1. |
perPage |
✅ (list actions) | Results per page, 1–100. Defaults to 50. |
Example¶
Mixed APIs
Company-level reads use RingCentral's legacy call-handling API because no replacement exists. Extension-level reads use the newer API, which some legacy-routing accounts may not support.
read_company_active_calls¶
Read-only snapshot of the calls in progress across the whole company right now, optionally filtered by direction, call type, transport, or conference type. Each call shows its parties, start time, direction, and current result. It is a point-in-time list, so call it again for fresh data. Use read_company_call_log for completed calls and read_company_call_analytics for trends. Never changes or controls any call.
Server: RingEX Admin
Access: Read-only
Parameters¶
This tool takes no action argument.
| Parameter | Required | Description |
|---|---|---|
view |
✅ | Simple (one row per call) or Detailed (also returns the call legs, at most 20 per call). Defaults to Simple. |
page |
✅ | Page number, 1–1000. Defaults to 1. |
perPage |
✅ | Results per page, 1–100. Defaults to 50. |
direction |
— | Inbound or Outbound. |
callType |
— | Voice or Fax. |
transport |
— | PSTN or VoIP. |
conferenceType |
— | Only conference calls of this kind: AudioConferencing or Meetings. |
Example¶
Permission
This tool requires read access.
read_company_call_analytics¶
Read-only call analytics for the whole company. Use it for volume, missed-call, and queue service-level questions; use read_company_call_log for individual calls. Never changes anything.
Choose counters (for example allCalls, callsByDirection, callsByResult, callsByQueueSla) and timers (for example allCallsDuration), and narrow with filters such as direction, call result, queue, or extension.
Server: RingEX Admin
Access: Read-only
Actions¶
| Action | Required | Optional | What it returns |
|---|---|---|---|
aggregate |
timeFrom, timeTo, timeZone, groupBy, page, perPage, aggregationType |
keys, filters, counters, timers |
Call counts and durations over the period, grouped by company, users, queues, sites, and more. |
timeline |
timeFrom, timeTo, timeZone, groupBy, page, perPage, interval |
keys, filters, counters, timers |
The same metrics as a series of Hour, Day, Week, or Month points. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | aggregate or timeline. |
timeFrom / timeTo |
✅ | Start and end of the analysis period (ISO 8601). |
timeZone |
✅ | IANA time zone used to bucket hours, days, and weeks. Defaults to UTC. |
groupBy |
✅ | Company, CompanyNumbers, Users, Queues, IVRs, IVAs, SharedLines, UserGroups, Sites, or Departments. Defaults to Company. |
page |
✅ | Page number, 1–1000. Defaults to 1. |
perPage |
✅ | Results per page. aggregate: 1–200, default 50. timeline: 1–20, default 10. |
aggregationType |
✅ (aggregate) | Sum, Average, Max, Min, or Percent. Defaults to Sum. Not every metric supports every type; RingCentral reports an unsupported combination. |
interval |
✅ (timeline) | Hour, Day, Week, or Month. |
keys |
— | Only these groups, by id (for example specific queue or extension ids). Up to 50. Omit for all. |
counters |
— | Call-count metrics, up to 13: allCalls, callsByActions, callsByCompanyHours, callsByDirection, callsByEndingParty, callsByOrigin, callsByQueueHours, callsByQueueSla, callsByResponse, callsByResult, callsByType, callsSegments, queueOpportunities. Defaults to allCalls when neither counters nor timers is given. |
timers |
— | Call-duration metrics, up to 11: allCallsDuration, callsDurationByCompanyHours, callsDurationByDirection, callsDurationByEndingParty, callsDurationByOrigin, callsDurationByQueueHours, callsDurationByQueueSla, callsDurationByResponse, callsDurationByResult, callsDurationByType, callsSegmentsDuration. |
filters |
— | Object with any of directions, callTypes, callResults, callResponses, callActions, origins, endingParties, companyHours, queueSla, queueIds, calledNumbers, fromExtensionIds, toExtensionIds, minDurationSeconds, and maxDurationSeconds. List filters take one or more values; see tools/list for the allowed values. |
Example¶
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "read_company_call_analytics",
"arguments": {
"action": "aggregate",
"timeFrom": "2026-10-01T00:00:00Z",
"timeTo": "2026-10-08T00:00:00Z",
"timeZone": "UTC",
"groupBy": "Queues",
"page": 1,
"perPage": 50,
"aggregationType": "Sum",
"counters": [
"allCalls",
"callsByResult"
]
}
}
}
Permission
This tool requires read access.
read_company_call_log¶
Read-only access to the call history of the whole company. Returns a bounded, projected record per call (parties, times, direction, result, recording id). Recording audio is not returned — use read_company_call_recordings with the recording id. Never changes anything.
Server: RingEX Admin
Access: Read-only
Actions¶
| Action | Required | Optional | What it returns |
|---|---|---|---|
list |
view, page, perPage |
dateFrom, dateTo, extensionNumber, phoneNumber, direction, callType, withRecording, recordingType, sessionId, telephonySessionId |
A page of calls filtered by time range, extension number, phone number, direction, call type, recording, or session id. |
get |
callRecordId, view |
— | One call by its record id. |
sync |
syncType, recordCount, view |
syncToken, dateFrom, statusGroup, showDeleted, withRecording, recordingType |
A full (FSync) or incremental (ISync) sync of the call log using a syncToken. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | list, get, or sync. |
view |
✅ | Simple (one row per call) or Detailed (also returns the call legs, at most 20 per call). Defaults to Simple. |
page |
✅ (list) | Page number, 1–1000. Defaults to 1. |
perPage |
✅ (list) | Results per page, 1–100. Defaults to 50. |
callRecordId |
✅ (get) | Call record id returned by list. |
syncType |
✅ (sync) | FSync is a full sync of a date range; ISync returns only what changed since syncToken. Defaults to FSync. |
recordCount |
✅ (sync) | Records per sync page, 1–250. Defaults to 100. |
syncToken |
✅ (ISync) | The syncToken returned by a previous sync. |
dateFrom / dateTo |
— | Time range (ISO 8601). RingCentral defaults to the last 24 hours, and dateTo to now. |
extensionNumber |
— | Only calls handled by this extension number. |
phoneNumber |
— | Only calls to or from this phone number. |
direction |
— | Inbound or Outbound. |
callType |
— | Voice or Fax. |
withRecording |
— | true for only calls that have a recording. |
recordingType |
— | Automatic, OnDemand, or All. |
sessionId / telephonySessionId |
— | Only the call with this session id. |
statusGroup |
— | Missed or All (sync). |
showDeleted |
— | Include records that were deleted (sync). |
Example¶
Permission
The caller needs the full company call log permission in their RingCentral role.
read_company_call_recordings¶
Read-only access to a company call recording. Find the recording id with read_company_call_log (withRecording, or the recording field of a call). Never changes or deletes anything.
Server: RingEX Admin
Access: Read-only
Actions¶
| Action | Required | Optional | What it returns |
|---|---|---|---|
get |
recordingId |
— | The recording metadata (content type, duration). |
download |
recordingId, maxBytes |
— | The audio as a native MCP audio block, limited to maxBytes. A larger recording returns status too_large instead of audio. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | get or download. |
recordingId |
✅ | Recording id from read_company_call_log. |
maxBytes |
✅ (download) | Largest recording to return, in bytes. Defaults to 4194304 (4 MB) and cannot exceed 8388608 (8 MB). |
Example¶
Sensitive content
Recordings can contain sensitive conversations, so only download one when the administrator asked for it. The audio is never copied into structured JSON, and no download link is returned.
Permission
The caller needs the call recording read permission in their RingCentral role.
read_ivr_media¶
Read-only lookup of the account's IVR audio prompt metadata — id, filename, and content type. It does not return audio bytes or download links.
Use read_call_routing with get_ivr to see which menus use a prompt.
Server: RingEX Admin
Access: Read-only
Actions¶
| Action | Required | What it returns |
|---|---|---|
list |
— | All prompts on the account. |
get |
promptId |
One prompt. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | list or get. |
promptId |
✅ (get) | Prompt id. |
Example¶
Permission
This tool requires read access.
read_phone_numbers¶
Read-only lookup of the account's existing phone numbers and what each is assigned to. This reads current inventory only — it cannot search for or buy new numbers.
Server: RingEX Admin
Access: Read-only
Actions¶
| Action | Required | Optional | What it returns |
|---|---|---|---|
list |
page, perPage |
type, usageType, status, tollType, phoneNumber |
One page of numbers. |
get |
phoneNumberId |
— | One number by its numeric id. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | list or get. |
phoneNumberId |
✅ (get) | Numeric phone number id. |
type |
— | Array of VoiceFax, VoiceOnly, FaxOnly. |
usageType |
— | Array of usage types, e.g. MainCompanyNumber, DirectNumber, Inventory, AdditionalCompanyNumber, CompanyNumber, PhoneLine, CompanyFaxNumber, ForwardedNumber, ForwardedCompanyNumber, ContactCenterNumber, ConferencingNumber, MeetingsNumber, NumberStorage, BusinessMobileNumber. |
status |
— | Normal, Pending, PortedIn, Temporary, or Unknown. |
tollType |
— | Toll or TollFree. |
phoneNumber |
— | Exact or partial phone number to filter by. |
page |
✅ (list actions) | Page number, 1–1000. Defaults to 1. |
perPage |
✅ (list actions) | Results per page, 1–100. Defaults to 50. |
Example¶
Permission
This tool requires read access.
read_roles¶
Read-only lookup of user roles and permission definitions. Never changes anything.
To see which roles a specific user has, use read_users with action: "get_assignments".
Server: RingEX Admin
Access: Read-only
Actions¶
| Action | Required | Optional | What it returns |
|---|---|---|---|
list_roles |
page, perPage |
customOnly |
Roles on the account. |
get_role |
roleId |
— | One role with its permission ids. |
list_assignable |
extensionId, page, perPage |
— | Roles the administrator may assign to one user. |
list_permissions |
page, perPage |
assignableOnly |
Permission definitions. |
get_permission |
permissionId |
— | An explanation of one permission. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | One of the actions above. |
roleId |
✅ (get_role) | Role id. |
extensionId |
✅ (list_assignable) | Numeric id of the user whose assignable roles to list. |
permissionId |
✅ (get_permission) | Permission id. |
customOnly |
— | When true, return only custom roles defined by this account. |
assignableOnly |
— | When true, return only assignable permissions. |
page |
✅ (list actions) | Page number, 1–1000. Defaults to 1. |
perPage |
✅ (list actions) | Results per page, 1–100. Defaults to 50. |
Example¶
list_assignable needs the RoleManagement scope
RingCentral answers 403 BIL-103 for this lookup on some accounts — fall back to list_roles when that happens.
read_sites¶
Read-only lookup of the account's sites, their members, and their IVR top menus. Never changes anything.
Server: RingEX Admin
Access: Read-only
Actions¶
| Action | Required | What it returns |
|---|---|---|
list |
— | All sites. |
get |
siteId |
One site. |
list_members |
siteId, page, perPage |
Extensions assigned to the site. |
get_ivr |
siteId |
The site's IVR top menu and key actions. |
recommend_extension_prefix |
— | An unused leading extension digit for a new site, inferred from how existing sites number their extensions. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | One of the actions above. |
siteId |
✅ (get, list_members, get_ivr) | Site id from list. The literal id main-site is not accepted for these actions. |
page |
✅ (list actions) | Page number, 1–1000. Defaults to 1. |
perPage |
✅ (list actions) | Results per page, 1–100. Defaults to 50. |
Example¶
recommend_extension_prefix is advisory
It returns its evidence alongside the suggestion, and the prefix is not reserved.
read_users¶
Read-only lookup of users and other extensions in the authenticated administrator's own account. Never changes anything. For the authenticated user's own settings, use the RingEX Phone tools instead.
Server: RingEX Admin
Access: Read-only
Actions¶
| Action | Required | Optional | What it returns |
|---|---|---|---|
list |
page, perPage |
status, type, extensionNumber, email |
One page of extensions, with exact-match filters. |
search |
text |
status, type |
Extensions matching name, email, or extension number within a bounded scan. The result reports whether the scan was complete. |
get |
extensionId |
— | One extension. |
get_assignments |
extensionId |
— | The roles and administered sites assigned to one extension. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | One of the actions above. |
extensionId |
✅ (get, get_assignments) | Numeric RingCentral extension id, as returned by list or search. |
text |
✅ (search) | Case-insensitive text matched against name, email, and extension number. At least 2 characters. |
status |
— | Array of Enabled, Disabled, Frozen, NotActivated, Unassigned. |
type |
— | Array of User, VirtualUser, DigitalUser, FlexibleUser, Limited, Department, Announcement, Voicemail, PagingOnly, SharedLinesGroup, ParkLocation, IvrMenu. Department is the legacy API name for a call queue. |
extensionNumber |
— | Exact extension number (list only). |
email |
— | Exact email address (list only). |
page |
✅ (list actions) | Page number, 1–1000. Defaults to 1. |
perPage |
✅ (list actions) | Results per page, 1–100. Defaults to 50. |
Examples¶
Requires an administrator
The caller needs permission to read extensions.
release_phone_number¶
Removes an unused phone number from the account's inventory. Only numbers with Inventory, ForwardedNumber, or ForwardedCompanyNumber usage can be released. Numbers in use — direct numbers, the main company number, additional company numbers — are returned as blocked with the reason and must be moved off their role first.
There is no unassign action, because RingCentral offers no operation that returns an assigned number to inventory.
Server: RingEX Admin
Access: Destructive — confirmation required
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | release. |
phoneNumberId |
✅ | Number to release, from read_phone_numbers. |
confirmationToken |
— | Token from the preview call. |
Example¶
Recovery is not guaranteed
Whether a released number can be recovered needs live validation. Usage is read from the v2 phone-number list; a number that list does not return is treated as in use.
search_admin_audit_log¶
Read-only search of the account's configuration audit trail — who changed what and when. Filter by time range (at most 180 days), the administrator who acted, the affected extension, site, exact action ids, or free text.
Secrets and credential-like changed values are redacted, and client IP addresses are omitted.
Server: RingEX Admin
Access: Read-only
Parameters¶
| Parameter | Required | Description |
|---|---|---|
eventTimeFrom |
— | Start of the range (ISO 8601). Defaults to 7 days before eventTimeTo. |
eventTimeTo |
— | End of the range (ISO 8601). Defaults to now. |
actorExtensionIds |
— | Only events initiated by these extension ids — the administrator who made the change. Up to 20. |
targetExtensionIds |
— | Only events affecting these extension ids — the user or object that was changed. Up to 20. |
siteId |
— | Only events for this site. |
actionIds |
— | Exact audit action ids to include, e.g. CHANGE_USER_INFO. Up to 20. |
excludeActionIds |
— | Action ids to exclude. Up to 20. |
searchText |
— | Substring matched against initiator and target name, extension number, role, and changed values. |
page |
— | Page number, 1–1000. Defaults to 1. |
perPage |
— | Results per page, 1–100. Defaults to 25. |
Example¶
Narrow rather than page deeply
RingCentral returns at most 10,000 records per search. Tighten the range or filters instead of paging through everything.
set_emergency_call_redirect¶
Switches the company-wide "forward all calls" override on or off, for a temporary closure or emergency. This affects every inbound company call.
RingCentral only lets this tool toggle the override — the destination and time ranges are read from the existing account configuration and cannot be changed here, so confirm the destination shown in the preview before enabling.
Server: RingEX Admin
Access: Write — confirmation required
Actions¶
| Action | Required | Optional | What it does |
|---|---|---|---|
enable |
— | acknowledgeDisconnect, confirmationToken |
Turns the forward-all override on. |
disable |
— | confirmationToken |
Turns it off. |
Parameters¶
| Parameter | Required | Description |
|---|---|---|
action |
✅ | enable or disable. |
acknowledgeDisconnect |
— | true, required only when the configured forward-all action disconnects callers. Confirms that callers will be disconnected rather than forwarded. |
confirmationToken |
— | Token from the preview call. |
Example¶
Enabling is refused without a usable destination
The override needs the Bypass action with a destination, the Operator action, or the Disconnect action with acknowledgeDisconnect: true. The result reads the setting back to verify it. Uses RingCentral's legacy company call-handling API because no replacement exists.