RingCentral Devices API
The Devices API from RingCentral — 8 operation(s) for devices.
The Devices API from RingCentral — 8 operation(s) for devices.
openapi: 3.0.3
info:
title: RingCentral Adaptive Cards Devices API
description: RingCentral API specification
version: 1.0.58-20240529-47eda8bd
contact:
name: RingCentral Developers Support
url: https://developers.ringcentral.com/support
termsOfService: https://www.ringcentral.com/legal/apilitos.html
license:
name: RingCentral API License Agreement
url: https://www.ringcentral.com/legal/apilitos.html
servers:
- url: https://platform.ringcentral.com
description: Production API entry point
- url: https://media.ringcentral.com
description: Production Media entry point
- url: https://platform.devtest.ringcentral.com
description: Developer sandbox API entry point
- url: https://platform.devtest.ringcentral.com
description: Developer sandbox Media entry point
security:
- OAuth2: []
tags:
- name: Devices
paths:
/restapi/v2/accounts/{accountId}/device-inventory:
post:
summary: Add Phone to Inventory
description: Adds an existing phone (customer provided device - BYOD) as an unassigned device to the account inventory.
tags:
- Devices
operationId: addDeviceToInventory
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AddDeviceToInventoryRequest'
required: true
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/AddDeviceToInventoryResponse'
'400':
$ref: '#/components/responses/InvalidRequest'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/ServiceNotAvailable'
x-feature: EditAccountDevices
x-availability: Limited
x-throttling-group: Heavy
x-app-permission: EditAccounts
delete:
summary: Delete Device from Inventory
description: 'Deletes an existing unassigned (without digital line or phone number) device or multiple devices
from the account inventory. It is possible to delete up to 10 devices per request.
'
tags:
- Devices
operationId: deleteDeviceFromInventory
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteDeviceFromInventoryRequest'
required: true
responses:
'200':
description: Successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteDeviceFromInventoryResponse'
'400':
$ref: '#/components/responses/InvalidRequest'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/ServiceNotAvailable'
x-feature: AddRemoveDevices
x-availability: Limited
x-throttling-group: Heavy
x-app-permission: EditAccounts
/restapi/v2/accounts/{accountId}/devices/{deviceId}:
delete:
tags:
- Devices
summary: Remove phone line
description: "Disassociates a phone line (DL & Device) from an extension:\n\n - if the value of `keepAssetsInInventory` is `true`,\nthe given device is moved to unassigned devices and the number is moved to the number inventory;\n - if the value of `keepAssetsInInventory` is `false`, the given device and number is removed from the account;\n - if the parameter `keepAssetsInInventory` is not set (empty body), default value `true` is set.\n"
operationId: removeLineJWSPublic
parameters:
- $ref: '#/components/parameters/AccountId'
- name: deviceId
in: path
description: Internal identifier of a source device
required: true
schema:
type: string
example: '65462346462'
requestBody:
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/RemoveLineRequest'
responses:
'200':
description: 'Successful response (when `keepAssetsInInventory` is `true`)
'
content:
application/json:
schema:
$ref: '#/components/schemas/RemoveLineResponse'
'204':
description: 'Successful response (when `keepAssetsInInventory` is `false`)
'
'400':
$ref: '#/components/responses/InvalidRequest'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
x-availability: Limited
x-throttling-group: Medium
x-app-permission: EditAccounts
x-user-permission: EditAccountDevices
/restapi/v2/accounts/{accountId}/devices/bulk-add:
post:
tags:
- Devices
summary: Add BYOD Devices
description: Adds multiple BYOD (customer provided) devices to an account.
operationId: bulkAddDevicesV2
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BulkAddDevicesRequest'
required: true
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/BulkAddDevicesResponse'
'400':
$ref: '#/components/responses/InvalidRequest'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalError'
'503':
$ref: '#/components/responses/ServiceNotAvailable'
x-availability: Limited
x-throttling-group: Heavy
x-app-permission: EditAccounts
x-user-permission: AddRemoveDevices
/restapi/v2/accounts/{accountId}/extensions/{extensionId}/devices/{deviceId}/replace:
post:
tags:
- Devices
summary: Swap Devices
description: "Replaces the user device with another device, which is assigned to an extension\nor is stored in the inventory of the same account.\nCurrently, the following device types can be swapped - `HardPhone` and `OtherPhone`.\n\nPlease note:\n\n - This method allows replacing a device itself, while a phone number,\n a digital Line and an emergency address associated with this device remain unchanged\n and will still work together in a chain with the replacement device.\n - If a target device is from the inventory, then a source device will be moved\n to the inventory, and a target device will be assigned to the current extension.\n - If a target device is currently assigned to another extension,\n then the devices will be just swapped.\n"
operationId: replaceDevicesJWSPublic
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/ExtensionId'
- name: deviceId
in: path
description: Internal identifier of a source device that is currently assigned to the given extension
required: true
schema:
type: string
example: '65462346462'
responses:
'204':
description: No content
'400':
$ref: '#/components/responses/InvalidRequest'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SwapDeviceRequest'
required: true
x-availability: Limited
x-throttling-group: Medium
x-app-permission: EditAccounts
x-user-permission: EditUserDevices
/restapi/v1.0/account/{accountId}/device/{deviceId}:
get:
tags:
- Devices
summary: Get Device
description: Returns account device(s) by their ID(s).
operationId: readDevice
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/DeviceId'
- name: syncEmergencyAddress
in: query
description: Specifies if an emergency address should be synchronized or not
schema:
type: boolean
default: false
responses:
'200':
description: Account device(s) information
content:
application/json:
schema:
$ref: '#/components/schemas/DeviceResource'
x-feature: ReadAccountDevices
x-availability: High
x-throttling-group: Light
x-app-permission: ReadAccounts
x-user-permission: ReadCompanyDevices
put:
tags:
- Devices
summary: Update Device
description: Updates account device(s) by their ID(s).
operationId: updateDevice
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/DeviceId'
- name: prestatement
in: query
schema:
type: boolean
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AccountDeviceUpdate'
required: true
responses:
'200':
description: Updated device(s) information
content:
application/json:
schema:
$ref: '#/components/schemas/DeviceResource'
x-feature: EditAccountDevices
x-availability: Limited
x-throttling-group: Medium
x-app-permission: EditAccounts
x-user-permission: EditCompanyDevices
/restapi/v1.0/account/{accountId}/device/{deviceId}/sip-info:
get:
tags:
- Devices
summary: Get Device SIP Info
description: Returns device SIP information.
operationId: readDeviceSipInfo
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/DeviceId'
responses:
'200':
description: Device SIP information
content:
application/json:
schema:
$ref: '#/components/schemas/SipInfoResource'
x-feature: ReadAccountDevices
x-availability: High
x-throttling-group: Light
x-app-permission: ReadAccounts
x-user-permission: ReadCompanyDevices
/restapi/v1.0/account/{accountId}/device/{deviceId}/emergency:
put:
tags:
- Devices
summary: Update Device Emergency Info
description: Updates account device emergency information.
operationId: updateDeviceEmergency
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/DeviceId'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AccountDeviceUpdate'
required: true
responses:
'200':
description: Updated emergency information of a device
content:
application/json:
schema:
$ref: '#/components/schemas/DeviceResource'
x-availability: Limited
x-throttling-group: Medium
x-app-permission: EditAccounts
x-user-permission: EditCompanyDevices
/restapi/v1.0/account/{accountId}/extension/{extensionId}/device:
get:
tags:
- Devices
summary: List Extension Devices
description: 'Returns devices of an extension or multiple extensions by their ID(s). Batch request
is supported.
'
operationId: listExtensionDevices
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/ExtensionId'
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/PerPage'
- name: linePooling
in: query
description: Pooling type of device - Host - a device with standalone paid phone line which can be linked to a soft client instance - Guest - a device with a linked phone line - None - a device without a phone line or with specific line (free, BLA, etc.)
schema:
type: string
enum:
- Host
- Guest
- None
- name: feature
in: query
description: Device feature or multiple features supported
schema:
$ref: '#/components/schemas/DeviceFeatureEnum'
- name: type
in: query
description: Device type
schema:
type: string
default: HardPhone
enum:
- HardPhone
- SoftPhone
- OtherPhone
- MobileDevice
- BLA
- Paging
- WebPhone
- WebRTC
- Room
- name: lineType
in: query
description: Phone line type
schema:
$ref: '#/components/schemas/PhoneLineTypeEnum'
responses:
'200':
description: Extension devices information
content:
application/json:
schema:
$ref: '#/components/schemas/GetExtensionDevicesResponse'
x-feature: ReadExtensionDevices
x-availability: High
x-throttling-group: Light
x-app-permission: ReadAccounts
x-user-permission: ReadUserDevices
components:
schemas:
BillingStatementInfo:
type: object
properties:
currency:
type: string
description: 'Currency code complying with [ISO-4217](https://en.wikipedia.org/wiki/ISO_4217)
standard
'
charges:
type: array
items:
$ref: '#/components/schemas/BillingStatementCharges'
fees:
type: array
items:
$ref: '#/components/schemas/BillingStatementFees'
totalCharged:
type: number
format: double
totalCharges:
type: number
format: double
totalFees:
type: number
format: double
subtotal:
type: number
format: double
totalFreeServiceCredit:
type: number
format: double
description: 'Billing information. Returned for device update request if `prestatement`
query parameter is set to ''true''
'
ExtensionInfoIntId:
type: object
properties:
id:
type: integer
description: Internal identifier of an extension
format: int64
uri:
type: string
format: uri
description: Canonical URI of an extension
extensionNumber:
type: string
description: Number of extension
partnerId:
type: string
description: 'For Partner Applications Internal identifier of an extension
created by partner. The RingCentral supports the mapping of accounts and
stores the corresponding account ID/extension ID for each partner ID of
a client application. In request URIs partner IDs are accepted instead
of regular RingCentral native IDs as path parameters using `pid=XXX` clause.
Though in response URIs contain the corresponding account IDs and extension
IDs. In all request and response bodies these values are reflected via
partnerId attributes of account and extension
'
description: This attribute can be omitted for unassigned devices
OutboundProxyInfo:
type: object
properties:
region:
type: string
description: Geographical region
example: APAC
proxy:
type: string
description: SIP outbound proxy
proxyTLS:
type: string
description: SIP details for TLS (Transport Layer Security)
PhoneLinesInfo:
type: object
properties:
id:
type: string
description: Internal identifier of a phone line
lineType:
$ref: '#/components/schemas/PhoneLineTypeEnum'
phoneInfo:
$ref: '#/components/schemas/PhoneNumberInfoIntId'
emergencyAddress:
$ref: '#/components/schemas/EmergencyAddress'
EmergencyAddress:
type: object
properties:
required:
type: boolean
description: If set to `true` then specifying emergency address is required
localOnly:
type: boolean
description: If set to `true` then only local emergency address can be specified
lineProvisioningStatus:
type: string
description: This status is associated with a phone line provision state
enum:
- Valid
- Provisioning
- Invalid
DeviceProvisioningExtensionInfo:
type: object
properties:
id:
type: string
description: Internal identifier of an extension
uri:
type: string
format: uri
description: Canonical URI of an extension
extensionNumber:
type: string
description: Number of extension
partnerId:
type: string
description: 'For Partner Applications Internal identifier of an extension
created by partner. The RingCentral supports the mapping of accounts and
stores the corresponding account ID/extension ID for each partner ID of
a client application. In request URIs partner IDs are accepted instead
of regular RingCentral native IDs as path parameters using `pid=XXX` clause.
Though in response URIs contain the corresponding account IDs and extension
IDs. In all request and response bodies these values are reflected via
partnerId attributes of account and extension
'
description: Information on the extension, to which the phone number is assigned. Returned only for the request of Account phone number list
ApiErrorWithParameter:
description: 'The error model with additional attributes which can be used for HTTP 400/409
This is a deprecated model: "ApiError" model can be used instead with arbitrary additional parameters
'
allOf:
- $ref: '#/components/schemas/ApiError'
- type: object
properties:
parameterName:
type: string
description: The name of the API parameter/attribute which caused the error
parameterValue:
type: string
description: The value of the API parameter/attribute which caused the error
ShippingAddressInfo:
type: object
properties:
customerName:
type: string
description: Name of a primary contact person (receiver)
additionalCustomerName:
type: string
description: 'Name of an additional contact person. Should be specified for
countries except the US, Canada, the UK and Australia.
'
customerEmail:
type: string
format: email
description: 'Email of a primary contact person (receiver). Should be specified
for countries except the US, Canada, the UK and Australia.
'
additionalCustomerEmail:
type: string
format: email
description: 'Email of an additional contact person. Should be specified
for countries except the US, Canada, the UK and Australia.
'
customerPhone:
type: string
description: 'Phone number of a primary contact person (receiver). Should
be specified for countries except the US, Canada, the UK and Australia
'
additionalCustomerPhone:
type: string
description: 'Phone number of an additional contact person. Should be specified
for countries except the US, Canada, the UK & Australia.
'
street:
type: string
description: 'Street address, line 1 - street address, P.O. box, company
name, c/o
'
street2:
type: string
description: 'Street address, line 2 - apartment, suite, unit, building,
floor, etc.
'
city:
type: string
description: City name
state:
type: string
description: State/province name
stateId:
type: string
description: Internal identifier of a state
stateIsoCode:
type: string
description: ISO code of a state
stateName:
type: string
description: Full name of a state
countryId:
type: string
description: Internal identifier of a country
countryIsoCode:
type: string
description: ISO code of a country
country:
type: string
description: Country name
countryName:
type: string
description: Full name of a country
zip:
type: string
description: Zip code
taxId:
type: string
description: 'National taxpayer identification number. Should be specified
for Brazil (CNPJ/CPF number) and Argentina (CUIT number).
'
description: 'Shipping address for the order. If it coincides with the Emergency
Service Address, then can be omitted. By default, the same value as the
emergencyServiceAddress. Multiple addresses can be specified; in case
an order contains several devices, they can be delivered to different addresses
'
DeleteDeviceFromInventoryResponse:
type: object
required:
- records
properties:
records:
type: array
items:
type: object
properties:
bulkItemSuccessful:
type: boolean
description: Specifies if a device is successfully deleted
deviceId:
type: string
description: Internal identifier of a device
bulkItemErrors:
type: array
description: 'The list of errors occurred during processing of particular item of bulk operation.
Returned only if `bulkItemSuccessful` is false
'
minItems: 1
items:
$ref: '#/components/schemas/ApiError'
BulkAddDevicesResponse:
type: object
required:
- results
properties:
results:
type: array
items:
oneOf:
- $ref: '#/components/schemas/BulkAddDevicesSuccessItem'
- $ref: '#/components/schemas/BulkAddDevicesErrorItem'
ApiError:
type: object
description: Generalized API error structure suitable for any error type
required:
- errorCode
- message
properties:
errorCode:
type: string
description: Logical error code (typically, 3 letters followed with number, dash separated)
example: XXX-123
message:
type: string
description: User-friendly error message
example: Something went wrong
additionalProperties: true
EnumeratedPagingModel:
type: object
required:
- perPage
additionalProperties: false
properties:
perPage:
type: integer
format: int32
minimum: 1
maximum: 1000
description: 'Current page size, describes how many items are in each page.
Matches "perPage" parameter from the request.
'
example: 50
page:
type: integer
format: int32
minimum: 1
maximum: 1000
description: 'The current page number. 1-indexed, so the first page is 1
by default. May be omitted if result is empty (because non-existent page
was specified or perPage=0 was requested)
'
example: 5
pageStart:
type: integer
format: int32
minimum: 0
description: 'The zero-based number of the first element on the current page.
Omitted if the page is omitted or result is empty
'
example: 0
pageEnd:
type: integer
format: int32
minimum: 0
description: 'The zero-based index of the last element on the current page.
Omitted if the page is omitted or result is empty
'
example: 5
totalPages:
type: integer
format: int32
minimum: 0
description: 'The total number of pages in a dataset. May be omitted for
some resources due to performance reasons
'
example: 25
totalElements:
type: integer
format: int32
minimum: 0
description: 'The total number of elements in a dataset. May be omitted for
some resource due to performance reasons
'
example: 25
ApiErrorResponseModel:
type: object
description: Standard error response model which is returned in case of any unsuccessful operation
required:
- errors
properties:
errors:
type: array
description: The array of errors (there will be just one in the most of the cases)
minItems: 1
items:
$ref: '#/components/schemas/ApiError'
PhoneNumberDefinitionTollType:
type: object
description: To use as selection criteria when a number to be selected from the number pool.
required:
- tollType
properties:
tollType:
$ref: '#/components/schemas/PhoneNumberTollType'
PageNavigationUri:
type: object
additionalProperties: false
properties:
uri:
type: string
description: Canonical URI to retrieve the particular page of the result set
format: uri
DeviceResource:
type: object
properties:
id:
type: string
description: Internal identifier of a device
uri:
type: string
format: uri
description: Canonical URI of a device
sku:
type: string
description: 'Device identification number (SKU, Stock Keeping Unit) in the format
TP-ID [-AT-AC], where TP is device type (HP for RC desk phones, DV for all
other devices including soft phones); ID - device model ID; AT - add-on type
ID; AC - add-on count (if any). For example ''HP-56-2-2''
'
type:
type: string
description: Device type
default: HardPhone
enum:
- BLA
- SoftPhone
- OtherPhone
- HardPhone
- WebPhone
- Paging
- Room
- WebRTC
name:
type: string
description: 'Device name. Mandatory if ordering SoftPhone or OtherPhone.
Optional for HardPhone. If not specified for HardPhone, then
a device model is used as a device name
'
serial:
type: string
description: 'Serial number for HardPhone (is returned only when the phone
is shipped and provisioned); endpoint ID for SoftPhone and
mobile applications
'
status:
type: string
description: Device status
enum:
- Offline
- Online
computerName:
type: string
description: Computer name (for devices of `SoftPhone` type only)
model:
$ref: '#/components/schemas/ModelInfo'
extension:
$ref: '#/components/schemas/ExtensionInfoIntId'
emergency:
$ref: '#/components/schemas/DeviceEmergencyInfo'
emergencyServiceAddress:
$ref: '#/components/schemas/EmergencyServiceAddressResource'
phoneLines:
type: array
description: Phone lines information
items:
$ref: '#/components/schemas/PhoneLinesInfo'
shipping:
$ref: '#/components/schemas/ShippingInfo'
boxBillingId:
type: integer
format: int64
description: 'Box billing identifier of a device. Applicable only for devices of `HardPhone` type.
It is an alternative way to identify the device to be ordered. Either
`model` structure, or `boxBillingId` must be specified
'
useAsCommonPhone:
type: boolean
description: 'Supported only for devices assigned to Limited extensions.
If true, enables users to log in to this phone as a common phone.
'
hotDeskDevice:
type: boolean
description: This flag indicates whether this device is used for hot desking or not
inCompanyNet:
type: boolean
description: 'Network location status. `true` if the device is located in
the configured corporate network (On-Net); `false` for Off-Net location.
Parameter is not returned if `EmergencyAddressAutoUpdate` feature is not
enabled for the account/user, or if device network location is not determined
'
site:
$ref: '#/components/schemas/DeviceSiteInfo'
lastLocationReportTime:
type: string
format: date-time
description: 'Date/time of receiving last location report in
[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
format including timezone, for example *2016-03-10T18:07:52.534Z
'
linePooling:
$ref: '#/components/schemas/LinePoolingEnum'
billingStatement:
$ref: '#/components/schemas/BillingStatementInfo'
PhoneLineTypeEnum:
type: string
description: The type of phone line
enum:
- Unknown
- Standalone
- StandaloneFree
- BlaPrimary
- BlaSecondary
AddDeviceToInventoryRequest:
type: object
required:
- type
- quantity
properties:
type:
type: string
description: 'Device type. Use `OtherPhone` to indicate BYOD (customer provided) device
'
enum:
- OtherPhone
quantity:
type: integer
minimum: 1
maximum: 50
format: int32
description: Quantity of devices (total quantity should not exceed 50)
site:
type: object
properties:
id:
type: string
description: Site extension identifier or "main-site" for the main site
GetExtensionDevicesResponse:
required:
- navigation
- paging
- records
type: object
properties:
uri:
type: string
format: uri
description: Link to a list of extension devices
records:
type: array
description: List of extension devices
items:
$ref: '#/components/schemas/DeviceResource'
navigation:
$ref: '#/components/schemas/PageNavigationModel'
paging:
$ref: '#/components/schemas/EnumeratedPagingModel'
ShippingInfo:
type: object
properties:
status:
$ref: '#/components/schemas/ShippingStatus'
carrier:
type: string
description: 'Shipping carrier name. Appears only if the device status is ''Shipped''
'
trackingNumber:
type: string
description: 'Carrier-specific tracking number. Appears only if the device status is ''Shipped''
'
method:
$ref: '#/components/schemas/ShippingMethodInfo'
address:
$ref: '#/components/schemas/ShippingAddressInfo'
description: 'Shipping information, according to which devices (in case of HardPhone)
or e911 stickers (in case of SoftPhone and OtherPhone) will be delivered
# --- truncated at 32 KB (63 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ringcentral/refs/heads/main/openapi/ringcentral-devices-api-openapi.yml