# RingCentral

> Automate RingCentral calling and messaging. Start and cancel RingOut calls, read the call log, set presence, manage voicemails and faxes, keep a personal address book and post in Team Messaging chats.

App · Messaging · 20 actions. Web page: https://docs.lodol.com/docs/integrations/ringcentral

## Actions

### Cancel call (RingOut)

Cancel a RingOut call that is still ringing.

**Inputs**

- RingOut call ID (`ringout_id`, text, required): The 'id' returned by Make call.

**Outputs**

- `cancelled` (true/false): Always true
- `ringout_id` (text): The RingOut call that was cancelled

**Example output**

```json
{
  "cancelled": true,
  "ringout_id": "234343434"
}
```

### Create contact

Add a contact to the user's personal address book. Give at least a first name, last name or company.

**Inputs**

- First name (`first_name`, text): First name. On update, leave empty to keep the current value.
- Last name (`last_name`, text): Last name. On update, leave empty to keep the current value.
- Company (`company`, text): Company. On update, leave empty to keep the current value.
- Job title (`job_title`, text): Job title. On update, leave empty to keep the current value.
- Email (`email`, text): Email address. On update, leave empty to keep the current value.
- Business phone (`business_phone`, text): Business phone. International format, e.g. +16505550100. On update, leave empty to keep the current value.
- Mobile phone (`mobile_phone`, text): Mobile phone. International format, e.g. +16505550100. On update, leave empty to keep the current value.
- Home phone (`home_phone`, text): Home phone. International format, e.g. +16505550100. On update, leave empty to keep the current value.
- Notes (`notes`, text): Notes. On update, leave empty to keep the current value.
- Street (`street`, text): Business address: street. On update, leave empty to keep the current value.
- City (`city`, text): Business address: city. On update, leave empty to keep the current value.
- State (`state`, text): Business address: state or province. On update, leave empty to keep the current value.
- ZIP / postal code (`zip_code`, text): Business address: ZIP or postal code. On update, leave empty to keep the current value.
- Country (`country`, text): Business address: country. On update, leave empty to keep the current value.

**Outputs**

- `availability` (text): Alive, Deleted or Purged
- `business_address` (object): Business address
- `business_phone` (text): Business phone
- `company` (text): Company
- `email` (text): Email
- `first_name` (text): First name
- `home_phone` (text): Home phone
- `id` (text): Contact ID - the value Update/Delete contact take
- `job_title` (text): Job title
- `last_name` (text): Last name
- `mobile_phone` (text): Mobile phone
- `notes` (text): Notes
- `uri` (text): API link to the contact
- `web_page` (text): Web page

**Example output**

```json
{
  "availability": "Alive",
  "business_address": {
    "city": "Arlington",
    "country": "US",
    "state": "VA",
    "street": "1 Main St",
    "zip": "22201"
  },
  "business_phone": "+14155550123",
  "company": "Example Ltd",
  "email": "grace@example.com",
  "first_name": "Grace",
  "home_phone": "",
  "id": "2093808004",
  "job_title": "Rear Admiral",
  "last_name": "Hopper",
  "mobile_phone": "",
  "notes": "",
  "uri": "https://platform.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008/address-book/contact/2093808004",
  "web_page": ""
}
```

### Delete contact

Delete a contact from the user's personal address book.

**Inputs**

- Contact ID (`contact_id`, text, required): The contact's 'id' from List contacts or Create contact.

**Outputs**

- `contact_id` (text): The contact deleted
- `deleted` (true/false): Always true

**Example output**

```json
{
  "contact_id": "2093808004",
  "deleted": true
}
```

### Delete message

Move a message to Deleted, where Mark message can restore it, or tick Delete permanently to purge it for good.

**Inputs**

- Message ID (`message_id`, text, required): The message's 'id' from List messages.
- Delete permanently (`purge`, true/false): Purge the message and its attachments; cannot be undone.

**Outputs**

- `deleted` (true/false): Always true
- `message_id` (text): The message deleted
- `purged` (true/false): True when permanently purged, false when moved to Deleted

**Example output**

```json
{
  "deleted": true,
  "message_id": "1724099032020",
  "purged": false
}
```

### Get call record

Get one call from the call log by its ID, with its legs when the Detailed view is chosen.

**Inputs**

- Call record ID (`call_record_id`, text, required): The call's 'id' from List call log.
- Extension (`extension_id`, text): The extension to act on. Leave empty for the user this connection signs in as. Another extension needs an admin user.
- View (`view`, text): Detailed adds each call's legs. Defaults to Simple. One of: `Simple`, `Detailed` (Detailed (includes call legs)).

**Outputs**

- `action` (text): What the call was, e.g. Phone Call, RingOut Web
- `deleted` (true/false): Whether the record is deleted
- `direction` (text): Inbound or Outbound
- `duration` (number): Duration in seconds
- `from_extension_number` (text): Caller extension number
- `from_name` (text): Caller name
- `from_number` (text): Calling number
- `has_recording` (true/false): Whether the call was recorded
- `id` (text): Call log record ID - the value Get call record takes
- `last_modified_time` (text): When the record last changed
- `legs` (list): Call legs (Detailed view only)
- `reason` (text): Reason code for the result
- `reason_description` (text): Reason in words
- `recording_content_uri` (text): Link to the recording audio (needs a token)
- `recording_id` (text): Recording ID, if recorded
- `result` (text): Outcome, e.g. Accepted, Missed, Voicemail
- `session_id` (text): Call session ID
- `start_time` (text): When the call started (ISO 8601)
- `telephony_session_id` (text): Telephony session ID
- `to_extension_number` (text): Called extension number
- `to_name` (text): Called party name
- `to_number` (text): Called number
- `transport` (text): PSTN or VoIP
- `type` (text): Voice or Fax
- `uri` (text): API link to the record

**Example output**

```json
{
  "action": "RingOut Web",
  "deleted": false,
  "direction": "Outbound",
  "duration": 42,
  "from_extension_number": "101",
  "from_name": "Ada Lovelace",
  "from_number": "+16505550100",
  "has_recording": false,
  "id": "Y3s7ZS2tC9qzUA",
  "last_modified_time": "2026-10-01T14:06:00.000Z",
  "legs": [],
  "reason": "",
  "reason_description": "",
  "recording_content_uri": "",
  "recording_id": "",
  "result": "Call connected",
  "session_id": "36483620008",
  "start_time": "2026-10-01T14:05:12.000Z",
  "telephony_session_id": "s-a0d7bc42d8a3dz1922b9d8b9cz1a8e2b7d0000",
  "to_extension_number": "",
  "to_name": "",
  "to_number": "+14155550123",
  "transport": "PSTN",
  "type": "Voice",
  "uri": "https://platform.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008/call-log/Y3s7ZS2tC9qzUA"
}
```

### Get call status (RingOut)

Check the status of each leg of a RingOut call.

**Inputs**

- RingOut call ID (`ringout_id`, text, required): The 'id' returned by Make call.

**Outputs**

- `call_status` (text): Overall status, e.g. InProgress, Success
- `callee_status` (text): Status of the second leg (the to number)
- `caller_status` (text): Status of the first leg (the from number)
- `id` (text): RingOut call ID - the value Get/Cancel RingOut take
- `uri` (text): API link to the RingOut call

**Example output**

```json
{
  "call_status": "InProgress",
  "callee_status": "InProgress",
  "caller_status": "InProgress",
  "id": "234343434",
  "uri": "https://platform.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008/ring-out/234343434"
}
```

### Get extension

Get an extension's profile: name, extension number, email, type, status and time zone. Leave the extension empty for the user this connection signs in as.

**Inputs**

- Extension (`extension_id`, text): The extension to act on. Leave empty for the user this connection signs in as. Another extension needs an admin user.

**Outputs**

- `business_phone` (text): Business phone
- `company` (text): Company
- `department` (text): Department
- `email` (text): Contact email
- `extension_number` (text): Short internal extension number, e.g. 101
- `first_name` (text): Contact first name
- `hidden` (true/false): Whether the extension is hidden from the directory
- `id` (text): Extension ID - the value other steps take as extension_id
- `is_admin` (true/false): Whether the extension has admin rights
- `job_title` (text): Job title
- `last_name` (text): Contact last name
- `mobile_phone` (text): Mobile phone
- `name` (text): Display name
- `site_name` (text): Site the extension belongs to, if sites are used
- `status` (text): Enabled, Disabled, Frozen, NotActivated or Unassigned
- `sub_type` (text): Extension subtype, if any
- `timezone` (text): Time zone name
- `type` (text): Extension type, e.g. User, Department, IvrMenu
- `uri` (text): API link to the extension

**Example output**

```json
{
  "business_phone": "+16505550100",
  "company": "Example Ltd",
  "department": "",
  "email": "ada@example.com",
  "extension_number": "101",
  "first_name": "Ada",
  "hidden": false,
  "id": "62264425008",
  "is_admin": true,
  "job_title": "Engineer",
  "last_name": "Lovelace",
  "mobile_phone": "",
  "name": "Ada Lovelace",
  "site_name": "",
  "status": "Enabled",
  "sub_type": "",
  "timezone": "US/Pacific",
  "type": "User",
  "uri": "https://platform.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008"
}
```

### Get message

Get one voicemail, fax or text message, with links to its attachments such as the voicemail audio.

**Inputs**

- Message ID (`message_id`, text, required): The message's 'id' from List messages.

**Outputs**

- `attachments` (list): Attachments, e.g. the voicemail audio
- `availability` (text): Alive, Deleted or Purged
- `conversation_id` (text): Conversation ID
- `creation_time` (text): When the message was created (ISO 8601)
- `direction` (text): Inbound or Outbound
- `fax_page_count` (number): Pages in a fax
- `from_extension_number` (text): Sender extension number
- `from_name` (text): Sender name
- `from_number` (text): Sender number
- `id` (text): Message ID - the value the other message steps take
- `last_modified_time` (text): When the message last changed
- `message_status` (text): Delivery status, e.g. Received, Sent
- `priority` (text): Normal or High
- `read_status` (text): Read or Unread
- `subject` (text): Subject or SMS text
- `to` (list): Recipients
- `type` (text): VoiceMail, Fax, SMS, Pager or Text
- `uri` (text): API link to the message
- `vm_transcription_status` (text): Voicemail transcription status

**Example output**

```json
{
  "attachments": [
    {
      "content_type": "audio/mpeg",
      "file_name": "",
      "id": "1724099032020",
      "size": 0,
      "type": "AudioRecording",
      "uri": "https://media.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008/message-store/1724099032020/content/1724099032020",
      "vm_duration": 18
    }
  ],
  "availability": "Alive",
  "conversation_id": "7015284826245165000",
  "creation_time": "2026-10-01T09:30:00.000Z",
  "direction": "Inbound",
  "fax_page_count": 0,
  "from_extension_number": "",
  "from_name": "Grace Hopper",
  "from_number": "+14155550123",
  "id": "1724099032020",
  "last_modified_time": "2026-10-01T09:30:05.000Z",
  "message_status": "Received",
  "priority": "Normal",
  "read_status": "Unread",
  "subject": "Voice message from Grace Hopper",
  "to": [
    {
      "extension_number": "101",
      "location": "",
      "name": "Ada Lovelace",
      "phone_number": "+16505550100"
    }
  ],
  "type": "VoiceMail",
  "uri": "https://platform.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008/message-store/1724099032020",
  "vm_transcription_status": "Completed"
}
```

### Get presence

Get whether an extension is available, busy or offline, its do-not-disturb mode, status message and any calls in progress.

**Inputs**

- Extension (`extension_id`, text): The extension to act on. Leave empty for the user this connection signs in as. Another extension needs an admin user.
- Detailed call state (`detailed_telephony_state`, true/false): Include detailed state for calls in progress.

**Outputs**

- `active_call_count` (number): Number of calls in progress
- `active_calls` (list): Calls in progress
- `allow_see_my_presence` (true/false): Whether others may see this presence
- `caller_id_visibility` (text): All, None or PermittedUsers
- `dnd_status` (text): Do-not-disturb mode, e.g. TakeAllCalls
- `extension_id` (text): Extension ID
- `extension_number` (text): Extension number
- `meeting_status` (text): Connected or Disconnected
- `message` (text): Custom status message
- `pick_up_calls_on_hold` (true/false): Allow picking up calls on hold
- `presence_status` (text): Aggregated presence: Available, Busy or Offline
- `ring_on_monitored_call` (true/false): Ring on monitored calls
- `telephony_status` (text): NoCall, CallConnected, Ringing, OnHold or ParkedCall
- `user_status` (text): User-defined status: Available, Busy or Offline

**Example output**

```json
{
  "active_call_count": 0,
  "active_calls": [],
  "allow_see_my_presence": true,
  "caller_id_visibility": "All",
  "dnd_status": "TakeAllCalls",
  "extension_id": "62264425008",
  "extension_number": "101",
  "meeting_status": "Disconnected",
  "message": "In the office",
  "pick_up_calls_on_hold": false,
  "presence_status": "Available",
  "ring_on_monitored_call": false,
  "telephony_status": "NoCall",
  "user_status": "Available"
}
```

### List call log

List an extension's calls with caller, callee, result and duration. Set From - without it RingCentral returns only the last 24 hours. RingCentral allows about 10 call-log requests a minute per user.

**Inputs**

- Extension (`extension_id`, text): The extension to act on. Leave empty for the user this connection signs in as. Another extension needs an admin user.
- From (`date_from`, date and time): Start of the period. Leave empty and RingCentral returns only the last 24 hours.
- To (`date_to`, date and time): End of the period. Leave empty for now.
- Direction (`direction`, text): Only inbound or only outbound. Leave empty for both. One of: `Inbound`, `Outbound`.
- Call type (`call_type`, text): Only voice or only fax calls. Leave empty for both. One of: `Voice`, `Fax`.
- Phone number (`phone_number`, text): Only calls to or from this number.
- Recorded calls only (`with_recording`, true/false): Only calls that have a recording.
- View (`view`, text): Detailed adds each call's legs. Defaults to Simple. One of: `Simple`, `Detailed` (Detailed (includes call legs)).
- Page (`page`, number): Page number to return, starting at 1. From 1 to 100000. Default: `1`.
- Results per page (`per_page`, number): How many calls per page: up to 1000 in Simple view, 250 in Detailed. From 1 to 1000. Default: `100`.

**Outputs**

- `count` (number): How many records came back on this page
- `date_from` (text): Start of the period sent (UTC); empty means RingCentral's default of the last 24 hours
- `date_to` (text): End of the period sent (UTC); empty means now
- `has_more` (true/false): Whether a further page exists
- `items` (list): The calls
- `page` (number): The page number returned
- `per_page` (number): The page size used
- `total` (number): Total matching records, when RingCentral reports it
- `total_pages` (number): Total pages, when RingCentral reports it

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "action": "RingOut Web",
      "deleted": false,
      "direction": "Outbound",
      "duration": 42,
      "from_extension_number": "101",
      "from_name": "Ada Lovelace",
      "from_number": "+16505550100",
      "has_recording": false,
      "id": "Y3s7ZS2tC9qzUA",
      "last_modified_time": "2026-10-01T14:06:00.000Z",
      "legs": [],
      "reason": "",
      "reason_description": "",
      "recording_content_uri": "",
      "recording_id": "",
      "result": "Call connected",
      "session_id": "36483620008",
      "start_time": "2026-10-01T14:05:12.000Z",
      "telephony_session_id": "s-a0d7bc42d8a3dz1922b9d8b9cz1a8e2b7d0000",
      "to_extension_number": "",
      "to_name": "",
      "to_number": "+14155550123",
      "transport": "PSTN",
      "type": "Voice",
      "uri": "https://platform.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008/call-log/Y3s7ZS2tC9qzUA"
    }
  ],
  "page": 1,
  "per_page": 100,
  "total": 1,
  "total_pages": 1
}
```

### List chats

List the Team Messaging chats the user belongs to - teams, group and direct chats, and the personal notes chat.

**Inputs**

- Types (`chat_types`, list): Only these chat types. Leave empty for all. One or more of: `Team`, `Group`, `Direct`, `Personal` (Personal (notes to self)), `Everyone`.
- Maximum results (`record_count`, number): How many chats to return, 1-250. From 1 to 250. Default: `30`.
- Page token (`page_token`, text): The next_page_token of a previous List chats.

**Outputs**

- `count` (number): How many chats came back
- `has_more` (true/false): Whether a further page exists
- `items` (list): The chats
- `next_page_token` (text): Send as page_token for the next page; empty at the end

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "creation_time": "2026-01-10T10:00:00.000Z",
      "description": "Support team",
      "id": "1452670982",
      "label": "Support",
      "last_modified_time": "2026-10-01T10:00:00.000Z",
      "member_count": 1,
      "member_ids": [
        "62264425008"
      ],
      "name": "Support",
      "public": true,
      "status": "Active",
      "type": "Team"
    }
  ],
  "next_page_token": ""
}
```

### List contacts

List contacts in the user's personal address book, optionally those whose first or last name starts with some text, or with a given phone number.

**Inputs**

- Name starts with (`starts_with`, text): Only contacts whose first or last name starts with this.
- Phone number (`phone_number`, text): Only contacts with this number, e.g. +14155550123.
- Sort by (`sort_by`, list): Sort order, applied in the order chosen. One or more of: `FirstName` (First name), `LastName` (Last name), `Company`.
- Page (`page`, number): Page number to return, starting at 1. From 1 to 100000. Default: `1`.
- Results per page (`per_page`, number): How many records per page, 1-1000. From 1 to 1000. Default: `100`.

**Outputs**

- `count` (number): How many records came back on this page
- `has_more` (true/false): Whether a further page exists
- `items` (list): The contacts
- `page` (number): The page number returned
- `per_page` (number): The page size used
- `total` (number): Total matching records, when RingCentral reports it
- `total_pages` (number): Total pages, when RingCentral reports it

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "availability": "Alive",
      "business_address": {
        "city": "Arlington",
        "country": "US",
        "state": "VA",
        "street": "1 Main St",
        "zip": "22201"
      },
      "business_phone": "+14155550123",
      "company": "Example Ltd",
      "email": "grace@example.com",
      "first_name": "Grace",
      "home_phone": "",
      "id": "2093808004",
      "job_title": "Rear Admiral",
      "last_name": "Hopper",
      "mobile_phone": "",
      "notes": "",
      "uri": "https://platform.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008/address-book/contact/2093808004",
      "web_page": ""
    }
  ],
  "page": 1,
  "per_page": 100,
  "total": 1,
  "total_pages": 1
}
```

### List extensions

List the account's extensions - users, call queues, IVR menus and more - filtered by type, status, number or email.

**Inputs**

- Types (`extension_types`, list): Only these extension types. Leave empty for all. One or more of: `User`, `Department` (Department (call queue)), `IvrMenu` (IVR menu), `SharedLinesGroup` (Shared lines group), `PagingOnly` (Paging only), `ParkLocation` (Park location), `Announcement`, `Voicemail`, `FaxUser` (Fax user), `VirtualUser` (Virtual user), and 8 more.
- Statuses (`statuses`, list): Only these statuses. Leave empty for all. One or more of: `Enabled`, `Disabled`, `NotActivated` (Not activated), `Unassigned`.
- Extension number (`extension_number`, text): Only the extension with this short number, e.g. 101.
- Email (`email`, text): Only the extension with this email address.
- Page (`page`, number): Page number to return, starting at 1. From 1 to 100000. Default: `1`.
- Results per page (`per_page`, number): How many records per page, 1-1000. From 1 to 1000. Default: `100`.

**Outputs**

- `count` (number): How many records came back on this page
- `has_more` (true/false): Whether a further page exists
- `items` (list): The extensions
- `page` (number): The page number returned
- `per_page` (number): The page size used
- `total` (number): Total matching records, when RingCentral reports it
- `total_pages` (number): Total pages, when RingCentral reports it

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "business_phone": "+16505550100",
      "company": "Example Ltd",
      "department": "",
      "email": "ada@example.com",
      "extension_number": "101",
      "first_name": "Ada",
      "hidden": false,
      "id": "62264425008",
      "is_admin": true,
      "job_title": "Engineer",
      "last_name": "Lovelace",
      "mobile_phone": "",
      "name": "Ada Lovelace",
      "site_name": "",
      "status": "Enabled",
      "sub_type": "",
      "timezone": "US/Pacific",
      "type": "User",
      "uri": "https://platform.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008"
    }
  ],
  "page": 1,
  "per_page": 100,
  "total": 1,
  "total_pages": 1
}
```

### List messages

List voicemails, faxes, pager and SMS messages, filtered by type, read status, direction and date. Set From - without it RingCentral returns only the last 24 hours.

**Inputs**

- Types (`message_types`, list): Only these message types. Leave empty for all. One or more of: `VoiceMail`, `Fax`, `SMS`, `Pager`.
- Read status (`read_status`, text): Only read or only unread. Leave empty for both. One of: `Read`, `Unread`.
- Direction (`direction`, text): Only inbound or only outbound. Leave empty for both. One of: `Inbound`, `Outbound`.
- From (`date_from`, date and time): Start of the period. Leave empty and RingCentral returns only the last 24 hours.
- To (`date_to`, date and time): End of the period. Leave empty for now.
- Phone number (`phone_number`, text): Only messages to or from this number.
- Conversation ID (`conversation_id`, text): Only messages in this conversation.
- Page (`page`, number): Page number to return, starting at 1. From 1 to 100000. Default: `1`.
- Results per page (`per_page`, number): How many records per page, 1-1000. From 1 to 1000. Default: `100`.

**Outputs**

- `count` (number): How many records came back on this page
- `date_from` (text): Start of the period sent (UTC); empty means RingCentral's default of the last 24 hours
- `date_to` (text): End of the period sent (UTC); empty means now
- `has_more` (true/false): Whether a further page exists
- `items` (list): The messages
- `page` (number): The page number returned
- `per_page` (number): The page size used
- `total` (number): Total matching records, when RingCentral reports it
- `total_pages` (number): Total pages, when RingCentral reports it

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "attachments": [
        {
          "content_type": "audio/mpeg",
          "file_name": "",
          "id": "1724099032020",
          "size": 0,
          "type": "AudioRecording",
          "uri": "https://media.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008/message-store/1724099032020/content/1724099032020",
          "vm_duration": 18
        }
      ],
      "availability": "Alive",
      "conversation_id": "7015284826245165000",
      "creation_time": "2026-10-01T09:30:00.000Z",
      "direction": "Inbound",
      "fax_page_count": 0,
      "from_extension_number": "",
      "from_name": "Grace Hopper",
      "from_number": "+14155550123",
      "id": "1724099032020",
      "last_modified_time": "2026-10-01T09:30:05.000Z",
      "message_status": "Received",
      "priority": "Normal",
      "read_status": "Unread",
      "subject": "Voice message from Grace Hopper",
      "to": [
        {
          "extension_number": "101",
          "location": "",
          "name": "Ada Lovelace",
          "phone_number": "+16505550100"
        }
      ],
      "type": "VoiceMail",
      "uri": "https://platform.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008/message-store/1724099032020",
      "vm_transcription_status": "Completed"
    }
  ],
  "page": 1,
  "per_page": 100,
  "total": 1,
  "total_pages": 1
}
```

### List phone numbers

List the phone numbers assigned to an extension, with how each is used (direct, main company, fax ...) and what it can do (caller ID, SMS).

**Inputs**

- Extension (`extension_id`, text): The extension to act on. Leave empty for the user this connection signs in as. Another extension needs an admin user.
- Usage types (`usage_types`, list): Only numbers used this way. Leave empty for all. One or more of: `DirectNumber` (Direct number), `MainCompanyNumber` (Main company number), `AdditionalCompanyNumber` (Additional company number), `CompanyNumber` (Company number), `CompanyFaxNumber` (Company fax number), `ForwardedNumber` (Forwarded number), `ForwardedCompanyNumber` (Forwarded company number), `BusinessMobileNumber` (Business mobile number), `PartnerBusinessMobileNumber` (Partner business mobile number), `IntegrationNumber` (Integration number).
- Status (`status`, text): Only numbers in this state. Leave empty for all. One of: `Normal`, `Pending`, `PortedIn` (Ported in), `Temporary`.
- Page (`page`, number): Page number to return, starting at 1. From 1 to 100000. Default: `1`.
- Results per page (`per_page`, number): How many records per page, 1-1000. From 1 to 1000. Default: `100`.

**Outputs**

- `count` (number): How many records came back on this page
- `has_more` (true/false): Whether a further page exists
- `items` (list): The phone numbers
- `page` (number): The page number returned
- `per_page` (number): The page size used
- `total` (number): Total matching records, when RingCentral reports it
- `total_pages` (number): Total pages, when RingCentral reports it

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "items": [
    {
      "country": "United States",
      "extension_id": "62264425008",
      "extension_number": "101",
      "features": [
        "CallerId",
        "SmsSender"
      ],
      "id": "1180745008",
      "label": "",
      "location": "Belmont, CA",
      "payment_type": "Local",
      "phone_number": "+16505550100",
      "primary": true,
      "status": "Normal",
      "type": "VoiceFax",
      "usage_type": "DirectNumber"
    }
  ],
  "page": 1,
  "per_page": 100,
  "total": 1,
  "total_pages": 1
}
```

### Make call (RingOut)

Place a click-to-call: RingCentral first rings the From number, and when it is answered connects it to the To number. Returns the RingOut ID for checking or cancelling the call.

**Inputs**

- From (rings first) (`from_number`, text, required): Your phone, rung first - e.g. your mobile or desk phone. International format, e.g. +16505550100.
- To (`to_number`, text, required): The number to connect to once From answers. International format, e.g. +14155550123.
- Caller ID (`caller_id`, text): One of your RingCentral numbers to show to the person called (see List phone numbers). Leave empty for your default caller ID.
- Play prompt (`play_prompt`, true/false): Ask the From party to press 1 before connecting, so a voicemail pickup does not place the call.

**Outputs**

- `call_status` (text): Overall status, e.g. InProgress, Success
- `callee_status` (text): Status of the second leg (the to number)
- `caller_status` (text): Status of the first leg (the from number)
- `id` (text): RingOut call ID - the value Get/Cancel RingOut take
- `uri` (text): API link to the RingOut call

**Example output**

```json
{
  "call_status": "InProgress",
  "callee_status": "InProgress",
  "caller_status": "InProgress",
  "id": "234343434",
  "uri": "https://platform.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008/ring-out/234343434"
}
```

### Mark message

Mark a message read or unread, or restore one that was deleted (not purged).

**Inputs**

- Message ID (`message_id`, text, required): The message's 'id' from List messages.
- Read status (`read_status`, text): Mark as read or unread. Leave empty to keep it. One of: `Read`, `Unread`.
- Restore from Deleted (`restore`, true/false): Bring a deleted message back to the inbox.

**Outputs**

- `attachments` (list): Attachments, e.g. the voicemail audio
- `availability` (text): Alive, Deleted or Purged
- `conversation_id` (text): Conversation ID
- `creation_time` (text): When the message was created (ISO 8601)
- `direction` (text): Inbound or Outbound
- `fax_page_count` (number): Pages in a fax
- `from_extension_number` (text): Sender extension number
- `from_name` (text): Sender name
- `from_number` (text): Sender number
- `id` (text): Message ID - the value the other message steps take
- `last_modified_time` (text): When the message last changed
- `message_status` (text): Delivery status, e.g. Received, Sent
- `priority` (text): Normal or High
- `read_status` (text): Read or Unread
- `subject` (text): Subject or SMS text
- `to` (list): Recipients
- `type` (text): VoiceMail, Fax, SMS, Pager or Text
- `uri` (text): API link to the message
- `vm_transcription_status` (text): Voicemail transcription status

**Example output**

```json
{
  "attachments": [
    {
      "content_type": "audio/mpeg",
      "file_name": "",
      "id": "1724099032020",
      "size": 0,
      "type": "AudioRecording",
      "uri": "https://media.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008/message-store/1724099032020/content/1724099032020",
      "vm_duration": 18
    }
  ],
  "availability": "Alive",
  "conversation_id": "7015284826245165000",
  "creation_time": "2026-10-01T09:30:00.000Z",
  "direction": "Inbound",
  "fax_page_count": 0,
  "from_extension_number": "",
  "from_name": "Grace Hopper",
  "from_number": "+14155550123",
  "id": "1724099032020",
  "last_modified_time": "2026-10-01T09:30:05.000Z",
  "message_status": "Received",
  "priority": "Normal",
  "read_status": "Unread",
  "subject": "Voice message from Grace Hopper",
  "to": [
    {
      "extension_number": "101",
      "location": "",
      "name": "Ada Lovelace",
      "phone_number": "+16505550100"
    }
  ],
  "type": "VoiceMail",
  "uri": "https://platform.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008/message-store/1724099032020",
  "vm_transcription_status": "Completed"
}
```

### Post chat message

Post a text message in a Team Messaging chat.

**Inputs**

- Chat (`chat_id`, text, required): The chat to post in. Pick one, or paste a chat ID from List chats.
- Text (`text`, text, required): The message, up to 10000 characters. Markdown is supported.

**Outputs**

- `chat_id` (text): Chat it was posted in
- `creation_time` (text): When it was posted
- `creator_id` (text): ID of the person who posted it
- `id` (text): Post ID
- `last_modified_time` (text): When it last changed
- `text` (text): Message text
- `type` (text): TextMessage, PersonJoined or PersonsAdded

**Example output**

```json
{
  "chat_id": "1452670982",
  "creation_time": "2026-10-01T10:00:00.000Z",
  "creator_id": "62264425008",
  "id": "6134882309",
  "last_modified_time": "2026-10-01T10:00:00.000Z",
  "text": "Deployment finished",
  "type": "TextMessage"
}
```

### Update contact

Change a personal contact. Only the fields you fill in change; everything left empty stays as it is.

**Inputs**

- Contact ID (`contact_id`, text, required): The contact's 'id' from List contacts or Create contact.
- First name (`first_name`, text): First name. On update, leave empty to keep the current value.
- Last name (`last_name`, text): Last name. On update, leave empty to keep the current value.
- Company (`company`, text): Company. On update, leave empty to keep the current value.
- Job title (`job_title`, text): Job title. On update, leave empty to keep the current value.
- Email (`email`, text): Email address. On update, leave empty to keep the current value.
- Business phone (`business_phone`, text): Business phone. International format, e.g. +16505550100. On update, leave empty to keep the current value.
- Mobile phone (`mobile_phone`, text): Mobile phone. International format, e.g. +16505550100. On update, leave empty to keep the current value.
- Home phone (`home_phone`, text): Home phone. International format, e.g. +16505550100. On update, leave empty to keep the current value.
- Notes (`notes`, text): Notes. On update, leave empty to keep the current value.
- Street (`street`, text): Business address: street. On update, leave empty to keep the current value.
- City (`city`, text): Business address: city. On update, leave empty to keep the current value.
- State (`state`, text): Business address: state or province. On update, leave empty to keep the current value.
- ZIP / postal code (`zip_code`, text): Business address: ZIP or postal code. On update, leave empty to keep the current value.
- Country (`country`, text): Business address: country. On update, leave empty to keep the current value.

**Outputs**

- `availability` (text): Alive, Deleted or Purged
- `business_address` (object): Business address
- `business_phone` (text): Business phone
- `company` (text): Company
- `email` (text): Email
- `first_name` (text): First name
- `home_phone` (text): Home phone
- `id` (text): Contact ID - the value Update/Delete contact take
- `job_title` (text): Job title
- `last_name` (text): Last name
- `mobile_phone` (text): Mobile phone
- `notes` (text): Notes
- `uri` (text): API link to the contact
- `web_page` (text): Web page

**Example output**

```json
{
  "availability": "Alive",
  "business_address": {
    "city": "Arlington",
    "country": "US",
    "state": "VA",
    "street": "1 Main St",
    "zip": "22201"
  },
  "business_phone": "+14155550123",
  "company": "Example Ltd",
  "email": "grace@example.com",
  "first_name": "Grace",
  "home_phone": "",
  "id": "2093808004",
  "job_title": "Rear Admiral",
  "last_name": "Hopper",
  "mobile_phone": "",
  "notes": "",
  "uri": "https://platform.ringcentral.com/restapi/v1.0/account/62264421008/extension/62264425008/address-book/contact/2093808004",
  "web_page": ""
}
```

### Update presence

Set a user's status (available, busy, offline), do-not-disturb mode and status message. Only the fields you fill in are sent. Works for user extensions only.

**Inputs**

- Extension (`extension_id`, text): The extension to act on. Leave empty for the user this connection signs in as. Another extension needs an admin user.
- Status (`user_status`, text): The status to show. Leave empty to keep it. One of: `Available`, `Busy`, `Offline`.
- Do not disturb (`dnd_status`, text): Which calls to take. Leave empty to keep it. One of: `TakeAllCalls` (Take all calls), `DoNotAcceptAnyCalls` (Do not disturb), `DoNotAcceptDepartmentCalls` (Take my calls, not call-queue calls), `TakeDepartmentCallsOnly` (Take call-queue calls only).
- Status message (`message`, text): Up to 75 characters. Leave empty to keep it.

**Outputs**

- `active_call_count` (number): Number of calls in progress
- `active_calls` (list): Calls in progress
- `allow_see_my_presence` (true/false): Whether others may see this presence
- `caller_id_visibility` (text): All, None or PermittedUsers
- `dnd_status` (text): Do-not-disturb mode, e.g. TakeAllCalls
- `extension_id` (text): Extension ID
- `extension_number` (text): Extension number
- `meeting_status` (text): Connected or Disconnected
- `message` (text): Custom status message
- `pick_up_calls_on_hold` (true/false): Allow picking up calls on hold
- `presence_status` (text): Aggregated presence: Available, Busy or Offline
- `ring_on_monitored_call` (true/false): Ring on monitored calls
- `telephony_status` (text): NoCall, CallConnected, Ringing, OnHold or ParkedCall
- `user_status` (text): User-defined status: Available, Busy or Offline

**Example output**

```json
{
  "active_call_count": 0,
  "active_calls": [],
  "allow_see_my_presence": true,
  "caller_id_visibility": "All",
  "dnd_status": "TakeAllCalls",
  "extension_id": "62264425008",
  "extension_number": "101",
  "meeting_status": "Disconnected",
  "message": "In the office",
  "pick_up_calls_on_hold": false,
  "presence_status": "Available",
  "ring_on_monitored_call": false,
  "telephony_status": "NoCall",
  "user_status": "Available"
}
```
