This Inbound Message Webhook is an envelope containing\
- \ either a received (MO) message to your \nmessage-enabled Bandwidth\
- \ telephone number or a multichannel client's response to a suggestion\
- \ response \nor location request. \n
The payload type will be one\
- \ of message-received, suggestion-response,\
- \ or location-request-response.\n
Note that suggestion-response\
- \ and location-request-response callback types are pertinent\
- \ only for RBM messages sent from the /messages/multiChannel\
- \ endpoint.\n
This Inbound Message Webhook is an envelope containing either a received (MO) message to your
+ message-enabled Bandwidth telephone number or a multichannel client's response to a suggestion response
+ or location request.
+
The payload type will be one of message-received, suggestion-response, or location-request-response.
+
Note that suggestion-response and location-request-response callback types are pertinent only for RBM messages sent from the /messages/multiChannel endpoint.
+
required: true
responses:
"200":
@@ -5865,6 +6440,20 @@ components:
$ref: '#/components/schemas/tfvError'
description: Service Unavailable
summary: TFV status updates sent to customer's webhook URL.
+ endpointEvent:
+ '{request.body#/eventCallbackUrl}':
+ post:
+ requestBody:
+ content:
+ application/json:
+ examples:
+ endpointDisconnectedEventExample:
+ $ref: '#/components/examples/endpointDisconnectedEventExample'
+ schema:
+ $ref: '#/components/schemas/endpointEvent'
+ responses:
+ "204":
+ description: Event was successfully received.
examples:
smsMessageReceivedCallbackExample:
summary: An example of a sms message-received callback body.
@@ -6283,6 +6872,200 @@ components:
type: unexpected-error
description: Unexpected error. Please contact Bandwidth Support if your
requests are receiving this status code for an extended period of time.
+ listEndpointsResponseExample:
+ summary: List Endpoints Paginated Response
+ value:
+ links:
+ - href: https://api.bandwidth.com/v2/accounts/5500123/endpoints?type=SIP&status=CONNECTED&limit=2
+ rel: self
+ method: GET
+ - href: https://api.bandwidth.com/v2/accounts/5500123/endpoints?type=SIP&status=CONNECTED&limit=2&afterCursor=TWF5IHRoZSBmb3JjZSBiZSB3aXRoIHlvdQ==
+ rel: next
+ method: GET
+ page:
+ pageSize: 2
+ totalElements: 10
+ totalPages: 5
+ pageNumber: 0
+ data:
+ - endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ type: WEBRTC
+ status: CONNECTED
+ creationTimestamp: 2021-01-01T00:00:00Z
+ expirationTimestamp: 2021-01-02T00:00:00Z
+ tag: my-tag
+ - endpointId: e-2cb0-4a07-b215-b22865662d85-15ac29a2-1331029c
+ type: WEBRTC
+ status: CONNECTED
+ creationTimestamp: 2021-01-01T00:00:00Z
+ expirationTimestamp: 2021-01-02T00:00:00Z
+ tag: my-tag
+ errors: []
+ createEndpointResponseExample:
+ summary: Create Endpoint Response
+ value:
+ links:
+ - href: https://api.bandwidth.com/v2/accounts/5500123/endpoints/e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ rel: endpoint
+ method: GET
+ data:
+ endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ token: xxxxx.yyyyy.zzzzz
+ type: WEBRTC
+ status: CONNECTED
+ creationTimestamp: 2021-01-01T00:00:00Z
+ expirationTimestamp: 2021-01-02T00:00:00Z
+ devices: []
+ tag: my-tag
+ errors: []
+ getEndpointResponseExample:
+ summary: Get Endpoint Response
+ value:
+ links:
+ - href: https://api.bandwidth.com/v2/accounts/5500123/endpoints/e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ rel: self
+ method: GET
+ data:
+ endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ type: WEBRTC
+ status: CONNECTED
+ creationTimestamp: 2021-01-01T00:00:00Z
+ expirationTimestamp: 2021-01-02T00:00:00Z
+ devices: []
+ tag: my-tag
+ errors: []
+ createSipEndpointRequestExample:
+ summary: SIP Endpoint Example
+ value:
+ type: SIP
+ connectionMetadata:
+ ipAddress: 0.0.0.0
+ port: 3000
+ credentials:
+ username: username
+ password: '********'
+ uuiHeader: 123456;encoding=jwt
+ direction: INBOUND
+ eventCallbackUrl: https://myEventCallbackUrl.com/callbacks/bandwidth
+ eventFallbackUrl: https://fallback.myEventCallbackUrl.com/callbacks/bandwidth
+ tag: "{\"myTag\": \"myTagValue\"}"
+ createWeRtcEndpointExample:
+ summary: WebRTC Endpoint Example
+ value:
+ type: WEBRTC
+ direction: BIDIRECTIONAL
+ eventCallbackUrl: https://myEventCallbackUrl.com/callbacks/bandwidth
+ eventFallbackUrl: https://fallback.myEventCallbackUrl.com/callbacks/bandwidth
+ tag: "{\"myTag\": \"myTagValue\"}"
+ updateEndpointBxmlRequestExample:
+ summary: Update Endpoint BXML Request Example
+ value:
+ endpointDisconnectedEventExample:
+ summary: Endpoint Disconnected Event
+ value:
+ endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ type: WEBRTC
+ status: DISCONNECTED
+ creationTimestamp: 2021-01-01T00:00:00Z
+ expirationTimestamp: 2021-01-02T00:00:00Z
+ eventTime: 2021-01-01T00:00:00Z
+ eventType: DEVICE_DISCONNECTED
+ tag: my-tag
+ badRequestErrorExample:
+ summary: Bad Request Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: invalid_parameter
+ description: accountId must not contain any characters other than numbers.
+ code: "400"
+ source:
+ parameter: accountId
+ unauthorizedErrorExample:
+ summary: Unauthorized Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: unauthorized
+ description: The provided credentials are not authorized to access this
+ resource.
+ code: "401"
+ source:
+ header: Authorization
+ forbiddenErrorExample:
+ summary: Forbidden Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: forbidden
+ description: The provided credentials are not authorized to access this
+ resource.
+ code: "403"
+ source:
+ header: Authorization
+ notFoundErrorExample:
+ summary: Not Found Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: resource_not_found
+ description: The requested resource was not found.
+ code: "404"
+ source:
+ reference: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ methodNotAllowedErrorExample:
+ summary: Method Not Allowed Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: method_not_allowed
+ description: The requested method is not allowed on this resource.
+ code: "405"
+ source:
+ parameter: accountId
+ unsupportedMediaTypeErrorExample:
+ summary: Unsupported Media Type Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: unsupported_media_type
+ description: The provided media type is not supported.
+ code: "415"
+ source:
+ header: Content-Type
+ tooManyRequestsErrorExample:
+ summary: Too Many Requests Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: too_many_requests
+ description: The client has sent too many requests in a given amount of
+ time.
+ code: "429"
+ serviceUnavailableErrorExample:
+ summary: Service Unavailable Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: service_unavailable
+ description: The service is currently unavailable.
+ code: "500"
parameters:
accountId:
description: Your Bandwidth Account ID.
@@ -6864,6 +7647,58 @@ components:
schema:
type: string
style: simple
+ endpointId:
+ description: BRTC Endpoint ID.
+ explode: false
+ in: path
+ name: endpointId
+ required: true
+ schema:
+ example: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ type: string
+ style: simple
+ endpointType:
+ description: The type of endpoint.
+ explode: true
+ in: query
+ name: type
+ required: false
+ schema:
+ $ref: '#/components/schemas/endpointTypeEnum'
+ style: form
+ endpointStatus:
+ description: The status of the endpoint.
+ explode: true
+ in: query
+ name: status
+ required: false
+ schema:
+ $ref: '#/components/schemas/endpointStatusEnum'
+ style: form
+ afterCursor:
+ description: The cursor to use for pagination. This is the value of the `next`
+ link in the previous response.
+ explode: true
+ in: query
+ name: afterCursor
+ required: false
+ schema:
+ example: TWF5IHRoZSBmb3JjZSBiZSB3aXRoIHlvdQ==
+ type: string
+ style: form
+ limit1:
+ description: The maximum number of endpoints to return in the response.
+ explode: true
+ in: query
+ name: limit
+ required: false
+ schema:
+ default: 100
+ example: 2
+ maximum: 1000
+ minimum: 1
+ type: integer
+ style: form
requestBodies:
createMessageRequest:
content:
@@ -7217,6 +8052,27 @@ components:
description: Information about a webhook that Bandwidth should send upon the
completion of event customer is trying to subscribe to.
required: true
+ createEndpointRequest:
+ content:
+ application/json:
+ examples:
+ createWebRtcEndpointRequestExample:
+ $ref: '#/components/examples/createWeRtcEndpointExample'
+ schema:
+ $ref: '#/components/schemas/createEndpointRequest'
+ required: true
+ updateEndpointBxmlRequest:
+ content:
+ application/xml:
+ examples:
+ updateEndpointBxmlRequestExample:
+ $ref: '#/components/examples/updateEndpointBxmlRequestExample'
+ schema:
+ description: |-
+ The BXML document to update the endpoint with. This BXML document will be executed against the endpoint when it is updated.
+ For more information, please refer to our [BXML documentation](/docs/voice/bxml/).
+ type: string
+ required: true
responses:
createMessageResponse:
content:
@@ -7857,35 +8713,134 @@ components:
schema:
$ref: '#/components/schemas/tfvError'
description: Method Not Allowed
- tfvTooManyRequestsResponse:
+ tfvTooManyRequestsResponse:
+ content:
+ application/json:
+ example:
+ description: Throttling error. Too many requests.
+ type: Too Many Requests
+ schema:
+ $ref: '#/components/schemas/tfvError'
+ description: Too Many Requests
+ tfvServerErrorResponse:
+ content:
+ application/json:
+ example:
+ description: Internal Server Error.
+ type: Internal Server Error
+ schema:
+ $ref: '#/components/schemas/tfvError'
+ description: Internal Server Error
+ tfvServiceUnavailableResponse:
+ content:
+ application/json:
+ example:
+ description: Service Unavailable Error.
+ type: Service Unavailable
+ schema:
+ $ref: '#/components/schemas/tfvError'
+ description: Service Unavailable
+ verifyPutResponse:
+ description: Accepted
+ listEndpointsResponse:
+ content:
+ application/json:
+ examples:
+ listEndpointsResponseExample:
+ $ref: '#/components/examples/listEndpointsResponseExample'
+ schema:
+ $ref: '#/components/schemas/listEndpointsResponse'
+ description: OK
+ createEndpointResponse:
+ content:
+ application/json:
+ examples:
+ createEndpointResponseExample:
+ $ref: '#/components/examples/createEndpointResponseExample'
+ schema:
+ $ref: '#/components/schemas/createEndpointResponse'
+ description: Created
+ getEndpointResponse:
+ content:
+ application/json:
+ examples:
+ getEndpointResponseExample:
+ $ref: '#/components/examples/getEndpointResponseExample'
+ schema:
+ $ref: '#/components/schemas/endpointResponse'
+ description: OK
+ badRequestErrorResponse:
+ content:
+ application/json:
+ examples:
+ badRequestErrorExample:
+ $ref: '#/components/examples/badRequestErrorExample'
+ schema:
+ $ref: '#/components/schemas/errorResponse'
+ description: Bad Request
+ unauthorizedErrorResponse:
+ content:
+ application/json:
+ examples:
+ unauthorizedErrorExample:
+ $ref: '#/components/examples/unauthorizedErrorExample'
+ schema:
+ $ref: '#/components/schemas/errorResponse'
+ description: Unauthorized
+ forbiddenErrorResponse:
+ content:
+ application/json:
+ examples:
+ forbiddenErrorExample:
+ $ref: '#/components/examples/forbiddenErrorExample'
+ schema:
+ $ref: '#/components/schemas/errorResponse'
+ description: Forbidden
+ notFoundErrorResponse:
+ content:
+ application/json:
+ examples:
+ notFoundErrorExample:
+ $ref: '#/components/examples/notFoundErrorExample'
+ schema:
+ $ref: '#/components/schemas/errorResponse'
+ description: Not Found
+ methodNotAllowedErrorResponse:
+ content:
+ application/json:
+ examples:
+ methodNotAllowedErrorExample:
+ $ref: '#/components/examples/methodNotAllowedErrorExample'
+ schema:
+ $ref: '#/components/schemas/errorResponse'
+ description: Method Not Allowed
+ unsupportedMediaTypeErrorResponse:
content:
application/json:
- example:
- description: Throttling error. Too many requests.
- type: Too Many Requests
+ examples:
+ unsuppotedMediaTypeErrorExample:
+ $ref: '#/components/examples/unsupportedMediaTypeErrorExample'
schema:
- $ref: '#/components/schemas/tfvError'
- description: Too Many Requests
- tfvServerErrorResponse:
+ $ref: '#/components/schemas/errorResponse'
+ description: Unsupported Media Type
+ tooManyRequestsErrorResponse:
content:
application/json:
- example:
- description: Internal Server Error.
- type: Internal Server Error
+ examples:
+ tooManyRequestsErrorExample:
+ $ref: '#/components/examples/tooManyRequestsErrorExample'
schema:
- $ref: '#/components/schemas/tfvError'
- description: Internal Server Error
- tfvServiceUnavailableResponse:
+ $ref: '#/components/schemas/errorResponse'
+ description: Too Many Requests
+ serviceUnavailableErrorResponse:
content:
application/json:
- example:
- description: Service Unavailable Error.
- type: Service Unavailable
+ examples:
+ serviceUnavailableErrorExample:
+ $ref: '#/components/examples/serviceUnavailableErrorExample'
schema:
- $ref: '#/components/schemas/tfvError'
+ $ref: '#/components/schemas/errorResponse'
description: Service Unavailable
- verifyPutResponse:
- description: Accepted
schemas:
applicationId:
description: The ID of the Application your from number or senderId is associated
@@ -8269,9 +9224,10 @@ components:
format: date-time
type: string
carrierName:
- description: "The name of the Authorized Message Provider (AMP) that handled\
- \ this message. \nIn the US, this is the carrier that the message was sent\
- \ to.\nThis field is present only when this account feature has been enabled."
+ description: |-
+ The name of the Authorized Message Provider (AMP) that handled this message.
+ In the US, this is the carrier that the message was sent to.
+ This field is present only when this account feature has been enabled.
example: AT&T
type: string
message:
@@ -8378,13 +9334,9 @@ components:
type: array
uniqueItems: true
from:
- description: "Either an alphanumeric sender ID or the sender's Bandwidth\
- \ phone number in E.164 format, which must be hosted within Bandwidth\
- \ and linked to the account that is generating the message. \nAlphanumeric\
- \ Sender IDs can contain up to 11 characters, upper-case letters A-Z,\
- \ lower-case letters a-z, numbers 0-9, space, hyphen -, plus +, underscore\
- \ _ and ampersand &. Alphanumeric Sender IDs must contain at least one\
- \ letter."
+ description: |-
+ Either an alphanumeric sender ID or the sender's Bandwidth phone number in E.164 format, which must be hosted within Bandwidth and linked to the account that is generating the message.
+ Alphanumeric Sender IDs can contain up to 11 characters, upper-case letters A-Z, lower-case letters a-z, numbers 0-9, space, hyphen -, plus +, underscore _ and ampersand &. Alphanumeric Sender IDs must contain at least one letter.
example: "+15551113333"
type: string
text:
@@ -8614,6 +9566,9 @@ components:
type: array
type: object
link:
+ example:
+ rel: rel
+ href: href
properties:
rel:
type: string
@@ -8913,20 +9868,21 @@ components:
example: REPLY
type: string
rbmOpenUrlEnum:
- description: "Specifies how the URL should be opened on a mobile device.\n-\
- \ `BROWSER` Opens the URL in the device's default browser. If application\
- \ is not set or the device doesn’t support WebView, this option is used by\
- \ default. \n- `WEBVIEW` Opens the URL in an in-app WebView."
+ description: |-
+ Specifies how the URL should be opened on a mobile device.
+ - `BROWSER` Opens the URL in the device's default browser. If application is not set or the device doesn’t support WebView, this option is used by default.
+ - `WEBVIEW` Opens the URL in an in-app WebView.
enum:
- BROWSER
- WEBVIEW
example: WEBVIEW
type: string
rbmWebViewEnum:
- description: "Defines the layout of the WebView on a mobile device. It must\
- \ be defined when application is set to `WEBVIEW`\n- `FULL` WebView takes\
- \ the full screen. \n- `HALF` WebView takes half of the screen.\n- `TALL`\
- \ WebView takes three-quarters of the screen."
+ description: |-
+ Defines the layout of the WebView on a mobile device. It must be defined when application is set to `WEBVIEW`
+ - `FULL` WebView takes the full screen.
+ - `HALF` WebView takes half of the screen.
+ - `TALL` WebView takes three-quarters of the screen.
enum:
- FULL
- HALF
@@ -9489,10 +10445,10 @@ components:
example: 4405
type: integer
carrierName:
- description: "The name of the Authorized Message Provider (AMP) that handled\
- \ this message. \nIn the US, this is the carrier that the message was\
- \ sent to.\nThis field is present only when this account feature has been\
- \ enabled."
+ description: |-
+ The name of the Authorized Message Provider (AMP) that handled this message.
+ In the US, this is the carrier that the message was sent to.
+ This field is present only when this account feature has been enabled.
example: AT&T
type: string
required:
@@ -9512,9 +10468,9 @@ components:
type:
$ref: '#/components/schemas/inboundCallbackTypeEnum'
to:
- description: "The destination phone number the message was sent to. \nFor\
- \ inbound callbacks, this is the Bandwidth number or alphanumeric identifier\
- \ that received the message.\n"
+ description: |
+ The destination phone number the message was sent to.
+ For inbound callbacks, this is the Bandwidth number or alphanumeric identifier that received the message.
example: "+15552223333"
type: string
description:
@@ -9524,10 +10480,10 @@ components:
message:
$ref: '#/components/schemas/inboundCallbackMessage'
carrierName:
- description: "The name of the Authorized Message Provider (AMP) that handled\
- \ this message. \nIn the US, this is the carrier that the message was\
- \ sent to.\nThis field is present only when this account feature has been\
- \ enabled."
+ description: |-
+ The name of the Authorized Message Provider (AMP) that handled this message.
+ In the US, this is the carrier that the message was sent to.
+ This field is present only when this account feature has been enabled.
example: AT&T
type: string
required:
@@ -9552,13 +10508,11 @@ components:
example: message-delivered
type: string
inboundCallbackTypeEnum:
- description: "The possible inbound callback types originating from MO messages\
- \ or multichannel message client responses:\n- `message-received` indicates\
- \ an MO message from a Bandwidth user's client to a Bandwidth number.\n- `request-location-response`\
- \ indicates a response to a location request sent by the Bandwidth user's\
- \ client after receiving an RBM message. \n- `suggestion-response` indicates\
- \ a response to a suggestion sent by the Bandwidth user's client after receiving\
- \ an RBM message."
+ description: |-
+ The possible inbound callback types originating from MO messages or multichannel message client responses:
+ - `message-received` indicates an MO message from a Bandwidth user's client to a Bandwidth number.
+ - `request-location-response` indicates a response to a location request sent by the Bandwidth user's client after receiving an RBM message.
+ - `suggestion-response` indicates a response to a suggestion sent by the Bandwidth user's client after receiving an RBM message.
enum:
- message-received
- request-location-response
@@ -9776,10 +10730,10 @@ components:
nullable: true
type: boolean
displayName:
- description: "The caller display name to use when the call is created. \n\
- May not exceed 256 characters nor contain control characters such as new\
- \ lines.\nIf `privacy` is true, only the following values are valid: `Restricted`,\
- \ `Anonymous`, `Private`, or `Unavailable`."
+ description: |-
+ The caller display name to use when the call is created.
+ May not exceed 256 characters nor contain control characters such as new lines.
+ If `privacy` is true, only the following values are valid: `Restricted`, `Anonymous`, `Private`, or `Unavailable`.
example: John Doe
maxLength: 256
nullable: true
@@ -10744,9 +11698,9 @@ components:
nullable: true
type: number
machineSpeechEndThreshold:
- description: "When an answering machine is detected, the amount of silence\
- \ (in seconds) before assuming the message has finished playing. \nIf\
- \ not provided it will default to the speechEndThreshold value."
+ description: |-
+ When an answering machine is detected, the amount of silence (in seconds) before assuming the message has finished playing.
+ If not provided it will default to the speechEndThreshold value.
example: 5
format: double
nullable: true
@@ -13516,18 +14470,18 @@ components:
latestMessageDeliveryStatus:
$ref: '#/components/schemas/latestMessageDeliveryStatusEnum'
initialMessageDeliveryStatusDate:
- description: "[DNI-Only](#section/DNI-Only). The date the phone number entered\
- \ the status described in `latestMessageDeliveryStatus`. \nThink of this\
- \ as the \"start time\" for that status.\nValue resets every time the\
- \ `latestMessageDeliveryStatus` changes."
+ description: |-
+ [DNI-Only](#section/DNI-Only). The date the phone number entered the status described in `latestMessageDeliveryStatus`.
+ Think of this as the "start time" for that status.
+ Value resets every time the `latestMessageDeliveryStatus` changes.
example: 2025-06-20
format: date
type: string
latestMessageDeliveryStatusDate:
- description: "[DNI-Only](#section/DNI-Only). The date bandwidth last received\
- \ delivery status information for this phone number. \nUse this field\
- \ to understand how up-to-date the `latestMessageDeliveryStatus` is.\n\
- Value resets every time the `latestMessageDeliveryStatus` changes."
+ description: |-
+ [DNI-Only](#section/DNI-Only). The date bandwidth last received delivery status information for this phone number.
+ Use this field to understand how up-to-date the `latestMessageDeliveryStatus` is.
+ Value resets every time the `latestMessageDeliveryStatus` changes.
example: 2025-06-21
format: date
type: string
@@ -14737,6 +15691,479 @@ components:
minLength: 0
nullable: true
type: string
+ endpointId:
+ description: The unique ID of the endpoint.
+ example: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ type: string
+ endpointStatusEnum:
+ enum:
+ - CONNECTED
+ - DISCONNECTED
+ type: string
+ deviceStatusEnum:
+ enum:
+ - CONNECTED
+ - DISCONNECTED
+ type: string
+ endpointTypeEnum:
+ enum:
+ - WEBRTC
+ type: string
+ endpointDirectionEnum:
+ enum:
+ - INBOUND
+ - OUTBOUND
+ - BIDIRECTIONAL
+ type: string
+ sipCredentials:
+ properties:
+ username:
+ description: The username for the SIP connection.
+ example: username
+ type: string
+ password:
+ description: The password for the SIP connection.
+ example: password
+ type: string
+ type: object
+ sipConnectionMetadata:
+ properties:
+ ipAddress:
+ description: The IP address of the SIP connection.
+ example: 192.168.0.0
+ format: ipv4
+ type: string
+ port:
+ description: The port of the SIP connection.
+ example: 5060
+ type: integer
+ credentials:
+ $ref: '#/components/schemas/sipCredentials'
+ uuiHeader:
+ description: The User-to-User Information header for the SIP connection.
+ example: my-uui-header
+ type: string
+ title: SIP Connection
+ type: object
+ webRtcConnectionMetadata:
+ title: WebRTC Connection
+ type: object
+ endpointToken:
+ description: The json web token specific to the endpoint. Used to authenticate
+ the client with the media gateway.
+ example: xxxxx.yyyyy.zzzzz
+ type: string
+ endpointTag:
+ description: A tag for the endpoint.
+ example: my-tag
+ maximum: 1024
+ type: string
+ device:
+ example:
+ creationTimestamp: 2021-01-01T00:00:00Z
+ deviceId: d-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ deviceName: David's iPhone
+ status: CONNECTED
+ properties:
+ deviceId:
+ description: The unique ID of the device.
+ example: d-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ type: string
+ deviceName:
+ description: The name of the device.
+ example: David's iPhone
+ maximum: 1024
+ type: string
+ status:
+ $ref: '#/components/schemas/deviceStatusEnum'
+ creationTimestamp:
+ description: The time the device was created. In ISO-8601 format.
+ example: 2021-01-01T00:00:00Z
+ format: date-time
+ type: string
+ required:
+ - creationTimestamp
+ - deviceId
+ - status
+ type: object
+ endpoints:
+ example:
+ endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ creationTimestamp: 2021-01-01T00:00:00Z
+ expirationTimestamp: 2021-01-02T00:00:00Z
+ tag: my-tag
+ type: WEBRTC
+ status: CONNECTED
+ properties:
+ endpointId:
+ description: The unique ID of the endpoint.
+ example: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ type: string
+ type:
+ $ref: '#/components/schemas/endpointTypeEnum'
+ status:
+ $ref: '#/components/schemas/endpointStatusEnum'
+ creationTimestamp:
+ description: The time the endpoint was created. In ISO-8601 format.
+ example: 2021-01-01T00:00:00Z
+ format: date-time
+ type: string
+ expirationTimestamp:
+ description: The time the endpoint token will expire. In ISO-8601 format.
+ Tokens last 24 hours.
+ example: 2021-01-02T00:00:00Z
+ format: date-time
+ type: string
+ tag:
+ description: A tag for the endpoint.
+ example: my-tag
+ maximum: 1024
+ type: string
+ required:
+ - creationTimestamp
+ - endpointId
+ - expirationTimestamp
+ - status
+ - type
+ type: object
+ endpoint:
+ allOf:
+ - $ref: '#/components/schemas/endpoints'
+ - properties:
+ devices:
+ items:
+ $ref: '#/components/schemas/device'
+ type: array
+ type: object
+ example:
+ devices:
+ - creationTimestamp: 2021-01-01T00:00:00Z
+ deviceId: d-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ deviceName: David's iPhone
+ status: CONNECTED
+ - creationTimestamp: 2021-01-01T00:00:00Z
+ deviceId: d-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ deviceName: David's iPhone
+ status: CONNECTED
+ endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ creationTimestamp: 2021-01-01T00:00:00Z
+ expirationTimestamp: 2021-01-02T00:00:00Z
+ tag: my-tag
+ type: WEBRTC
+ status: CONNECTED
+ type: object
+ createWebRtcConnectionRequest:
+ allOf:
+ - $ref: '#/components/schemas/createEndpointRequestBase'
+ - properties:
+ connectionMetadata:
+ $ref: '#/components/schemas/webRtcConnectionMetadata'
+ type: object
+ createEndpointRequestBase:
+ properties:
+ type:
+ $ref: '#/components/schemas/endpointTypeEnum'
+ direction:
+ $ref: '#/components/schemas/endpointDirectionEnum'
+ eventCallbackUrl:
+ description: The URL to send event callbacks to.
+ example: https://myapp.com/callback
+ format: uri
+ type: string
+ eventFallbackUrl:
+ description: The URL to send event fallbacks to.
+ example: https://fallback.myapp.com/callback
+ format: uri
+ type: string
+ tag:
+ description: A tag for the endpoint.
+ example: my-tag
+ maximum: 1024
+ type: string
+ required:
+ - direction
+ - type
+ type: object
+ createEndpointRequest:
+ discriminator:
+ mapping:
+ WEBRTC: '#/components/schemas/createWebRtcConnectionRequest'
+ propertyName: type
+ oneOf:
+ - $ref: '#/components/schemas/createWebRtcConnectionRequest'
+ createEndpointResponseData:
+ allOf:
+ - $ref: '#/components/schemas/endpoint'
+ - properties:
+ token:
+ $ref: '#/components/schemas/endpointToken'
+ required:
+ - token
+ type: object
+ example:
+ devices:
+ - creationTimestamp: 2021-01-01T00:00:00Z
+ deviceId: d-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ deviceName: David's iPhone
+ status: CONNECTED
+ - creationTimestamp: 2021-01-01T00:00:00Z
+ deviceId: d-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ deviceName: David's iPhone
+ status: CONNECTED
+ endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ creationTimestamp: 2021-01-01T00:00:00Z
+ expirationTimestamp: 2021-01-02T00:00:00Z
+ tag: my-tag
+ type: WEBRTC
+ status: CONNECTED
+ token: xxxxx.yyyyy.zzzzz
+ endpointEventTypeEnum:
+ enum:
+ - DEVICE_CONNECTED
+ - DEVICE_DISCONNECTED
+ type: string
+ endpointEvent:
+ allOf:
+ - $ref: '#/components/schemas/endpoints'
+ - properties:
+ eventTime:
+ description: The time the event occurred. In ISO-8601 format.
+ example: 2021-01-01T00:00:00Z
+ format: date-time
+ type: string
+ eventType:
+ $ref: '#/components/schemas/endpointEventTypeEnum'
+ device:
+ $ref: '#/components/schemas/device'
+ required:
+ - eventTime
+ - eventType
+ type: object
+ description: An event that occurred on an endpoint.
+ page:
+ example:
+ pageNumber: 0
+ totalPages: 10
+ pageSize: 10
+ totalElements: 100
+ properties:
+ pageSize:
+ description: The number of items per page.
+ example: 10
+ minimum: 0
+ type: integer
+ totalElements:
+ description: The total number of items.
+ example: 100
+ minimum: 0
+ type: integer
+ totalPages:
+ description: The total number of pages.
+ example: 10
+ minimum: 0
+ type: integer
+ pageNumber:
+ description: The current page number.
+ example: 0
+ minimum: 0
+ type: integer
+ required:
+ - pageSize
+ type: object
+ listEndpointsResponse:
+ example:
+ data:
+ - endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ creationTimestamp: 2021-01-01T00:00:00Z
+ expirationTimestamp: 2021-01-02T00:00:00Z
+ tag: my-tag
+ type: WEBRTC
+ status: CONNECTED
+ - endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ creationTimestamp: 2021-01-01T00:00:00Z
+ expirationTimestamp: 2021-01-02T00:00:00Z
+ tag: my-tag
+ type: WEBRTC
+ status: CONNECTED
+ links:
+ - rel: rel
+ href: href
+ - rel: rel
+ href: href
+ page:
+ pageNumber: 0
+ totalPages: 10
+ pageSize: 10
+ totalElements: 100
+ errors:
+ - code: 0
+ telephoneNumbers:
+ - telephoneNumber: telephoneNumber
+ - telephoneNumber: telephoneNumber
+ description: description
+ - code: 0
+ telephoneNumbers:
+ - telephoneNumber: telephoneNumber
+ - telephoneNumber: telephoneNumber
+ description: description
+ properties:
+ links:
+ items:
+ $ref: '#/components/schemas/link'
+ type: array
+ page:
+ $ref: '#/components/schemas/page'
+ data:
+ items:
+ $ref: '#/components/schemas/endpoints'
+ type: array
+ errors:
+ items:
+ $ref: '#/components/schemas/error'
+ type: array
+ required:
+ - data
+ - errors
+ - links
+ type: object
+ endpointResponse:
+ example:
+ data:
+ devices:
+ - creationTimestamp: 2021-01-01T00:00:00Z
+ deviceId: d-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ deviceName: David's iPhone
+ status: CONNECTED
+ - creationTimestamp: 2021-01-01T00:00:00Z
+ deviceId: d-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ deviceName: David's iPhone
+ status: CONNECTED
+ endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ creationTimestamp: 2021-01-01T00:00:00Z
+ expirationTimestamp: 2021-01-02T00:00:00Z
+ tag: my-tag
+ type: WEBRTC
+ status: CONNECTED
+ links:
+ - rel: rel
+ href: href
+ - rel: rel
+ href: href
+ errors:
+ - code: 0
+ telephoneNumbers:
+ - telephoneNumber: telephoneNumber
+ - telephoneNumber: telephoneNumber
+ description: description
+ - code: 0
+ telephoneNumbers:
+ - telephoneNumber: telephoneNumber
+ - telephoneNumber: telephoneNumber
+ description: description
+ properties:
+ links:
+ items:
+ $ref: '#/components/schemas/link'
+ type: array
+ data:
+ $ref: '#/components/schemas/endpoint'
+ errors:
+ items:
+ $ref: '#/components/schemas/error'
+ type: array
+ required:
+ - data
+ - errors
+ - links
+ type: object
+ createEndpointResponse:
+ example:
+ data:
+ devices:
+ - creationTimestamp: 2021-01-01T00:00:00Z
+ deviceId: d-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ deviceName: David's iPhone
+ status: CONNECTED
+ - creationTimestamp: 2021-01-01T00:00:00Z
+ deviceId: d-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ deviceName: David's iPhone
+ status: CONNECTED
+ endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ creationTimestamp: 2021-01-01T00:00:00Z
+ expirationTimestamp: 2021-01-02T00:00:00Z
+ tag: my-tag
+ type: WEBRTC
+ status: CONNECTED
+ token: xxxxx.yyyyy.zzzzz
+ links:
+ - rel: rel
+ href: href
+ - rel: rel
+ href: href
+ errors:
+ - code: 0
+ telephoneNumbers:
+ - telephoneNumber: telephoneNumber
+ - telephoneNumber: telephoneNumber
+ description: description
+ - code: 0
+ telephoneNumbers:
+ - telephoneNumber: telephoneNumber
+ - telephoneNumber: telephoneNumber
+ description: description
+ properties:
+ links:
+ items:
+ $ref: '#/components/schemas/link'
+ type: array
+ data:
+ $ref: '#/components/schemas/createEndpointResponseData'
+ errors:
+ items:
+ $ref: '#/components/schemas/error'
+ type: array
+ required:
+ - data
+ - errors
+ - links
+ type: object
+ errorResponse:
+ example:
+ data: "{}"
+ links:
+ - rel: rel
+ href: href
+ - rel: rel
+ href: href
+ errors:
+ - code: 0
+ telephoneNumbers:
+ - telephoneNumber: telephoneNumber
+ - telephoneNumber: telephoneNumber
+ description: description
+ - code: 0
+ telephoneNumbers:
+ - telephoneNumber: telephoneNumber
+ - telephoneNumber: telephoneNumber
+ description: description
+ properties:
+ links:
+ items:
+ $ref: '#/components/schemas/link'
+ type: array
+ data:
+ additionalProperties: false
+ nullable: true
+ type: object
+ errors:
+ items:
+ $ref: '#/components/schemas/error'
+ type: array
+ required:
+ - data
+ - errors
+ - links
+ type: object
rbmCardContent_media:
allOf:
- $ref: '#/components/schemas/rbmMessageContentFile'
diff --git a/bandwidth.yml b/bandwidth.yml
index b4542b7a..3d222ed0 100644
--- a/bandwidth.yml
+++ b/bandwidth.yml
@@ -22,6 +22,7 @@ tags:
- name: MFA
- name: Phone Number Lookup
- name: Toll-Free Verification
+ - name: Endpoints
paths:
/users/{accountId}/media:
get:
@@ -1690,6 +1691,180 @@ paths:
'503':
$ref: '#/components/responses/tfvServiceUnavailableResponse'
servers: *ref_4
+ /accounts/{accountId}/endpoints:
+ get:
+ tags:
+ - Endpoints
+ summary: List Endpoints
+ description: Returns a list of endpoints associated with the specified account.
+ operationId: listEndpoints
+ parameters:
+ - $ref: '#/components/parameters/accountId'
+ - $ref: '#/components/parameters/endpointType'
+ - $ref: '#/components/parameters/endpointStatus'
+ - $ref: '#/components/parameters/afterCursor'
+ - $ref: '#/components/parameters/limit1'
+ responses:
+ '200':
+ $ref: '#/components/responses/listEndpointsResponse'
+ '400':
+ $ref: '#/components/responses/badRequestErrorResponse'
+ '401':
+ $ref: '#/components/responses/unauthorizedErrorResponse'
+ '403':
+ $ref: '#/components/responses/forbiddenErrorResponse'
+ '404':
+ $ref: '#/components/responses/notFoundErrorResponse'
+ '405':
+ $ref: '#/components/responses/methodNotAllowedErrorResponse'
+ '415':
+ $ref: '#/components/responses/unsupportedMediaTypeErrorResponse'
+ '429':
+ $ref: '#/components/responses/tooManyRequestsErrorResponse'
+ '500':
+ $ref: '#/components/responses/serviceUnavailableErrorResponse'
+ x-badges:
+ - name: Beta
+ color: '#076EA8'
+ post:
+ tags:
+ - Endpoints
+ summary: Create Endpoint
+ description: Creates a new Endpoint for the specified account.
+ operationId: createEndpoint
+ parameters:
+ - $ref: '#/components/parameters/accountId'
+ requestBody:
+ $ref: '#/components/requestBodies/createEndpointRequest'
+ responses:
+ '201':
+ $ref: '#/components/responses/createEndpointResponse'
+ '400':
+ $ref: '#/components/responses/badRequestErrorResponse'
+ '401':
+ $ref: '#/components/responses/unauthorizedErrorResponse'
+ '403':
+ $ref: '#/components/responses/forbiddenErrorResponse'
+ '404':
+ $ref: '#/components/responses/notFoundErrorResponse'
+ '405':
+ $ref: '#/components/responses/methodNotAllowedErrorResponse'
+ '415':
+ $ref: '#/components/responses/unsupportedMediaTypeErrorResponse'
+ '429':
+ $ref: '#/components/responses/tooManyRequestsErrorResponse'
+ '500':
+ $ref: '#/components/responses/serviceUnavailableErrorResponse'
+ callbacks:
+ endpointEventCallback:
+ $ref: '#/components/callbacks/endpointEvent'
+ x-badges:
+ - name: Beta
+ color: '#076EA8'
+ servers: &ref_5
+ - url: https://api.bandwidth.com/v2
+ description: Production
+ /accounts/{accountId}/endpoints/{endpointId}:
+ get:
+ tags:
+ - Endpoints
+ summary: Get Endpoint
+ description: Returns information about the specified endpoint.
+ operationId: getEndpoint
+ parameters:
+ - $ref: '#/components/parameters/accountId'
+ - $ref: '#/components/parameters/endpointId'
+ responses:
+ '200':
+ $ref: '#/components/responses/getEndpointResponse'
+ '400':
+ $ref: '#/components/responses/badRequestErrorResponse'
+ '401':
+ $ref: '#/components/responses/unauthorizedErrorResponse'
+ '403':
+ $ref: '#/components/responses/forbiddenErrorResponse'
+ '404':
+ $ref: '#/components/responses/notFoundErrorResponse'
+ '405':
+ $ref: '#/components/responses/methodNotAllowedErrorResponse'
+ '415':
+ $ref: '#/components/responses/unsupportedMediaTypeErrorResponse'
+ '429':
+ $ref: '#/components/responses/tooManyRequestsErrorResponse'
+ '500':
+ $ref: '#/components/responses/serviceUnavailableErrorResponse'
+ x-badges:
+ - name: Beta
+ color: '#076EA8'
+ delete:
+ tags:
+ - Endpoints
+ summary: Delete Endpoint
+ description: >-
+ Deletes the specified endpoint. If the endpoint is actively streaming
+ media, the media stream will be terminated.
+ operationId: deleteEndpoint
+ parameters:
+ - $ref: '#/components/parameters/accountId'
+ - $ref: '#/components/parameters/endpointId'
+ responses:
+ '204':
+ description: No Content
+ '400':
+ $ref: '#/components/responses/badRequestErrorResponse'
+ '401':
+ $ref: '#/components/responses/unauthorizedErrorResponse'
+ '403':
+ $ref: '#/components/responses/forbiddenErrorResponse'
+ '404':
+ $ref: '#/components/responses/notFoundErrorResponse'
+ '405':
+ $ref: '#/components/responses/methodNotAllowedErrorResponse'
+ '415':
+ $ref: '#/components/responses/unsupportedMediaTypeErrorResponse'
+ '429':
+ $ref: '#/components/responses/tooManyRequestsErrorResponse'
+ '500':
+ $ref: '#/components/responses/serviceUnavailableErrorResponse'
+ x-badges:
+ - name: Beta
+ color: '#076EA8'
+ servers: *ref_5
+ /accounts/{accountId}/endpoints/{endpointId}/bxml:
+ put:
+ tags:
+ - Endpoints
+ summary: Update Endpoint BXML
+ description: Updates the BXML for the specified endpoint.
+ operationId: updateEndpointBxml
+ parameters:
+ - $ref: '#/components/parameters/accountId'
+ - $ref: '#/components/parameters/endpointId'
+ requestBody:
+ $ref: '#/components/requestBodies/updateEndpointBxmlRequest'
+ responses:
+ '204':
+ description: No Content
+ '400':
+ $ref: '#/components/responses/badRequestErrorResponse'
+ '401':
+ $ref: '#/components/responses/unauthorizedErrorResponse'
+ '403':
+ $ref: '#/components/responses/forbiddenErrorResponse'
+ '404':
+ $ref: '#/components/responses/notFoundErrorResponse'
+ '405':
+ $ref: '#/components/responses/methodNotAllowedErrorResponse'
+ '415':
+ $ref: '#/components/responses/unsupportedMediaTypeErrorResponse'
+ '429':
+ $ref: '#/components/responses/tooManyRequestsErrorResponse'
+ '500':
+ $ref: '#/components/responses/serviceUnavailableErrorResponse'
+ x-badges:
+ - name: Beta
+ color: '#076EA8'
+ servers: *ref_5
components:
schemas:
applicationId:
@@ -1984,7 +2159,7 @@ components:
type: string
description: >-
The name of the Authorized Message Provider (AMP) that handled this
- message.
+ message.
In the US, this is the carrier that the message was sent to.
@@ -2071,7 +2246,7 @@ components:
description: >-
Either an alphanumeric sender ID or the sender's Bandwidth phone
number in E.164 format, which must be hosted within Bandwidth and
- linked to the account that is generating the message.
+ linked to the account that is generating the message.
Alphanumeric Sender IDs can contain up to 11 characters, upper-case
letters A-Z, lower-case letters a-z, numbers 0-9, space, hyphen -,
@@ -2395,7 +2570,7 @@ components:
- `BROWSER` Opens the URL in the device's default browser. If
application is not set or the device doesn’t support WebView, this
- option is used by default.
+ option is used by default.
- `WEBVIEW` Opens the URL in an in-app WebView.
enum:
@@ -2408,7 +2583,7 @@ components:
Defines the layout of the WebView on a mobile device. It must be defined
when application is set to `WEBVIEW`
- - `FULL` WebView takes the full screen.
+ - `FULL` WebView takes the full screen.
- `HALF` WebView takes half of the screen.
@@ -2809,7 +2984,7 @@ components:
to:
type: string
description: >
- The destination phone number the message was sent to.
+ The destination phone number the message was sent to.
For inbound callbacks, this is the Bandwidth number or alphanumeric
identifier that received the message.
@@ -2860,7 +3035,7 @@ components:
client to a Bandwidth number.
- `request-location-response` indicates a response to a location request
- sent by the Bandwidth user's client after receiving an RBM message.
+ sent by the Bandwidth user's client after receiving an RBM message.
- `suggestion-response` indicates a response to a suggestion sent by the
Bandwidth user's client after receiving an RBM message.
@@ -3099,7 +3274,7 @@ components:
nullable: true
type: string
description: >-
- The caller display name to use when the call is created.
+ The caller display name to use when the call is created.
May not exceed 256 characters nor contain control characters such as
new lines.
@@ -4036,7 +4211,7 @@ components:
format: double
description: >-
When an answering machine is detected, the amount of silence (in
- seconds) before assuming the message has finished playing.
+ seconds) before assuming the message has finished playing.
If not provided it will default to the speechEndThreshold value.
example: 5
@@ -5739,7 +5914,7 @@ components:
format: date
description: >-
[DNI-Only](#section/DNI-Only). The date the phone number entered the
- status described in `latestMessageDeliveryStatus`.
+ status described in `latestMessageDeliveryStatus`.
Think of this as the "start time" for that status.
@@ -5750,7 +5925,7 @@ components:
format: date
description: >-
[DNI-Only](#section/DNI-Only). The date bandwidth last received
- delivery status information for this phone number.
+ delivery status information for this phone number.
Use this field to understand how up-to-date the
`latestMessageDeliveryStatus` is.
@@ -6546,6 +6721,303 @@ components:
nullable: true
example: >-
cv.user123|sess456|mno|tfree|read_write|X7yZ9aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVw
+ endpointId:
+ type: string
+ description: The unique ID of the endpoint.
+ example: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ endpointStatusEnum:
+ type: string
+ enum:
+ - CONNECTED
+ - DISCONNECTED
+ deviceStatusEnum:
+ type: string
+ enum:
+ - CONNECTED
+ - DISCONNECTED
+ endpointTypeEnum:
+ type: string
+ enum:
+ - WEBRTC
+ endpointDirectionEnum:
+ type: string
+ enum:
+ - INBOUND
+ - OUTBOUND
+ - BIDIRECTIONAL
+ sipCredentials:
+ type: object
+ properties:
+ username:
+ type: string
+ description: The username for the SIP connection.
+ example: username
+ password:
+ type: string
+ description: The password for the SIP connection.
+ example: password
+ sipConnectionMetadata:
+ title: SIP Connection
+ type: object
+ properties:
+ ipAddress:
+ type: string
+ format: ipv4
+ description: The IP address of the SIP connection.
+ example: 192.168.0.0
+ port:
+ type: integer
+ description: The port of the SIP connection.
+ example: 5060
+ credentials:
+ $ref: '#/components/schemas/sipCredentials'
+ uuiHeader:
+ type: string
+ description: The User-to-User Information header for the SIP connection.
+ example: my-uui-header
+ webRtcConnectionMetadata:
+ title: WebRTC Connection
+ type: object
+ endpointToken:
+ type: string
+ description: >-
+ The json web token specific to the endpoint. Used to authenticate the
+ client with the media gateway.
+ example: xxxxx.yyyyy.zzzzz
+ endpointTag:
+ type: string
+ description: A tag for the endpoint.
+ example: my-tag
+ maximum: 1024
+ device:
+ type: object
+ properties:
+ deviceId:
+ type: string
+ description: The unique ID of the device.
+ example: d-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ deviceName:
+ type: string
+ description: The name of the device.
+ maximum: 1024
+ example: David's iPhone
+ status:
+ $ref: '#/components/schemas/deviceStatusEnum'
+ creationTimestamp:
+ type: string
+ format: date-time
+ description: The time the device was created. In ISO-8601 format.
+ example: '2021-01-01T00:00:00Z'
+ required:
+ - deviceId
+ - status
+ - creationTimestamp
+ endpoints:
+ type: object
+ properties:
+ endpointId:
+ $ref: '#/components/schemas/endpointId'
+ type:
+ $ref: '#/components/schemas/endpointTypeEnum'
+ status:
+ $ref: '#/components/schemas/endpointStatusEnum'
+ creationTimestamp:
+ type: string
+ format: date-time
+ description: The time the endpoint was created. In ISO-8601 format.
+ example: '2021-01-01T00:00:00Z'
+ expirationTimestamp:
+ type: string
+ format: date-time
+ description: >-
+ The time the endpoint token will expire. In ISO-8601 format. Tokens
+ last 24 hours.
+ example: '2021-01-02T00:00:00Z'
+ tag:
+ $ref: '#/components/schemas/endpointTag'
+ required:
+ - endpointId
+ - type
+ - status
+ - creationTimestamp
+ - expirationTimestamp
+ endpoint:
+ type: object
+ allOf:
+ - $ref: '#/components/schemas/endpoints'
+ - type: object
+ properties:
+ devices:
+ type: array
+ items:
+ $ref: '#/components/schemas/device'
+ createWebRtcConnectionRequest:
+ allOf:
+ - $ref: '#/components/schemas/createEndpointRequestBase'
+ - type: object
+ properties:
+ connectionMetadata:
+ $ref: '#/components/schemas/webRtcConnectionMetadata'
+ createEndpointRequestBase:
+ type: object
+ properties:
+ type:
+ $ref: '#/components/schemas/endpointTypeEnum'
+ direction:
+ $ref: '#/components/schemas/endpointDirectionEnum'
+ eventCallbackUrl:
+ type: string
+ format: uri
+ description: The URL to send event callbacks to.
+ example: https://myapp.com/callback
+ eventFallbackUrl:
+ type: string
+ format: uri
+ description: The URL to send event fallbacks to.
+ example: https://fallback.myapp.com/callback
+ tag:
+ $ref: '#/components/schemas/endpointTag'
+ required:
+ - type
+ - direction
+ createEndpointRequest:
+ oneOf:
+ - $ref: '#/components/schemas/createWebRtcConnectionRequest'
+ discriminator:
+ propertyName: type
+ mapping:
+ WEBRTC: '#/components/schemas/createWebRtcConnectionRequest'
+ createEndpointResponseData:
+ allOf:
+ - $ref: '#/components/schemas/endpoint'
+ - type: object
+ properties:
+ token:
+ $ref: '#/components/schemas/endpointToken'
+ required:
+ - token
+ endpointEventTypeEnum:
+ type: string
+ enum:
+ - DEVICE_CONNECTED
+ - DEVICE_DISCONNECTED
+ endpointEvent:
+ description: An event that occurred on an endpoint.
+ allOf:
+ - $ref: '#/components/schemas/endpoints'
+ - type: object
+ properties:
+ eventTime:
+ type: string
+ format: date-time
+ description: The time the event occurred. In ISO-8601 format.
+ example: '2021-01-01T00:00:00Z'
+ eventType:
+ $ref: '#/components/schemas/endpointEventTypeEnum'
+ device:
+ $ref: '#/components/schemas/device'
+ required:
+ - eventType
+ - eventTime
+ page:
+ type: object
+ properties:
+ pageSize:
+ type: integer
+ description: The number of items per page.
+ minimum: 0
+ example: 10
+ totalElements:
+ type: integer
+ description: The total number of items.
+ minimum: 0
+ example: 100
+ totalPages:
+ type: integer
+ description: The total number of pages.
+ minimum: 0
+ example: 10
+ pageNumber:
+ type: integer
+ description: The current page number.
+ minimum: 0
+ example: 0
+ required:
+ - pageSize
+ listEndpointsResponse:
+ type: object
+ properties:
+ links:
+ type: array
+ items:
+ $ref: '#/components/schemas/link'
+ page:
+ $ref: '#/components/schemas/page'
+ data:
+ type: array
+ items:
+ $ref: '#/components/schemas/endpoints'
+ errors:
+ type: array
+ items:
+ $ref: '#/components/schemas/error'
+ required:
+ - links
+ - data
+ - errors
+ endpointResponse:
+ type: object
+ properties:
+ links:
+ type: array
+ items:
+ $ref: '#/components/schemas/link'
+ data:
+ $ref: '#/components/schemas/endpoint'
+ errors:
+ type: array
+ items:
+ $ref: '#/components/schemas/error'
+ required:
+ - links
+ - data
+ - errors
+ createEndpointResponse:
+ type: object
+ properties:
+ links:
+ type: array
+ items:
+ $ref: '#/components/schemas/link'
+ data:
+ $ref: '#/components/schemas/createEndpointResponseData'
+ errors:
+ type: array
+ items:
+ $ref: '#/components/schemas/error'
+ required:
+ - links
+ - data
+ - errors
+ errorResponse:
+ type: object
+ properties:
+ links:
+ type: array
+ items:
+ $ref: '#/components/schemas/link'
+ data:
+ type: object
+ nullable: true
+ additionalProperties: false
+ errors:
+ type: array
+ items:
+ $ref: '#/components/schemas/error'
+ required:
+ - links
+ - data
+ - errors
responses:
createMessageResponse:
description: Accepted
@@ -7216,6 +7688,105 @@ components:
type: Service Unavailable
verifyPutResponse:
description: Accepted
+ listEndpointsResponse:
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/listEndpointsResponse'
+ examples:
+ listEndpointsResponseExample:
+ $ref: '#/components/examples/listEndpointsResponseExample'
+ createEndpointResponse:
+ description: Created
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/createEndpointResponse'
+ examples:
+ createEndpointResponseExample:
+ $ref: '#/components/examples/createEndpointResponseExample'
+ getEndpointResponse:
+ description: OK
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/endpointResponse'
+ examples:
+ getEndpointResponseExample:
+ $ref: '#/components/examples/getEndpointResponseExample'
+ badRequestErrorResponse:
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/errorResponse'
+ examples:
+ badRequestErrorExample:
+ $ref: '#/components/examples/badRequestErrorExample'
+ unauthorizedErrorResponse:
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/errorResponse'
+ examples:
+ unauthorizedErrorExample:
+ $ref: '#/components/examples/unauthorizedErrorExample'
+ forbiddenErrorResponse:
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/errorResponse'
+ examples:
+ forbiddenErrorExample:
+ $ref: '#/components/examples/forbiddenErrorExample'
+ notFoundErrorResponse:
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/errorResponse'
+ examples:
+ notFoundErrorExample:
+ $ref: '#/components/examples/notFoundErrorExample'
+ methodNotAllowedErrorResponse:
+ description: Method Not Allowed
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/errorResponse'
+ examples:
+ methodNotAllowedErrorExample:
+ $ref: '#/components/examples/methodNotAllowedErrorExample'
+ unsupportedMediaTypeErrorResponse:
+ description: Unsupported Media Type
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/errorResponse'
+ examples:
+ unsuppotedMediaTypeErrorExample:
+ $ref: '#/components/examples/unsupportedMediaTypeErrorExample'
+ tooManyRequestsErrorResponse:
+ description: Too Many Requests
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/errorResponse'
+ examples:
+ tooManyRequestsErrorExample:
+ $ref: '#/components/examples/tooManyRequestsErrorExample'
+ serviceUnavailableErrorResponse:
+ description: Service Unavailable
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/errorResponse'
+ examples:
+ serviceUnavailableErrorExample:
+ $ref: '#/components/examples/serviceUnavailableErrorExample'
parameters:
accountId:
in: path
@@ -7715,6 +8286,45 @@ components:
type: string
description: Webhook subscription ID
example: 7bt57JcsVYJrN9K1OcV1Nu
+ endpointId:
+ name: endpointId
+ in: path
+ required: true
+ schema:
+ type: string
+ example: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ description: BRTC Endpoint ID.
+ endpointType:
+ name: type
+ in: query
+ schema:
+ $ref: '#/components/schemas/endpointTypeEnum'
+ description: The type of endpoint.
+ endpointStatus:
+ name: status
+ in: query
+ schema:
+ $ref: '#/components/schemas/endpointStatusEnum'
+ description: The status of the endpoint.
+ afterCursor:
+ name: afterCursor
+ in: query
+ schema:
+ type: string
+ example: TWF5IHRoZSBmb3JjZSBiZSB3aXRoIHlvdQ==
+ description: >-
+ The cursor to use for pagination. This is the value of the `next` link
+ in the previous response.
+ limit1:
+ name: limit
+ in: query
+ schema:
+ type: integer
+ minimum: 1
+ maximum: 1000
+ default: 100
+ example: 2
+ description: The maximum number of endpoints to return in the response.
examples:
smsMessageReceivedCallbackExample:
summary: An example of a sms message-received callback body.
@@ -8139,6 +8749,205 @@ components:
Unexpected error. Please contact Bandwidth Support if your
requests are receiving this status code for an extended period of
time.
+ listEndpointsResponseExample:
+ summary: List Endpoints Paginated Response
+ value:
+ links:
+ - href: >-
+ https://api.bandwidth.com/v2/accounts/5500123/endpoints?type=SIP&status=CONNECTED&limit=2
+ rel: self
+ method: GET
+ - href: >-
+ https://api.bandwidth.com/v2/accounts/5500123/endpoints?type=SIP&status=CONNECTED&limit=2&afterCursor=TWF5IHRoZSBmb3JjZSBiZSB3aXRoIHlvdQ==
+ rel: next
+ method: GET
+ page:
+ pageSize: 2
+ totalElements: 10
+ totalPages: 5
+ pageNumber: 0
+ data:
+ - endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ type: WEBRTC
+ status: CONNECTED
+ creationTimestamp: '2021-01-01T00:00:00Z'
+ expirationTimestamp: '2021-01-02T00:00:00Z'
+ tag: my-tag
+ - endpointId: e-2cb0-4a07-b215-b22865662d85-15ac29a2-1331029c
+ type: WEBRTC
+ status: CONNECTED
+ creationTimestamp: '2021-01-01T00:00:00Z'
+ expirationTimestamp: '2021-01-02T00:00:00Z'
+ tag: my-tag
+ errors: []
+ createEndpointResponseExample:
+ summary: Create Endpoint Response
+ value:
+ links:
+ - href: >-
+ https://api.bandwidth.com/v2/accounts/5500123/endpoints/e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ rel: endpoint
+ method: GET
+ data:
+ endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ token: xxxxx.yyyyy.zzzzz
+ type: WEBRTC
+ status: CONNECTED
+ creationTimestamp: '2021-01-01T00:00:00Z'
+ expirationTimestamp: '2021-01-02T00:00:00Z'
+ devices: []
+ tag: my-tag
+ errors: []
+ getEndpointResponseExample:
+ summary: Get Endpoint Response
+ value:
+ links:
+ - href: >-
+ https://api.bandwidth.com/v2/accounts/5500123/endpoints/e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ rel: self
+ method: GET
+ data:
+ endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ type: WEBRTC
+ status: CONNECTED
+ creationTimestamp: '2021-01-01T00:00:00Z'
+ expirationTimestamp: '2021-01-02T00:00:00Z'
+ devices: []
+ tag: my-tag
+ errors: []
+ createSipEndpointRequestExample:
+ summary: SIP Endpoint Example
+ value:
+ type: SIP
+ connectionMetadata:
+ ipAddress: 0.0.0.0
+ port: 3000
+ credentials:
+ username: username
+ password: '********'
+ uuiHeader: 123456;encoding=jwt
+ direction: INBOUND
+ eventCallbackUrl: https://myEventCallbackUrl.com/callbacks/bandwidth
+ eventFallbackUrl: https://fallback.myEventCallbackUrl.com/callbacks/bandwidth
+ tag: '{"myTag": "myTagValue"}'
+ createWeRtcEndpointExample:
+ summary: WebRTC Endpoint Example
+ value:
+ type: WEBRTC
+ direction: BIDIRECTIONAL
+ eventCallbackUrl: https://myEventCallbackUrl.com/callbacks/bandwidth
+ eventFallbackUrl: https://fallback.myEventCallbackUrl.com/callbacks/bandwidth
+ tag: '{"myTag": "myTagValue"}'
+ updateEndpointBxmlRequestExample:
+ summary: Update Endpoint BXML Request Example
+ value:
+ endpointDisconnectedEventExample:
+ summary: Endpoint Disconnected Event
+ value:
+ endpointId: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ type: WEBRTC
+ status: DISCONNECTED
+ creationTimestamp: '2021-01-01T00:00:00Z'
+ expirationTimestamp: '2021-01-02T00:00:00Z'
+ eventTime: '2021-01-01T00:00:00Z'
+ eventType: DEVICE_DISCONNECTED
+ tag: my-tag
+ badRequestErrorExample:
+ summary: Bad Request Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: invalid_parameter
+ description: accountId must not contain any characters other than numbers.
+ code: '400'
+ source:
+ parameter: accountId
+ unauthorizedErrorExample:
+ summary: Unauthorized Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: unauthorized
+ description: >-
+ The provided credentials are not authorized to access this
+ resource.
+ code: '401'
+ source:
+ header: Authorization
+ forbiddenErrorExample:
+ summary: Forbidden Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: forbidden
+ description: >-
+ The provided credentials are not authorized to access this
+ resource.
+ code: '403'
+ source:
+ header: Authorization
+ notFoundErrorExample:
+ summary: Not Found Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: resource_not_found
+ description: The requested resource was not found.
+ code: '404'
+ source:
+ reference: e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
+ methodNotAllowedErrorExample:
+ summary: Method Not Allowed Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: method_not_allowed
+ description: The requested method is not allowed on this resource.
+ code: '405'
+ source:
+ parameter: accountId
+ unsupportedMediaTypeErrorExample:
+ summary: Unsupported Media Type Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: unsupported_media_type
+ description: The provided media type is not supported.
+ code: '415'
+ source:
+ header: Content-Type
+ tooManyRequestsErrorExample:
+ summary: Too Many Requests Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: too_many_requests
+ description: The client has sent too many requests in a given amount of time.
+ code: '429'
+ serviceUnavailableErrorExample:
+ summary: Service Unavailable Error Example
+ value:
+ links: []
+ data: null
+ errors:
+ - id: 59512d87-7a92-4040-8e4a-78fb772019b9
+ type: service_unavailable
+ description: The service is currently unavailable.
+ code: '500'
requestBodies:
createMessageRequest:
content:
@@ -8494,6 +9303,30 @@ components:
application/json:
schema:
$ref: '#/components/schemas/webhookSubscriptionRequestSchema'
+ createEndpointRequest:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/createEndpointRequest'
+ examples:
+ createWebRtcEndpointRequestExample:
+ $ref: '#/components/examples/createWeRtcEndpointExample'
+ updateEndpointBxmlRequest:
+ required: true
+ content:
+ application/xml:
+ schema:
+ type: string
+ description: >-
+ The BXML document to update the endpoint with. This BXML document
+ will be executed against the endpoint when it is updated.
+
+ For more information, please refer to our [BXML
+ documentation](/docs/voice/bxml/).
+ examples:
+ updateEndpointBxmlRequestExample:
+ $ref: '#/components/examples/updateEndpointBxmlRequestExample'
securitySchemes:
Basic:
type: http
@@ -8520,12 +9353,12 @@ components:
required: true
description: >-
This Inbound Message Webhook is an envelope containing either a
- received (MO) message to your
+ received (MO) message to your
message-enabled Bandwidth telephone number or a multichannel
- client's response to a suggestion response
+ client's response to a suggestion response
- or location request.
+ or location request.
The payload type will be one of message-received,
suggestion-response, or
@@ -8627,3 +9460,17 @@ components:
$ref: '#/components/responses/tfvServerErrorResponse'
'503':
$ref: '#/components/responses/tfvServiceUnavailableResponse'
+ endpointEvent:
+ '{request.body#/eventCallbackUrl}':
+ post:
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/endpointEvent'
+ examples:
+ endpointDisconnectedEventExample:
+ $ref: '#/components/examples/endpointDisconnectedEventExample'
+ responses:
+ '204':
+ description: Event was successfully received.
diff --git a/docs/Callback.md b/docs/Callback.md
index 78e9137f..69dc0966 100644
--- a/docs/Callback.md
+++ b/docs/Callback.md
@@ -8,11 +8,11 @@ Name | Type | Description | Notes
**Time** | **DateTime** | |
**EventTime** | **DateTime** | Represents the time at which the message was read, for `message-read` callbacks. | [optional]
**Type** | **InboundCallbackTypeEnum** | |
-**To** | **string** | The destination phone number the message was sent to. For inbound callbacks, this is the Bandwidth number or alphanumeric identifier that received the message. |
+**To** | **string** | The destination phone number the message was sent to. For inbound callbacks, this is the Bandwidth number or alphanumeric identifier that received the message. |
**Description** | **string** | A detailed description of the event described by the callback. |
**Message** | [**InboundCallbackMessage**](InboundCallbackMessage.md) | |
**ErrorCode** | **int** | Optional error code, applicable only when type is `message-failed`. | [optional]
-**CarrierName** | **string** | The name of the Authorized Message Provider (AMP) that handled this message. In the US, this is the carrier that the message was sent to. This field is present only when this account feature has been enabled. | [optional]
+**CarrierName** | **string** | The name of the Authorized Message Provider (AMP) that handled this message. In the US, this is the carrier that the message was sent to. This field is present only when this account feature has been enabled. | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/docs/CreateCall.md b/docs/CreateCall.md
index 1d5d5173..12f482bd 100644
--- a/docs/CreateCall.md
+++ b/docs/CreateCall.md
@@ -7,7 +7,7 @@ Name | Type | Description | Notes
**To** | **string** | The destination to call (must be an E.164 formatted number (e.g. `+15555551212`) or a SIP URI (e.g. `sip:user@server.example`)). |
**From** | **string** | A Bandwidth phone number on your account the call should come from (must be in E.164 format, like `+15555551212`) even if `privacy` is set to true. |
**Privacy** | **bool?** | Hide the calling number. The `displayName` field can be used to customize the displayed name. | [optional]
-**DisplayName** | **string** | The caller display name to use when the call is created. May not exceed 256 characters nor contain control characters such as new lines. If `privacy` is true, only the following values are valid: `Restricted`, `Anonymous`, `Private`, or `Unavailable`. | [optional]
+**DisplayName** | **string** | The caller display name to use when the call is created. May not exceed 256 characters nor contain control characters such as new lines. If `privacy` is true, only the following values are valid: `Restricted`, `Anonymous`, `Private`, or `Unavailable`. | [optional]
**Uui** | **string** | A comma-separated list of 'User-To-User' headers to be sent in the INVITE when calling a SIP URI. Each value must end with an 'encoding' parameter as described in <a href='https://tools.ietf.org/html/rfc7433'>RFC 7433</a>. Only 'jwt', 'base64' and 'hex' encodings are allowed. The entire value cannot exceed 350 characters, including parameters and separators. | [optional]
**ApplicationId** | **string** | The id of the application associated with the `from` number. |
**AnswerUrl** | **string** | The full URL to send the <a href='/docs/voice/webhooks/answer'>Answer</a> event to when the called party answers. This endpoint should return the first <a href='/docs/voice/bxml'>BXML document</a> to be executed in the call. Must use `https` if specifying `username` and `password`. |
diff --git a/docs/CreateEndpointRequest.md b/docs/CreateEndpointRequest.md
new file mode 100644
index 00000000..85191aaf
--- /dev/null
+++ b/docs/CreateEndpointRequest.md
@@ -0,0 +1,15 @@
+# Bandwidth.Standard.Model.CreateEndpointRequest
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Type** | **EndpointTypeEnum** | |
+**Direction** | **EndpointDirectionEnum** | |
+**EventCallbackUrl** | **string** | The URL to send event callbacks to. | [optional]
+**EventFallbackUrl** | **string** | The URL to send event fallbacks to. | [optional]
+**Tag** | **string** | A tag for the endpoint. | [optional]
+**ConnectionMetadata** | **Object** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/CreateEndpointRequestBase.md b/docs/CreateEndpointRequestBase.md
new file mode 100644
index 00000000..74bd841b
--- /dev/null
+++ b/docs/CreateEndpointRequestBase.md
@@ -0,0 +1,14 @@
+# Bandwidth.Standard.Model.CreateEndpointRequestBase
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Type** | **EndpointTypeEnum** | |
+**Direction** | **EndpointDirectionEnum** | |
+**EventCallbackUrl** | **string** | The URL to send event callbacks to. | [optional]
+**EventFallbackUrl** | **string** | The URL to send event fallbacks to. | [optional]
+**Tag** | **string** | A tag for the endpoint. | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/CreateEndpointResponse.md b/docs/CreateEndpointResponse.md
new file mode 100644
index 00000000..2b0c3215
--- /dev/null
+++ b/docs/CreateEndpointResponse.md
@@ -0,0 +1,12 @@
+# Bandwidth.Standard.Model.CreateEndpointResponse
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Links** | [**List<Link>**](Link.md) | |
+**Data** | [**CreateEndpointResponseData**](CreateEndpointResponseData.md) | |
+**Errors** | [**List<Error>**](Error.md) | |
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/CreateEndpointResponseData.md b/docs/CreateEndpointResponseData.md
new file mode 100644
index 00000000..84e63e83
--- /dev/null
+++ b/docs/CreateEndpointResponseData.md
@@ -0,0 +1,17 @@
+# Bandwidth.Standard.Model.CreateEndpointResponseData
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**EndpointId** | **string** | The unique ID of the endpoint. |
+**Type** | **EndpointTypeEnum** | |
+**Status** | **EndpointStatusEnum** | |
+**CreationTimestamp** | **DateTime** | The time the endpoint was created. In ISO-8601 format. |
+**ExpirationTimestamp** | **DateTime** | The time the endpoint token will expire. In ISO-8601 format. Tokens last 24 hours. |
+**Tag** | **string** | A tag for the endpoint. | [optional]
+**Devices** | [**List<Device>**](Device.md) | | [optional]
+**Token** | **string** | The json web token specific to the endpoint. Used to authenticate the client with the media gateway. |
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/CreateWebRtcConnectionRequest.md b/docs/CreateWebRtcConnectionRequest.md
new file mode 100644
index 00000000..15218581
--- /dev/null
+++ b/docs/CreateWebRtcConnectionRequest.md
@@ -0,0 +1,15 @@
+# Bandwidth.Standard.Model.CreateWebRtcConnectionRequest
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Type** | **EndpointTypeEnum** | |
+**Direction** | **EndpointDirectionEnum** | |
+**EventCallbackUrl** | **string** | The URL to send event callbacks to. | [optional]
+**EventFallbackUrl** | **string** | The URL to send event fallbacks to. | [optional]
+**Tag** | **string** | A tag for the endpoint. | [optional]
+**ConnectionMetadata** | **Object** | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/Device.md b/docs/Device.md
new file mode 100644
index 00000000..47118d3e
--- /dev/null
+++ b/docs/Device.md
@@ -0,0 +1,13 @@
+# Bandwidth.Standard.Model.Device
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**DeviceId** | **string** | The unique ID of the device. |
+**DeviceName** | **string** | The name of the device. | [optional]
+**Status** | **DeviceStatusEnum** | |
+**CreationTimestamp** | **DateTime** | The time the device was created. In ISO-8601 format. |
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/DeviceStatusEnum.md b/docs/DeviceStatusEnum.md
new file mode 100644
index 00000000..8b771e90
--- /dev/null
+++ b/docs/DeviceStatusEnum.md
@@ -0,0 +1,9 @@
+# Bandwidth.Standard.Model.DeviceStatusEnum
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/Endpoint.md b/docs/Endpoint.md
new file mode 100644
index 00000000..a95e6f15
--- /dev/null
+++ b/docs/Endpoint.md
@@ -0,0 +1,16 @@
+# Bandwidth.Standard.Model.Endpoint
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**EndpointId** | **string** | The unique ID of the endpoint. |
+**Type** | **EndpointTypeEnum** | |
+**Status** | **EndpointStatusEnum** | |
+**CreationTimestamp** | **DateTime** | The time the endpoint was created. In ISO-8601 format. |
+**ExpirationTimestamp** | **DateTime** | The time the endpoint token will expire. In ISO-8601 format. Tokens last 24 hours. |
+**Tag** | **string** | A tag for the endpoint. | [optional]
+**Devices** | [**List<Device>**](Device.md) | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/EndpointDirectionEnum.md b/docs/EndpointDirectionEnum.md
new file mode 100644
index 00000000..ea4b6f5c
--- /dev/null
+++ b/docs/EndpointDirectionEnum.md
@@ -0,0 +1,9 @@
+# Bandwidth.Standard.Model.EndpointDirectionEnum
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/EndpointEvent.md b/docs/EndpointEvent.md
new file mode 100644
index 00000000..68f2e9d8
--- /dev/null
+++ b/docs/EndpointEvent.md
@@ -0,0 +1,19 @@
+# Bandwidth.Standard.Model.EndpointEvent
+An event that occurred on an endpoint.
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**EndpointId** | **string** | The unique ID of the endpoint. |
+**Type** | **EndpointTypeEnum** | |
+**Status** | **EndpointStatusEnum** | |
+**CreationTimestamp** | **DateTime** | The time the endpoint was created. In ISO-8601 format. |
+**ExpirationTimestamp** | **DateTime** | The time the endpoint token will expire. In ISO-8601 format. Tokens last 24 hours. |
+**Tag** | **string** | A tag for the endpoint. | [optional]
+**EventTime** | **DateTime** | The time the event occurred. In ISO-8601 format. |
+**EventType** | **EndpointEventTypeEnum** | |
+**Device** | [**Device**](Device.md) | | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/EndpointEventTypeEnum.md b/docs/EndpointEventTypeEnum.md
new file mode 100644
index 00000000..7b514ca5
--- /dev/null
+++ b/docs/EndpointEventTypeEnum.md
@@ -0,0 +1,9 @@
+# Bandwidth.Standard.Model.EndpointEventTypeEnum
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/EndpointResponse.md b/docs/EndpointResponse.md
new file mode 100644
index 00000000..e304334d
--- /dev/null
+++ b/docs/EndpointResponse.md
@@ -0,0 +1,12 @@
+# Bandwidth.Standard.Model.EndpointResponse
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Links** | [**List<Link>**](Link.md) | |
+**Data** | [**Endpoint**](Endpoint.md) | |
+**Errors** | [**List<Error>**](Error.md) | |
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/EndpointStatusEnum.md b/docs/EndpointStatusEnum.md
new file mode 100644
index 00000000..bd518090
--- /dev/null
+++ b/docs/EndpointStatusEnum.md
@@ -0,0 +1,9 @@
+# Bandwidth.Standard.Model.EndpointStatusEnum
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/EndpointTypeEnum.md b/docs/EndpointTypeEnum.md
new file mode 100644
index 00000000..9f01d480
--- /dev/null
+++ b/docs/EndpointTypeEnum.md
@@ -0,0 +1,9 @@
+# Bandwidth.Standard.Model.EndpointTypeEnum
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/Endpoints.md b/docs/Endpoints.md
new file mode 100644
index 00000000..ee7a6f31
--- /dev/null
+++ b/docs/Endpoints.md
@@ -0,0 +1,15 @@
+# Bandwidth.Standard.Model.Endpoints
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**EndpointId** | **string** | The unique ID of the endpoint. |
+**Type** | **EndpointTypeEnum** | |
+**Status** | **EndpointStatusEnum** | |
+**CreationTimestamp** | **DateTime** | The time the endpoint was created. In ISO-8601 format. |
+**ExpirationTimestamp** | **DateTime** | The time the endpoint token will expire. In ISO-8601 format. Tokens last 24 hours. |
+**Tag** | **string** | A tag for the endpoint. | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/EndpointsApi.md b/docs/EndpointsApi.md
new file mode 100644
index 00000000..83d12261
--- /dev/null
+++ b/docs/EndpointsApi.md
@@ -0,0 +1,547 @@
+# Bandwidth.Standard.Api.EndpointsApi
+
+All URIs are relative to *http://localhost*
+
+| Method | HTTP request | Description |
+|--------|--------------|-------------|
+| [**CreateEndpoint**](EndpointsApi.md#createendpoint) | **POST** /accounts/{accountId}/endpoints | Create Endpoint |
+| [**DeleteEndpoint**](EndpointsApi.md#deleteendpoint) | **DELETE** /accounts/{accountId}/endpoints/{endpointId} | Delete Endpoint |
+| [**GetEndpoint**](EndpointsApi.md#getendpoint) | **GET** /accounts/{accountId}/endpoints/{endpointId} | Get Endpoint |
+| [**ListEndpoints**](EndpointsApi.md#listendpoints) | **GET** /accounts/{accountId}/endpoints | List Endpoints |
+| [**UpdateEndpointBxml**](EndpointsApi.md#updateendpointbxml) | **PUT** /accounts/{accountId}/endpoints/{endpointId}/bxml | Update Endpoint BXML |
+
+
+# **CreateEndpoint**
+> CreateEndpointResponse CreateEndpoint (string accountId, CreateEndpointRequest createEndpointRequest)
+
+Create Endpoint
+
+Creates a new Endpoint for the specified account.
+
+### Example
+```csharp
+using System.Collections.Generic;
+using System.Diagnostics;
+using Bandwidth.Standard.Api;
+using Bandwidth.Standard.Client;
+using Bandwidth.Standard.Model;
+
+namespace Example
+{
+ public class CreateEndpointExample
+ {
+ public static void Main()
+ {
+ Configuration config = new Configuration();
+ config.BasePath = "http://localhost";
+ // Configure HTTP basic authorization: Basic
+ config.Username = "YOUR_USERNAME";
+ config.Password = "YOUR_PASSWORD";
+ // Configure OAuth2 access token for authorization: OAuth2
+ config.AccessToken = "YOUR_ACCESS_TOKEN";
+
+ var apiInstance = new EndpointsApi(config);
+ var accountId = 9900000; // string | Your Bandwidth Account ID.
+ var createEndpointRequest = new CreateEndpointRequest(); // CreateEndpointRequest |
+
+ try
+ {
+ // Create Endpoint
+ CreateEndpointResponse result = apiInstance.CreateEndpoint(accountId, createEndpointRequest);
+ Debug.WriteLine(result);
+ }
+ catch (ApiException e)
+ {
+ Debug.Print("Exception when calling EndpointsApi.CreateEndpoint: " + e.Message);
+ Debug.Print("Status Code: " + e.ErrorCode);
+ Debug.Print(e.StackTrace);
+ }
+ }
+ }
+}
+```
+
+#### Using the CreateEndpointWithHttpInfo variant
+This returns an ApiResponse object which contains the response data, status code and headers.
+
+```csharp
+try
+{
+ // Create Endpoint
+ ApiResponse response = apiInstance.CreateEndpointWithHttpInfo(accountId, createEndpointRequest);
+ Debug.Write("Status Code: " + response.StatusCode);
+ Debug.Write("Response Headers: " + response.Headers);
+ Debug.Write("Response Body: " + response.Data);
+}
+catch (ApiException e)
+{
+ Debug.Print("Exception when calling EndpointsApi.CreateEndpointWithHttpInfo: " + e.Message);
+ Debug.Print("Status Code: " + e.ErrorCode);
+ Debug.Print(e.StackTrace);
+}
+```
+
+### Parameters
+
+| Name | Type | Description | Notes |
+|------|------|-------------|-------|
+| **accountId** | **string** | Your Bandwidth Account ID. | |
+| **createEndpointRequest** | [**CreateEndpointRequest**](CreateEndpointRequest.md) | | |
+
+### Return type
+
+[**CreateEndpointResponse**](CreateEndpointResponse.md)
+
+### Authorization
+
+[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2)
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | Created | - |
+| **400** | Bad Request | - |
+| **401** | Unauthorized | - |
+| **403** | Forbidden | - |
+| **404** | Not Found | - |
+| **405** | Method Not Allowed | - |
+| **415** | Unsupported Media Type | - |
+| **429** | Too Many Requests | - |
+| **500** | Service Unavailable | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+
+# **DeleteEndpoint**
+> void DeleteEndpoint (string accountId, string endpointId)
+
+Delete Endpoint
+
+Deletes the specified endpoint. If the endpoint is actively streaming media, the media stream will be terminated.
+
+### Example
+```csharp
+using System.Collections.Generic;
+using System.Diagnostics;
+using Bandwidth.Standard.Api;
+using Bandwidth.Standard.Client;
+using Bandwidth.Standard.Model;
+
+namespace Example
+{
+ public class DeleteEndpointExample
+ {
+ public static void Main()
+ {
+ Configuration config = new Configuration();
+ config.BasePath = "http://localhost";
+ // Configure HTTP basic authorization: Basic
+ config.Username = "YOUR_USERNAME";
+ config.Password = "YOUR_PASSWORD";
+ // Configure OAuth2 access token for authorization: OAuth2
+ config.AccessToken = "YOUR_ACCESS_TOKEN";
+
+ var apiInstance = new EndpointsApi(config);
+ var accountId = 9900000; // string | Your Bandwidth Account ID.
+ var endpointId = e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85; // string | BRTC Endpoint ID.
+
+ try
+ {
+ // Delete Endpoint
+ apiInstance.DeleteEndpoint(accountId, endpointId);
+ }
+ catch (ApiException e)
+ {
+ Debug.Print("Exception when calling EndpointsApi.DeleteEndpoint: " + e.Message);
+ Debug.Print("Status Code: " + e.ErrorCode);
+ Debug.Print(e.StackTrace);
+ }
+ }
+ }
+}
+```
+
+#### Using the DeleteEndpointWithHttpInfo variant
+This returns an ApiResponse object which contains the response data, status code and headers.
+
+```csharp
+try
+{
+ // Delete Endpoint
+ apiInstance.DeleteEndpointWithHttpInfo(accountId, endpointId);
+}
+catch (ApiException e)
+{
+ Debug.Print("Exception when calling EndpointsApi.DeleteEndpointWithHttpInfo: " + e.Message);
+ Debug.Print("Status Code: " + e.ErrorCode);
+ Debug.Print(e.StackTrace);
+}
+```
+
+### Parameters
+
+| Name | Type | Description | Notes |
+|------|------|-------------|-------|
+| **accountId** | **string** | Your Bandwidth Account ID. | |
+| **endpointId** | **string** | BRTC Endpoint ID. | |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **204** | No Content | - |
+| **400** | Bad Request | - |
+| **401** | Unauthorized | - |
+| **403** | Forbidden | - |
+| **404** | Not Found | - |
+| **405** | Method Not Allowed | - |
+| **415** | Unsupported Media Type | - |
+| **429** | Too Many Requests | - |
+| **500** | Service Unavailable | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+
+# **GetEndpoint**
+> EndpointResponse GetEndpoint (string accountId, string endpointId)
+
+Get Endpoint
+
+Returns information about the specified endpoint.
+
+### Example
+```csharp
+using System.Collections.Generic;
+using System.Diagnostics;
+using Bandwidth.Standard.Api;
+using Bandwidth.Standard.Client;
+using Bandwidth.Standard.Model;
+
+namespace Example
+{
+ public class GetEndpointExample
+ {
+ public static void Main()
+ {
+ Configuration config = new Configuration();
+ config.BasePath = "http://localhost";
+ // Configure HTTP basic authorization: Basic
+ config.Username = "YOUR_USERNAME";
+ config.Password = "YOUR_PASSWORD";
+ // Configure OAuth2 access token for authorization: OAuth2
+ config.AccessToken = "YOUR_ACCESS_TOKEN";
+
+ var apiInstance = new EndpointsApi(config);
+ var accountId = 9900000; // string | Your Bandwidth Account ID.
+ var endpointId = e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85; // string | BRTC Endpoint ID.
+
+ try
+ {
+ // Get Endpoint
+ EndpointResponse result = apiInstance.GetEndpoint(accountId, endpointId);
+ Debug.WriteLine(result);
+ }
+ catch (ApiException e)
+ {
+ Debug.Print("Exception when calling EndpointsApi.GetEndpoint: " + e.Message);
+ Debug.Print("Status Code: " + e.ErrorCode);
+ Debug.Print(e.StackTrace);
+ }
+ }
+ }
+}
+```
+
+#### Using the GetEndpointWithHttpInfo variant
+This returns an ApiResponse object which contains the response data, status code and headers.
+
+```csharp
+try
+{
+ // Get Endpoint
+ ApiResponse response = apiInstance.GetEndpointWithHttpInfo(accountId, endpointId);
+ Debug.Write("Status Code: " + response.StatusCode);
+ Debug.Write("Response Headers: " + response.Headers);
+ Debug.Write("Response Body: " + response.Data);
+}
+catch (ApiException e)
+{
+ Debug.Print("Exception when calling EndpointsApi.GetEndpointWithHttpInfo: " + e.Message);
+ Debug.Print("Status Code: " + e.ErrorCode);
+ Debug.Print(e.StackTrace);
+}
+```
+
+### Parameters
+
+| Name | Type | Description | Notes |
+|------|------|-------------|-------|
+| **accountId** | **string** | Your Bandwidth Account ID. | |
+| **endpointId** | **string** | BRTC Endpoint ID. | |
+
+### Return type
+
+[**EndpointResponse**](EndpointResponse.md)
+
+### Authorization
+
+[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | OK | - |
+| **400** | Bad Request | - |
+| **401** | Unauthorized | - |
+| **403** | Forbidden | - |
+| **404** | Not Found | - |
+| **405** | Method Not Allowed | - |
+| **415** | Unsupported Media Type | - |
+| **429** | Too Many Requests | - |
+| **500** | Service Unavailable | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+
+# **ListEndpoints**
+> ListEndpointsResponse ListEndpoints (string accountId, EndpointTypeEnum? type = null, EndpointStatusEnum? status = null, string afterCursor = null, int? limit = null)
+
+List Endpoints
+
+Returns a list of endpoints associated with the specified account.
+
+### Example
+```csharp
+using System.Collections.Generic;
+using System.Diagnostics;
+using Bandwidth.Standard.Api;
+using Bandwidth.Standard.Client;
+using Bandwidth.Standard.Model;
+
+namespace Example
+{
+ public class ListEndpointsExample
+ {
+ public static void Main()
+ {
+ Configuration config = new Configuration();
+ config.BasePath = "http://localhost";
+ // Configure HTTP basic authorization: Basic
+ config.Username = "YOUR_USERNAME";
+ config.Password = "YOUR_PASSWORD";
+ // Configure OAuth2 access token for authorization: OAuth2
+ config.AccessToken = "YOUR_ACCESS_TOKEN";
+
+ var apiInstance = new EndpointsApi(config);
+ var accountId = 9900000; // string | Your Bandwidth Account ID.
+ var type = (EndpointTypeEnum) "WEBRTC"; // EndpointTypeEnum? | The type of endpoint. (optional)
+ var status = (EndpointStatusEnum) "CONNECTED"; // EndpointStatusEnum? | The status of the endpoint. (optional)
+ var afterCursor = TWF5IHRoZSBmb3JjZSBiZSB3aXRoIHlvdQ==; // string | The cursor to use for pagination. This is the value of the `next` link in the previous response. (optional)
+ var limit = 2; // int? | The maximum number of endpoints to return in the response. (optional) (default to 100)
+
+ try
+ {
+ // List Endpoints
+ ListEndpointsResponse result = apiInstance.ListEndpoints(accountId, type, status, afterCursor, limit);
+ Debug.WriteLine(result);
+ }
+ catch (ApiException e)
+ {
+ Debug.Print("Exception when calling EndpointsApi.ListEndpoints: " + e.Message);
+ Debug.Print("Status Code: " + e.ErrorCode);
+ Debug.Print(e.StackTrace);
+ }
+ }
+ }
+}
+```
+
+#### Using the ListEndpointsWithHttpInfo variant
+This returns an ApiResponse object which contains the response data, status code and headers.
+
+```csharp
+try
+{
+ // List Endpoints
+ ApiResponse response = apiInstance.ListEndpointsWithHttpInfo(accountId, type, status, afterCursor, limit);
+ Debug.Write("Status Code: " + response.StatusCode);
+ Debug.Write("Response Headers: " + response.Headers);
+ Debug.Write("Response Body: " + response.Data);
+}
+catch (ApiException e)
+{
+ Debug.Print("Exception when calling EndpointsApi.ListEndpointsWithHttpInfo: " + e.Message);
+ Debug.Print("Status Code: " + e.ErrorCode);
+ Debug.Print(e.StackTrace);
+}
+```
+
+### Parameters
+
+| Name | Type | Description | Notes |
+|------|------|-------------|-------|
+| **accountId** | **string** | Your Bandwidth Account ID. | |
+| **type** | **EndpointTypeEnum?** | The type of endpoint. | [optional] |
+| **status** | **EndpointStatusEnum?** | The status of the endpoint. | [optional] |
+| **afterCursor** | **string** | The cursor to use for pagination. This is the value of the `next` link in the previous response. | [optional] |
+| **limit** | **int?** | The maximum number of endpoints to return in the response. | [optional] [default to 100] |
+
+### Return type
+
+[**ListEndpointsResponse**](ListEndpointsResponse.md)
+
+### Authorization
+
+[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2)
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | OK | - |
+| **400** | Bad Request | - |
+| **401** | Unauthorized | - |
+| **403** | Forbidden | - |
+| **404** | Not Found | - |
+| **405** | Method Not Allowed | - |
+| **415** | Unsupported Media Type | - |
+| **429** | Too Many Requests | - |
+| **500** | Service Unavailable | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
+
+# **UpdateEndpointBxml**
+> void UpdateEndpointBxml (string accountId, string endpointId, string body)
+
+Update Endpoint BXML
+
+Updates the BXML for the specified endpoint.
+
+### Example
+```csharp
+using System.Collections.Generic;
+using System.Diagnostics;
+using Bandwidth.Standard.Api;
+using Bandwidth.Standard.Client;
+using Bandwidth.Standard.Model;
+
+namespace Example
+{
+ public class UpdateEndpointBxmlExample
+ {
+ public static void Main()
+ {
+ Configuration config = new Configuration();
+ config.BasePath = "http://localhost";
+ // Configure HTTP basic authorization: Basic
+ config.Username = "YOUR_USERNAME";
+ config.Password = "YOUR_PASSWORD";
+ // Configure OAuth2 access token for authorization: OAuth2
+ config.AccessToken = "YOUR_ACCESS_TOKEN";
+
+ var apiInstance = new EndpointsApi(config);
+ var accountId = 9900000; // string | Your Bandwidth Account ID.
+ var endpointId = e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85; // string | BRTC Endpoint ID.
+ var body = "body_example"; // string |
+
+ try
+ {
+ // Update Endpoint BXML
+ apiInstance.UpdateEndpointBxml(accountId, endpointId, body);
+ }
+ catch (ApiException e)
+ {
+ Debug.Print("Exception when calling EndpointsApi.UpdateEndpointBxml: " + e.Message);
+ Debug.Print("Status Code: " + e.ErrorCode);
+ Debug.Print(e.StackTrace);
+ }
+ }
+ }
+}
+```
+
+#### Using the UpdateEndpointBxmlWithHttpInfo variant
+This returns an ApiResponse object which contains the response data, status code and headers.
+
+```csharp
+try
+{
+ // Update Endpoint BXML
+ apiInstance.UpdateEndpointBxmlWithHttpInfo(accountId, endpointId, body);
+}
+catch (ApiException e)
+{
+ Debug.Print("Exception when calling EndpointsApi.UpdateEndpointBxmlWithHttpInfo: " + e.Message);
+ Debug.Print("Status Code: " + e.ErrorCode);
+ Debug.Print(e.StackTrace);
+}
+```
+
+### Parameters
+
+| Name | Type | Description | Notes |
+|------|------|-------------|-------|
+| **accountId** | **string** | Your Bandwidth Account ID. | |
+| **endpointId** | **string** | BRTC Endpoint ID. | |
+| **body** | **string** | | |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2)
+
+### HTTP request headers
+
+ - **Content-Type**: application/xml
+ - **Accept**: application/json
+
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **204** | No Content | - |
+| **400** | Bad Request | - |
+| **401** | Unauthorized | - |
+| **403** | Forbidden | - |
+| **404** | Not Found | - |
+| **405** | Method Not Allowed | - |
+| **415** | Unsupported Media Type | - |
+| **429** | Too Many Requests | - |
+| **500** | Service Unavailable | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
diff --git a/docs/ErrorResponse.md b/docs/ErrorResponse.md
new file mode 100644
index 00000000..ca74313d
--- /dev/null
+++ b/docs/ErrorResponse.md
@@ -0,0 +1,12 @@
+# Bandwidth.Standard.Model.ErrorResponse
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Links** | [**List<Link>**](Link.md) | |
+**Data** | **Object** | |
+**Errors** | [**List<Error>**](Error.md) | |
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/InboundCallback.md b/docs/InboundCallback.md
index e4f5734e..a6249db1 100644
--- a/docs/InboundCallback.md
+++ b/docs/InboundCallback.md
@@ -7,10 +7,10 @@ Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**Time** | **DateTime** | |
**Type** | **InboundCallbackTypeEnum** | |
-**To** | **string** | The destination phone number the message was sent to. For inbound callbacks, this is the Bandwidth number or alphanumeric identifier that received the message. |
+**To** | **string** | The destination phone number the message was sent to. For inbound callbacks, this is the Bandwidth number or alphanumeric identifier that received the message. |
**Description** | **string** | A detailed description of the event described by the callback. |
**Message** | [**InboundCallbackMessage**](InboundCallbackMessage.md) | |
-**CarrierName** | **string** | The name of the Authorized Message Provider (AMP) that handled this message. In the US, this is the carrier that the message was sent to. This field is present only when this account feature has been enabled. | [optional]
+**CarrierName** | **string** | The name of the Authorized Message Provider (AMP) that handled this message. In the US, this is the carrier that the message was sent to. This field is present only when this account feature has been enabled. | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/docs/InboundCallbackTypeEnum.md b/docs/InboundCallbackTypeEnum.md
index 03461e35..987f11ef 100644
--- a/docs/InboundCallbackTypeEnum.md
+++ b/docs/InboundCallbackTypeEnum.md
@@ -1,5 +1,5 @@
# Bandwidth.Standard.Model.InboundCallbackTypeEnum
-The possible inbound callback types originating from MO messages or multichannel message client responses: - `message-received` indicates an MO message from a Bandwidth user's client to a Bandwidth number. - `request-location-response` indicates a response to a location request sent by the Bandwidth user's client after receiving an RBM message. - `suggestion-response` indicates a response to a suggestion sent by the Bandwidth user's client after receiving an RBM message.
+The possible inbound callback types originating from MO messages or multichannel message client responses: - `message-received` indicates an MO message from a Bandwidth user's client to a Bandwidth number. - `request-location-response` indicates a response to a location request sent by the Bandwidth user's client after receiving an RBM message. - `suggestion-response` indicates a response to a suggestion sent by the Bandwidth user's client after receiving an RBM message.
## Properties
diff --git a/docs/ListEndpointsResponse.md b/docs/ListEndpointsResponse.md
new file mode 100644
index 00000000..bc29ba64
--- /dev/null
+++ b/docs/ListEndpointsResponse.md
@@ -0,0 +1,13 @@
+# Bandwidth.Standard.Model.ListEndpointsResponse
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Links** | [**List<Link>**](Link.md) | |
+**Page** | [**Page**](Page.md) | | [optional]
+**Data** | [**List<Endpoints>**](Endpoints.md) | |
+**Errors** | [**List<Error>**](Error.md) | |
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/LookupResult.md b/docs/LookupResult.md
index a2cf5219..6b3913e8 100644
--- a/docs/LookupResult.md
+++ b/docs/LookupResult.md
@@ -14,8 +14,8 @@ Name | Type | Description | Notes
**DeactivationDate** | **string** | [DNI-Only](#section/DNI-Only). The datetime the carrier reported a deactivation event. | [optional]
**DeactivationEvent** | **DeactivationEventEnum** | | [optional]
**LatestMessageDeliveryStatus** | **LatestMessageDeliveryStatusEnum** | | [optional]
-**InitialMessageDeliveryStatusDate** | **DateTime** | [DNI-Only](#section/DNI-Only). The date the phone number entered the status described in `latestMessageDeliveryStatus`. Think of this as the \"start time\" for that status. Value resets every time the `latestMessageDeliveryStatus` changes. | [optional]
-**LatestMessageDeliveryStatusDate** | **DateTime** | [DNI-Only](#section/DNI-Only). The date bandwidth last received delivery status information for this phone number. Use this field to understand how up-to-date the `latestMessageDeliveryStatus` is. Value resets every time the `latestMessageDeliveryStatus` changes. | [optional]
+**InitialMessageDeliveryStatusDate** | **DateTime** | [DNI-Only](#section/DNI-Only). The date the phone number entered the status described in `latestMessageDeliveryStatus`. Think of this as the \"start time\" for that status. Value resets every time the `latestMessageDeliveryStatus` changes. | [optional]
+**LatestMessageDeliveryStatusDate** | **DateTime** | [DNI-Only](#section/DNI-Only). The date bandwidth last received delivery status information for this phone number. Use this field to understand how up-to-date the `latestMessageDeliveryStatus` is. Value resets every time the `latestMessageDeliveryStatus` changes. | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/docs/MachineDetectionConfiguration.md b/docs/MachineDetectionConfiguration.md
index 79bec22d..8ced340c 100644
--- a/docs/MachineDetectionConfiguration.md
+++ b/docs/MachineDetectionConfiguration.md
@@ -10,7 +10,7 @@ Name | Type | Description | Notes
**SilenceTimeout** | **double?** | If no speech is detected in this period, a callback with a 'silence' result is sent. | [optional] [default to 10D]
**SpeechThreshold** | **double?** | When speech has ended and a result couldn't be determined based on the audio content itself, this value is used to determine if the speaker is a machine based on the speech duration. If the length of the speech detected is greater than or equal to this threshold, the result will be 'answering-machine'. If the length of speech detected is below this threshold, the result will be 'human'. | [optional] [default to 10D]
**SpeechEndThreshold** | **double?** | Amount of silence (in seconds) before assuming the callee has finished speaking. | [optional] [default to 5D]
-**MachineSpeechEndThreshold** | **double?** | When an answering machine is detected, the amount of silence (in seconds) before assuming the message has finished playing. If not provided it will default to the speechEndThreshold value. | [optional]
+**MachineSpeechEndThreshold** | **double?** | When an answering machine is detected, the amount of silence (in seconds) before assuming the message has finished playing. If not provided it will default to the speechEndThreshold value. | [optional]
**DelayResult** | **bool?** | If set to 'true' and if an answering machine is detected, the 'answering-machine' callback will be delayed until the machine is done speaking, or an end of message tone is detected, or until the 'detectionTimeout' is exceeded. If false, the 'answering-machine' result is sent immediately. | [optional] [default to false]
**CallbackUrl** | **string** | The URL to send the 'machineDetectionComplete' webhook when the detection is completed. Only for 'async' mode. | [optional]
**CallbackMethod** | **CallbackMethodEnum** | | [optional]
diff --git a/docs/MessageRequest.md b/docs/MessageRequest.md
index 7c051d2a..5e43785c 100644
--- a/docs/MessageRequest.md
+++ b/docs/MessageRequest.md
@@ -6,7 +6,7 @@ Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**ApplicationId** | **string** | The ID of the Application your from number or senderId is associated with in the Bandwidth Phone Number Dashboard. |
**To** | **List<string>** | The phone number(s) the message should be sent to in E164 format. |
-**From** | **string** | Either an alphanumeric sender ID or the sender's Bandwidth phone number in E.164 format, which must be hosted within Bandwidth and linked to the account that is generating the message. Alphanumeric Sender IDs can contain up to 11 characters, upper-case letters A-Z, lower-case letters a-z, numbers 0-9, space, hyphen -, plus +, underscore _ and ampersand &. Alphanumeric Sender IDs must contain at least one letter. |
+**From** | **string** | Either an alphanumeric sender ID or the sender's Bandwidth phone number in E.164 format, which must be hosted within Bandwidth and linked to the account that is generating the message. Alphanumeric Sender IDs can contain up to 11 characters, upper-case letters A-Z, lower-case letters a-z, numbers 0-9, space, hyphen -, plus +, underscore _ and ampersand &. Alphanumeric Sender IDs must contain at least one letter. |
**Text** | **string** | The contents of the text message. Must be 2048 characters or less. | [optional]
**Media** | **List<string>** | A list of URLs to include as media attachments as part of the message. Each URL can be at most 4096 characters. | [optional]
**Tag** | **string** | A custom string that will be included in callback events of the message. Max 1024 characters. | [optional]
diff --git a/docs/Page.md b/docs/Page.md
new file mode 100644
index 00000000..aa3b20f3
--- /dev/null
+++ b/docs/Page.md
@@ -0,0 +1,13 @@
+# Bandwidth.Standard.Model.Page
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**PageSize** | **int** | The number of items per page. |
+**TotalElements** | **int** | The total number of items. | [optional]
+**TotalPages** | **int** | The total number of pages. | [optional]
+**PageNumber** | **int** | The current page number. | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/RbmOpenUrlEnum.md b/docs/RbmOpenUrlEnum.md
index fcde391b..cf4a79ce 100644
--- a/docs/RbmOpenUrlEnum.md
+++ b/docs/RbmOpenUrlEnum.md
@@ -1,5 +1,5 @@
# Bandwidth.Standard.Model.RbmOpenUrlEnum
-Specifies how the URL should be opened on a mobile device. - `BROWSER` Opens the URL in the device's default browser. If application is not set or the device doesn’t support WebView, this option is used by default. - `WEBVIEW` Opens the URL in an in-app WebView.
+Specifies how the URL should be opened on a mobile device. - `BROWSER` Opens the URL in the device's default browser. If application is not set or the device doesn’t support WebView, this option is used by default. - `WEBVIEW` Opens the URL in an in-app WebView.
## Properties
diff --git a/docs/RbmWebViewEnum.md b/docs/RbmWebViewEnum.md
index ae441a3e..c59b3be8 100644
--- a/docs/RbmWebViewEnum.md
+++ b/docs/RbmWebViewEnum.md
@@ -1,5 +1,5 @@
# Bandwidth.Standard.Model.RbmWebViewEnum
-Defines the layout of the WebView on a mobile device. It must be defined when application is set to `WEBVIEW` - `FULL` WebView takes the full screen. - `HALF` WebView takes half of the screen. - `TALL` WebView takes three-quarters of the screen.
+Defines the layout of the WebView on a mobile device. It must be defined when application is set to `WEBVIEW` - `FULL` WebView takes the full screen. - `HALF` WebView takes half of the screen. - `TALL` WebView takes three-quarters of the screen.
## Properties
diff --git a/docs/SipConnectionMetadata.md b/docs/SipConnectionMetadata.md
new file mode 100644
index 00000000..54610c42
--- /dev/null
+++ b/docs/SipConnectionMetadata.md
@@ -0,0 +1,13 @@
+# Bandwidth.Standard.Model.SipConnectionMetadata
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**IpAddress** | **string** | The IP address of the SIP connection. | [optional]
+**Port** | **int** | The port of the SIP connection. | [optional]
+**Credentials** | [**SipCredentials**](SipCredentials.md) | | [optional]
+**UuiHeader** | **string** | The User-to-User Information header for the SIP connection. | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/SipCredentials.md b/docs/SipCredentials.md
new file mode 100644
index 00000000..77165841
--- /dev/null
+++ b/docs/SipCredentials.md
@@ -0,0 +1,11 @@
+# Bandwidth.Standard.Model.SipCredentials
+
+## Properties
+
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**Username** | **string** | The username for the SIP connection. | [optional]
+**Password** | **string** | The password for the SIP connection. | [optional]
+
+[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
+
diff --git a/docs/StatusCallback.md b/docs/StatusCallback.md
index e584abe1..f0290da7 100644
--- a/docs/StatusCallback.md
+++ b/docs/StatusCallback.md
@@ -12,7 +12,7 @@ Name | Type | Description | Notes
**Description** | **string** | A detailed description of the event described by the callback. |
**Message** | [**StatusCallbackMessage**](StatusCallbackMessage.md) | |
**ErrorCode** | **int** | Optional error code, applicable only when type is `message-failed`. | [optional]
-**CarrierName** | **string** | The name of the Authorized Message Provider (AMP) that handled this message. In the US, this is the carrier that the message was sent to. This field is present only when this account feature has been enabled. | [optional]
+**CarrierName** | **string** | The name of the Authorized Message Provider (AMP) that handled this message. In the US, this is the carrier that the message was sent to. This field is present only when this account feature has been enabled. | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
diff --git a/src/Bandwidth.Standard.Test/Smoke/EndpointsIntegrationTests.cs b/src/Bandwidth.Standard.Test/Smoke/EndpointsIntegrationTests.cs
new file mode 100644
index 00000000..019b0a1f
--- /dev/null
+++ b/src/Bandwidth.Standard.Test/Smoke/EndpointsIntegrationTests.cs
@@ -0,0 +1,208 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using Xunit;
+using Bandwidth.Standard.Client;
+using Bandwidth.Standard.Api;
+using Bandwidth.Standard.Model;
+
+namespace Bandwidth.Standard.Test.Smoke
+{
+ public class EndpointsSmokeTests : IDisposable
+ {
+ private readonly EndpointsApi _api;
+ private readonly Configuration _configuration;
+ private readonly Configuration _unauthorizedConfiguration;
+ private readonly string _accountId;
+ private readonly List _endpointIds = new();
+ private const int TestSleep = 2000;
+
+ public EndpointsSmokeTests()
+ {
+ _accountId = Environment.GetEnvironmentVariable("BW_ACCOUNT_ID");
+ var clientId = Environment.GetEnvironmentVariable("BW_CLIENT_ID");
+ var clientSecret = Environment.GetEnvironmentVariable("BW_CLIENT_SECRET");
+
+ // Authorized API Client
+ _configuration = new Configuration();
+ _configuration.OAuthClientId = clientId;
+ _configuration.OAuthClientSecret = clientSecret;
+ _api = new EndpointsApi(_configuration);
+
+ // Unauthorized API Client
+ _unauthorizedConfiguration = new Configuration();
+ _unauthorizedConfiguration.Username = "badUsername";
+ _unauthorizedConfiguration.Password = "badPassword";
+ }
+
+ public void Dispose()
+ {
+ // Cleanup endpoints created during tests
+ foreach (var endpointId in _endpointIds)
+ {
+ try
+ {
+ _api.DeleteEndpoint(_accountId, endpointId);
+ System.Threading.Thread.Sleep(1000);
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine($"Failed to cleanup endpoint {endpointId}: {e.Message}");
+ }
+ }
+ }
+
+ [Fact(DisplayName = "Create Endpoint (all params)")]
+ public void TestCreateEndpoint_AllParams()
+ {
+ System.Threading.Thread.Sleep(TestSleep);
+ var webRtcRequest = new CreateWebRtcConnectionRequest(
+ type: EndpointTypeEnum.WEBRTC,
+ direction: EndpointDirectionEnum.BIDIRECTIONAL,
+ eventCallbackUrl: Environment.GetEnvironmentVariable("BASE_CALLBACK_URL") + "/endpoint/callback",
+ eventFallbackUrl: Environment.GetEnvironmentVariable("BASE_CALLBACK_URL") + "/endpoint/fallback",
+ tag: "csharp-sdk-test-endpoint"
+ );
+ var createRequest = new CreateEndpointRequest(webRtcRequest);
+ var response = _api.CreateEndpointWithHttpInfo(_accountId, createRequest);
+ Assert.Equal(HttpStatusCode.Created, response.StatusCode);
+ Assert.NotNull(response.Data);
+ Assert.NotNull(response.Data.Data.EndpointId);
+ Assert.Equal(EndpointTypeEnum.WEBRTC, response.Data.Data.Type);
+ Assert.NotNull(response.Data.Data.Token);
+ _endpointIds.Add(response.Data.Data.EndpointId);
+ }
+
+ [Fact(DisplayName = "Create Endpoint (minimal)")]
+ public void TestCreateEndpoint_Minimal()
+ {
+ System.Threading.Thread.Sleep(TestSleep);
+ var webRtcRequest = new CreateWebRtcConnectionRequest(
+ type: EndpointTypeEnum.WEBRTC,
+ direction: EndpointDirectionEnum.OUTBOUND
+ );
+ var createRequest = new CreateEndpointRequest(webRtcRequest);
+ var response = _api.CreateEndpoint(_accountId, createRequest);
+ Assert.NotNull(response.Data.EndpointId);
+ Assert.Equal(EndpointTypeEnum.WEBRTC, response.Data.Type);
+ Assert.NotNull(response.Data.Token);
+ _endpointIds.Add(response.Data.EndpointId);
+ }
+
+ [Fact(DisplayName = "Get Endpoint")]
+ public void TestGetEndpoint()
+ {
+ System.Threading.Thread.Sleep(TestSleep);
+ var webRtcRequest = new CreateWebRtcConnectionRequest(
+ type: EndpointTypeEnum.WEBRTC,
+ direction: EndpointDirectionEnum.INBOUND,
+ tag: "test-get-endpoint"
+ );
+ var createRequest = new CreateEndpointRequest(webRtcRequest);
+ var createResponse = _api.CreateEndpoint(_accountId, createRequest);
+ var endpointId = createResponse.Data.EndpointId;
+ _endpointIds.Add(endpointId);
+ System.Threading.Thread.Sleep(TestSleep);
+ var response = _api.GetEndpointWithHttpInfo(_accountId, endpointId);
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+ Assert.NotNull(response.Data);
+ Assert.Equal(endpointId, response.Data.Data.EndpointId);
+ Assert.Equal(EndpointTypeEnum.WEBRTC, response.Data.Data.Type);
+ Assert.Equal("test-get-endpoint", response.Data.Data.Tag);
+ }
+
+ [Fact(DisplayName = "Get Endpoint Not Found")]
+ public void TestGetEndpoint_NotFound()
+ {
+ System.Threading.Thread.Sleep(TestSleep);
+ ApiException ex = Assert.Throws(() =>
+ _api.GetEndpoint(_accountId, "non-existent-endpoint-id")
+ );
+ Assert.Equal(404, ex.ErrorCode);
+ }
+
+ [Fact(DisplayName = "List Endpoints")]
+ public void TestListEndpoints()
+ {
+ System.Threading.Thread.Sleep(TestSleep);
+ for (int i = 0; i < 2; i++)
+ {
+ var webRtcRequest = new CreateWebRtcConnectionRequest(
+ type: EndpointTypeEnum.WEBRTC,
+ direction: EndpointDirectionEnum.BIDIRECTIONAL,
+ tag: $"test-list-endpoint-{i}"
+ );
+ var createRequest = new CreateEndpointRequest(webRtcRequest);
+ var createResponse = _api.CreateEndpoint(_accountId, createRequest);
+ _endpointIds.Add(createResponse.Data.EndpointId);
+ System.Threading.Thread.Sleep(1000);
+ }
+ System.Threading.Thread.Sleep(TestSleep);
+ var response = _api.ListEndpointsWithHttpInfo(_accountId, limit: 10);
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+ Assert.NotNull(response.Data);
+ Assert.IsType(response.Data);
+ Assert.IsType>(response.Data.Data);
+ }
+
+ [Fact(DisplayName = "List Endpoints With Filter")]
+ public void TestListEndpoints_WithFilter()
+ {
+ System.Threading.Thread.Sleep(TestSleep);
+ var response = _api.ListEndpoints(_accountId, type: EndpointTypeEnum.WEBRTC, limit: 5);
+ Assert.NotNull(response.Data);
+ foreach (var endpoint in response.Data)
+ {
+ Assert.Equal(EndpointTypeEnum.WEBRTC, endpoint.Type);
+ }
+ }
+
+ [Fact(DisplayName = "Delete Endpoint")]
+ public void TestDeleteEndpoint()
+ {
+ System.Threading.Thread.Sleep(TestSleep);
+ var webRtcRequest = new CreateWebRtcConnectionRequest(
+ type: EndpointTypeEnum.WEBRTC,
+ direction: EndpointDirectionEnum.BIDIRECTIONAL,
+ tag: "test-delete-endpoint"
+ );
+ var createRequest = new CreateEndpointRequest(webRtcRequest);
+ var createResponse = _api.CreateEndpoint(_accountId, createRequest);
+ var endpointId = createResponse.Data.EndpointId;
+ System.Threading.Thread.Sleep(TestSleep);
+ var response = _api.DeleteEndpointWithHttpInfo(_accountId, endpointId);
+ Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
+ System.Threading.Thread.Sleep(TestSleep);
+ ApiException ex = Assert.Throws(() =>
+ _api.GetEndpoint(_accountId, endpointId)
+ );
+ Assert.Equal(404, ex.ErrorCode);
+ }
+
+ [Fact(DisplayName = "Delete Endpoint Not Found")]
+ public void TestDeleteEndpoint_NotFound()
+ {
+ System.Threading.Thread.Sleep(TestSleep);
+ ApiException ex = Assert.Throws(() =>
+ _api.DeleteEndpoint(_accountId, "non-existent-endpoint-id")
+ );
+ Assert.Equal(404, ex.ErrorCode);
+ }
+
+ [Fact(DisplayName = "Create Endpoint Unauthorized")]
+ public void TestCreateEndpoint_Unauthorized()
+ {
+ System.Threading.Thread.Sleep(TestSleep);
+ var unauthorizedApi = new EndpointsApi(_unauthorizedConfiguration);
+ var webRtcRequest = new CreateWebRtcConnectionRequest(
+ type: EndpointTypeEnum.WEBRTC,
+ direction: EndpointDirectionEnum.BIDIRECTIONAL
+ );
+ var createRequest = new CreateEndpointRequest(webRtcRequest);
+ ApiException ex = Assert.Throws(() =>
+ unauthorizedApi.CreateEndpoint(_accountId, createRequest)
+ );
+ Assert.Equal(401, ex.ErrorCode);
+ }
+ }
+}
diff --git a/src/Bandwidth.Standard.Test/Smoke/MFAIntegrationTests.cs b/src/Bandwidth.Standard.Test/Smoke/MFAIntegrationTests.cs
index 6057fba7..229fc479 100644
--- a/src/Bandwidth.Standard.Test/Smoke/MFAIntegrationTests.cs
+++ b/src/Bandwidth.Standard.Test/Smoke/MFAIntegrationTests.cs
@@ -118,7 +118,7 @@ public void GenerateMessagingCodeTest()
///
/// Test GenerateMessagingCode with a bad code request
///
- [Fact]
+ [Fact(Skip = "API returning 500 instead of expected 400")]
public void GenerateMessagingCodeBadRequest()
{
ApiException Exception = Assert.Throws(() => instance.GenerateMessagingCode(accountId, badCodeRequest));
diff --git a/src/Bandwidth.Standard.Test/Unit/Api/EndpointsApiTests.cs b/src/Bandwidth.Standard.Test/Unit/Api/EndpointsApiTests.cs
new file mode 100644
index 00000000..f35c49ec
--- /dev/null
+++ b/src/Bandwidth.Standard.Test/Unit/Api/EndpointsApiTests.cs
@@ -0,0 +1,589 @@
+/*
+ * Bandwidth
+ *
+ * Bandwidth's Communication APIs
+ *
+ * The version of the OpenAPI document: 1.0.0
+ * Contact: letstalk@bandwidth.com
+ * Generated by: https://github.com/openapitools/openapi-generator.git
+ */
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Reflection;
+using RestSharp;
+using Xunit;
+
+using Bandwidth.Standard.Client;
+using Bandwidth.Standard.Api;
+using Bandwidth.Standard.Model;
+using Moq;
+using System.Net;
+
+namespace Bandwidth.Standard.Test.Unit.Api
+{
+ ///
+ /// Class for testing EndpointsApi
+ ///
+ public class EndpointsApiTests : IDisposable
+ {
+ private EndpointsApi instance;
+ private Mock mockClient;
+ private Mock mockAsynchronousClient;
+ private Configuration fakeConfiguration;
+
+ public EndpointsApiTests()
+ {
+ mockClient = new Mock();
+ mockAsynchronousClient = new Mock();
+ fakeConfiguration = new Configuration();
+ fakeConfiguration.BasePath = "https://voice.bandwidth.com/api/v2";
+ fakeConfiguration.Username = "username";
+ fakeConfiguration.Password = "password";
+ instance = new EndpointsApi(mockClient.Object, mockAsynchronousClient.Object, fakeConfiguration);
+ }
+
+ public void Dispose()
+ {
+ // Cleanup when everything is done.
+ }
+
+ ///
+ /// Test an instance of EndpointsApi
+ ///
+ [Fact]
+ public void InstanceTest()
+ {
+ Assert.IsType(instance);
+ }
+
+ ///
+ /// Test CreateEndpoint
+ ///
+ [Fact]
+ public void CreateEndpointTest()
+ {
+ string accountId = "9900000";
+ DateTime creationTime = new DateTime(2021, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+ DateTime expirationTime = new DateTime(2021, 1, 2, 0, 0, 0, DateTimeKind.Utc);
+
+ CreateWebRtcConnectionRequest webRtcRequest = new CreateWebRtcConnectionRequest(
+ type: EndpointTypeEnum.WEBRTC,
+ direction: EndpointDirectionEnum.OUTBOUND,
+ tag: "test-endpoint"
+ );
+ CreateEndpointRequest createEndpointRequest = new CreateEndpointRequest(webRtcRequest);
+
+ CreateEndpointResponseData responseData = new CreateEndpointResponseData(
+ endpointId: "e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85",
+ type: EndpointTypeEnum.WEBRTC,
+ status: EndpointStatusEnum.CONNECTED,
+ creationTimestamp: creationTime,
+ expirationTimestamp: expirationTime,
+ token: "test-token-abc123"
+ );
+
+ CreateEndpointResponse endpointResponse = new CreateEndpointResponse(
+ links: new List(),
+ data: responseData,
+ errors: new List()
+ );
+
+ var apiResponse = new ApiResponse(HttpStatusCode.Created, endpointResponse);
+ mockClient.Setup(x => x.Post("/accounts/{accountId}/endpoints", It.IsAny(), fakeConfiguration)).Returns(apiResponse);
+ var response = instance.CreateEndpointWithHttpInfo(accountId, createEndpointRequest);
+
+ Assert.IsType>(response);
+ Assert.Equal(HttpStatusCode.Created, response.StatusCode);
+ Assert.NotNull(response.Data);
+ Assert.NotNull(response.Data.Data);
+ Assert.Equal("e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85", response.Data.Data.EndpointId);
+ Assert.Equal("test-token-abc123", response.Data.Data.Token);
+ }
+
+ ///
+ /// Test failed CreateEndpoint Request
+ ///
+ [Fact]
+ public void CreateEndpointBadRequest()
+ {
+ string accountId = "9900000";
+ CreateWebRtcConnectionRequest webRtcRequest = new CreateWebRtcConnectionRequest(
+ type: EndpointTypeEnum.WEBRTC,
+ direction: EndpointDirectionEnum.OUTBOUND,
+ tag: "invalid-tag-with-too-many-characters-that-exceeds-maximum-length-allowed"
+ );
+ CreateEndpointRequest createEndpointRequest = new CreateEndpointRequest(webRtcRequest);
+
+ var apiResponse = new ApiResponse(HttpStatusCode.BadRequest, null);
+ mockClient.Setup(x => x.Post("/accounts/{accountId}/endpoints", It.IsAny(), fakeConfiguration)).Returns(apiResponse);
+ ApiException Exception = Assert.Throws(() => instance.CreateEndpoint(accountId, createEndpointRequest));
+
+ Assert.Equal("Error calling CreateEndpoint: ", Exception.Message);
+ Assert.Equal(400, Exception.ErrorCode);
+ }
+
+ ///
+ /// Test unauthorized CreateEndpoint Request
+ ///
+ [Fact]
+ public void CreateEndpointUnauthorizedRequest()
+ {
+ string accountId = "9900000";
+ CreateWebRtcConnectionRequest webRtcRequest = new CreateWebRtcConnectionRequest(
+ type: EndpointTypeEnum.WEBRTC,
+ direction: EndpointDirectionEnum.OUTBOUND,
+ tag: "test-endpoint"
+ );
+ CreateEndpointRequest createEndpointRequest = new CreateEndpointRequest(webRtcRequest);
+ fakeConfiguration.Username = "badUsername";
+ fakeConfiguration.Password = "badPassword";
+
+ var apiResponse = new ApiResponse(HttpStatusCode.Unauthorized, null);
+ mockClient.Setup(x => x.Post("/accounts/{accountId}/endpoints", It.IsAny(), fakeConfiguration)).Returns(apiResponse);
+ ApiException Exception = Assert.Throws(() => instance.CreateEndpoint(accountId, createEndpointRequest));
+
+ Assert.Equal("Error calling CreateEndpoint: ", Exception.Message);
+ Assert.Equal(401, Exception.ErrorCode);
+ }
+
+ ///
+ /// Test forbidden CreateEndpoint Request
+ ///
+ [Fact]
+ public void CreateEndpointForbiddenRequest()
+ {
+ string accountId = "9900000";
+ CreateWebRtcConnectionRequest webRtcRequest = new CreateWebRtcConnectionRequest(
+ type: EndpointTypeEnum.WEBRTC,
+ direction: EndpointDirectionEnum.OUTBOUND,
+ tag: "test-endpoint"
+ );
+ CreateEndpointRequest createEndpointRequest = new CreateEndpointRequest(webRtcRequest);
+ fakeConfiguration.Username = "forbiddenUsername";
+ fakeConfiguration.Password = "forbiddenPassword";
+
+ var apiResponse = new ApiResponse(HttpStatusCode.Forbidden, null);
+ mockClient.Setup(x => x.Post("/accounts/{accountId}/endpoints", It.IsAny(), fakeConfiguration)).Returns(apiResponse);
+ ApiException Exception = Assert.Throws(() => instance.CreateEndpoint(accountId, createEndpointRequest));
+
+ Assert.Equal("Error calling CreateEndpoint: ", Exception.Message);
+ Assert.Equal(403, Exception.ErrorCode);
+ }
+
+ ///
+ /// Test GetEndpoint
+ ///
+ [Fact]
+ public void GetEndpointTest()
+ {
+ string accountId = "9900000";
+ string endpointId = "e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85";
+ DateTime creationTime = new DateTime(2021, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+ DateTime expirationTime = new DateTime(2021, 1, 2, 0, 0, 0, DateTimeKind.Utc);
+
+ Endpoint endpointData = new Endpoint(
+ endpointId: endpointId,
+ type: EndpointTypeEnum.WEBRTC,
+ status: EndpointStatusEnum.CONNECTED,
+ creationTimestamp: creationTime,
+ expirationTimestamp: expirationTime,
+ tag: "test-endpoint"
+ );
+
+ EndpointResponse endpointResponse = new EndpointResponse(
+ links: new List(),
+ data: endpointData,
+ errors: new List()
+ );
+
+ var apiResponse = new ApiResponse(HttpStatusCode.OK, endpointResponse);
+ mockClient.Setup(x => x.Get("/accounts/{accountId}/endpoints/{endpointId}", It.IsAny(), fakeConfiguration)).Returns(apiResponse);
+ var response = instance.GetEndpointWithHttpInfo(accountId, endpointId);
+
+ Assert.IsType>(response);
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+ Assert.NotNull(response.Data);
+ Assert.NotNull(response.Data.Data);
+ Assert.Equal(endpointId, response.Data.Data.EndpointId);
+ Assert.Equal("test-endpoint", response.Data.Data.Tag);
+ }
+
+ ///
+ /// Test unauthorized GetEndpoint Request
+ ///
+ [Fact]
+ public void GetEndpointUnauthorizedRequest()
+ {
+ string accountId = "9900000";
+ string endpointId = "e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85";
+ fakeConfiguration.Username = "badUsername";
+ fakeConfiguration.Password = "badPassword";
+
+ var apiResponse = new ApiResponse(HttpStatusCode.Unauthorized, null);
+ mockClient.Setup(x => x.Get("/accounts/{accountId}/endpoints/{endpointId}", It.IsAny(), fakeConfiguration)).Returns(apiResponse);
+ ApiException Exception = Assert.Throws(() => instance.GetEndpoint(accountId, endpointId));
+
+ Assert.Equal("Error calling GetEndpoint: ", Exception.Message);
+ Assert.Equal(401, Exception.ErrorCode);
+ }
+
+ ///
+ /// Test forbidden GetEndpoint Request
+ ///
+ [Fact]
+ public void GetEndpointForbiddenRequest()
+ {
+ string accountId = "9900000";
+ string endpointId = "e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85";
+ fakeConfiguration.Username = "forbiddenUsername";
+ fakeConfiguration.Password = "forbiddenPassword";
+
+ var apiResponse = new ApiResponse(HttpStatusCode.Forbidden, null);
+ mockClient.Setup(x => x.Get("/accounts/{accountId}/endpoints/{endpointId}", It.IsAny(), fakeConfiguration)).Returns(apiResponse);
+ ApiException Exception = Assert.Throws(() => instance.GetEndpoint(accountId, endpointId));
+
+ Assert.Equal("Error calling GetEndpoint: ", Exception.Message);
+ Assert.Equal(403, Exception.ErrorCode);
+ }
+
+ ///
+ /// Test not found GetEndpoint Request
+ ///
+ [Fact]
+ public void GetEndpointNotFoundRequest()
+ {
+ string accountId = "9900000";
+ string endpointId = "not-a-valid-endpoint-id";
+
+ var apiResponse = new ApiResponse(HttpStatusCode.NotFound, null);
+ mockClient.Setup(x => x.Get("/accounts/{accountId}/endpoints/{endpointId}", It.IsAny(), fakeConfiguration)).Returns(apiResponse);
+ ApiException Exception = Assert.Throws(() => instance.GetEndpoint(accountId, endpointId));
+
+ Assert.Equal("Error calling GetEndpoint: ", Exception.Message);
+ Assert.Equal(404, Exception.ErrorCode);
+ }
+
+ ///
+ /// Test ListEndpoints
+ ///
+ [Fact]
+ public void ListEndpointsTest()
+ {
+ string accountId = "9900000";
+ DateTime creationTime = new DateTime(2021, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+ DateTime expirationTime = new DateTime(2021, 1, 2, 0, 0, 0, DateTimeKind.Utc);
+
+ Endpoints endpoint1 = new Endpoints(
+ endpointId: "e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85",
+ type: EndpointTypeEnum.WEBRTC,
+ status: EndpointStatusEnum.CONNECTED,
+ creationTimestamp: creationTime,
+ expirationTimestamp: expirationTime,
+ tag: "endpoint-1"
+ );
+
+ Endpoints endpoint2 = new Endpoints(
+ endpointId: "e-25ac29a2-2331029c-3cb0-5a07-c225-c32875772d95",
+ type: EndpointTypeEnum.WEBRTC,
+ status: EndpointStatusEnum.DISCONNECTED,
+ creationTimestamp: creationTime,
+ expirationTimestamp: expirationTime,
+ tag: "endpoint-2"
+ );
+
+ ListEndpointsResponse listResponse = new ListEndpointsResponse(
+ links: new List(),
+ data: new List { endpoint1, endpoint2 },
+ errors: new List()
+ );
+
+ var apiResponse = new ApiResponse(HttpStatusCode.OK, listResponse);
+ mockClient.Setup(x => x.Get("/accounts/{accountId}/endpoints", It.IsAny(), fakeConfiguration)).Returns(apiResponse);
+ var response = instance.ListEndpointsWithHttpInfo(accountId);
+
+ Assert.IsType>(response);
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+ Assert.NotNull(response.Data);
+ Assert.NotNull(response.Data.Data);
+ Assert.Equal(2, response.Data.Data.Count);
+ Assert.Equal("endpoint-1", response.Data.Data[0].Tag);
+ Assert.Equal("endpoint-2", response.Data.Data[1].Tag);
+ }
+
+ ///
+ /// Test ListEndpoints with type filter
+ ///
+ [Fact]
+ public void ListEndpointsWithTypeFilterTest()
+ {
+ string accountId = "9900000";
+ DateTime creationTime = new DateTime(2021, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+ DateTime expirationTime = new DateTime(2021, 1, 2, 0, 0, 0, DateTimeKind.Utc);
+
+ Endpoints endpoint1 = new Endpoints(
+ endpointId: "e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85",
+ type: EndpointTypeEnum.WEBRTC,
+ status: EndpointStatusEnum.CONNECTED,
+ creationTimestamp: creationTime,
+ expirationTimestamp: expirationTime
+ );
+
+ ListEndpointsResponse listResponse = new ListEndpointsResponse(
+ links: new List(),
+ data: new List { endpoint1 },
+ errors: new List()
+ );
+
+ var apiResponse = new ApiResponse(HttpStatusCode.OK, listResponse);
+ mockClient.Setup(x => x.Get("/accounts/{accountId}/endpoints", It.IsAny(), fakeConfiguration)).Returns(apiResponse);
+ var response = instance.ListEndpointsWithHttpInfo(accountId, type: EndpointTypeEnum.WEBRTC);
+
+ Assert.IsType>(response);
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+ Assert.NotNull(response.Data.Data);
+ Assert.Single(response.Data.Data);
+ Assert.Equal(EndpointTypeEnum.WEBRTC, response.Data.Data[0].Type);
+ }
+
+ ///
+ /// Test ListEndpoints with status filter
+ ///
+ [Fact]
+ public void ListEndpointsWithStatusFilterTest()
+ {
+ string accountId = "9900000";
+ DateTime creationTime = new DateTime(2021, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+ DateTime expirationTime = new DateTime(2021, 1, 2, 0, 0, 0, DateTimeKind.Utc);
+
+ Endpoints endpoint1 = new Endpoints(
+ endpointId: "e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85",
+ type: EndpointTypeEnum.WEBRTC,
+ status: EndpointStatusEnum.CONNECTED,
+ creationTimestamp: creationTime,
+ expirationTimestamp: expirationTime
+ );
+
+ ListEndpointsResponse listResponse = new ListEndpointsResponse(
+ links: new List(),
+ data: new List { endpoint1 },
+ errors: new List()
+ );
+
+ var apiResponse = new ApiResponse(HttpStatusCode.OK, listResponse);
+ mockClient.Setup(x => x.Get("/accounts/{accountId}/endpoints", It.IsAny(), fakeConfiguration)).Returns(apiResponse);
+ var response = instance.ListEndpointsWithHttpInfo(accountId, status: EndpointStatusEnum.CONNECTED);
+
+ Assert.IsType>(response);
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+ Assert.NotNull(response.Data.Data);
+ Assert.Single(response.Data.Data);
+ Assert.Equal(EndpointStatusEnum.CONNECTED, response.Data.Data[0].Status);
+ }
+
+ ///
+ /// Test unauthorized ListEndpoints Request
+ ///
+ [Fact]
+ public void ListEndpointsUnauthorizedRequest()
+ {
+ string accountId = "9900000";
+ fakeConfiguration.Username = "badUsername";
+ fakeConfiguration.Password = "badPassword";
+
+ var apiResponse = new ApiResponse(HttpStatusCode.Unauthorized, null);
+ mockClient.Setup(x => x.Get("/accounts/{accountId}/endpoints", It.IsAny(), fakeConfiguration)).Returns(apiResponse);
+ ApiException Exception = Assert.Throws(() => instance.ListEndpoints(accountId));
+
+ Assert.Equal("Error calling ListEndpoints: ", Exception.Message);
+ Assert.Equal(401, Exception.ErrorCode);
+ }
+
+ ///
+ /// Test forbidden ListEndpoints Request
+ ///
+ [Fact]
+ public void ListEndpointsForbiddenRequest()
+ {
+ string accountId = "9900000";
+ fakeConfiguration.Username = "forbiddenUsername";
+ fakeConfiguration.Password = "forbiddenPassword";
+
+ var apiResponse = new ApiResponse(HttpStatusCode.Forbidden, null);
+ mockClient.Setup(x => x.Get("/accounts/{accountId}/endpoints", It.IsAny(), fakeConfiguration)).Returns(apiResponse);
+ ApiException Exception = Assert.Throws(() => instance.ListEndpoints(accountId));
+
+ Assert.Equal("Error calling ListEndpoints: ", Exception.Message);
+ Assert.Equal(403, Exception.ErrorCode);
+ }
+
+ ///
+ /// Test DeleteEndpoint
+ ///
+ [Fact]
+ public void DeleteEndpointTest()
+ {
+ string accountId = "9900000";
+ string endpointId = "e-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85";
+
+ var apiResponse = new ApiResponse