openapi: 3.0.3
info:
  title: Bandwidth
  description: Bandwidth's Communication APIs
  contact:
    name: Bandwidth
    url: https://dev.bandwidth.com
    email: letstalk@bandwidth.com
  version: 1.0.0
security:
  - Basic: []
  - OAuth2: []
tags:
  - name: Messages
  - name: Media
  - name: Multi-Channel
  - name: Calls
  - name: Conferences
  - name: Recordings
  - name: Statistics
  - name: Transcriptions
  - name: MFA
  - name: Phone Number Lookup
  - name: Toll-Free Verification
paths:
  /users/{accountId}/media:
    get:
      summary: List Media
      description: Gets a list of your media files. No query parameters are supported.
      operationId: listMedia
      tags:
        - Media
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/continuationToken'
      responses:
        '200':
          $ref: '#/components/responses/listMediaResponse'
        '400':
          $ref: '#/components/responses/messagingBadRequestError'
        '401':
          $ref: '#/components/responses/messagingUnauthorizedError'
        '403':
          $ref: '#/components/responses/messagingForbiddenError'
        '404':
          $ref: '#/components/responses/messagingNotFoundError'
        '406':
          $ref: '#/components/responses/messagingNotAcceptableError'
        '415':
          $ref: '#/components/responses/messagingInvalidMediaTypeError'
        '429':
          $ref: '#/components/responses/messagingTooManyRequestsError'
        '500':
          $ref: '#/components/responses/messagingInternalServerError'
    servers: &ref_0
      - url: https://messaging.bandwidth.com/api/v2
        description: Production
  /users/{accountId}/media/{mediaId}:
    get:
      summary: Get Media
      description: Downloads a media file you previously uploaded.
      operationId: getMedia
      tags:
        - Media
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/mediaId'
      responses:
        '200':
          $ref: '#/components/responses/getMediaResponse'
        '400':
          $ref: '#/components/responses/messagingBadRequestError'
        '401':
          $ref: '#/components/responses/messagingUnauthorizedError'
        '403':
          $ref: '#/components/responses/messagingForbiddenError'
        '404':
          $ref: '#/components/responses/messagingNotFoundError'
        '406':
          $ref: '#/components/responses/messagingNotAcceptableError'
        '415':
          $ref: '#/components/responses/messagingInvalidMediaTypeError'
        '429':
          $ref: '#/components/responses/messagingTooManyRequestsError'
        '500':
          $ref: '#/components/responses/messagingInternalServerError'
    put:
      summary: Upload Media
      description: >-
        Upload a file. You may add headers to the request in order to provide
        some control to your media file.


        If a file is uploaded with the same name as a file that already exists
        under this account, the previous file will be overwritten.


        A list of supported media types can be found
        [here](https://support.bandwidth.com/hc/en-us/articles/360014128994-What-MMS-file-types-are-supported-).
      operationId: uploadMedia
      tags:
        - Media
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/mediaId'
        - $ref: '#/components/parameters/contentType'
        - $ref: '#/components/parameters/cacheControl'
      requestBody:
        $ref: '#/components/requestBodies/uploadMediaRequest'
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/messagingBadRequestError'
        '401':
          $ref: '#/components/responses/messagingUnauthorizedError'
        '403':
          $ref: '#/components/responses/messagingForbiddenError'
        '404':
          $ref: '#/components/responses/messagingNotFoundError'
        '406':
          $ref: '#/components/responses/messagingNotAcceptableError'
        '415':
          $ref: '#/components/responses/messagingInvalidMediaTypeError'
        '429':
          $ref: '#/components/responses/messagingTooManyRequestsError'
        '500':
          $ref: '#/components/responses/messagingInternalServerError'
    delete:
      summary: Delete Media
      description: |-
        Deletes a media file from Bandwidth API server. Make sure you don't have
        any application scripts still using the media before you delete.

        If you accidentally delete a media file you can immediately upload a new
        file with the same name.
      operationId: deleteMedia
      tags:
        - Media
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/mediaId'
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/messagingBadRequestError'
        '401':
          $ref: '#/components/responses/messagingUnauthorizedError'
        '403':
          $ref: '#/components/responses/messagingForbiddenError'
        '404':
          $ref: '#/components/responses/messagingNotFoundError'
        '406':
          $ref: '#/components/responses/messagingNotAcceptableError'
        '415':
          $ref: '#/components/responses/messagingInvalidMediaTypeError'
        '429':
          $ref: '#/components/responses/messagingTooManyRequestsError'
        '500':
          $ref: '#/components/responses/messagingInternalServerError'
    servers: *ref_0
  /users/{accountId}/messages:
    get:
      summary: List Messages
      description: >
        Returns a list of messages based on query parameters.


        **Rate Limit:** This endpoint is rate limited to 3500 requests per 5
        minutes per Source IP address. Exceeding the limit returns HTTP 429 with
        a `Retry-After` header.
      operationId: listMessages
      tags:
        - Messages
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/messageId'
        - $ref: '#/components/parameters/sourceTn'
        - $ref: '#/components/parameters/destinationTn'
        - $ref: '#/components/parameters/messageStatus'
        - $ref: '#/components/parameters/messageDirection'
        - $ref: '#/components/parameters/carrierName'
        - $ref: '#/components/parameters/messageType'
        - $ref: '#/components/parameters/errorCode'
        - $ref: '#/components/parameters/fromDateTime'
        - $ref: '#/components/parameters/toDateTime'
        - $ref: '#/components/parameters/campaignId'
        - $ref: '#/components/parameters/fromBwLatency'
        - $ref: '#/components/parameters/bwQueued'
        - $ref: '#/components/parameters/product'
        - $ref: '#/components/parameters/location'
        - $ref: '#/components/parameters/carrierQueued'
        - $ref: '#/components/parameters/fromCarrierLatency'
        - $ref: '#/components/parameters/callingNumberCountryA3'
        - $ref: '#/components/parameters/calledNumberCountryA3'
        - $ref: '#/components/parameters/fromSegmentCount'
        - $ref: '#/components/parameters/toSegmentCount'
        - $ref: '#/components/parameters/fromMessageSize'
        - $ref: '#/components/parameters/toMessageSize'
        - $ref: '#/components/parameters/sort'
        - $ref: '#/components/parameters/pageToken'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/limitTotalCount'
      responses:
        '200':
          $ref: '#/components/responses/listMessagesResponse'
        '400':
          $ref: '#/components/responses/messagingBadRequestError'
        '401':
          $ref: '#/components/responses/messagingUnauthorizedError'
        '403':
          $ref: '#/components/responses/messagingForbiddenError'
        '404':
          $ref: '#/components/responses/messagingNotFoundError'
        '405':
          $ref: '#/components/responses/messagingMethodNotAllowedError'
        '415':
          $ref: '#/components/responses/messagingInvalidMediaTypeError'
        '429':
          $ref: '#/components/responses/listMessagesTooManyRequestsError'
        '500':
          $ref: '#/components/responses/messagingInternalServerError'
    post:
      summary: Create Message
      description: >-
        Endpoint for sending text messages and picture messages using V2
        messaging.
      operationId: createMessage
      tags:
        - Messages
      parameters:
        - $ref: '#/components/parameters/accountId'
      requestBody:
        $ref: '#/components/requestBodies/createMessageRequest'
      responses:
        '202':
          $ref: '#/components/responses/createMessageResponse'
        '400':
          $ref: '#/components/responses/createMessageBadRequestError'
        '401':
          $ref: '#/components/responses/messagingUnauthorizedError'
        '403':
          $ref: '#/components/responses/messagingForbiddenError'
        '404':
          $ref: '#/components/responses/messagingNotFoundError'
        '405':
          $ref: '#/components/responses/messagingMethodNotAllowedError'
        '406':
          $ref: '#/components/responses/messagingNotAcceptableError'
        '415':
          $ref: '#/components/responses/messagingInvalidMediaTypeError'
        '429':
          $ref: '#/components/responses/messagingTooManyRequestsError'
        '500':
          $ref: '#/components/responses/messagingInternalServerError'
      callbacks:
        statusCallback:
          $ref: '#/components/callbacks/statusCallback'
    servers: *ref_0
  /users/{accountId}/messages/multiChannel:
    post:
      summary: Create Multi-Channel Message
      description: Endpoint for sending Multi-Channel messages.
      operationId: createMultiChannelMessage
      parameters:
        - $ref: '#/components/parameters/accountId'
      tags:
        - Multi-Channel
      requestBody:
        $ref: '#/components/requestBodies/createMultiChannelMessageRequest'
      responses:
        '202':
          $ref: '#/components/responses/createMultiChannelMessageResponse'
        '400':
          $ref: '#/components/responses/multiChannelBadRequestError'
        '401':
          $ref: '#/components/responses/multiChannelUnauthorizedError'
        '403':
          $ref: '#/components/responses/multiChannelForbiddenError'
        '404':
          $ref: '#/components/responses/multiChannelNotFoundError'
        '405':
          $ref: '#/components/responses/multiChannelMethodNotAllowedError'
        '406':
          $ref: '#/components/responses/multiChannelNotAcceptableError'
        '415':
          $ref: '#/components/responses/multiChannelInvalidMediaTypeError'
        '429':
          $ref: '#/components/responses/multiChannelTooManyRequestsError'
        '500':
          $ref: '#/components/responses/multiChannelInternalServerError'
      callbacks:
        statusCallback:
          $ref: '#/components/callbacks/statusCallback'
      x-badges:
        - name: Beta
          color: '#076EA8'
    servers: *ref_0
  /accounts/{accountId}/calls:
    post:
      tags:
        - Calls
      summary: Create Call
      description: >-
        Creates an outbound phone call.


        All calls are initially queued. Your outbound calls will initiated at a
        specific dequeueing rate, enabling your application to "fire and forget"
        when creating calls. Queued calls may not be modified until they are
        dequeued and placed, but may be removed from your queue on demand.


        <b>Please note:</b> Calls submitted to your queue will be placed
        approximately in order, but exact ordering is not guaranteed.
      operationId: createCall
      parameters:
        - $ref: '#/components/parameters/accountId'
      requestBody:
        $ref: '#/components/requestBodies/createCallRequest'
      responses:
        '201':
          $ref: '#/components/responses/createCallResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    get:
      tags:
        - Calls
      summary: Get Calls
      description: >-
        Returns a max of 10000 calls, sorted by `createdTime` from oldest to
        newest.


        **NOTE:** If the number of calls in the account is bigger than
        `pageSize`, a `Link` header (with format `<{url}>; rel="next"`) will be
        returned in the response. The url can be used to retrieve the next page
        of call records.

        Also, call information is kept for 7 days after the calls are hung up.
        If you attempt to retrieve information for a call that is older than 7
        days, you will get an empty array [] in response.
      operationId: listCalls
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/to'
        - $ref: '#/components/parameters/from'
        - $ref: '#/components/parameters/minStartTimeCalls'
        - $ref: '#/components/parameters/maxStartTimeCalls'
        - $ref: '#/components/parameters/disconnectCause'
        - $ref: '#/components/parameters/pageSizeCalls'
        - $ref: '#/components/parameters/pageToken1'
      responses:
        '200':
          $ref: '#/components/responses/listCallsResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: &ref_1
      - url: https://voice.bandwidth.com/api/v2
        description: Production
  /accounts/{accountId}/calls/{callId}:
    get:
      tags:
        - Calls
      summary: Get Call State Information
      description: >-
        Retrieve the current state of a specific call. This information is
        near-realtime, so it may take a few minutes for your call to be
        accessible using this endpoint.


        **Note**: Call information is kept for 7 days after the calls are hung
        up. If you attempt to retrieve information for a call that is older than
        7 days, you will get an HTTP 404 response.
      operationId: getCallState
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
      responses:
        '200':
          $ref: '#/components/responses/getCallStateResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    post:
      tags:
        - Calls
      summary: Update Call
      description: >-
        Interrupts and redirects a call to a different URL that should return a
        BXML document.
      operationId: updateCall
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
      requestBody:
        $ref: '#/components/requestBodies/updateCallRequest'
      responses:
        '200':
          $ref: '#/components/responses/updateCallResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '409':
          $ref: '#/components/responses/voiceConflictError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/calls/{callId}/bxml:
    put:
      tags:
        - Calls
      summary: Update Call BXML
      description: Interrupts and replaces an active call's BXML document.
      operationId: updateCallBxml
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
      requestBody:
        $ref: '#/components/requestBodies/updateCallBxmlRequest'
      responses:
        '204':
          description: Call BXML was successfully replaced.
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '409':
          $ref: '#/components/responses/voiceConflictError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/conferences:
    get:
      tags:
        - Conferences
      summary: Get Conferences
      description: >-
        Returns a max of 1000 conferences, sorted by `createdTime` from oldest
        to newest.


        **NOTE:** If the number of conferences in the account is bigger than
        `pageSize`, a `Link` header (with format `<{url}>; rel="next"`) will be
        returned in the response. The url can be used to retrieve the next page
        of conference records.
      operationId: listConferences
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/name'
        - $ref: '#/components/parameters/minCreatedTime'
        - $ref: '#/components/parameters/maxCreatedTime'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageToken1'
      responses:
        '200':
          $ref: '#/components/responses/listConferencesResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/conferences/{conferenceId}:
    get:
      tags:
        - Conferences
      summary: Get Conference Information
      description: Returns information about the specified conference.
      operationId: getConference
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/conferenceId'
      responses:
        '200':
          $ref: '#/components/responses/getConferenceResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    post:
      tags:
        - Conferences
      summary: Update Conference
      description: Update the conference state.
      operationId: updateConference
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/conferenceId'
      requestBody:
        $ref: '#/components/requestBodies/updateConferenceRequest'
      responses:
        '204':
          description: Conference was successfully modified.
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/conferences/{conferenceId}/bxml:
    put:
      tags:
        - Conferences
      summary: Update Conference BXML
      description: Update the conference BXML document.
      operationId: updateConferenceBxml
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/conferenceId'
      requestBody:
        $ref: '#/components/requestBodies/updateConferenceBxmlRequest'
      responses:
        '204':
          description: Conference successfully modified.
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/conferences/{conferenceId}/members/{memberId}:
    get:
      tags:
        - Conferences
      summary: Get Conference Member
      description: Returns information about the specified conference member.
      operationId: getConferenceMember
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/conferenceId'
        - $ref: '#/components/parameters/memberId'
      responses:
        '200':
          $ref: '#/components/responses/getConferenceMemberResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    put:
      tags:
        - Conferences
      summary: Update Conference Member
      description: Updates settings for a particular conference member.
      operationId: updateConferenceMember
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/conferenceId'
        - $ref: '#/components/parameters/memberId'
      requestBody:
        $ref: '#/components/requestBodies/updateConferenceMemberRequest'
      responses:
        '204':
          description: Conference member was successfully modified.
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/conferences/{conferenceId}/recordings:
    get:
      tags:
        - Conferences
      summary: Get Conference Recordings
      description: >-
        Returns a (potentially empty) list of metadata for the recordings that
        took place during the specified conference.
      operationId: listConferenceRecordings
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/conferenceId'
      responses:
        '200':
          $ref: '#/components/responses/listConferenceRecordingsResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/conferences/{conferenceId}/recordings/{recordingId}:
    get:
      tags:
        - Conferences
      summary: Get Conference Recording Information
      description: Returns metadata for the specified recording.
      operationId: getConferenceRecording
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/conferenceId'
        - $ref: '#/components/parameters/recordingId'
      responses:
        '200':
          $ref: '#/components/responses/getConferenceRecordingResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/conferences/{conferenceId}/recordings/{recordingId}/media:
    get:
      tags:
        - Conferences
      summary: Download Conference Recording
      description: Downloads the specified recording file.
      operationId: downloadConferenceRecording
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/conferenceId'
        - $ref: '#/components/parameters/recordingId'
      responses:
        '200':
          $ref: '#/components/responses/downloadRecordingMediaResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/recordings:
    get:
      tags:
        - Recordings
      summary: Get Call Recordings
      description: >-
        Returns a list of metadata for the recordings associated with the

        specified account. The list can be filtered by the optional from, to,
        minStartTime,

        and maxStartTime arguments. The list is capped at 1000 entries and may
        be

        empty if no recordings match the specified criteria.
      operationId: listAccountCallRecordings
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/to'
        - $ref: '#/components/parameters/from'
        - $ref: '#/components/parameters/minStartTime'
        - $ref: '#/components/parameters/maxStartTime'
      responses:
        '200':
          $ref: '#/components/responses/listCallRecordingsResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/calls/{callId}/recording:
    put:
      tags:
        - Recordings
      summary: Update Recording
      description: Pause or resume a recording on an active phone call.
      operationId: updateCallRecordingState
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
      requestBody:
        $ref: '#/components/requestBodies/updateCallRecordingRequest'
      responses:
        '200':
          $ref: '#/components/responses/updateRecordingResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/calls/{callId}/recordings:
    get:
      tags:
        - Recordings
      summary: List Call Recordings
      description: |-
        Returns a (potentially empty) list of metadata for the recordings
        that took place during the specified call.
      operationId: listCallRecordings
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
      responses:
        '200':
          $ref: '#/components/responses/listCallRecordingsResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/calls/{callId}/recordings/{recordingId}:
    get:
      tags:
        - Recordings
      summary: Get Call Recording
      description: Returns metadata for the specified recording.
      operationId: getCallRecording
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
        - $ref: '#/components/parameters/recordingId'
      responses:
        '200':
          $ref: '#/components/responses/getCallRecordingResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    delete:
      tags:
        - Recordings
      summary: Delete Recording
      description: >-
        Delete the recording information, media and transcription.


        Note: After the deletion is requested and a `204` is returned, neither
        the recording metadata nor the actual media nor its transcription will
        be accessible anymore. However, the media of the specified recording is
        not deleted immediately. This deletion process, while transparent and
        irreversible, can take an additional 24 to 48 hours.
      operationId: deleteRecording
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
        - $ref: '#/components/parameters/recordingId'
      responses:
        '204':
          description: Recording was deleted.
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/calls/{callId}/recordings/{recordingId}/media:
    get:
      tags:
        - Recordings
      summary: Download Recording
      description: Downloads the specified recording.
      operationId: downloadCallRecording
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
        - $ref: '#/components/parameters/recordingId'
      responses:
        '200':
          $ref: '#/components/responses/downloadRecordingMediaResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    delete:
      tags:
        - Recordings
      summary: Delete Recording Media
      description: Deletes the specified recording's media.
      operationId: deleteRecordingMedia
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
        - $ref: '#/components/parameters/recordingId'
      responses:
        '204':
          description: The recording media was successfully deleted.
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/calls/{callId}/recordings/{recordingId}/transcription:
    get:
      tags:
        - Recordings
      summary: Get Transcription
      description: >-
        Downloads the specified transcription.

        If the recording was multi-channel, then there will be 2 transcripts.

        The caller/called party transcript will be the first item while
        [`<PlayAudio>`](/docs/voice/bxml/playAudio) and
        [`<SpeakSentence>`](/docs/voice/bxml/speakSentence) transcript will be
        the second item.

        During a [`<Transfer>`](/docs/voice/bxml/transfer) the A-leg transcript
        will be the first item while the B-leg transcript will be the second
        item.
      operationId: getRecordingTranscription
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
        - $ref: '#/components/parameters/recordingId'
      responses:
        '200':
          $ref: '#/components/responses/getRecordingTranscriptionResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    post:
      tags:
        - Recordings
      summary: Create Transcription Request
      description: >-
        Generate the transcription for a specific recording. Transcription

        can succeed only for recordings of length greater than 500 milliseconds
        and

        less than 4 hours.
      operationId: transcribeCallRecording
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
        - $ref: '#/components/parameters/recordingId'
      requestBody:
        $ref: '#/components/requestBodies/transcribeRecordingRequest'
      responses:
        '204':
          description: Transcription was successfully requested.
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    delete:
      tags:
        - Recordings
      summary: Delete Transcription
      description: >-
        Deletes the specified recording's transcription.


        Note: After the deletion is requested and a `204` is returned, the
        transcription will not be accessible anymore. However, it is not deleted
        immediately. This deletion process, while transparent and irreversible,
        can take an additional 24 to 48 hours.
      operationId: deleteRecordingTranscription
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
        - $ref: '#/components/parameters/recordingId'
      responses:
        '204':
          description: The transcription was successfully deleted.
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/statistics:
    get:
      tags:
        - Statistics
      summary: Get Account Statistics
      description: Returns details about the current state of the account.
      operationId: getStatistics
      parameters:
        - $ref: '#/components/parameters/accountId'
      responses:
        '200':
          $ref: '#/components/responses/getStatisticsResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/calls/{callId}/transcriptions:
    get:
      tags:
        - Transcriptions
      summary: List Real-time Transcriptions
      description: >-
        List the transcriptions created on this call via
        [startTranscription](/docs/voice/bxml/startTranscription).
      operationId: listRealTimeTranscriptions
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
      responses:
        '200':
          $ref: '#/components/responses/listTranscriptionsResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/calls/{callId}/transcriptions/{transcriptionId}:
    get:
      tags:
        - Transcriptions
      summary: Get Real-time Transcription
      description: >-
        Retrieve the specified transcription that was created on this call via
        [startTranscription](/docs/voice/bxml/startTranscription).
      operationId: getRealTimeTranscription
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
        - $ref: '#/components/parameters/transcriptionId'
      responses:
        '200':
          $ref: '#/components/responses/getCallTranscriptionResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    delete:
      tags:
        - Transcriptions
      summary: Delete Real-time Transcription
      description: >-
        Delete the specified transcription that was created on this call via
        [startTranscription](/docs/voice/bxml/startTranscription).


        Note: After the deletion is requested and a `200` is returned, the
        transcription will not be accessible anymore. However, it is not deleted
        immediately. This deletion process, while transparent and irreversible,
        can take an additional 24 to 48 hours.
      operationId: deleteRealTimeTranscription
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/callId'
        - $ref: '#/components/parameters/transcriptionId'
      responses:
        '200':
          $ref: '#/components/responses/deleteCallTranscriptionResponse'
        '400':
          $ref: '#/components/responses/voiceBadRequestError'
        '401':
          $ref: '#/components/responses/voiceUnauthorizedError'
        '403':
          $ref: '#/components/responses/voiceForbiddenError'
        '404':
          $ref: '#/components/responses/voiceNotFoundError'
        '405':
          $ref: '#/components/responses/voiceNotAllowedError'
        '415':
          $ref: '#/components/responses/voiceUnsupportedMediaTypeError'
        '429':
          $ref: '#/components/responses/voiceTooManyRequestsError'
        '500':
          $ref: '#/components/responses/voiceInternalServerError'
    servers: *ref_1
  /accounts/{accountId}/code/voice:
    post:
      tags:
        - MFA
      summary: Voice Authentication Code
      description: Send an MFA Code via a phone call.
      operationId: generateVoiceCode
      parameters:
        - $ref: '#/components/parameters/accountId'
      requestBody:
        $ref: '#/components/requestBodies/codeRequest'
      responses:
        '200':
          $ref: '#/components/responses/voiceCodeResponse'
        '400':
          $ref: '#/components/responses/mfaBadRequestError'
        '401':
          $ref: '#/components/responses/mfaUnauthorizedError'
        '403':
          $ref: '#/components/responses/mfaForbiddenError'
        '500':
          $ref: '#/components/responses/mfaInternalServerError'
    servers: &ref_2
      - url: https://mfa.bandwidth.com/api/v1
        description: Production
  /accounts/{accountId}/code/messaging:
    post:
      tags:
        - MFA
      summary: Messaging Authentication Code
      description: Send an MFA code via text message (SMS).
      operationId: generateMessagingCode
      parameters:
        - $ref: '#/components/parameters/accountId'
      requestBody:
        $ref: '#/components/requestBodies/codeRequest'
      responses:
        '200':
          $ref: '#/components/responses/messagingCodeResponse'
        '400':
          $ref: '#/components/responses/mfaBadRequestError'
        '401':
          $ref: '#/components/responses/mfaUnauthorizedError'
        '403':
          $ref: '#/components/responses/mfaForbiddenError'
        '500':
          $ref: '#/components/responses/mfaInternalServerError'
    servers: *ref_2
  /accounts/{accountId}/code/verify:
    post:
      tags:
        - MFA
      summary: Verify Authentication Code
      description: Verify a previously sent MFA code.
      operationId: verifyCode
      parameters:
        - $ref: '#/components/parameters/accountId'
      requestBody:
        $ref: '#/components/requestBodies/codeVerify'
      responses:
        '200':
          $ref: '#/components/responses/verifyCodeResponse'
        '400':
          $ref: '#/components/responses/mfaBadRequestError'
        '401':
          $ref: '#/components/responses/mfaUnauthorizedError'
        '403':
          $ref: '#/components/responses/mfaForbiddenError'
        '429':
          $ref: '#/components/responses/mfaTooManyRequestsError'
        '500':
          $ref: '#/components/responses/mfaInternalServerError'
    servers: *ref_2
  /accounts/{accountId}/phoneNumberLookup:
    post:
      summary: Create Synchronous Number Lookup
      description: >-
        Creates a synchronous phone number lookup request. Maximum of 100
        telephone numbers per request.
      operationId: createSyncLookup
      tags:
        - Phone Number Lookup
      parameters:
        - $ref: '#/components/parameters/accountId1'
      requestBody:
        $ref: '#/components/requestBodies/createSyncLookupRequest'
      responses:
        '200':
          $ref: '#/components/responses/createSyncLookupResponse'
        default:
          $ref: '#/components/responses/tnLookupDefaultResponse'
    servers: &ref_3
      - url: https://api.bandwidth.com/v2
        description: Production
  /accounts/{accountId}/phoneNumberLookup/bulk:
    post:
      summary: Create Asynchronous Bulk Number Lookup
      description: >-
        Creates an asynchronous bulk phone number lookup request. Maximum of
        15,000 telephone numbers per request. Use the [Get Asynchronous Bulk
        Number Lookup](#tag/Phone-Number-Lookup/operation/getAsyncBulkLookup)
        endpoint to check the status of the request and view the results.
      operationId: createAsyncBulkLookup
      tags:
        - Phone Number Lookup
      parameters:
        - $ref: '#/components/parameters/accountId1'
      requestBody:
        $ref: '#/components/requestBodies/createAsyncBulkLookupRequest'
      responses:
        '202':
          $ref: '#/components/responses/createAsyncBulkLookupResponse'
        default:
          $ref: '#/components/responses/tnLookupDefaultResponse'
    servers: *ref_3
  /accounts/{accountId}/phoneNumberLookup/bulk/{requestId}:
    get:
      summary: Get Asynchronous Bulk Number Lookup
      description: >-
        Get an existing [Asynchronous Bulk Number
        Lookup](#tag/Phone-Number-Lookup/operation/createAsyncBulkLookup). Use
        this endpoint to check the status of the request and view the results.
      operationId: getAsyncBulkLookup
      tags:
        - Phone Number Lookup
      parameters:
        - $ref: '#/components/parameters/accountId1'
        - $ref: '#/components/parameters/requestId'
      responses:
        '200':
          $ref: '#/components/responses/getAsyncBulkLookupResponse'
        default:
          $ref: '#/components/responses/tnLookupDefaultResponse'
    servers: *ref_3
  /accounts/{accountId}/tollFreeVerification:
    post:
      tags:
        - Toll-Free Verification
      summary: Request Toll-Free Verification
      description: Submit a request for verification of a toll-free phone number.
      operationId: requestTollFreeVerification
      parameters:
        - $ref: '#/components/parameters/accountId'
      requestBody:
        $ref: '#/components/requestBodies/requestTollFreeVerificationRequest'
      responses:
        '202':
          description: Accepted
        '400':
          $ref: '#/components/responses/tfvPostBadRequestResponse'
        '401':
          $ref: '#/components/responses/tfvUnauthorizedResponse'
        '403':
          $ref: '#/components/responses/tfvForbiddenResponse'
        '405':
          $ref: '#/components/responses/tfvNotAllowedResponse'
        '429':
          $ref: '#/components/responses/tfvTooManyRequestsResponse'
        '500':
          $ref: '#/components/responses/tfvServerErrorResponse'
        '503':
          $ref: '#/components/responses/tfvServiceUnavailableResponse'
      callbacks:
        tfVerificationStatus:
          $ref: '#/components/callbacks/tfVerificationStatus'
    servers: &ref_4
      - url: https://api.bandwidth.com/api/v2
        description: Production
  /accounts/{accountId}/phoneNumbers/{phoneNumber}/tollFreeVerification:
    get:
      tags:
        - Toll-Free Verification
      summary: Get Toll-Free Verification Status
      description: >-
        Gets the verification status for a phone number that is provisioned to
        your account.

        Submission information will be appended to the response if it is
        available.
      operationId: getTollFreeVerificationStatus
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/tfPhoneNumberPathParam'
      responses:
        '200':
          $ref: '#/components/responses/getTollFreeVerificationStatusResponse'
        '400':
          $ref: '#/components/responses/tfvBadRequestResponse'
        '401':
          $ref: '#/components/responses/tfvUnauthorizedResponse'
        '403':
          $ref: '#/components/responses/tfvForbiddenResponse'
        '404':
          $ref: '#/components/responses/tfvNotFoundResponse'
        '405':
          $ref: '#/components/responses/tfvNotAllowedResponse'
        '429':
          $ref: '#/components/responses/tfvTooManyRequestsResponse'
        '500':
          $ref: '#/components/responses/tfvServerErrorResponse'
        '503':
          $ref: '#/components/responses/tfvServiceUnavailableResponse'
    put:
      tags:
        - Toll-Free Verification
      summary: Update Toll-Free Verification Request
      description: >-
        Updates a toll-free verification request.

        Submissions are only eligible for resubmission for 7 days within being
        processed and if resubmission is allowed (resubmitAllowed field is
        true).
      operationId: updateTollFreeVerificationRequest
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/tfPhoneNumberPathParam'
      requestBody:
        $ref: '#/components/requestBodies/updateTollFreeVerificationRequestRequest'
      responses:
        '202':
          description: Accepted
        '400':
          $ref: '#/components/responses/tfvPostBadRequestResponse'
        '401':
          $ref: '#/components/responses/tfvUnauthorizedResponse'
        '403':
          $ref: '#/components/responses/tfvForbiddenResponse'
        '405':
          $ref: '#/components/responses/tfvNotAllowedResponse'
        '429':
          $ref: '#/components/responses/tfvTooManyRequestsResponse'
        '500':
          $ref: '#/components/responses/tfvServerErrorResponse'
        '503':
          $ref: '#/components/responses/tfvServiceUnavailableResponse'
      callbacks:
        tfVerificationStatus:
          $ref: '#/components/callbacks/tfVerificationStatus'
    delete:
      description: Delete a toll-free verification submission for a toll-free number.
      operationId: deleteVerificationRequest
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/tfPhoneNumberPathParam'
      responses:
        '204':
          $ref: '#/components/responses/noContentResponse'
        '400':
          $ref: '#/components/responses/tfvBadRequestResponse'
        '401':
          $ref: '#/components/responses/tfvUnauthorizedResponse'
        '403':
          $ref: '#/components/responses/tfvForbiddenResponse'
        '404':
          $ref: '#/components/responses/tfvNotFoundResponse'
        '405':
          $ref: '#/components/responses/tfvNotAllowedResponse'
        '429':
          $ref: '#/components/responses/tfvTooManyRequestsResponse'
        '500':
          $ref: '#/components/responses/tfvServerErrorResponse'
        '503':
          $ref: '#/components/responses/tfvServiceUnavailableResponse'
      summary: Delete a Toll-Free Verification Submission
      tags:
        - Toll-Free Verification
    servers: *ref_4
  /accounts/{accountId}/tollFreeVerification/webhooks/subscriptions:
    get:
      tags:
        - Toll-Free Verification
      summary: List Webhook Subscriptions
      description: >-
        Lists all webhook subscriptions that are registered to receive status
        updates for the toll-free verification requests submitted under this
        account (password will not be returned through this API

        If `basicAuthentication` is defined, the `password` property of that
        object will be null).
      operationId: listWebhookSubscriptions
      parameters:
        - $ref: '#/components/parameters/accountId'
      responses:
        '200':
          $ref: '#/components/responses/listWebhookSubscriptionsResponse'
        '400':
          $ref: '#/components/responses/tfvPostBadRequestResponse'
        '401':
          $ref: '#/components/responses/tfvUnauthorizedResponse'
        '403':
          $ref: '#/components/responses/tfvForbiddenResponse'
        '405':
          $ref: '#/components/responses/tfvNotAllowedResponse'
        '429':
          $ref: '#/components/responses/tfvTooManyRequestsResponse'
        '500':
          $ref: '#/components/responses/tfvServerErrorResponse'
        '503':
          $ref: '#/components/responses/tfvServiceUnavailableResponse'
    post:
      tags:
        - Toll-Free Verification
      summary: Create Webhook Subscription
      description: >-
        Create a new webhook subscription (this webhook will be called for every
        update on every submission).

        In addition to a `callbackUrl`, this subscription can provide optional
        HTTP basic authentication credentials (a username and a password).

        The returned subscription object will contain an ID that can be used to
        modify or delete the subscription at a later time.
      operationId: createWebhookSubscription
      parameters:
        - $ref: '#/components/parameters/accountId'
      requestBody:
        $ref: '#/components/requestBodies/webhookSubscriptionRequest'
      responses:
        '201':
          $ref: '#/components/responses/createWebhookSubscriptionResponse'
        '400':
          $ref: '#/components/responses/tfvBadRequestResponse'
        '401':
          $ref: '#/components/responses/tfvUnauthorizedResponse'
        '403':
          $ref: '#/components/responses/tfvForbiddenResponse'
        '404':
          $ref: '#/components/responses/tfvNotFoundResponse'
        '405':
          $ref: '#/components/responses/tfvNotAllowedResponse'
        '429':
          $ref: '#/components/responses/tfvTooManyRequestsResponse'
        '500':
          $ref: '#/components/responses/tfvServerErrorResponse'
        '503':
          $ref: '#/components/responses/tfvServiceUnavailableResponse'
    servers: *ref_4
  /accounts/{accountId}/tollFreeVerification/webhooks/subscriptions/{id}:
    delete:
      tags:
        - Toll-Free Verification
      summary: Delete Webhook Subscription
      description: Delete a webhook subscription by ID.
      operationId: deleteWebhookSubscription
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/webhookSubscriptionIdPathParam'
      responses:
        '204':
          $ref: '#/components/responses/noContentResponse'
        '400':
          $ref: '#/components/responses/tfvBadRequestResponse'
        '401':
          $ref: '#/components/responses/tfvUnauthorizedResponse'
        '403':
          $ref: '#/components/responses/tfvForbiddenResponse'
        '404':
          $ref: '#/components/responses/tfvNotFoundResponse'
        '405':
          $ref: '#/components/responses/tfvNotAllowedResponse'
        '429':
          $ref: '#/components/responses/tfvTooManyRequestsResponse'
        '500':
          $ref: '#/components/responses/tfvServerErrorResponse'
        '503':
          $ref: '#/components/responses/tfvServiceUnavailableResponse'
    put:
      tags:
        - Toll-Free Verification
      summary: Update Webhook Subscription
      description: >-
        Update an existing webhook subscription (`callbackUrl` and
        `basicAuthentication` can be updated).
      operationId: updateWebhookSubscription
      parameters:
        - $ref: '#/components/parameters/accountId'
        - $ref: '#/components/parameters/webhookSubscriptionIdPathParam'
      requestBody:
        $ref: '#/components/requestBodies/webhookSubscriptionRequest'
      responses:
        '200':
          $ref: '#/components/responses/updateWebhookSubscriptionResponse'
        '400':
          $ref: '#/components/responses/tfvBadRequestResponse'
        '401':
          $ref: '#/components/responses/tfvUnauthorizedResponse'
        '403':
          $ref: '#/components/responses/tfvForbiddenResponse'
        '404':
          $ref: '#/components/responses/tfvNotFoundResponse'
        '405':
          $ref: '#/components/responses/tfvNotAllowedResponse'
        '429':
          $ref: '#/components/responses/tfvTooManyRequestsResponse'
        '500':
          $ref: '#/components/responses/tfvServerErrorResponse'
        '503':
          $ref: '#/components/responses/tfvServiceUnavailableResponse'
    servers: *ref_4
  /tollFreeVerification/useCases:
    get:
      tags:
        - Toll-Free Verification
      summary: List Toll-Free Use Cases
      description: Lists valid toll-free use cases.
      operationId: listTollFreeUseCases
      responses:
        '200':
          $ref: '#/components/responses/listTollFreeUseCasesResponse'
        '400':
          $ref: '#/components/responses/tfvBadRequestResponse'
        '401':
          $ref: '#/components/responses/tfvUnauthorizedResponse'
        '403':
          $ref: '#/components/responses/tfvForbiddenResponse'
        '404':
          $ref: '#/components/responses/tfvNotFoundResponse'
        '405':
          $ref: '#/components/responses/tfvNotAllowedResponse'
        '429':
          $ref: '#/components/responses/tfvTooManyRequestsResponse'
        '500':
          $ref: '#/components/responses/tfvServerErrorResponse'
        '503':
          $ref: '#/components/responses/tfvServiceUnavailableResponse'
    servers: *ref_4
components:
  schemas:
    applicationId:
      type: string
      description: >-
        The ID of the Application your from number or senderId is associated
        with in the Bandwidth Phone Number Dashboard.
      example: 93de2206-9669-4e07-948d-329f4b722ee2
    priorityEnum:
      type: string
      description: >-
        Specifies the message's sending priority with respect to other messages
        in your account. For best results and optimal throughput, reserve the
        'high' priority setting for critical messages only.
      enum:
        - default
        - high
      example: default
    messageStatusEnum:
      type: string
      description: >-
        The status of the message. One of RECEIVED QUEUED SENDING SENT FAILED
        DELIVERED ACCEPTED UNDELIVERED.
      enum:
        - RECEIVED
        - QUEUED
        - SENDING
        - SENT
        - FAILED
        - DELIVERED
        - ACCEPTED
        - UNDELIVERED
      example: RECEIVED
    listMessageDirectionEnum:
      type: string
      description: The direction of the message. One of INBOUND OUTBOUND.
      enum:
        - INBOUND
        - OUTBOUND
      example: INBOUND
    messageDirectionEnum:
      type: string
      description: The direction of the message. One of in out.
      enum:
        - in
        - out
      example: in
    messageTypeEnum:
      type: string
      description: The type of message. Either SMS or MMS.
      enum:
        - sms
        - mms
        - rcs
      example: sms
    productTypeEnum:
      type: string
      description: The type of product associated with the message.
      enum:
        - LOCAL_A2P
        - P2P
        - SHORT_CODE_REACH
        - TOLL_FREE
        - HOSTED_SHORT_CODE
        - ALPHA_NUMERIC
        - RBM_MEDIA
        - RBM_RICH
        - RBM_CONVERSATIONAL
      example: P2P
    fieldError:
      type: object
      properties:
        fieldName:
          type: string
          description: The name of the field that contains the error
          example: from
        description:
          type: string
          description: The error associated with the field
          example: >-
            '+invalid' must be replaced with a valid E164 formatted telephone
            number
    messagesList:
      title: MessagesList
      type: object
      properties:
        totalCount:
          type: integer
          description: >-
            The total number of messages matched by the search. When the request
            has limitTotalCount set to true this value is limited to 10,000.
          example: 100
        pageInfo:
          $ref: '#/components/schemas/pageInfo'
        messages:
          type: array
          items:
            $ref: '#/components/schemas/listMessageItem'
    listMessageItem:
      title: listMessageItem
      type: object
      properties:
        messageId:
          type: string
          description: The message id
          example: 1589228074636lm4k2je7j7jklbn2
        accountId:
          type: string
          description: The account id associated with this message.
          example: '9900000'
        sourceTn:
          type: string
          description: The source phone number of the message.
          example: '+15554443333'
        destinationTn:
          type: string
          description: The recipient phone number of the message.
          example: '+15554442222'
        messageStatus:
          $ref: '#/components/schemas/messageStatusEnum'
        messageDirection:
          $ref: '#/components/schemas/listMessageDirectionEnum'
        messageType:
          $ref: '#/components/schemas/messageTypeEnum'
        segmentCount:
          $ref: '#/components/schemas/segmentCount'
        errorCode:
          type: integer
          description: The numeric error code of the message.
          example: 9902
        receiveTime:
          type: string
          format: date-time
          description: The ISO 8601 datetime of the message.
          example: 2020-04-07T14:03:07.000Z
        carrierName:
          type: string
          nullable: true
          description: >-
            The name of the carrier. Not currently supported for MMS coming
            soon.
          example: other
        messageSize:
          type: integer
          description: The size of the message including message content and headers.
          nullable: true
          example: 27
        messageLength:
          type: integer
          description: The length of the message content.
          example: 18
        attachmentCount:
          type: integer
          description: The number of attachments the message has.
          nullable: true
          example: 1
        recipientCount:
          type: integer
          description: The number of recipients the message has.
          nullable: true
          example: 1
        campaignClass:
          type: string
          description: The campaign class of the message if it has one.
          nullable: true
          example: T
        campaignId:
          type: string
          description: The campaign ID of the message if it has one.
          nullable: true
          example: CJEUMDK
        bwLatency:
          type: integer
          description: >-
            The Bandwidth latency of the message in seconds. Only available for
            accounts with the Advanced Quality Metrics feature enabled.
          nullable: true
          example: 20
        carrierLatency:
          type: integer
          description: >-
            The carrier latency of the message in seconds. Only available for
            OUTBOUND messages from accounts with the Advanced Quality Metrics
            feature enabled.
          nullable: true
          example: 20
        callingNumberCountryA3:
          type: string
          description: The A3 country code of the calling number.
          nullable: true
          example: USA
        calledNumberCountryA3:
          type: string
          description: The A3 country code of the called number.
          nullable: true
          example: USA
        product:
          type: string
          description: The messaging product associated with the message.
          nullable: true
          example: P2P
        location:
          type: string
          description: The location ID associated with this message.
          nullable: true
          example: 123ID
    pageInfo:
      title: PageInfo
      type: object
      properties:
        prevPage:
          type: string
          description: The link to the previous page for pagination.
          example: >-
            https://messaging.bandwidth.com/api/v2/users/accountId/messages?messageStatus=DLR_EXPIRED&nextPage=DLAPE902
        nextPage:
          type: string
          description: The link to the next page for pagination.
          example: >-
            https://messaging.bandwidth.com/api/v2/users/accountId/messages?messageStatus=DLR_EXPIRED&prevPage=GL83PD3C
        prevPageToken:
          type: string
          description: The isolated pagination token for the previous page.
          example: DLAPE902
        nextPageToken:
          type: string
          description: The isolated pagination token for the next page.
          example: GL83PD3C
    messagingRequestError:
      title: MessagingRequestError
      type: object
      properties:
        type:
          type: string
        description:
          type: string
      required:
        - type
        - description
    createMessageRequestError:
      title: CreateMessageRequestError
      type: object
      properties:
        type:
          type: string
        description:
          type: string
        fieldErrors:
          type: array
          items:
            $ref: '#/components/schemas/fieldError'
      required:
        - type
        - description
    id:
      type: string
      description: The ID of the message.
      example: 1589228074636lm4k2je7j7jklbn2
    media:
      title: Media
      type: object
      properties:
        content:
          type: string
        contentLength:
          type: integer
        mediaName:
          type: string
    segmentCount:
      type: integer
      description: >-
        The number of segments the user's message is broken into before sending
        over carrier networks.
      example: 1
    tag:
      title: Tag
      type: string
      description: >-
        A custom string that will be included in callback events of the message.
        Max 1024 characters.
      example: custom string
    expiration:
      type: string
      format: date-time
      description: >-
        A string with the date/time value that the message will automatically
        expire by. This must be a valid RFC-3339 value, e.g.,
        2021-03-14T01:59:26Z or 2021-03-13T20:59:26-05:00. Must be a date-time
        in the future.
      example: '2021-02-01T11:29:18-05:00'
    carrierName:
      type: string
      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
    message:
      title: Message
      type: object
      properties:
        id:
          type: string
          description: The id of the message.
          example: 1589228074636lm4k2je7j7jklbn2
        owner:
          type: string
          description: The Bandwidth phone number associated with the message.
          example: '+15554443333'
        applicationId:
          $ref: '#/components/schemas/applicationId'
        time:
          type: string
          format: date-time
          description: The datetime stamp of the message in ISO 8601
          example: 2024-12-02T20:15:57.278Z
        segmentCount:
          $ref: '#/components/schemas/segmentCount'
        direction:
          $ref: '#/components/schemas/messageDirectionEnum'
        to:
          uniqueItems: true
          type: array
          items:
            type: string
          description: The phone number recipients of the message.
          example:
            - '+15552223333'
        from:
          type: string
          description: The phone number the message was sent from.
          example: '+15553332222'
        media:
          uniqueItems: true
          type: array
          items:
            type: string
          description: >-
            The list of media URLs sent in the message. Including a `filename`
            field in the `Content-Disposition` header of the media linked with a
            URL will set the displayed file name. This is a best practice to
            ensure that your media has a readable file name.
          example:
            - https://dev.bandwidth.com/images/bandwidth-logo.png
        text:
          type: string
          description: The contents of the message.
          example: Hello world
        tag:
          $ref: '#/components/schemas/tag'
        priority:
          $ref: '#/components/schemas/priorityEnum'
        expiration:
          $ref: '#/components/schemas/expiration'
    messageRequest:
      title: MessageRequest
      type: object
      required:
        - applicationId
        - to
        - from
      properties:
        applicationId:
          $ref: '#/components/schemas/applicationId'
        to:
          uniqueItems: true
          type: array
          description: The phone number(s) the message should be sent to in E164 format.
          example:
            - '+15554443333'
            - '+15552223333'
          items:
            type: string
        from:
          type: string
          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'
        text:
          $ref: '#/components/schemas/messageText'
        media:
          $ref: '#/components/schemas/messageMedia'
        tag:
          $ref: '#/components/schemas/tag'
        priority:
          $ref: '#/components/schemas/priorityEnum'
        expiration:
          $ref: '#/components/schemas/expiration'
    messageText:
      type: string
      description: The contents of the text message. Must be 2048 characters or less.
      maxLength: 2048
      example: Hello world
    messageMedia:
      type: array
      items:
        type: string
        format: uri
        maxLength: 4096
      description: |-
        A list of URLs to include as media attachments as part of the message.
        Each URL can be at most 4096 characters.
      example:
        - https://dev.bandwidth.com/images/bandwidth-logo.png
        - https://dev.bandwidth.com/images/github_logo.png
    createMultiChannelMessageResponse:
      type: object
      properties:
        links:
          type: array
          items:
            $ref: '#/components/schemas/link'
          example: []
        data:
          $ref: '#/components/schemas/multiChannelMessageResponseData'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/errorObject'
          example: []
    multiChannelError:
      type: object
      properties:
        links:
          type: array
          items:
            $ref: '#/components/schemas/link'
          example: []
        data:
          type: object
          nullable: true
          example: null
        errors:
          type: array
          items:
            $ref: '#/components/schemas/errorObject'
    link:
      type: object
      properties:
        rel:
          type: string
        href:
          type: string
    errorObject:
      type: object
      properties:
        type:
          description: A concise summary of the error used for categorization.
          type: string
        description:
          description: A detailed explanation of the error.
          type: string
        source:
          $ref: '#/components/schemas/errorSource'
      required:
        - type
        - description
        - source
    errorSource:
      title: Error Source
      type: object
      description: Specifies relevant sources of the error, if any.
      properties:
        parameter:
          type: string
          description: The relevant URI query parameter causing the error
        field:
          type: string
          description: The request body field that led to the error
        header:
          type: string
          description: The header field that contributed to the error
        reference:
          type: string
          description: A resource ID or path linked to the error
    multiChannelMessageChannelEnum:
      description: The channel of the multi-channel message.
      type: string
      enum:
        - RBM
        - SMS
        - MMS
      example: RBM
    multiChannelSenderId:
      type: string
      description: The sender ID of the message. This could be an alphanumeric sender ID.
      example: BandwidthRBM
    multiChannelDestination:
      type: string
      description: The phone number the message should be sent to in E164 format.
      example: '+15552223333'
    multiChannelDestinations:
      uniqueItems: true
      type: array
      description: The destination phone number(s) of the message, in E164 format.
      example:
        - '+15554443333'
      items:
        type: string
    rbmMessageContentText:
      title: RBM Text
      type: object
      properties:
        text:
          type: string
          description: >-
            The text associated with the message. Must be 3270 characters or
            less
          maxLength: 3270
          example: Hello world
        suggestions:
          $ref: '#/components/schemas/multiChannelFullActions'
      required:
        - text
    rbmMediaHeightEnum:
      type: string
      description: The height of the media.
      enum:
        - SHORT
        - MEDIUM
        - TALL
      example: SHORT
    rbmMessageContentFile:
      title: RBM Rich Media File
      type: object
      properties:
        fileUrl:
          type: string
          format: uri
          description: The URL of the media file. 100MB is the maximum file size.
          example: https://dev.bandwidth.com/images/bandwidth-logo.png
          maxLength: 1000
        thumbnailUrl:
          type: string
          format: uri
          description: The URL of the thumbnail image. Applies only to video file media.
          example: https://dev.bandwidth.com/images/bandwidth-logo.png
          maxLength: 1000
      required:
        - fileUrl
    mmsMessageContentFile:
      title: MMS Media File
      type: object
      properties:
        fileUrl:
          type: string
          format: uri
          description: >-
            The URL of a media attachment.


            For MMS, the API limits file size to 3.5MB. Specific carriers and
            channels may have a smaller limit that could cause a large file to
            fail, see
            [here](https://support.bandwidth.com/hc/en-us/articles/360014235473-What-are-the-MMS-file-size-limits)
            for more details.
          example: https://dev.bandwidth.com/images/bandwidth-logo.png
          maxLength: 1000
      required:
        - fileUrl
    rbmMessageMedia:
      title: RBM Media
      type: object
      properties:
        media:
          type: array
          items:
            $ref: '#/components/schemas/rbmMessageContentFile'
        suggestions:
          $ref: '#/components/schemas/multiChannelFullActions'
      required:
        - media
    rbmCardContent:
      type: object
      properties:
        title:
          type: string
          description: The title of the card. Must be 200 characters or less.
          maxLength: 200
          example: Bandwidth
        description:
          type: string
          description: The description of the card. Must be 2000 characters or less.
          maxLength: 2000
          example: Bandwidth is a communications platform as a service (CPaaS) company.
        media:
          allOf:
            - $ref: '#/components/schemas/rbmMessageContentFile'
            - type: object
              properties:
                height:
                  $ref: '#/components/schemas/rbmMediaHeightEnum'
          required:
            - height
        suggestions:
          description: >-
            An array of suggested actions for the recipient that will be
            displayed on the rich card.
          type: array
          items:
            $ref: '#/components/schemas/multiChannelAction'
          maxItems: 4
    rbmStandaloneCard:
      title: Standalone Card
      type: object
      properties:
        orientation:
          $ref: '#/components/schemas/standaloneCardOrientationEnum'
        thumbnailImageAlignment:
          $ref: '#/components/schemas/thumbnailAlignmentEnum'
        cardContent:
          $ref: '#/components/schemas/rbmCardContent'
        suggestions:
          $ref: '#/components/schemas/multiChannelFullActions'
      required:
        - orientation
        - thumbnailImageAlignment
        - cardContent
    standaloneCardOrientationEnum:
      type: string
      enum:
        - HORIZONTAL
        - VERTICAL
      example: VERTICAL
    thumbnailAlignmentEnum:
      type: string
      description: >-
        The alignment of the thumbnail image in the card. Only applicable if the
        card using horizontal orientation.
      enum:
        - LEFT
        - RIGHT
      example: LEFT
    rbmMessageCarouselCard:
      title: Carousel
      type: object
      properties:
        cardWidth:
          $ref: '#/components/schemas/cardWidthEnum'
        cardContents:
          type: array
          items:
            $ref: '#/components/schemas/rbmCardContent'
          maxItems: 10
        suggestions:
          $ref: '#/components/schemas/multiChannelFullActions'
      required:
        - cardContents
        - cardWidth
    cardWidthEnum:
      type: string
      enum:
        - SMALL
        - MEDIUM
      example: SMALL
    smsMessageContent:
      title: SMS Text
      type: object
      properties:
        text:
          $ref: '#/components/schemas/messageText'
      required:
        - text
    mmsMessageContent:
      title: MMS Message
      type: object
      properties:
        text:
          $ref: '#/components/schemas/messageText'
        media:
          type: array
          items:
            $ref: '#/components/schemas/mmsMessageContentFile'
    rbmMessageContentRichCard:
      title: RBM Rich Card
      oneOf:
        - $ref: '#/components/schemas/rbmStandaloneCard'
        - $ref: '#/components/schemas/rbmMessageCarouselCard'
    rbmActionTypeEnum:
      type: string
      enum:
        - REPLY
        - DIAL_PHONE
        - SHOW_LOCATION
        - CREATE_CALENDAR_EVENT
        - OPEN_URL
        - REQUEST_LOCATION
      example: REPLY
    rbmOpenUrlEnum:
      type: string
      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
    rbmWebViewEnum:
      type: string
      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
        - TALL
    rbmActionText:
      title: Text
      type: string
      description: Displayed text for user to click
      maxLength: 25
      example: Hello world
    rbmActionPostbackData:
      title: Post Back Data
      type: string
      format: byte
      description: Base64 payload the customer receives when the reply is clicked.
      maxLength: 2048
      example: SGVsbG8gd29ybGQ=
    rbmActionBase:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/rbmActionTypeEnum'
        text:
          $ref: '#/components/schemas/rbmActionText'
        postbackData:
          $ref: '#/components/schemas/rbmActionPostbackData'
      required:
        - text
        - postbackData
        - type
    rbmActionDial:
      allOf:
        - $ref: '#/components/schemas/rbmActionBase'
        - title: Dial Phone
          type: object
          properties:
            phoneNumber:
              type: string
              description: The phone number to dial. Must be E164 format.
              example: '+15552223333'
          required:
            - phoneNumber
    rbmActionViewLocation:
      allOf:
        - $ref: '#/components/schemas/rbmActionBase'
        - title: Show Location
          type: object
          properties:
            latitude:
              type: string
              format: double
              description: The latitude of the location.
              example: '37.7749'
            longitude:
              type: string
              format: double
              description: The longitude of the location.
              example: '-122.4194'
            label:
              type: string
              description: The label of the location.
              example: San Francisco
              maxLength: 100
          required:
            - latitude
            - longitude
    multiChannelActionCalendarEvent:
      allOf:
        - $ref: '#/components/schemas/rbmActionBase'
        - title: Calendar Event
          type: object
          properties:
            title:
              type: string
              description: The title of the event.
              example: Meeting with John
              maxLength: 100
            startTime:
              type: string
              format: date-time
              description: The start time of the event.
              example: 2022-09-14T18:20:16.000Z
            endTime:
              type: string
              format: date-time
              description: The end time of the event.
              example: 2022-09-14T18:20:16.000Z
            description:
              type: string
              description: The description of the event.
              example: Discuss the new project
              maxLength: 500
          required:
            - title
            - startTime
            - endTime
    rbmActionOpenUrl:
      allOf:
        - $ref: '#/components/schemas/rbmActionBase'
        - title: Open URL
          type: object
          properties:
            url:
              type: string
              format: uri
              description: The URL to open in browser.
              example: https://dev.bandwidth.com
              maxLength: 2048
            application:
              $ref: '#/components/schemas/rbmOpenUrlEnum'
            webviewViewMode:
              $ref: '#/components/schemas/rbmWebViewEnum'
          required:
            - url
    multiChannelFullActions:
      type: array
      description: An array of suggested actions for the recipient.
      items:
        $ref: '#/components/schemas/multiChannelAction'
      maxItems: 11
    multiChannelAction:
      anyOf:
        - $ref: '#/components/schemas/rbmActionBase'
        - $ref: '#/components/schemas/rbmActionDial'
        - $ref: '#/components/schemas/rbmActionViewLocation'
        - $ref: '#/components/schemas/multiChannelActionCalendarEvent'
        - $ref: '#/components/schemas/rbmActionOpenUrl'
      discriminator:
        propertyName: type
        mapping:
          REPLY: '#/components/schemas/rbmActionBase'
          DIAL_PHONE: '#/components/schemas/rbmActionDial'
          SHOW_LOCATION: '#/components/schemas/rbmActionViewLocation'
          CREATE_CALENDAR_EVENT: '#/components/schemas/multiChannelActionCalendarEvent'
          OPEN_URL: '#/components/schemas/rbmActionOpenUrl'
          REQUEST_LOCATION: '#/components/schemas/rbmActionBase'
    multiChannelChannelListObjectBase:
      type: object
      properties:
        from:
          $ref: '#/components/schemas/multiChannelSenderId'
        applicationId:
          $ref: '#/components/schemas/applicationId'
        channel:
          $ref: '#/components/schemas/multiChannelMessageChannelEnum'
      required:
        - from
        - applicationId
        - channel
    multiChannelChannelListRBMObject:
      allOf:
        - $ref: '#/components/schemas/multiChannelChannelListObjectBase'
        - type: object
          properties:
            content:
              description: The content of the message.
              oneOf:
                - $ref: '#/components/schemas/rbmMessageContentText'
                - $ref: '#/components/schemas/rbmMessageMedia'
                - $ref: '#/components/schemas/rbmMessageContentRichCard'
      required:
        - content
    multiChannelChannelListSMSObject:
      allOf:
        - $ref: '#/components/schemas/multiChannelChannelListObjectBase'
        - type: object
          properties:
            content:
              $ref: '#/components/schemas/smsMessageContent'
      required:
        - content
    multiChannelChannelListMMSObject:
      allOf:
        - $ref: '#/components/schemas/multiChannelChannelListObjectBase'
        - type: object
          properties:
            content:
              $ref: '#/components/schemas/mmsMessageContent'
      required:
        - content
    multiChannelChannelListRBMResponseObject:
      allOf:
        - $ref: '#/components/schemas/multiChannelChannelListRBMObject'
        - $ref: '#/components/schemas/multiChannelChannelListOwnerObject'
    multiChannelChannelListSMSResponseObject:
      allOf:
        - $ref: '#/components/schemas/multiChannelChannelListSMSObject'
        - $ref: '#/components/schemas/multiChannelChannelListOwnerObject'
    multiChannelChannelListMMSResponseObject:
      allOf:
        - $ref: '#/components/schemas/multiChannelChannelListMMSObject'
        - $ref: '#/components/schemas/multiChannelChannelListOwnerObject'
    multiChannelChannelListRequestObject:
      anyOf:
        - $ref: '#/components/schemas/multiChannelChannelListRBMObject'
        - $ref: '#/components/schemas/multiChannelChannelListSMSObject'
        - $ref: '#/components/schemas/multiChannelChannelListMMSObject'
      discriminator:
        propertyName: channel
        mapping:
          RBM: '#/components/schemas/multiChannelChannelListRBMObject'
          SMS: '#/components/schemas/multiChannelChannelListSMSObject'
          MMS: '#/components/schemas/multiChannelChannelListMMSObject'
    multiChannelChannelListOwnerObject:
      type: object
      properties:
        owner:
          type: string
          description: >-
            The Bandwidth senderId associated with the message. Identical to
            'from'.
      required:
        - owner
    multiChannelChannelListResponseObject:
      anyOf:
        - $ref: '#/components/schemas/multiChannelChannelListRBMResponseObject'
        - $ref: '#/components/schemas/multiChannelChannelListSMSResponseObject'
        - $ref: '#/components/schemas/multiChannelChannelListMMSResponseObject'
      discriminator:
        propertyName: channel
        mapping:
          RBM: '#/components/schemas/multiChannelChannelListRBMResponseObject'
          SMS: '#/components/schemas/multiChannelChannelListSMSResponseObject'
          MMS: '#/components/schemas/multiChannelChannelListMMSResponseObject'
    multiChannelMessageRequest:
      description: Multi-Channel Message Request
      type: object
      properties:
        to:
          $ref: '#/components/schemas/multiChannelDestination'
        channelList:
          type: array
          description: >-
            A list of message bodies. The messages will be attempted in the
            order they are listed. Once a message sends successfully, the others
            will be ignored.
          items:
            $ref: '#/components/schemas/multiChannelChannelListRequestObject'
          maxItems: 4
        tag:
          $ref: '#/components/schemas/tag'
        priority:
          $ref: '#/components/schemas/priorityEnum'
        expiration:
          $ref: '#/components/schemas/expiration'
      required:
        - to
        - channelList
    multiChannelMessageResponseData:
      description: The data returned in a multichannel message response.
      type: object
      properties:
        id:
          $ref: '#/components/schemas/id'
        time:
          description: The time the message was received by the Bandwidth API.
          type: string
          format: date-time
          example: 2025-01-01T18:20:16.000Z
        direction:
          $ref: '#/components/schemas/messageDirectionEnum'
        to:
          $ref: '#/components/schemas/multiChannelDestinations'
        channelList:
          type: array
          description: >-
            A list of message bodies. The messages will be attempted in the
            order they are listed. Once a message sends successfully, the others
            will be ignored.
          items:
            $ref: '#/components/schemas/multiChannelChannelListResponseObject'
          maxItems: 4
        tag:
          $ref: '#/components/schemas/tag'
        priority:
          $ref: '#/components/schemas/priorityEnum'
        expiration:
          $ref: '#/components/schemas/expiration'
      required:
        - id
        - time
        - direction
        - to
        - channelList
    multiChannelMessageContent:
      description: The structure of the content field of a multichannel message.
      type: object
      properties:
        text:
          type: string
        media:
          $ref: '#/components/schemas/rbmMessageContentFile'
    rbmSuggestionResponse:
      type: object
      properties:
        text:
          type: string
          description: The text associated with the suggestion response.
          example: Yes, I would like to proceed
        postbackData:
          $ref: '#/components/schemas/rbmActionPostbackData'
    rbmLocationResponse:
      type: object
      properties:
        latitude:
          type: string
          format: double
          description: The latitude of the client's location.
          example: '37.7749'
        longitude:
          type: string
          format: double
          description: The longitude of the client's location.
          example: '-122.4194'
    callback:
      description: >-
        Callbacks are divided into two types based on direction of the related
        message:

        - `statusCallback` indicates status of an outbound MT SMS, MMS, or RBM
        message.

        - `inboundCallback` indicates an inbound MO message or a multichannel
        message client's response to a suggestion or location request.
      type: object
      oneOf:
        - $ref: '#/components/schemas/statusCallback'
        - $ref: '#/components/schemas/inboundCallback'
      discriminator:
        propertyName: type
        mapping:
          message-sent: '#/components/schemas/statusCallback'
          message-delivered: '#/components/schemas/statusCallback'
          message-failed: '#/components/schemas/statusCallback'
          message-read: '#/components/schemas/statusCallback'
          message-received: '#/components/schemas/inboundCallback'
          request-location-response: '#/components/schemas/inboundCallback'
          suggestion-response: '#/components/schemas/inboundCallback'
    statusCallback:
      type: object
      description: >-
        Represents a status callback for an outbound MT SMS or MMS or RBM
        message.
      properties:
        time:
          type: string
          format: date-time
          example: 2024-12-02T20:15:57.278Z
        eventTime:
          type: string
          description: >-
            Represents the time at which the message was read, for
            `message-read` callbacks.
          format: date-time
          example: 2024-12-02T20:15:58.278Z
        type:
          $ref: '#/components/schemas/statusCallbackTypeEnum'
        to:
          type: string
          description: >-
            The destination phone number the message was sent to.

            For status callbacks, this the the Bandwidth user's client phone
            number.
          example: '+15552223333'
        description:
          type: string
          description: A detailed description of the event described by the callback.
          example: Message delivered to carrier.
        message:
          $ref: '#/components/schemas/statusCallbackMessage'
        errorCode:
          type: integer
          description: Optional error code, applicable only when type is `message-failed`.
          example: 4405
        carrierName:
          $ref: '#/components/schemas/carrierName'
      required:
        - time
        - type
        - to
        - description
        - message
    inboundCallback:
      type: object
      description: Represents an inbound callback.
      properties:
        time:
          type: string
          format: date-time
          example: 2024-12-02T20:15:57.278Z
        type:
          $ref: '#/components/schemas/inboundCallbackTypeEnum'
        to:
          type: string
          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'
        description:
          type: string
          description: A detailed description of the event described by the callback.
          example: Incoming message received
        message:
          $ref: '#/components/schemas/inboundCallbackMessage'
        carrierName:
          $ref: '#/components/schemas/carrierName'
      required:
        - time
        - type
        - to
        - description
        - message
    statusCallbackTypeEnum:
      type: string
      description: >-
        The possible status callbacks when sending an MT SMS or MMS or RBM
        message:

        - `message-sending` indicates that Bandwidth is sending the message to
        the upstream provider.

        - `message-delivered` indicates that the message was successfully sent.

        - `message-failed` indicates that the message could not be sent to the
        intended recipient.

        - `message-read` indicates that the RBM message was read by the
        recipient.
      enum:
        - message-sending
        - message-delivered
        - message-failed
        - message-read
      example: message-delivered
    inboundCallbackTypeEnum:
      type: string
      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
        - suggestion-response
      example: message-received
    statusCallbackMessage:
      description: Message payload schema within a callback
      type: object
      properties:
        id:
          type: string
          description: A unique identifier of the message.
          example: 1661365814859loidf7mcwd4qacn7
        owner:
          type: string
          description: >-
            The Bandwidth phone number or alphanumeric identifier associated
            with the message.
          example: '+15553332222'
        applicationId:
          $ref: '#/components/schemas/applicationId'
        time:
          type: string
          format: date-time
          example: 2024-12-02T20:15:57.666Z
        segmentCount:
          $ref: '#/components/schemas/segmentCount'
        direction:
          $ref: '#/components/schemas/messageDirectionEnum'
        to:
          description: The phone number recipients of the message.
          uniqueItems: true
          type: array
          items:
            type: string
          example:
            - '+15552223333'
        from:
          type: string
          description: >-
            The Bandwidth phone number or alphanumeric identifier the message
            was sent from.
          example: '+15553332222'
        text:
          type: string
          example: Hello world
        tag:
          $ref: '#/components/schemas/tag'
        media:
          type: array
          description: Optional media, not applicable for sms
          items:
            type: string
            format: uri
          example:
            - https://dev.bandwidth.com/images/bandwidth-logo.png
            - https://dev.bandwidth.com/images/github_logo.png
        priority:
          $ref: '#/components/schemas/priorityEnum'
        channel:
          $ref: '#/components/schemas/multiChannelMessageChannelEnum'
      required:
        - id
        - owner
        - applicationId
        - time
        - segmentCount
        - direction
        - to
        - from
    inboundCallbackMessage:
      allOf:
        - $ref: '#/components/schemas/statusCallbackMessage'
        - type: object
          properties:
            content:
              $ref: '#/components/schemas/multiChannelMessageContent'
            suggestionResponse:
              $ref: '#/components/schemas/rbmSuggestionResponse'
            locationResponse:
              $ref: '#/components/schemas/rbmLocationResponse'
      required:
        - id
        - owner
        - applicationId
        - time
        - segmentCount
        - direction
        - to
        - from
    callbackMethodEnum:
      type: string
      nullable: true
      default: POST
      enum:
        - GET
        - POST
      description: >-
        The HTTP method to use to deliver the callback. GET or POST. Default
        value is POST.
      example: POST
    redirectMethodEnum:
      type: string
      nullable: true
      default: POST
      enum:
        - GET
        - POST
      description: >-
        The HTTP method to use for the request to `redirectUrl`. GET

        or POST. Default value is POST.<br><br>Not allowed if `state` is
        `completed`.
      example: POST
    recordingStateEnum:
      type: string
      enum:
        - paused
        - recording
      description: |-
        The recording state. Possible values:

        `paused` to pause an active recording

        `recording` to resume a paused recording
      example: paused
    callDirectionEnum:
      type: string
      enum:
        - inbound
        - outbound
      description: The direction of the call.
      example: inbound
    fileFormatEnum:
      type: string
      enum:
        - mp3
        - wav
      description: The format that the recording is stored in.
      example: wav
    callStateEnum:
      nullable: true
      type: string
      default: active
      enum:
        - active
        - completed
      description: >-
        The call state. Possible values:<br>`active` to redirect the

        call (default)<br>`completed` to hang up the call if it is answered,
        cancel

        it if it is an unanswered outbound call, or reject it if it an
        unanswered

        inbound call
      example: completed
    conferenceStateEnum:
      nullable: true
      type: string
      default: active
      enum:
        - active
        - completed
      description: >-
        Setting the conference state to `completed` ends the conference and
        ejects all members.
      example: completed
    machineDetectionModeEnum:
      type: string
      default: async
      enum:
        - sync
        - async
      description: >-
        The machine detection mode. If set to 'async', the detection

        result will be sent in a 'machineDetectionComplete' callback. If set to

        'sync', the 'answer' callback will wait for the machine detection to
        complete

        and will include its result.
      example: async
    callTranscriptionDetectedLanguageEnum:
      type: string
      enum:
        - en-US
        - es-US
        - fr-FR
      description: The detected language for this transcription.
      example: en-US
    callTranscriptionTrackEnum:
      type: string
      enum:
        - inbound
        - outbound
      description: Which `track` this transcription is derived from.
      example: inbound
    createCall:
      type: object
      required:
        - answerUrl
        - applicationId
        - from
        - to
      properties:
        to:
          type: string
          description: >-
            The destination to call (must be an E.164 formatted number

            (e.g. `+15555551212`) or a SIP URI (e.g.
            `sip:user@server.example`)).
          example: '+19195551234'
        from:
          type: string
          description: >-
            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.
          example: '+15555551212'
        privacy:
          nullable: true
          type: boolean
          description: >-
            Hide the calling number. The `displayName` field can be used to
            customize the displayed name.
          example: false
        displayName:
          nullable: true
          type: string
          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`.
          maxLength: 256
          example: John Doe
        uui:
          nullable: true
          type: string
          example: >-
            eyJhbGciOiJIUzI1NiJ9.WyJoaSJd.-znkjYyCkgz4djmHUPSXl9YrJ6Nix_XvmlwKGFh5ERM;encoding=jwt,aGVsbG8gd29ybGQ;encoding=base64
          description: >-
            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.
        applicationId:
          type: string
          description: The id of the application associated with the `from` number.
          example: 1234-qwer-5679-tyui
        answerUrl:
          type: string
          format: uri
          description: >-
            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`.
          maxLength: 2048
          example: https://www.myCallbackServer.example/webhooks/answer
        answerMethod:
          $ref: '#/components/schemas/callbackMethodEnum'
        username:
          type: string
          nullable: true
          description: Basic auth username.
          maxLength: 1024
          example: mySecretUsername
        password:
          type: string
          nullable: true
          description: Basic auth password.
          maxLength: 1024
          example: mySecretPassword1!
        answerFallbackUrl:
          nullable: true
          type: string
          format: uri
          description: >-
            A fallback url which, if provided, will be used to retry the

            `answer` webhook delivery in case `answerUrl` fails to respond


            Must use `https` if specifying `fallbackUsername` and
            `fallbackPassword`.
          maxLength: 2048
          example: https://www.myFallbackServer.example/webhooks/answer
        answerFallbackMethod:
          $ref: '#/components/schemas/callbackMethodEnum'
        fallbackUsername:
          type: string
          nullable: true
          description: Basic auth username.
          maxLength: 1024
          example: mySecretUsername
        fallbackPassword:
          type: string
          nullable: true
          description: Basic auth password.
          maxLength: 1024
          example: mySecretPassword1!
        disconnectUrl:
          nullable: true
          type: string
          format: uri
          description: >-
            The URL to send the <a
            href='/docs/voice/webhooks/disconnect'>Disconnect</a> event to when
            the call ends. This event does not expect a BXML response.
          maxLength: 2048
          example: https://www.myCallbackServer.example/webhooks/disconnect
        disconnectMethod:
          $ref: '#/components/schemas/callbackMethodEnum'
        callTimeout:
          nullable: true
          type: number
          format: double
          description: >-
            The timeout (in seconds) for the callee to answer the call

            after it starts ringing. If the call does not start ringing within
            30s,

            the call will be cancelled regardless of this value.  Can be any
            numeric

            value (including decimals) between 1 and 300.
          minimum: 1
          maximum: 300
          default: 30
          example: 30
        callbackTimeout:
          nullable: true
          type: number
          format: double
          description: >-
            This is the timeout (in seconds) to use when delivering webhooks

            for the call. Can be any numeric value (including decimals) between
            1

            and 25.
          minimum: 1
          maximum: 25
          default: 15
          example: 15
        machineDetection:
          $ref: '#/components/schemas/machineDetectionConfiguration'
        priority:
          nullable: true
          type: integer
          minimum: 1
          maximum: 5
          default: 5
          description: >-
            The priority of this call over other calls from your account. For
            example, if during a call

            your application needs to place a new call and bridge it with the
            current

            call, you might want to create the call with priority 1 so that it
            will

            be the next call picked off your queue, ahead of other less time
            sensitive

            calls. A lower value means higher priority, so a priority 1 call
            takes

            precedence over a priority 2 call.
          example: 5
        tag:
          nullable: true
          type: string
          description: >-
            A custom string that will be sent with all webhooks for this

            call unless overwritten by a future <a
            href='/docs/voice/bxml/tag'>`<Tag>`</a>

            verb or `tag` attribute on another verb, or cleared.


            May be cleared by setting `tag=""`


            Max length 256 characters.
          maxLength: 256
          example: arbitrary text here
    createCallResponse:
      type: object
      required:
        - accountId
        - answerMethod
        - answerUrl
        - applicationId
        - callId
        - callUrl
        - disconnectMethod
        - from
        - to
      properties:
        applicationId:
          type: string
          example: 04e88489-df02-4e34-a0ee-27a91849555f
          description: The id of the application associated with the `from` number.
        accountId:
          type: string
          example: '9900000'
          description: The bandwidth account ID associated with the call.
        callId:
          type: string
          example: c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
          description: Programmable Voice API Call ID.
        to:
          type: string
          example: '+19195551234'
          description: Recipient of the outgoing call.
        from:
          type: string
          example: '+19195554321'
          description: Phone number that created the outbound call.
        enqueuedTime:
          nullable: true
          type: string
          format: date-time
          description: The time at which the call was accepted into the queue.
          example: '2022-06-16T13:15:07.160Z'
        callUrl:
          type: string
          format: uri
          example: >-
            https://voice.bandwidth.com/api/v2/accounts/9900000/calls/c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
          description: The URL to update this call's state.
        callTimeout:
          type: number
          format: double
          example: 30
          description: >-
            The timeout (in seconds) for the callee to answer the call after it
            starts ringing.
        callbackTimeout:
          type: number
          format: double
          example: 15
          description: >-
            This is the timeout (in seconds) to use when delivering webhooks for
            the call.
        tag:
          nullable: true
          type: string
          example: My custom tag value
          description: Custom tag value.
        answerMethod:
          $ref: '#/components/schemas/callbackMethodEnum'
        answerUrl:
          type: string
          format: uri
          example: https://myServer.example/bandwidth/webhooks/answer
          description: URL to deliver the `answer` event webhook.
        answerFallbackMethod:
          $ref: '#/components/schemas/callbackMethodEnum'
        answerFallbackUrl:
          nullable: true
          type: string
          format: uri
          example: https://myFallbackServer.example/bandwidth/webhooks/answer
          description: Fallback URL to deliver the `answer` event webhook.
        disconnectMethod:
          $ref: '#/components/schemas/callbackMethodEnum'
        disconnectUrl:
          nullable: true
          type: string
          format: uri
          example: https://myServer.example/bandwidth/webhooks/disconnect
          description: URL to deliver the `disconnect` event webhook.
        username:
          type: string
          nullable: true
          description: Basic auth username.
          maxLength: 1024
          example: mySecretUsername
        password:
          type: string
          nullable: true
          description: Basic auth password.
          maxLength: 1024
          example: mySecretPassword1!
        fallbackUsername:
          type: string
          nullable: true
          description: Basic auth username.
          maxLength: 1024
          example: mySecretUsername
        fallbackPassword:
          type: string
          nullable: true
          description: Basic auth password.
          maxLength: 1024
          example: mySecretPassword1!
        priority:
          nullable: true
          type: integer
          example: 5
          description: The priority of this call over other calls from your account.
    callState:
      type: object
      properties:
        applicationId:
          type: string
          description: The application id associated with the call.
          example: 04e88489-df02-4e34-a0ee-27a91849555f
        accountId:
          type: string
          description: The account id associated with the call.
          example: '9900000'
        callId:
          type: string
          description: The programmable voice API call ID.
          example: c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
        parentCallId:
          nullable: true
          type: string
          description: >-
            The A-leg call id, set only if this call is the B-leg of a
            [`<Transfer>`](/docs/voice/bxml/transfer).
          example: c-25ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
        to:
          type: string
          description: >-
            The phone number that received the call, in E.164 format (e.g.
            +15555555555), or if the call was to a SIP URI, the SIP URI.
          example: '+19195551234'
        from:
          type: string
          description: >-
            The phone number that made the call, in E.164 format (e.g.
            +15555555555).
          example: '+19195554321'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        state:
          description: >-
            The current state of the call. Current possible values are

            `queued`, `initiated`, `answered` and `disconnected`. Additional
            states

            may be added in the future, so your application must be tolerant of
            unknown

            values.
          type: string
          example: disconnected
        stirShaken:
          nullable: true
          type: object
          description: >-
            For inbound calls, the Bandwidth STIR/SHAKEN implementation will
            verify the information provided in the inbound invite request
            `Identity` header.

            The verification status is stored in the call state `stirShaken`
            property as follows.


            | Property          | Description |

            |:------------------|:------------|

            | verstat | (optional) The verification status indicating whether
            the verification was successful or not. Possible values are
            `TN-Validation-Passed` or `TN-Validation-Failed`. |

            | attestationIndicator | (optional) The attestation level verified
            by Bandwidth. Possible values are `A` (full), `B` (partial) or `C`
            (gateway). |

            | originatingId | (optional) A unique origination identifier. |


            Note that these are common properties but that the `stirShaken`
            object is free form and can contain other key-value pairs.


            More information: [Understanding
            STIR/SHAKEN](https://www.bandwidth.com/regulations/stir-shaken).
          additionalProperties:
            type: string
          example:
            verstat: TN-Validation-Passed
            attestationIndicator: A
            originatingId: abc123
        identity:
          nullable: true
          type: string
          description: >-
            The value of the `Identity` header from the inbound invite

            request. Only present for inbound calls and if the account is
            configured

            to forward this header.
          example: >-
            eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9idy1zaGFrZW4tY2VydC1wdWIuczMuYW1hem9uYXdzLmNvbS9iYW5kd2lkdGgtc2hha2VuLWNlcnRfMjAyMzA3MTYucGVtIn0.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxOTg0MjgyMDI4MCJdfSwiaWF0IjoxNjU2NTM0MzM2LCJvcmlnIjp7InRuIjoiMTkxOTQ0NDI2ODMifSwib3JpZ2lkIjoiNDk0NTlhOGEtNDJmNi0zNTFjLTkzNjEtYWRmNTdhOWUwOGNhIn0.56un9sRw_uH-sbJvnUsqdevlVxbOVjn8MVlGTlBMicjaZuRRwxfiNp-C9zYCMKTTCbc-QdYPN05F61XNVN4D3w;info=<https://bw-shaken-cert-pub.s3.amazonaws.com/bandwidth-shaken-cert_20230716.pem>;alg=ES256;ppt=shaken
        enqueuedTime:
          nullable: true
          type: string
          format: date-time
          description: The time this call was placed in queue.
          example: '2022-06-16T13:15:07.160Z'
        startTime:
          nullable: true
          type: string
          format: date-time
          description: >-
            The time the call was initiated, in ISO 8601 format. `null` if the
            call is still in your queue.
          example: '2022-06-16T13:15:07.160Z'
        answerTime:
          nullable: true
          type: string
          format: date-time
          description: >-
            Populated once the call has been answered, with the time in ISO 8601
            format.
          example: '2022-06-16T13:15:18.126Z'
        endTime:
          nullable: true
          type: string
          format: date-time
          description: Populated once the call has ended, with the time in ISO 8601 format.
          example: '2022-06-16T13:15:18.314Z'
        disconnectCause:
          nullable: true
          type: string
          description: >-
            | Cause | Description |

            |:------|:------------|

            | `hangup`| One party hung up the call, a
            [`<Hangup>`](../../bxml/verbs/hangup.md) verb was executed, or there
            was no more BXML to execute; it indicates that the call ended
            normally. |

            | `busy` | Callee was busy. |

            | `timeout` | Call wasn't answered before the `callTimeout` was
            reached. |

            | `cancel` | Call was cancelled by its originator while it was
            ringing. |

            | `rejected` | Call was rejected by the callee. |

            | `callback-error` | BXML callback couldn't be delivered to your
            callback server. |

            | `invalid-bxml` | Invalid BXML was returned in response to a
            callback. |

            | `application-error` | An unsupported action was tried on the call,
            e.g. trying to play a .ogg audio. |

            | `account-limit` | Account rate limits were reached. |

            | `node-capacity-exceeded` | System maximum capacity was reached. |

            | `error` | Some error not described in any of the other causes
            happened on the call. |

            | `unknown` | Unknown error happened on the call. |


            Note: This list is not exhaustive and other values can appear in the
            future.
        errorMessage:
          nullable: true
          type: string
          description: >-
            Populated only if the call ended with an error, with text explaining
            the reason.
          example: null
        errorId:
          nullable: true
          type: string
          description: >-
            Populated only if the call ended with an error, with a Bandwidth
            internal id that references the error event.
          example: null
        lastUpdate:
          type: string
          format: date-time
          description: The last time the call had a state update, in ISO 8601 format.
          example: '2022-06-16T13:15:18.314Z'
    updateCall:
      type: object
      properties:
        state:
          $ref: '#/components/schemas/callStateEnum'
        redirectUrl:
          description: |-
            The URL to send the [Redirect](/docs/voice/bxml/redirect) event
            to which will provide new BXML.

            Required if `state` is `active`.

            Not allowed if `state` is `completed`.
          nullable: true
          type: string
          format: uri
          example: https://myServer.example/bandwidth/webhooks/redirect
        redirectMethod:
          $ref: '#/components/schemas/redirectMethodEnum'
        username:
          type: string
          nullable: true
          description: Basic auth username.
          maxLength: 1024
          example: mySecretUsername
        password:
          type: string
          nullable: true
          description: Basic auth password.
          maxLength: 1024
          example: mySecretPassword1!
        redirectFallbackUrl:
          nullable: true
          type: string
          format: uri
          description: |-
            A fallback url which, if provided, will be used to retry the
            redirect callback delivery in case `redirectUrl` fails to respond.
          example: https://myFallbackServer.example/bandwidth/webhooks/redirect
        redirectFallbackMethod:
          $ref: '#/components/schemas/redirectMethodEnum'
        fallbackUsername:
          type: string
          nullable: true
          description: Basic auth username.
          maxLength: 1024
          example: mySecretUsername
        fallbackPassword:
          type: string
          nullable: true
          description: Basic auth password.
          maxLength: 1024
          example: mySecretPassword1!
        tag:
          nullable: true
          type: string
          description: >-
            A custom string that will be sent with this and all future

            callbacks unless overwritten by a future `tag` attribute or
            [`<Tag>`](/docs/voice/bxml/tag)

            verb, or cleared.


            May be cleared by setting `tag=""`.


            Max length 256 characters.


            Not allowed if `state` is `completed`.
          maxLength: 256
          example: My Custom Tag
    updateCallRecording:
      type: object
      required:
        - state
      properties:
        state:
          $ref: '#/components/schemas/recordingStateEnum'
    accountStatistics:
      type: object
      properties:
        currentCallQueueSize:
          type: integer
          description: The number of calls currently enqueued.
          example: 0
        maxCallQueueSize:
          type: integer
          description: >-
            The maximum size of the queue before outgoing calls start being
            rejected.
          example: 900
    callRecordingMetadata:
      type: object
      properties:
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        accountId:
          $ref: '#/components/schemas/accountId'
        callId:
          $ref: '#/components/schemas/callId'
        parentCallId:
          $ref: '#/components/schemas/parentCallId'
        recordingId:
          $ref: '#/components/schemas/recordingId'
        to:
          $ref: '#/components/schemas/to'
        from:
          $ref: '#/components/schemas/from'
        transferCallerId:
          $ref: '#/components/schemas/transferCallerId'
        transferTo:
          $ref: '#/components/schemas/transferTo'
        duration:
          $ref: '#/components/schemas/duration'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        channels:
          $ref: '#/components/schemas/channels'
        startTime:
          $ref: '#/components/schemas/startTime'
        endTime:
          $ref: '#/components/schemas/endTime'
        fileFormat:
          $ref: '#/components/schemas/fileFormatEnum'
        status:
          $ref: '#/components/schemas/status'
        mediaUrl:
          $ref: '#/components/schemas/mediaUrl'
        transcription:
          $ref: '#/components/schemas/recordingTranscriptionMetadata'
        recordingName:
          $ref: '#/components/schemas/recordingName'
    conference:
      type: object
      properties:
        id:
          type: string
          description: The Bandwidth-generated conference ID.
          example: conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9
        name:
          type: string
          description: The name of the conference, as specified by your application.
          example: my-conference-name
        createdTime:
          type: string
          format: date-time
          description: The time the conference was initiated, in ISO 8601 format.
          example: '2022-06-17T22:19:40.375Z'
        completedTime:
          nullable: true
          type: string
          format: date-time
          description: The time the conference was terminated, in ISO 8601 format.
          example: '2022-06-17T22:20:00.000Z'
        conferenceEventUrl:
          nullable: true
          type: string
          format: uri
          description: The URL to send the conference-related events.
          example: https://myServer.example/bandwidth/webhooks/conferenceEvent
        conferenceEventMethod:
          $ref: '#/components/schemas/callbackMethodEnum'
        tag:
          nullable: true
          type: string
          description: >-
            The custom string attached to the conference that will be sent with
            callbacks.
          example: my custom tag
        activeMembers:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/conferenceMember'
          description: >-
            A list of active members of the conference. Omitted if this

            is a response to the [Get Conferences
            endpoint](/apis/voice#tag/Conferences/operation/listConferences).
    updateConference:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/conferenceStateEnum'
        redirectUrl:
          nullable: true
          type: string
          format: uri
          description: >-
            The URL to send the
            [conferenceRedirect](/docs/voice/webhooks/conferenceRedirect)

            event which will provide new BXML. Not allowed if `state` is
            `completed`,

            but required if `state` is `active`.
          example: https://myServer.example/bandwidth/webhooks/conferenceRedirect
        redirectMethod:
          $ref: '#/components/schemas/redirectMethodEnum'
        username:
          type: string
          nullable: true
          description: Basic auth username.
          maxLength: 1024
          example: mySecretUsername
        password:
          type: string
          nullable: true
          description: Basic auth password.
          maxLength: 1024
          example: mySecretPassword1!
        redirectFallbackUrl:
          nullable: true
          type: string
          format: uri
          description: >-
            A fallback url which, if provided, will be used to retry the

            `conferenceRedirect` webhook delivery in case `redirectUrl` fails to
            respond.  Not

            allowed if `state` is `completed`.
          example: >-
            https://myFallbackServer.example/bandwidth/webhooks/conferenceRedirect
        redirectFallbackMethod:
          $ref: '#/components/schemas/redirectMethodEnum'
        fallbackUsername:
          type: string
          nullable: true
          description: Basic auth username.
          maxLength: 1024
          example: mySecretUsername
        fallbackPassword:
          type: string
          nullable: true
          description: Basic auth password.
          maxLength: 1024
          example: mySecretPassword1!
    conferenceMember:
      type: object
      properties:
        callId:
          $ref: '#/components/schemas/callId'
        conferenceId:
          $ref: '#/components/schemas/conferenceId'
        memberUrl:
          type: string
          format: uri
          description: >-
            A URL that may be used to retrieve information about or update

            the state of this conference member. This is the URL of this
            member's

            [Get Conference
            Member](/apis/voice-apis/voice/#tag/Conferences/operation/getConferenceMember)
            endpoint

            and [Modify Conference
            Member](/apis/voice-apis/voice/#tag/Conferences/operation/updateConferenceMember)

            endpoint.
          example: >-
            https://voice.bandwidth.com/api/v2/accounts/9900000/conferences/conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9/members/c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
        mute:
          type: boolean
          description: >-
            Whether or not this member is currently muted. Members who are muted
            are still able to hear other participants.


            If used in a PUT request, updates this member's mute status. Has no
            effect if omitted.
          example: false
        hold:
          type: boolean
          description: >-
            Whether or not this member is currently on hold. Members who are on
            hold are not able to hear or speak in the conference.


            If used in a PUT request, updates this member's hold status. Has no
            effect if omitted.
          example: false
        callIdsToCoach:
          nullable: true
          type: array
          items:
            type: string
          description: >-
            If this member had a value set for `callIdsToCoach` in its
            [Conference](/docs/voice/bxml/conference) verb or this list was
            added with a previous PUT request to modify the member, this is that
            list of calls.


            If present in a PUT request, modifies the calls that this member is
            coaching. Has no effect if omitted. See the documentation for the
            [Conference](/docs/voice/bxml/conference) verb for more details
            about coaching.

            Note that this will not add the matching calls to the conference;
            each call must individually execute a Conference verb to join.
          example:
            - c-25ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
    updateConferenceMember:
      type: object
      properties:
        mute:
          type: boolean
          description: >-
            Whether or not this member is currently muted. Members who are muted
            are still able to hear other participants.


            Updates this member's mute status. Has no effect if omitted.
          example: false
        hold:
          type: boolean
          description: >-
            Whether or not this member is currently on hold. Members who are on
            hold are not able to hear or speak in the conference.


            Updates this member's hold status. Has no effect if omitted.
          example: false
        callIdsToCoach:
          nullable: true
          type: array
          items:
            type: string
          description: >-
            If this member had a value set for `callIdsToCoach` in its
            [Conference](/docs/voice/bxml/conference) verb or this list was
            added with a previous PUT request to modify the member, this is that
            list of calls.


            Modifies the calls that this member is coaching. Has no effect if
            omitted. See the documentation for the
            [Conference](/docs/voice/bxml/conference) verb for more details
            about coaching.


            Note that this will not add the matching calls to the conference;
            each call must individually execute a Conference verb to join.
          example:
            - c-25ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
    conferenceRecordingMetadata:
      type: object
      properties:
        accountId:
          $ref: '#/components/schemas/accountId'
        conferenceId:
          $ref: '#/components/schemas/conferenceId'
        name:
          $ref: '#/components/schemas/name'
        recordingId:
          $ref: '#/components/schemas/recordingId'
        duration:
          $ref: '#/components/schemas/duration'
        channels:
          $ref: '#/components/schemas/channels'
        startTime:
          $ref: '#/components/schemas/startTime'
        endTime:
          $ref: '#/components/schemas/endTime'
        fileFormat:
          $ref: '#/components/schemas/fileFormatEnum'
        status:
          $ref: '#/components/schemas/status'
        mediaUrl:
          $ref: '#/components/schemas/mediaUrl'
        recordingName:
          $ref: '#/components/schemas/recordingName'
    machineDetectionConfiguration:
      type: object
      description: >-
        The machine detection request used to perform <a
        href='/docs/voice/guides/machineDetection'>machine detection</a> on the
        call. Currently, there is an issue where decimal values are not getting
        processed correctly. Please use whole number values. We are working to
        resolve this issue. Please contact Bandwidth Support if you need more
        information.
      properties:
        mode:
          $ref: '#/components/schemas/machineDetectionModeEnum'
        detectionTimeout:
          nullable: true
          type: number
          format: double
          description: >-
            The timeout used for the whole operation, in seconds. If no

            result is determined in this period, a callback with a `timeout`
            result

            is sent.
          default: 15
          example: 15
        silenceTimeout:
          nullable: true
          type: number
          format: double
          description: >-
            If no speech is detected in this period, a callback with a 'silence'
            result is sent.
          default: 10
          example: 10
        speechThreshold:
          nullable: true
          type: number
          format: double
          description: >-
            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'.
          default: 10
          example: 10
        speechEndThreshold:
          nullable: true
          type: number
          format: double
          description: >-
            Amount of silence (in seconds) before assuming the callee has
            finished speaking.
          default: 5
          example: 5
        machineSpeechEndThreshold:
          nullable: true
          type: number
          format: double
          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
        delayResult:
          nullable: true
          type: boolean
          description: >-
            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.
          default: false
          example: false
        callbackUrl:
          nullable: true
          description: >-
            The URL to send the 'machineDetectionComplete' webhook when the
            detection is completed. Only for 'async' mode.
          type: string
          format: uri
          maxLength: 2048
          example: https://myServer.example/bandwidth/webhooks/machineDetectionComplete
        callbackMethod:
          $ref: '#/components/schemas/callbackMethodEnum'
        username:
          type: string
          nullable: true
          description: Basic auth username.
          maxLength: 1024
          example: mySecretUsername
        password:
          type: string
          nullable: true
          description: Basic auth password.
          maxLength: 1024
          example: mySecretPassword1!
        fallbackUrl:
          nullable: true
          type: string
          format: uri
          description: >-
            A fallback URL which, if provided, will be used to retry the

            machine detection complete webhook delivery in case `callbackUrl`
            fails

            to respond
          maxLength: 2048
          example: >-
            https://myFallbackServer.example/bandwidth/webhooks/machineDetectionComplete
        fallbackMethod:
          $ref: '#/components/schemas/callbackMethodEnum'
        fallbackUsername:
          type: string
          nullable: true
          description: Basic auth username.
          maxLength: 1024
          example: mySecretUsername
        fallbackPassword:
          type: string
          nullable: true
          description: Basic auth password.
          maxLength: 1024
          example: mySecretPassword1!
    transcribeRecording:
      type: object
      properties:
        callbackUrl:
          type: string
          format: uri
          description: >-
            The URL to send the
            [TranscriptionAvailable](/docs/voice/webhooks/transcriptionAvailable)

            event to. You should not include sensitive or
            personally-identifiable

            information in the callbackUrl field! Always use the proper username
            and

            password fields for authorization.
          example: https://myServer.example/bandwidth/webhooks/transcriptionAvailable
        callbackMethod:
          $ref: '#/components/schemas/callbackMethodEnum'
        username:
          type: string
          nullable: true
          description: Basic auth username.
          maxLength: 1024
          example: mySecretUsername
        password:
          type: string
          nullable: true
          description: Basic auth password.
          maxLength: 1024
          example: mySecretPassword1!
        tag:
          $ref: '#/components/schemas/tag1'
        callbackTimeout:
          nullable: true
          type: number
          format: double
          minimum: 1
          maximum: 25
          default: 15
          description: >-
            This is the timeout (in seconds) to use when delivering the

            webhook to `callbackUrl`. Can be any numeric value (including
            decimals)

            between 1 and 25.
          example: 5.5
        detectLanguage:
          type: boolean
          nullable: true
          description: >-
            A boolean value to indicate that the recording may not be in
            English, and the transcription service will need to detect the
            dominant language the recording is in and transcribe accordingly.
            Current supported languages are English, French, and Spanish.
          default: false
          example: true
    recordingTranscriptions:
      type: object
      properties:
        transcripts:
          type: array
          items:
            $ref: '#/components/schemas/transcription'
    callTranscriptionMetadataList:
      type: array
      items:
        $ref: '#/components/schemas/callTranscriptionMetadata'
      example:
        - transcriptionId: t-3f758f24-c7a2fc78-7c91-401a-8b2e-e542f9c40d6b
          transcriptionName: live_transcription
          transcriptionUrl: >-
            https://voice.bandwidth.com/api/v2/accounts/9900000/calls/c-fef240ff-5cfc9091-8069-4863-a8c0-a4dcbbf1f1a4/transcriptions/t-3f758f24-c7a2fc78-7c91-401a-8b2e-e542f9c40d6b
    callTranscriptionMetadata:
      type: object
      properties:
        transcriptionId:
          type: string
          description: The programmable voice API transcription ID.
          example: t-3f758f24-c7a2fc78-7c91-401a-8b2e-e542f9c40d6b
        transcriptionName:
          type: string
          description: >-
            The programmable voice API transcription name. This name could be
            provided by the user when creating the transcription.
          example: live_transcription
        transcriptionUrl:
          type: string
          description: >-
            A URL that may be used to retrieve the transcription itself. This
            points to the

            [Get Call
            Transcription](/apis/voice-apis/voice/#tag/Transcriptions/operation/getRealTimeTranscription)
            endpoint.
          example: >-
            https://voice.bandwidth.com/api/v2/accounts/9900000/calls/c-fef240ff-5cfc9091-8069-4863-a8c0-a4dcbbf1f1a4/transcriptions/t-3f758f24-c7a2fc78-7c91-401a-8b2e-e542f9c40d6b
    callTranscriptionResponse:
      type: object
      properties:
        accountId:
          type: string
          description: The user account associated with the call.
          example: '9900000'
        callId:
          type: string
          description: The call id associated with the event.
          example: c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
        transcriptionId:
          type: string
          description: The programmable voice API transcription ID.
          example: t-3f758f24-c7a2fc78-7c91-401a-8b2e-e542f9c40d6b
        tracks:
          type: array
          items:
            $ref: '#/components/schemas/callTranscription'
          example:
            - detectedLanguage: en-US
              track: inbound
              transcript: Hello World! This is an example.
              confidence: 0.9
    callTranscription:
      type: object
      properties:
        detectedLanguage:
          $ref: '#/components/schemas/callTranscriptionDetectedLanguageEnum'
        track:
          $ref: '#/components/schemas/callTranscriptionTrackEnum'
        transcript:
          type: string
          description: The transcription itself.
          example: Hello World! This is an example.
        confidence:
          type: number
          format: double
          minimum: 0
          maximum: 1
          description: >-
            How confident the transcription engine was in transcribing the
            associated audio (from `0` to `1`).
          example: 0.9
    recordingTranscriptionMetadata:
      nullable: true
      type: object
      description: If the recording was transcribed, metadata about the transcription
      properties:
        id:
          type: string
          description: The unique transcription ID
          example: t-387bd648-18f3-4823-9d16-746bca0003c9
        status:
          $ref: '#/components/schemas/status'
        completedTime:
          type: string
          format: date-time
          description: The time that the transcription was completed
          example: '2022-06-13T18:46:29.715Z'
        url:
          type: string
          format: uri
          description: The URL of the [transcription](#operation/getCallTranscription)
          example: >-
            https://voice.bandwidth.com/api/v2/accounts/9900000/calls/c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85/recordings/r-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85/transcription
    voiceApiError:
      type: object
      properties:
        type:
          type: string
        description:
          type: string
        id:
          nullable: true
          type: string
    answerCallback:
      type: object
      description: >-
        The Answer event is sent to the answerUrl specified in the createCall
        request when an outbound call is answered.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        callId:
          $ref: '#/components/schemas/callId'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        enqueuedTime:
          $ref: '#/components/schemas/enqueuedTime'
        startTime:
          $ref: '#/components/schemas/startTime'
        answerTime:
          $ref: '#/components/schemas/answerTime'
        tag:
          $ref: '#/components/schemas/tag1'
        machineDetectionResult:
          $ref: '#/components/schemas/machineDetectionResult'
    bridgeCompleteCallback:
      type: object
      description: >-
        If the target call leaves the <Bridge>, then this callback is sent to
        the bridgeCompleteUrl, and the BXML returned in it is executed on the
        call. If this webhook is sent, the Bridge Target Complete webhook is NOT
        sent. This callback is also sent if any problem occurs that prevents the
        calls to be bridged.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        callId:
          $ref: '#/components/schemas/callId'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        enqueuedTime:
          $ref: '#/components/schemas/enqueuedTime'
        startTime:
          $ref: '#/components/schemas/startTime'
        answerTime:
          $ref: '#/components/schemas/answerTime'
        tag:
          $ref: '#/components/schemas/tag1'
        cause:
          $ref: '#/components/schemas/cause'
        errorMessage:
          $ref: '#/components/schemas/errorMessage'
        errorId:
          $ref: '#/components/schemas/errorId'
    bridgeTargetCompleteCallback:
      type: object
      description: >-
        If the originating call leaves the <Bridge>, then this callback is sent
        to the bridgeTargetCompleteUrl, and the BXML returned in it is executed
        on the target call. If this webhook is sent, the Bridge Complete webhook
        is NOT sent.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        callId:
          $ref: '#/components/schemas/callId'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        enqueuedTime:
          $ref: '#/components/schemas/enqueuedTime'
        startTime:
          $ref: '#/components/schemas/startTime'
        answerTime:
          $ref: '#/components/schemas/answerTime'
        tag:
          $ref: '#/components/schemas/tag1'
    conferenceCreatedCallback:
      type: object
      description: >-
        The Conference Created event is fired whenever a new conference that
        specified a callbackUrl is created. The response may be either empty or
        a BXML document. Only the following verbs are valid for conferences:
        PlayAudio, SpeakSentence, StartRecording, StopRecording, PauseRecording,
        ResumeRecording. Audio verbs will be heard by all members of the
        conference. Recordings capture audio from all members who are not muted
        or on hold, as well as any audio verbs that are played into the
        conference.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        conferenceId:
          $ref: '#/components/schemas/conferenceId'
        name:
          $ref: '#/components/schemas/name'
        tag:
          $ref: '#/components/schemas/tag1'
    conferenceRedirectCallback:
      type: object
      description: >-
        The Conference Redirect event is fired whenever an existing conference
        is modified via a POST request made to the /conferences/{conferenceId}
        endpoint. The response may be either empty or a BXML document. Only the
        following verbs are valid for conferences: PlayAudio, SpeakSentence,
        StartRecording, StopRecording, PauseRecording, ResumeRecording. Audio
        verbs will be heard by all members of the conference. Recordings capture
        audio from all members who are not muted or on hold, as well as any
        audio verbs that are played into the conference.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        conferenceId:
          $ref: '#/components/schemas/conferenceId'
        name:
          $ref: '#/components/schemas/name'
        tag:
          $ref: '#/components/schemas/tag1'
    conferenceMemberJoinCallback:
      type: object
      description: >-
        The Conference Member Join event is fired whenever a caller joins a
        conference that specified a callbackUrl. The response may be either
        empty or a BXML document. Only the following verbs are valid for
        conferences: PlayAudio, SpeakSentence, StartRecording, StopRecording,
        PauseRecording, ResumeRecording. Audio verbs will be heard by all
        members of the conference. Recordings capture audio from all members who
        are not muted or on hold, as well as any audio verbs that are played
        into the conference.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        conferenceId:
          $ref: '#/components/schemas/conferenceId'
        name:
          $ref: '#/components/schemas/name'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        callId:
          $ref: '#/components/schemas/callId'
        tag:
          $ref: '#/components/schemas/tag1'
    conferenceMemberExitCallback:
      type: object
      description: >-
        The Conference Member Exit event is fired whenever a caller exits a
        conference that specified a callbackUrl. The response may be either
        empty or a BXML document. Only the following verbs are valid for
        conferences: PlayAudio, SpeakSentence, StartRecording, StopRecording,
        PauseRecording, ResumeRecording. Audio verbs will be heard by all
        members of the conference. Recordings capture audio from all members who
        are not muted or on hold, as well as any audio verbs that are played
        into the conference.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        conferenceId:
          $ref: '#/components/schemas/conferenceId'
        name:
          $ref: '#/components/schemas/name'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        callId:
          $ref: '#/components/schemas/callId'
        tag:
          $ref: '#/components/schemas/tag1'
    conferenceCompletedCallback:
      type: object
      description: >-
        The Conference Completed event is fired when the last member leaves the
        conference. The response to this event may not contain BXML.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        conferenceId:
          $ref: '#/components/schemas/conferenceId'
        name:
          $ref: '#/components/schemas/name'
        tag:
          $ref: '#/components/schemas/tag1'
    conferenceRecordingAvailableCallback:
      type: object
      description: >-
        The Conference Recording Available event is sent after a conference
        recording has been processed. It indicates that the recording is
        available for download.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        conferenceId:
          $ref: '#/components/schemas/conferenceId'
        name:
          $ref: '#/components/schemas/name'
        accountId:
          $ref: '#/components/schemas/accountId'
        recordingId:
          $ref: '#/components/schemas/recordingId'
        channels:
          $ref: '#/components/schemas/channels'
        startTime:
          $ref: '#/components/schemas/startTime'
        endTime:
          $ref: '#/components/schemas/endTime'
        duration:
          $ref: '#/components/schemas/duration'
        fileFormat:
          $ref: '#/components/schemas/fileFormatEnum'
        mediaUrl:
          $ref: '#/components/schemas/mediaUrl'
        tag:
          $ref: '#/components/schemas/tag1'
        status:
          $ref: '#/components/schemas/status'
    disconnectCallback:
      type: object
      description: The Disconnect event is fired when a call ends, for any reason.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        callId:
          $ref: '#/components/schemas/callId'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        enqueuedTime:
          $ref: '#/components/schemas/enqueuedTime'
        startTime:
          $ref: '#/components/schemas/startTime'
        answerTime:
          $ref: '#/components/schemas/answerTime'
        endTime:
          $ref: '#/components/schemas/endTime'
        cause:
          $ref: '#/components/schemas/cause'
        errorMessage:
          $ref: '#/components/schemas/errorMessage'
        errorId:
          $ref: '#/components/schemas/errorId'
        tag:
          $ref: '#/components/schemas/tag1'
    dtmfCallback:
      type: object
      description: >-
        The DTMF event is sent for every digit detected after a <StartGather>
        verb is executed. You may not respond to this event with BXML.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        callId:
          $ref: '#/components/schemas/callId'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        digit:
          $ref: '#/components/schemas/digit'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        enqueuedTime:
          $ref: '#/components/schemas/enqueuedTime'
        startTime:
          $ref: '#/components/schemas/startTime'
        answerTime:
          $ref: '#/components/schemas/answerTime'
        parentCallId:
          $ref: '#/components/schemas/parentCallId'
        transferCallerId:
          $ref: '#/components/schemas/transferCallerId'
        transferTo:
          $ref: '#/components/schemas/transferTo'
        tag:
          $ref: '#/components/schemas/tag1'
    gatherCallback:
      type: object
      description: >-
        The gather event is sent after a <Gather> verb is executed. Its purpose
        is to report the gathered digits to the calling application.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        callId:
          $ref: '#/components/schemas/callId'
        digits:
          $ref: '#/components/schemas/digits'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        enqueuedTime:
          $ref: '#/components/schemas/enqueuedTime'
        startTime:
          $ref: '#/components/schemas/startTime'
        answerTime:
          $ref: '#/components/schemas/answerTime'
        parentCallId:
          $ref: '#/components/schemas/parentCallId'
        terminatingDigit:
          $ref: '#/components/schemas/terminatingDigit'
        transferCallerId:
          $ref: '#/components/schemas/transferCallerId'
        transferTo:
          $ref: '#/components/schemas/transferTo'
        tag:
          $ref: '#/components/schemas/tag1'
    initiateCallback:
      type: object
      description: >-
        The Initiate event is fired when an inbound call is received for a
        Telephone Number on your Account. It is sent to the URL specified in the
        application associated with the location (sip-peer) that the called
        telephone number belongs to.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        callId:
          $ref: '#/components/schemas/callId'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        startTime:
          $ref: '#/components/schemas/startTime'
        diversion:
          $ref: '#/components/schemas/diversion'
        stirShaken:
          $ref: '#/components/schemas/stirShaken'
        uui:
          $ref: '#/components/schemas/uui'
    machineDetectionCompleteCallback:
      type: object
      description: >-
        This event is sent to the url informed when requesting a machine
        detection operation. It contains the machine detection operation result,
        which can be: human, answering-machine, silence, timeout, error. This
        event is not sent when sync answering machine detection mode is chosen.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        callId:
          $ref: '#/components/schemas/callId'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        enqueuedTime:
          $ref: '#/components/schemas/enqueuedTime'
        startTime:
          $ref: '#/components/schemas/startTime'
        answerTime:
          $ref: '#/components/schemas/answerTime'
        tag:
          $ref: '#/components/schemas/tag1'
        machineDetectionResult:
          $ref: '#/components/schemas/machineDetectionResult'
    recordingCompleteCallback:
      type: object
      description: >-
        The Record Complete event is sent after a <Record> verb has executed if
        the call is still active. The BXML returned by this callback is executed
        next. When the recording is available for download, a Recording
        Available event will be sent.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        callId:
          $ref: '#/components/schemas/callId'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        parentCallId:
          $ref: '#/components/schemas/parentCallId'
        recordingId:
          $ref: '#/components/schemas/recordingId'
        mediaUrl:
          $ref: '#/components/schemas/mediaUrl'
        enqueuedTime:
          $ref: '#/components/schemas/enqueuedTime'
        startTime:
          $ref: '#/components/schemas/startTime'
        answerTime:
          $ref: '#/components/schemas/answerTime'
        endTime:
          $ref: '#/components/schemas/endTime'
        duration:
          $ref: '#/components/schemas/duration'
        fileFormat:
          $ref: '#/components/schemas/fileFormatEnum'
        channels:
          $ref: '#/components/schemas/channels'
        tag:
          $ref: '#/components/schemas/tag1'
        transferCallerId:
          $ref: '#/components/schemas/transferCallerId'
        transferTo:
          $ref: '#/components/schemas/transferTo'
    recordingAvailableCallback:
      type: object
      description: >-
        The Recording Available event is sent after a recording has been
        processed. It indicates that the recording is available for download.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        callId:
          $ref: '#/components/schemas/callId'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        parentCallId:
          $ref: '#/components/schemas/parentCallId'
        recordingId:
          $ref: '#/components/schemas/recordingId'
        mediaUrl:
          $ref: '#/components/schemas/mediaUrl'
        enqueuedTime:
          $ref: '#/components/schemas/enqueuedTime'
        startTime:
          $ref: '#/components/schemas/startTime'
        endTime:
          $ref: '#/components/schemas/endTime'
        duration:
          $ref: '#/components/schemas/duration'
        fileFormat:
          $ref: '#/components/schemas/fileFormatEnum'
        channels:
          $ref: '#/components/schemas/channels'
        tag:
          $ref: '#/components/schemas/tag1'
        status:
          $ref: '#/components/schemas/status'
        transferCallerId:
          $ref: '#/components/schemas/transferCallerId'
        transferTo:
          $ref: '#/components/schemas/transferTo'
    redirectCallback:
      type: object
      description: >-
        The Redirect event is fired when a <Redirect> verb is executed. Its
        purpose is to get the next set of verbs from the calling application.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        callId:
          $ref: '#/components/schemas/callId'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        parentCallId:
          $ref: '#/components/schemas/parentCallId'
        enqueuedTime:
          $ref: '#/components/schemas/enqueuedTime'
        startTime:
          $ref: '#/components/schemas/startTime'
        answerTime:
          $ref: '#/components/schemas/answerTime'
        tag:
          $ref: '#/components/schemas/tag1'
        transferCallerId:
          $ref: '#/components/schemas/transferCallerId'
        transferTo:
          $ref: '#/components/schemas/transferTo'
    transcriptionAvailableCallback:
      type: object
      description: >-
        The Transcription Available event is sent when the recording
        transcription is available to be downloaded.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        callId:
          $ref: '#/components/schemas/callId'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        mediaUrl:
          $ref: '#/components/schemas/mediaUrl'
        parentCallId:
          $ref: '#/components/schemas/parentCallId'
        recordingId:
          $ref: '#/components/schemas/recordingId'
        enqueuedTime:
          $ref: '#/components/schemas/enqueuedTime'
        startTime:
          $ref: '#/components/schemas/startTime'
        endTime:
          $ref: '#/components/schemas/endTime'
        duration:
          $ref: '#/components/schemas/duration'
        fileFormat:
          $ref: '#/components/schemas/fileFormatEnum'
        tag:
          $ref: '#/components/schemas/tag1'
        transcription:
          $ref: '#/components/schemas/transcription'
        transferCallerId:
          $ref: '#/components/schemas/transferCallerId'
        transferTo:
          $ref: '#/components/schemas/transferTo'
    transferAnswerCallback:
      type: object
      description: >-
        When processing a <Transfer> verb, this event is sent when a called
        party (B-leg) answers. The event is sent to the endpoint specified in
        the transferAnswerUrl attribute of the <PhoneNumber> tag that answered.
        BXML returned by this callback will be executed for the called party
        only. After all BXML has been executed, the called party will be bridged
        to the original call. Most BXML verbs are allowed in response to a
        transferAnswer event, but some are not allowed.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        callId:
          $ref: '#/components/schemas/callId'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        enqueuedTime:
          $ref: '#/components/schemas/enqueuedTime'
        startTime:
          $ref: '#/components/schemas/startTime'
        answerTime:
          $ref: '#/components/schemas/answerTime'
        tag:
          $ref: '#/components/schemas/tag1'
        transferCallerId:
          $ref: '#/components/schemas/transferCallerId'
        transferTo:
          $ref: '#/components/schemas/transferTo'
    transferCompleteCallback:
      type: object
      description: >-
        This event is sent to the transferCompleteUrl of the A-leg's <Transfer>
        verb when the transferred call (B-leg) completes. In a simultaneous
        ringing scenario, only one B-leg succeeds and this event corresponds to
        that successful leg. If none of the calls were answered, the
        transferComplete event corresponds to one of the legs.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        callId:
          $ref: '#/components/schemas/callId'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        enqueuedTime:
          $ref: '#/components/schemas/enqueuedTime'
        startTime:
          $ref: '#/components/schemas/startTime'
        answerTime:
          $ref: '#/components/schemas/answerTime'
        tag:
          $ref: '#/components/schemas/tag1'
        transferCallerId:
          $ref: '#/components/schemas/transferCallerId'
        transferTo:
          $ref: '#/components/schemas/transferTo'
        cause:
          $ref: '#/components/schemas/cause'
        errorMessage:
          $ref: '#/components/schemas/errorMessage'
        errorId:
          $ref: '#/components/schemas/errorId'
    transferDisconnectCallback:
      type: object
      description: >-
        This event is sent to the transferDisconnectUrl of each <PhoneNumber>
        tag when its respective call leg ends for any reason. The event is sent
        in the normal case, when the transferred leg is answered and later hung
        up, but is also sent if the new leg was never answered in the first
        place, if it was rejected, and if the original call leg hung up before
        the transferred leg.
      properties:
        eventType:
          $ref: '#/components/schemas/eventType'
        eventTime:
          $ref: '#/components/schemas/eventTime'
        accountId:
          $ref: '#/components/schemas/accountId'
        applicationId:
          $ref: '#/components/schemas/applicationId1'
        from:
          $ref: '#/components/schemas/from'
        to:
          $ref: '#/components/schemas/to'
        direction:
          $ref: '#/components/schemas/callDirectionEnum'
        callId:
          $ref: '#/components/schemas/callId'
        callUrl:
          $ref: '#/components/schemas/callUrl'
        parentCallId:
          $ref: '#/components/schemas/parentCallId'
        enqueuedTime:
          $ref: '#/components/schemas/enqueuedTime'
        startTime:
          $ref: '#/components/schemas/startTime'
        answerTime:
          $ref: '#/components/schemas/answerTime'
        endTime:
          $ref: '#/components/schemas/endTime'
        tag:
          $ref: '#/components/schemas/tag1'
        transferCallerId:
          $ref: '#/components/schemas/transferCallerId'
        transferTo:
          $ref: '#/components/schemas/transferTo'
        cause:
          $ref: '#/components/schemas/cause'
        errorMessage:
          $ref: '#/components/schemas/errorMessage'
        errorId:
          $ref: '#/components/schemas/errorId'
    eventType:
      type: string
      description: >-
        The event type, value can be one of the following: answer,
        bridgeComplete, bridgeTargetComplete, conferenceCreated,
        conferenceRedirect, conferenceMemberJoin, conferenceMemberExit,
        conferenceCompleted, conferenceRecordingAvailable, disconnect, dtmf,
        gather, initiate, machineDetectionComplete, recordingComplete,
        recordingAvailable, redirect, transcriptionAvailable, transferAnswer,
        transferComplete, transferDisconnect.
      example: bridgeComplete
    eventTime:
      type: string
      format: date-time
      description: >-
        The approximate UTC date and time when the event was generated by the
        Bandwidth server, in ISO 8601 format. This may not be exactly the time
        of event execution.
      example: '2022-06-17T22:19:40.375Z'
    accountId:
      type: string
      description: The user account associated with the call.
      example: '9900000'
    applicationId1:
      type: string
      description: The id of the application associated with the call.
      example: 04e88489-df02-4e34-a0ee-27a91849555f
    to:
      type: string
      description: >-
        The phone number that received the call, in E.164 format (e.g.
        +15555555555).
      example: '+15555555555'
    from:
      type: string
      description: >-
        The provided identifier of the caller. Must be a phone number in E.164
        format (e.g. +15555555555).
      example: '+15555555555'
    conferenceId:
      type: string
      description: The unique, Bandwidth-generated ID of the conference that was recorded
      example: conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9
    name:
      type: string
      description: The user-specified name of the conference that was recorded
      example: my-conference-name
    recordingId:
      type: string
      description: The unique ID of this recording
      example: r-fbe05094-9fd2afe9-bf5b-4c68-820a-41a01c1c5833
    duration:
      type: string
      description: The duration of the recording in ISO-8601 format
      example: PT13.67S
    channels:
      type: integer
      format: int32
      description: >-
        Always `1` for conference recordings; multi-channel recordings are not
        supported on conferences.
      example: 1
    digit:
      type: string
      description: The digit collected in the call.
      example: '2'
    digits:
      type: string
      description: >-
        (optional) The digits, letters, and/or symbols entered by the user. The
        string is empty if a timeout occurred before any buttons were pressed.
      example: '123'
    terminatingDigit:
      type: string
      description: >-
        (optional) The digit the user pressed to end the gather. Empty string
        value if no terminating digit was pressed.
      example: '#'
    startTime:
      type: string
      format: date-time
      description: Time the call was started, in ISO 8601 format.
      example: '2022-06-17T22:19:40.375Z'
    enqueuedTime:
      type: string
      format: date-time
      description: >-
        (optional) If call queueing is enabled and this is an outbound call,
        time the call was queued, in ISO 8601 format.
      example: '2022-06-17T22:20:00.000Z'
      nullable: true
    answerTime:
      type: string
      format: date-time
      description: Time the call was answered, in ISO 8601 format.
      example: '2022-06-17T22:20:00.000Z'
      nullable: true
    endTime:
      type: string
      format: date-time
      description: The time that the recording ended in ISO-8601 format
      example: '2022-06-17T22:20:00.000Z'
    status:
      type: string
      description: >-
        The current status of the process. For recording, current possible
        values are 'processing', 'partial', 'complete', 'deleted', and 'error'.
        For transcriptions, current possible values are 'none', 'processing',
        'available', 'error', 'timeout', 'file-size-too-big', and
        'file-size-too-small'. Additional states may be added in the future, so
        your application must be tolerant of unknown values.
      example: completed
    transferCallerId:
      type: string
      description: >-
        The phone number used as the from field of the B-leg call, in E.164
        format (e.g. +15555555555).
      example: '+15555555555'
    transferTo:
      type: string
      description: >-
        The phone number used as the to field of the B-leg call, in E.164 format
        (e.g. +15555555555).
      example: '+15555555555'
    mediaUrl:
      nullable: true
      type: string
      format: uri
      description: >-
        The URL that can be used to download the recording. Only present if the
        recording is finished and may be downloaded.
      example: >-
        https://voice.bandwidth.com/api/v2/accounts/9900000/conferences/conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9/recordings/r-fbe05094-9fd2afe9-bf5b-4c68-820a-41a01c1c5833/media
    callId:
      type: string
      description: The call id associated with the event.
      example: c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
    recordingName:
      type: string
      description: A name to identify this recording.
      example: my-recording-name
    callUrl:
      type: string
      format: uri
      description: The URL of the call associated with the event.
      example: >-
        https://voice.bandwidth.com/api/v2/accounts/9900000/calls/c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
    parentCallId:
      type: string
      description: >-
        (optional) If the event is related to the B leg of a <Transfer>, the
        call id of the original call leg that executed the <Transfer>.
        Otherwise, this field will not be present.
      example: c-95ac8d6e-1a31c52e-b38f-4198-93c1-51633ec68f8d
    tag1:
      type: string
      description: >-
        (optional) The tag specified on call creation. If no tag was specified
        or it was previously cleared, this field will not be present.
      example: exampleTag
      nullable: true
    cause:
      type: string
      description: >-
        Reason the call failed - hangup, busy, timeout, cancel, rejected,
        callback-error, invalid-bxml, application-error, account-limit,
        node-capacity-exceeded, error, or unknown.
      example: busy
    errorMessage:
      type: string
      description: >-
        Text explaining the reason that caused the call to fail in case of
        errors.
      example: >-
        Call c-2a913f94-6a486f3a-3cae-4034-bcc3-f0c9fa77ca2f is already bridged
        with another call
      nullable: true
    errorId:
      type: string
      description: Bandwidth's internal id that references the error event.
      example: 4642074b-7b58-478b-96e4-3a60955c6765
      nullable: true
    machineDetectionResult:
      type: object
      description: >-
        (optional) if machine detection was requested in sync mode, the result
        will be specified here. Possible values are the same as the async
        counterpart: Machine Detection Complete
      properties:
        value:
          type: string
          description: >-
            Possible values are answering-machine, human, silence, timeout, or
            error.
          example: answering-machine
        duration:
          type: string
          description: The amount of time it took to determine the result.
          example: PT4.9891287S
      nullable: true
    diversion:
      type: object
      properties:
        reason:
          type: string
          description: >-
            The reason for the diversion. Common values: unknown, user-busy,
            no-answer, unavailable, unconditional, time-of-day, do-not-disturb,
            deflection, follow-me, out-of-service, away.
          example: unavailable
        privacy:
          type: string
          description: off or full
          example: 'off'
        screen:
          type: string
          description: >-
            No if the number was provided by the user, yes if the number was
            provided by the network
          example: 'no'
        counter:
          type: string
          description: The number of diversions that have occurred
          example: '2'
        limit:
          type: string
          description: The maximum number of diversions allowed for this session
          example: '3'
        unknown:
          type: string
          description: >-
            The normal list of values is not exhaustive. Your application must
            be tolerant of unlisted keys and unlisted values of those keys.
          example: unknownValue
        origTo:
          type: string
          description: >-
            Always present. Indicates the last telephone number that the call
            was diverted from.
          example: '+15558884444'
    transcription:
      type: object
      properties:
        text:
          type: string
          description: The transcribed text
          example: Nice talking to you, friend!
        confidence:
          type: number
          format: double
          description: >-
            The confidence on the recognized content, ranging from `0.0` to
            `1.0` with `1.0` being the highest confidence.
          example: 0.9
    stirShaken:
      type: object
      properties:
        verstat:
          type: string
          description: >-
            (optional) The verification status indicating whether the
            verification was successful or not. Possible values are
            TN-Validation-Passed and TN-Validation-Failed.
          example: Tn-Validation-Passed
        attestationIndicator:
          type: string
          description: >-
            (optional) The attestation level verified by Bandwidth. Possible
            values are A (full), B (partial) or C (gateway).
          example: A
        originatingId:
          type: string
          description: (optional) A unique origination identifier.
          example: 99759086-1335-11ed-9bcf-5f7d464e91af
    uui:
      type: string
      description: >-
        The value of the `User-To-User` header to send within the initial
        `INVITE`. Must include the encoding parameter as specified in RFC 7433.
        Only `base64`, `jwt` and `hex` encoding are currently allowed. This
        value, including the encoding specifier, may not exceed 256 characters.
      example: bXktdXVp
      maxLength: 256
    codeRequest:
      type: object
      properties:
        to:
          type: string
          description: The phone number to send the mfa code to.
          pattern: ^\+[1-9]\d{1,14}$
          example: '+19195551234'
        from:
          type: string
          description: The application phone number, the sender of the mfa code.
          pattern: ^\+[1-9]\d{1,14}$
          maxLength: 32
          example: '+19195554321'
        applicationId:
          type: string
          description: The application unique ID, obtained from Bandwidth.
          maxLength: 50
          example: 66fd98ae-ac8d-a00f-7fcd-ba3280aeb9b1
        scope:
          type: string
          description: >-
            An optional field to denote what scope or action the mfa code is
            addressing.  If not supplied, defaults to "2FA".
          maxLength: 25
          example: 2FA
        message:
          type: string
          description: >-
            The message format of the mfa code.  There are three values that the
            system will replace "{CODE}", "{NAME}", "{SCOPE}".  The "{SCOPE}"
            and "{NAME} value template are optional, while "{CODE}" must be
            supplied.  As the name would suggest, code will be replace with the
            actual mfa code.  Name is replaced with the application name,
            configured during provisioning of mfa.  The scope value is the same
            value sent during the call and partitioned by the server.
          maxLength: 2048
          example: Your temporary {NAME} {SCOPE} code is {CODE}
        digits:
          type: integer
          description: >-
            The number of digits for your mfa code.  The valid number ranges
            from 2 to 8, inclusively.
          minimum: 4
          maximum: 8
          example: 6
      required:
        - to
        - from
        - applicationId
        - message
        - digits
    voiceCodeResponse:
      type: object
      properties:
        callId:
          type: string
          description: Programmable Voice API Call ID.
          example: c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
    messagingCodeResponse:
      type: object
      properties:
        messageId:
          type: string
          description: Messaging API Message ID.
          example: 1589228074636lm4k2je7j7jklbn2
    verifyCodeRequest:
      type: object
      properties:
        to:
          type: string
          description: The phone number to send the mfa code to.
          pattern: ^\+[1-9]\d{1,14}$
          example: '+19195551234'
        scope:
          type: string
          description: >-
            An optional field to denote what scope or action the mfa code is
            addressing.  If not supplied, defaults to "2FA".
          example: 2FA
        expirationTimeInMinutes:
          type: number
          description: >-
            The time period, in minutes, to validate the mfa code.  By setting
            this to 3 minutes, it will mean any code generated within the last 3
            minutes are still valid.  The valid range for expiration time is
            between 0 and 15 minutes, exclusively and inclusively, respectively.
          minimum: 1
          maximum: 15
          example: 3
        code:
          type: string
          description: The generated mfa code to check if valid.
          minLength: 4
          maxLength: 8
          example: '123456'
      required:
        - to
        - expirationTimeInMinutes
        - code
    verifyCodeResponse:
      type: object
      properties:
        valid:
          type: boolean
          description: Whether or not the supplied code is valid.
          example: true
    mfaRequestError:
      type: object
      properties:
        error:
          type: string
          description: A message describing the error with your request.
          example: 400 Request is malformed or invalid
        requestId:
          type: string
          description: The associated requestId from AWS.
          example: 354cc8a3-6701-461e-8fa7-8671703dd898
    mfaUnauthorizedRequestError:
      type: object
      properties:
        message:
          type: string
          description: Unauthorized
          example: Unauthorized
    mfaForbiddenRequestError:
      type: object
      properties:
        message:
          type: string
          description: >-
            The message containing the reason behind the request being
            forbidden.
          example: Missing Authentication Token
    completedLookupStatusEnum:
      type: string
      enum:
        - COMPLETE
        - PARTIAL_COMPLETE
        - FAILED
      example: COMPLETE
    inProgressLookupStatusEnum:
      type: string
      enum:
        - IN_PROGRESS
        - COMPLETE
        - PARTIAL_COMPLETE
        - FAILED
      example: COMPLETE
    deactivationEventEnum:
      type: string
      description: >
        [DNI-Only](#section/DNI-Only).

        `DEACTIVATED` if the carrier reported a deactivation event for this
        phone number.
      enum:
        - DEACTIVATED
    latestMessageDeliveryStatusEnum:
      type: string
      description: >-
        [DNI-Only](#section/DNI-Only). The current delivery status of the phone
        number.

        - ACTIVE: A message was successfully sent to the number (delivery code
        0).

        - DEACTIVATED: A message was not delivered to a number (delivery code
        720)

        - UNKNOWN: Bandwidth cannot find an delivery status entry for the
        number.
      enum:
        - ACTIVE
        - DEACTIVATED
        - UNKNOWN
    lineTypeEnum:
      type: string
      enum:
        - FIXED
        - VOIP-FIXED
        - MOBILE
        - VOIP
      example: MOBILE
    requestId:
      type: string
      format: uuid
      description: The phone number lookup request ID from Bandwidth.
      example: 004223a0-8b17-41b1-bf81-20732adf5590
    linkSchema:
      title: Link
      type: object
      properties:
        href:
          type: string
          description: URI of the link.
          example: /relative/uri
        rel:
          type: string
          description: Specifies the relationship between this link and the resource.
          example: aRelatedResource
        method:
          type: string
          description: HTTP method to be used.
          example: GET
    lookupErrorSchema:
      type: object
      properties:
        code:
          type: string
          description: Validation error code
          example: NO-MATCH
        description:
          type: string
          description: Description of validation error
          example: Example error description
        type:
          type: string
          description: Type of validation error
          example: NumberInventory
        meta:
          type: object
          properties:
            phoneNumbers:
              type: array
              items:
                type: string
                description: Phone number experiencing the error.
              example:
                - '+13992077164'
                - '+19196104424'
            message:
              type: string
              description: Message describing the error
              example: Invalid TNs
            code:
              type: integer
              description: Error code associated with the message
              example: 1001
    syncLookupRequest:
      type: object
      properties:
        phoneNumbers:
          description: Telephone numbers in E.164 format.
          type: array
          minimum: 1
          maximum: 100
          items:
            type: string
            pattern: ^\+[1-9]\d{1,14}$
      required:
        - phoneNumbers
    asyncLookupRequest:
      type: object
      properties:
        phoneNumbers:
          description: Telephone numbers in E.164 format.
          type: array
          minimum: 1
          maximum: 15000
          items:
            type: string
            pattern: ^\+[1-9]\d{1,14}$
      required:
        - phoneNumbers
    createSyncLookupResponse:
      type: object
      properties:
        links:
          type: array
          items:
            $ref: '#/components/schemas/linkSchema'
          example: []
        data:
          type: object
          description: The phone number lookup response data
          properties:
            requestId:
              $ref: '#/components/schemas/requestId'
            status:
              $ref: '#/components/schemas/completedLookupStatusEnum'
            results:
              type: array
              description: >-
                The carrier information results for the specified telephone
                numbers.
              items:
                $ref: '#/components/schemas/lookupResult'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/lookupErrorSchema'
    createAsyncBulkLookupResponse:
      type: object
      properties:
        links:
          type: array
          description: Links for pagination (if applicable)
          items:
            $ref: '#/components/schemas/linkSchema'
        data:
          type: object
          description: The phone number lookup response data
          properties:
            requestId:
              $ref: '#/components/schemas/requestId'
            status:
              $ref: '#/components/schemas/inProgressLookupStatusEnum'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/lookupErrorSchema'
    getAsyncBulkLookupResponse:
      type: object
      properties:
        links:
          type: array
          items:
            $ref: '#/components/schemas/linkSchema'
          example: []
        data:
          type: object
          description: The phone number lookup response data
          properties:
            requestId:
              $ref: '#/components/schemas/requestId'
            status:
              $ref: '#/components/schemas/inProgressLookupStatusEnum'
            results:
              type: array
              description: >-
                The carrier information results for the specified telephone
                number.
              items:
                $ref: '#/components/schemas/lookupResult'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/lookupErrorSchema'
    lookupErrorResponse:
      type: object
      properties:
        links:
          type: array
          items:
            $ref: '#/components/schemas/linkSchema'
          example: []
        data:
          type: object
          description: The phone number lookup response data
        errors:
          type: array
          items:
            $ref: '#/components/schemas/lookupErrorSchema'
    lookupResult:
      type: object
      description: Carrier information results for the specified telephone number.
      properties:
        phoneNumber:
          type: string
          description: The telephone number in E.164 format.
          example: '+10072904498'
        lineType:
          $ref: '#/components/schemas/lineTypeEnum'
        messagingProvider:
          type: string
          description: The messaging service provider of the telephone number.
          example: Verizon Wireless
        voiceProvider:
          type: string
          description: The voice service provider of the telephone number.
          example: Verizon Wireless
        countryCodeA3:
          type: string
          description: >-
            The country code of the telephone number in ISO 3166-1 alpha-3
            format.
          example: USA
        deactivationReporter:
          type: string
          description: >
            [DNI-Only](#section/DNI-Only).

            The carrier that reported a deactivation event for this phone
            number.
        deactivationDate:
          type: string
          format: date-time-local
          description: >-
            [DNI-Only](#section/DNI-Only). The datetime the carrier reported a
            deactivation event.
          example: 2025-06-20 18:35
        deactivationEvent:
          $ref: '#/components/schemas/deactivationEventEnum'
        latestMessageDeliveryStatus:
          $ref: '#/components/schemas/latestMessageDeliveryStatusEnum'
        initialMessageDeliveryStatusDate:
          type: string
          format: date
          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'
        latestMessageDeliveryStatusDate:
          type: string
          format: date
          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'
    accountId1:
      type: string
      description: User's account ID.
      example: '1234567'
    tfPhoneNumber:
      type: string
      description: Toll-free telephone number in E.164 format.
      minLength: 12
      maxLength: 12
      nullable: false
      pattern: ^\+1(800|833|844|855|866|877|888)[2-9]\d{6}$
      example: '+18005555555'
    tfvWebhookErrors:
      type: array
      description: Details of the errors that were encountered when processing the request.
      items:
        type: string
        example: 'optInWorkflowImageURLs: Entries must be a valid array of objects.'
    tfvCallbackStatusEnum:
      type: string
      enum:
        - VERIFIED
        - UNVERIFIED
      example: VERIFIED
    tfvUnverifiedStatus:
      type: string
      default: UNVERIFIED
      example: UNVERIFIED
    declineReasonDescription:
      type: string
      description: Explanation for why a verification request was declined.
      nullable: false
      example: >-
        Invalid Information - Can't Validate URL - Website is not accessible /
        not available
    denialStatusCode:
      description: Reason code for denial.
      type: integer
      example: 511
    resubmitAllowed:
      description: >-
        Whether a Toll-Free Verification request qualifies for resubmission via
        PUT.
      example: true
      type: boolean
    blocked:
      description: >-
        Whether a Toll-Free Verification is blocked. This attribute will only be
        defined when the number is blocked.
      example: true
      type: boolean
    blockedReason:
      description: >-
        The reason why the Toll-Free Verification is blocked. This attribute
        will only be defined when the number is blocked.
      example: Toll-free number was used to send spam messages
      type: string
    privacyPolicyUrl:
      description: The Toll-Free Verification request privacy policy URL.
      example: http://your-company.com/privacyPolicy
      type: string
    termsAndConditionsUrl:
      description: The Toll-Free Verification request terms and conditions policy URL.
      example: http://your-company.com/termsAndConditions
      type: string
    businessDba:
      description: The company 'Doing Business As'.
      example: Another Company Name Inc.
      type: string
    businessRegistrationNumber:
      type: string
      description: >-
        US Federal Tax ID Number (EIN) or Canada Business Number (CBN). Optional
        until early 2026. If a value is provided for this field, a value must be
        provided for `businessRegistrationType` and `businessEntityType`.
        Available starting October 1st, 2025.
      nullable: true
      maxLength: 500
      example: 12-3456789
    businessRegistrationTypeEnum:
      type: string
      description: >-
        The type of business registration number. Optional until early 2026;
        required if `businessRegistrationNumber` is provided. Available starting
        October 1st, 2025.
      enum:
        - EIN
        - CBN
      nullable: true
    businessEntityTypeEnum:
      type: string
      description: >-
        The type of registered business. If no option is applicable, please
        provide "SOLE_PROPRIETOR" as a value. Optional until early 2026;
        required if `businessRegistrationNumber` is provided. Available starting
        October 1st, 2025.
      enum:
        - SOLE_PROPRIETOR
        - PRIVATE_PROFIT
        - PUBLIC_PROFIT
        - NON_PROFIT
        - GOVERNMENT
      nullable: true
    helpMessageResponse:
      type: string
      description: A message that gets sent to users requesting help.
      nullable: true
      maxLength: 500
      example: Please contact support for assistance.
    ageGatedContent:
      type: boolean
      description: Indicates whether the content is age-gated.
      example: false
    additionalDenialReason:
      properties:
        statusCode:
          $ref: '#/components/schemas/denialStatusCode'
        reason:
          $ref: '#/components/schemas/declineReasonDescription'
        resubmitAllowed:
          $ref: '#/components/schemas/resubmitAllowed'
      required:
        - statusCode
        - reason
        - resubmitAllowed
      type: object
    internalTicketNumber:
      type: string
      description: >-
        Unique identifier (UUID) generated by Bandwidth to assist in tracking
        the verification status of a toll-free number - included in all webhook
        payloads.
      example: acde070d-8c4c-4f0d-9d8a-162843c10333
    internalTicketNumberForWebhook:
      type: string
      description: >-
        Unique identifier (UUID) generated by Bandwidth to assist in tracking
        the verification status of a toll-free number.
      example: acde070d-8c4c-4f0d-9d8a-162843c10333
    businessContactPhoneNumber:
      description: Contact telephone number
      type: string
      minLength: 1
      maxLength: 500
      nullable: false
      example: '+19192654500'
    verificationRequest:
      type: object
      required:
        - businessAddress
        - businessContact
        - messageVolume
        - phoneNumbers
        - useCase
        - useCaseSummary
        - productionMessageContent
        - optInWorkflow
      properties:
        businessAddress:
          $ref: '#/components/schemas/address'
        businessContact:
          $ref: '#/components/schemas/contact'
        messageVolume:
          type: integer
          description: Estimated monthly volume of messages from the toll-free number.
          minimum: 10
          maximum: 10000000
          example: 10000
        phoneNumbers:
          type: array
          minItems: 1
          maxItems: 10
          items:
            $ref: '#/components/schemas/tfPhoneNumber'
        useCase:
          $ref: '#/components/schemas/useCase'
        useCaseSummary:
          $ref: '#/components/schemas/useCaseSummary'
        productionMessageContent:
          $ref: '#/components/schemas/productionMessageContent'
        optInWorkflow:
          $ref: '#/components/schemas/optInWorkflow'
        additionalInformation:
          type: string
          description: Any additional information.
          minLength: 0
          maxLength: 500
          nullable: true
          example: Any additional information
        isvReseller:
          $ref: '#/components/schemas/isvReseller'
        privacyPolicyUrl:
          $ref: '#/components/schemas/privacyPolicyUrl'
        termsAndConditionsUrl:
          $ref: '#/components/schemas/termsAndConditionsUrl'
        businessDba:
          $ref: '#/components/schemas/businessDba'
        businessRegistrationNumber:
          $ref: '#/components/schemas/businessRegistrationNumber'
        businessRegistrationType:
          $ref: '#/components/schemas/businessRegistrationTypeEnum'
        businessEntityType:
          $ref: '#/components/schemas/businessEntityTypeEnum'
        helpMessageResponse:
          $ref: '#/components/schemas/helpMessageResponse'
        ageGatedContent:
          $ref: '#/components/schemas/ageGatedContent'
        cvToken:
          $ref: '#/components/schemas/cvToken'
    verificationUpdateRequest:
      type: object
      required:
        - businessAddress
        - businessContact
        - messageVolume
        - useCase
        - useCaseSummary
        - productionMessageContent
        - optInWorkflow
      properties:
        businessAddress:
          $ref: '#/components/schemas/address'
        businessContact:
          $ref: '#/components/schemas/contact'
        messageVolume:
          type: integer
          description: Estimated monthly volume of messages from the toll-free number.
          minimum: 10
          maximum: 10000000
          example: 10000
        useCase:
          $ref: '#/components/schemas/useCase'
        useCaseSummary:
          $ref: '#/components/schemas/useCaseSummary'
        productionMessageContent:
          $ref: '#/components/schemas/productionMessageContent'
        optInWorkflow:
          $ref: '#/components/schemas/optInWorkflow'
        additionalInformation:
          $ref: '#/components/schemas/additionalInformation'
        isvReseller:
          $ref: '#/components/schemas/isvReseller'
        privacyPolicyUrl:
          $ref: '#/components/schemas/privacyPolicyUrl'
        termsAndConditionsUrl:
          $ref: '#/components/schemas/termsAndConditionsUrl'
        businessDba:
          $ref: '#/components/schemas/businessDba'
        businessRegistrationNumber:
          $ref: '#/components/schemas/businessRegistrationNumber'
        businessRegistrationType:
          $ref: '#/components/schemas/businessRegistrationTypeEnum'
        businessEntityType:
          $ref: '#/components/schemas/businessEntityTypeEnum'
        helpMessageResponse:
          $ref: '#/components/schemas/helpMessageResponse'
        ageGatedContent:
          $ref: '#/components/schemas/ageGatedContent'
        cvToken:
          $ref: '#/components/schemas/cvToken'
    tfvBasicAuthentication:
      type: object
      properties:
        username:
          type: string
          maxLength: 100
          example: username
        password:
          type: string
          maxLength: 200
          example: password
      required:
        - username
        - password
    webhookSubscriptionRequestSchema:
      type: object
      properties:
        basicAuthentication:
          $ref: '#/components/schemas/tfvBasicAuthentication'
        callbackUrl:
          $ref: '#/components/schemas/webhookUrl'
        sharedSecretKey:
          $ref: '#/components/schemas/sharedSecretKey'
      required:
        - callbackUrl
    failureWebhook:
      type: object
      properties:
        accountId:
          $ref: '#/components/schemas/accountId1'
        phoneNumber:
          $ref: '#/components/schemas/tfPhoneNumber'
        errorCode:
          type: string
          description: >-
            An error code indicating what error was encountered. This code can
            be interpreted as an HTTP status code in regards to the error that
            was encountered.
          example: '400'
        errorMessage:
          type: string
          description: A description of the error that was encountered.
          example: cannot process request.
        errors:
          $ref: '#/components/schemas/tfvWebhookErrors'
        internalTicketNumber:
          $ref: '#/components/schemas/internalTicketNumberForWebhook'
    verificationDenialWebhook:
      type: object
      properties:
        accountId:
          $ref: '#/components/schemas/accountId1'
        additionalDenialReasons:
          description: >-
            An optional list of denial reasons in addition to
            declineReasonDescription when multiple reasons apply.
          items:
            $ref: '#/components/schemas/additionalDenialReason'
          example:
            - statusCode: 512
              reason: Reason A
              resubmitAllowed: true
            - statusCode: 513
              reason: Reason B
              resubmitAllowed: true
          type: array
        declineReasonDescription:
          $ref: '#/components/schemas/declineReasonDescription'
        denialStatusCode:
          $ref: '#/components/schemas/denialStatusCode'
        internalTicketNumber:
          $ref: '#/components/schemas/internalTicketNumberForWebhook'
        phoneNumber:
          $ref: '#/components/schemas/tfPhoneNumber'
        resubmitAllowed:
          $ref: '#/components/schemas/resubmitAllowed'
        status:
          $ref: '#/components/schemas/tfvUnverifiedStatus'
        blocked:
          $ref: '#/components/schemas/blocked'
        blockedReason:
          $ref: '#/components/schemas/blockedReason'
    verificationWebhook:
      type: object
      properties:
        accountId:
          $ref: '#/components/schemas/accountId1'
        phoneNumber:
          $ref: '#/components/schemas/tfPhoneNumber'
        status:
          $ref: '#/components/schemas/tfvCallbackStatusEnum'
        internalTicketNumber:
          $ref: '#/components/schemas/internalTicketNumberForWebhook'
    blockedWebhook:
      type: object
      properties:
        accountId:
          $ref: '#/components/schemas/accountId1'
        phoneNumber:
          $ref: '#/components/schemas/tfPhoneNumber'
        status:
          $ref: '#/components/schemas/tfvCallbackStatusEnum'
        internalTicketNumber:
          $ref: '#/components/schemas/internalTicketNumberForWebhook'
        blocked:
          $ref: '#/components/schemas/blocked'
        blockedReason:
          $ref: '#/components/schemas/blockedReason'
    tfvSubmissionWrapper:
      type: object
      properties:
        submission:
          $ref: '#/components/schemas/verificationUpdateRequest'
    address:
      type: object
      nullable: false
      required:
        - name
        - addr1
        - city
        - state
        - zip
        - url
      properties:
        name:
          type: string
          description: The name of the business using the toll-free number.
          minLength: 1
          maxLength: 500
          nullable: false
          example: Bandwidth Inc.
        addr1:
          type: string
          description: The address of the business using the toll-free number.
          minLength: 1
          maxLength: 500
          nullable: false
          example: 2230 Bandmate Way
        addr2:
          type: string
          description: The address of the business using the toll-free number.
          minLength: 0
          maxLength: 500
          nullable: true
          example: 2230 Bandmate Way
        city:
          type: string
          description: The city of the business using the toll-free number.
          minLength: 1
          maxLength: 500
          nullable: false
          example: Raleigh
        state:
          type: string
          description: The state of the business using the toll-free number.
          minLength: 1
          maxLength: 500
          nullable: false
          example: NC
        zip:
          type: string
          description: The zip of the business using the toll-free number.
          nullable: false
          example: '27606'
          pattern: '[- A-Za-z0-9]{0,500}'
        url:
          type: string
          format: url
          description: The website of the business using the toll-free number.
          minLength: 1
          maxLength: 500
          nullable: false
          example: https://www.example.com/path/to/resource
    additionalInformation:
      type: string
      description: Any additional information.
      minLength: 0
      maxLength: 500
      nullable: true
      example: Any additional information
    optInWorkflow:
      type: object
      nullable: false
      required:
        - description
        - imageUrls
      properties:
        description:
          type: string
          minLength: 1
          maxLength: 500
          nullable: false
          example: Opt In Flow
        imageUrls:
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 500
            nullable: false
            example: https://www.example.com/path/to/resource
            pattern: >-
              ^$|(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,253}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#()?&//=]*)
        confirmationResponse:
          type: string
          minLength: 0
          maxLength: 500
          nullable: true
          example: Thank you for opting in!
    isvReseller:
      type: string
      description: ISV name.
      minLength: 0
      maxLength: 500
      nullable: true
      example: Test ISV
    contact:
      type: object
      nullable: false
      required:
        - firstName
        - lastName
        - email
        - phoneNumber
      properties:
        firstName:
          type: string
          description: The first name of the business contact using the toll-free number.
          minLength: 1
          maxLength: 500
          nullable: false
          example: John
        lastName:
          type: string
          description: The last name of the business contact using the toll-free number.
          minLength: 1
          maxLength: 500
          nullable: false
          example: Doe
        email:
          $ref: '#/components/schemas/email'
        phoneNumber:
          $ref: '#/components/schemas/businessContactPhoneNumber'
    email:
      type: string
      format: email
      minLength: 0
      maxLength: 500
      nullable: false
      pattern: >-
        ^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$
      example: foo@bar.com
    useCases:
      type: array
      items:
        type: string
      example:
        - 2FA
        - App Notifications
        - Appointments
        - Auctions
        - Auto Repair Services
        - Bank Transfers
        - Billing
        - Booking Confirmations
        - Business Updates
        - COVID-19 Alerts
    useCase:
      type: string
      description: The category of the use case.
      minLength: 0
      maxLength: 500
      example: 2FA
    useCaseSummary:
      type: string
      description: A general idea of the use case and customer.
      minLength: 0
      maxLength: 500
      nullable: false
      example: Text summarizing the use case for the toll-free number
    productionMessageContent:
      type: string
      description: Example of message content.
      minLength: 0
      maxLength: 500
      nullable: false
      example: Production message content
    webhookSubscriptionsListBody:
      description: >-
        A list of all webhook subscriptions registered for this account ID for
        this particular feature (unpaginated).
      type: object
      required:
        - data
      properties:
        links:
          $ref: '#/components/schemas/linksObject'
        errors:
          type: array
          items:
            $ref: '#/components/schemas/error'
        data:
          items:
            $ref: '#/components/schemas/webhookSubscription'
          type: array
    linksObject:
      type: object
      properties:
        first:
          description: The first (or only) page of results matching the query.
          type: string
        next:
          description: >-
            If more results exist than specified by 'size', this link returns
            the next page of 'size' results.
          type: string
        previous:
          description: >-
            If the results are more than one page, this link returns the
            previous page of 'size' results.
          type: string
        last:
          description: >-
            If more results exist than specified by 'size', this link return the
            last page of result.
          type: string
    error:
      type: object
      properties:
        code:
          type: integer
        description:
          type: string
        telephoneNumbers:
          type: array
          items:
            $ref: '#/components/schemas/telephoneNumber'
    telephoneNumber:
      type: object
      properties:
        telephoneNumber:
          description: Simple Telephone Number.
          type: string
    webhookSubscriptionTypeEnum:
      type: string
      enum:
        - TOLLFREE_VERIFICATION_STATUS
        - MESSAGING_PORTOUT_APPROVAL_STATUS
      example: TOLLFREE_VERIFICATION_STATUS
    webhookSubscription:
      description: >-
        Information about a webhook that Bandwidth should send upon the
        completion of event customer has subscribed to.
      type: object
      required:
        - callbackUrl
      properties:
        id:
          type: string
          example: 7hICGStfAfeGxEq3N0lQwO
        accountId:
          type: string
          example: '1234567'
        callbackUrl:
          $ref: '#/components/schemas/webhookUrl'
        type:
          $ref: '#/components/schemas/webhookSubscriptionTypeEnum'
        basicAuthentication:
          description: >-
            Basic authentication credentials are not required, but if present,
            both username and password must be provided.
          type: object
          required:
            - username
            - password
          properties:
            username:
              type: string
              maxLength: 100
            password:
              type: string
              maxLength: 200
        createdDate:
          type: string
          format: date-time
          example: '2023-05-15T13:56:39.965Z'
        modifiedDate:
          type: string
          format: date-time
          example: '2023-05-15T13:56:39.965Z'
    webhookUrl:
      description: >-
        Callback URL to receive status updates from Bandwidth. When a webhook
        subscription is registered with Bandwidth under a given account ID, it
        will be used to send status updates for all requests submitted under
        that account ID.
      type: string
      format: url
      minLength: 0
      maxLength: 2000
      nullable: true
      example: https://www.example.com/path/to/resource
      pattern: >-
        ^$|(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,253}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#()?&//=]*)
    tfvError:
      description: A generic error object.
      properties:
        type:
          type: string
          example: Error Type
        description:
          type: string
          example: Error Message
        errors:
          type: object
          description: >-
            Each key of this errors object refers to a field of the submitted
            object (using dot notation for nested objects), with the field being
            a key to an array of one or more errors for that field.
          example:
            field: error message
      type: object
    tfvStatus:
      type: object
      properties:
        phoneNumber:
          $ref: '#/components/schemas/tfPhoneNumber'
        status:
          $ref: '#/components/schemas/tfvStatusEnum'
        internalTicketNumber:
          $ref: '#/components/schemas/internalTicketNumber'
        declineReasonDescription:
          $ref: '#/components/schemas/declineReasonDescription'
        resubmitAllowed:
          $ref: '#/components/schemas/resubmitAllowed'
        createdDateTime:
          type: string
          description: Date and time the verification request was created.
          format: date-time
          example: '2021-06-08T06:45:13.0Z'
        modifiedDateTime:
          type: string
          description: Date and time the verification request was last modified.
          format: date-time
          example: '2021-06-08T06:45:13.0Z'
        submission:
          $ref: '#/components/schemas/tfvSubmissionInfo'
        blocked:
          $ref: '#/components/schemas/blocked'
        blockedReason:
          $ref: '#/components/schemas/blockedReason'
        cvToken:
          $ref: '#/components/schemas/cvToken'
    tfvSubmissionInfo:
      type: object
      properties:
        businessAddress:
          $ref: '#/components/schemas/address'
        businessContact:
          $ref: '#/components/schemas/contact'
        messageVolume:
          type: integer
          description: Estimated monthly volume of messages from the toll-free number.
          minimum: 10
          maximum: 10000000
          example: 10000
        useCase:
          $ref: '#/components/schemas/useCase'
        useCaseSummary:
          $ref: '#/components/schemas/useCaseSummary'
        productionMessageContent:
          $ref: '#/components/schemas/productionMessageContent'
        optInWorkflow:
          $ref: '#/components/schemas/optInWorkflow'
        additionalInformation:
          $ref: '#/components/schemas/additionalInformation'
        isvReseller:
          $ref: '#/components/schemas/isvReseller'
        privacyPolicyUrl:
          $ref: '#/components/schemas/privacyPolicyUrl'
        termsAndConditionsUrl:
          $ref: '#/components/schemas/termsAndConditionsUrl'
        businessDba:
          $ref: '#/components/schemas/businessDba'
        businessRegistrationNumber:
          $ref: '#/components/schemas/businessRegistrationNumber'
          description: >-
            US Federal Tax ID Number (EIN) or Canada Business Number (CBN).
            Available starting October 1st, 2025.
        businessRegistrationType:
          $ref: '#/components/schemas/businessRegistrationTypeEnum'
          description: >-
            The type of business registration number. Available starting October
            1st, 2025.
        businessEntityType:
          $ref: '#/components/schemas/businessEntityTypeEnum'
          description: >-
            The type of registered business. If no option is applicable, please
            provide "SOLE_PROPRIETOR" as a value. Available starting October
            1st, 2025.
    tfvStatusEnum:
      type: string
      enum:
        - VERIFIED
        - UNVERIFIED
        - PENDING
      example: VERIFIED
    sharedSecretKey:
      description: >-
        An ASCII string submitted by the user as a shared secret key for
        generating an HMAC header for callbacks.
      example: This is my $3cret
      maxLength: 64
      minLength: 16
      nullable: true
      pattern: ^[ -~]{16,64}$
      type: string
    cvToken:
      type: string
      description: >-
        The token provided by Campaign Verify to validate your political use
        case. Only required for 527 political organizations. If you are not a
        527 political organization, this field should be omitted. If you pass an
        empty string, it will be passed along and potentially rejected.
      minLength: 0
      maxLength: 500
      nullable: true
      example: >-
        cv.user123|sess456|mno|tfree|read_write|X7yZ9aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789aBcDeFgHiJkLmNoPqRsTuVw
  responses:
    createMessageResponse:
      description: Accepted
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/message'
    createMultiChannelMessageResponse:
      description: Accepted
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/createMultiChannelMessageResponse'
    listMessagesResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/messagesList'
    getMediaResponse:
      description: OK
      content:
        application/octet-stream:
          schema:
            type: string
            description: Successful Operation
            format: binary
    listMediaResponse:
      description: OK
      headers:
        Continuation-Token:
          description: Continuation token used to retrieve subsequent media.
          schema:
            type: string
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/media'
    messagingBadRequestError:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/messagingRequestError'
    messagingNotAcceptableError:
      description: Not Acceptable
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/messagingRequestError'
    createMessageBadRequestError:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/createMessageRequestError'
    messagingUnauthorizedError:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/messagingRequestError'
    messagingForbiddenError:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/messagingRequestError'
    messagingNotFoundError:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/messagingRequestError'
    messagingMethodNotAllowedError:
      description: Method Not Allowed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/messagingRequestError'
    messagingInvalidMediaTypeError:
      description: Unsupported Media Type
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/messagingRequestError'
    messagingTooManyRequestsError:
      description: Too Many Requests
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/messagingRequestError'
    messagingInternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/messagingRequestError'
    multiChannelBadRequestError:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/multiChannelError'
          example:
            links: []
            data: null
            errors:
              - type: request-validation
                description: >-
                  The 'channelList[0].from' field must contain exactly one
                  telephone number
                source:
                  field: channelList[0].from
    multiChannelNotAcceptableError:
      description: Not Acceptable
    multiChannelUnauthorizedError:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/multiChannelError'
          example:
            links: []
            data: null
            errors:
              - type: unauthorized
                description: Authentication Failed
                source: {}
    multiChannelForbiddenError:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/multiChannelError'
          example:
            links: []
            data: null
            errors:
              - type: forbidden
                description: Access Denied
                source: {}
    multiChannelNotFoundError:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/multiChannelError'
          example:
            links: []
            data: null
            errors:
              - type: forbidden
                description: Resource not found.
                source: {}
    multiChannelMethodNotAllowedError:
      description: Method Not Allowed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/multiChannelError'
          example:
            links: []
            data: null
            errors:
              - type: method-not-allowed
                description: Method 'PUT' not supported for this resource.
                source: {}
    multiChannelInvalidMediaTypeError:
      description: Unsupported Media Type
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/multiChannelError'
          example:
            links: []
            data: null
            errors:
              - type: unsupported-content-type
                description: >-
                  Content-Type 'application/xml;charset=UTF-8' is not supported.
                  Please use 'application/json'
                source:
                  header: Content-Type
    multiChannelTooManyRequestsError:
      description: Too Many Requests
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/multiChannelError'
          example:
            links: []
            data: null
            errors:
              - type: rate-limit-exceeded
                description: >-
                  You have exceeded your rate limit for this endpoint. Please
                  retry later.
                source: {}
    multiChannelInternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/multiChannelError'
          example:
            links: []
            data: null
            errors:
              - type: internal-server-error
                description: Internal server error. No further information available
                source: {}
    listMessagesTooManyRequestsError:
      description: Too Many Requests
      headers:
        Retry-After:
          description: The number of seconds to wait before retrying the request.
          schema:
            type: integer
            example: 300
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/messagingRequestError'
          example:
            type: rate_limit_exceeded
            description: >-
              Rate limit exceeded. Wait for Retry-After time before sending
              another request.
    createCallResponse:
      description: Created
      headers:
        Location:
          description: The URL for further interactions with this call
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/createCallResponse'
          examples:
            createCall Response:
              $ref: '#/components/examples/createCallResponseExample'
    getCallStateResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/callState'
    updateCallResponse:
      description: OK
    listCallsResponse:
      description: OK
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/callState'
    getStatisticsResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/accountStatistics'
    updateRecordingResponse:
      description: OK
    listCallRecordingsResponse:
      description: OK
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/callRecordingMetadata'
    getCallRecordingResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/callRecordingMetadata'
    downloadRecordingMediaResponse:
      description: OK
      content:
        audio/vnd.wave:
          schema:
            type: string
            format: binary
        audio/mpeg:
          schema:
            type: string
            format: binary
    getRecordingTranscriptionResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/recordingTranscriptions'
    listTranscriptionsResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/callTranscriptionMetadataList'
    getCallTranscriptionResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/callTranscriptionResponse'
    deleteCallTranscriptionResponse:
      description: No Content
    listConferencesResponse:
      description: OK
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/conference'
          examples:
            listConferences Response:
              $ref: '#/components/examples/listConferencesResponseExample'
    getConferenceResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/conference'
    getConferenceMemberResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/conferenceMember'
    listConferenceRecordingsResponse:
      description: OK
      content:
        application/json:
          schema:
            type: array
            items:
              $ref: '#/components/schemas/conferenceRecordingMetadata'
    getConferenceRecordingResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/conferenceRecordingMetadata'
    voiceBadRequestError:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/voiceApiError'
          examples:
            badRequestErrorExample:
              $ref: '#/components/examples/voiceBadRequestErrorExample'
    voiceUnauthorizedError:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/voiceApiError'
          examples:
            unauthorizedErrorExample:
              $ref: '#/components/examples/voiceUnauthorizedErrorExample'
    voiceForbiddenError:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/voiceApiError'
          examples:
            forbiddenErrorExample:
              $ref: '#/components/examples/voiceForbiddenErrorExample'
    voiceNotFoundError:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/voiceApiError'
          examples:
            notFoundErrorExample:
              $ref: '#/components/examples/voiceNotFoundErrorExample'
    voiceNotAllowedError:
      description: Method Not Allowed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/voiceApiError'
          examples:
            notAllowedErrorExample:
              $ref: '#/components/examples/voiceNotAllowedErrorExample'
    voiceConflictError:
      description: Conflict
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/voiceApiError'
          examples:
            conflictErrorExample:
              $ref: '#/components/examples/voiceConflictErrorExample'
    voiceUnsupportedMediaTypeError:
      description: Unsupported Media Type
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/voiceApiError'
          examples:
            tooManyRequestsErrorExample:
              $ref: '#/components/examples/voiceUnsupportedMediaTypeErrorExample'
    voiceTooManyRequestsError:
      description: Too Many Requests
      headers:
        Retry-After:
          description: When you should try your request again.
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/voiceApiError'
          examples:
            tooManyRequestsErrorExample:
              $ref: '#/components/examples/voiceTooManyRequestsErrorExample'
    voiceInternalServerError:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/voiceApiError'
          examples:
            internalServerErrorExample:
              $ref: '#/components/examples/voiceInternalServerErrorExample'
    voiceCodeResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/voiceCodeResponse'
    messagingCodeResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/messagingCodeResponse'
    verifyCodeResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/verifyCodeResponse'
    mfaBadRequestError:
      description: Bad Request
      headers: {}
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/mfaRequestError'
    mfaUnauthorizedError:
      description: Unauthorized
      headers: {}
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/mfaUnauthorizedRequestError'
    mfaForbiddenError:
      description: Forbidden
      headers: {}
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/mfaForbiddenRequestError'
    mfaTooManyRequestsError:
      description: Too Many Requests
      headers: {}
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/mfaRequestError'
    mfaInternalServerError:
      description: Internal Server Error
      headers: {}
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/mfaRequestError'
    createSyncLookupResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/createSyncLookupResponse'
          examples:
            lookupCompleteWithDniExample:
              $ref: '#/components/examples/lookupCompleteWithDniExample'
            lookupCompleteExample:
              $ref: '#/components/examples/lookupCompleteExample'
            lookupPartialExample:
              $ref: '#/components/examples/lookupPartialExample'
            lookupFailedExample:
              $ref: '#/components/examples/lookupFailedExample'
    createAsyncBulkLookupResponse:
      description: Accepted
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/createAsyncBulkLookupResponse'
          examples:
            lookupInProgressExample:
              $ref: '#/components/examples/lookupInProgressExample'
    getAsyncBulkLookupResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/getAsyncBulkLookupResponse'
          examples:
            lookupCompleteWithDniExample:
              $ref: '#/components/examples/lookupCompleteWithDniExample'
            lookupCompleteExample:
              $ref: '#/components/examples/lookupCompleteExample'
            lookupInProgressExample:
              $ref: '#/components/examples/lookupInProgressExample'
            lookupPartialExample:
              $ref: '#/components/examples/lookupPartialExample'
            lookupFailedExample:
              $ref: '#/components/examples/lookupFailedExample'
    tnLookupDefaultResponse:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/lookupErrorResponse'
          examples:
            badRequest:
              $ref: '#/components/examples/badRequestExample'
            unauthorized:
              $ref: '#/components/examples/unauthorizedExample'
            forbidden:
              $ref: '#/components/examples/forbiddenExample'
            mediaType:
              $ref: '#/components/examples/unsupportedMediaTypeExample'
            notFound:
              $ref: '#/components/examples/notFoundExample'
            tooManyRequests:
              $ref: '#/components/examples/tooManyRequestsExample'
            internalServer:
              $ref: '#/components/examples/internalServerErrorExample'
    getTollFreeVerificationStatusResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/tfvStatus'
    listWebhookSubscriptionsResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/webhookSubscriptionsListBody'
    createWebhookSubscriptionResponse:
      description: Created
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/webhookSubscription'
    updateWebhookSubscriptionResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/webhookSubscription'
    listTollFreeUseCasesResponse:
      description: OK
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/useCases'
    tfvBadRequestResponse:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/tfvError'
          example:
            description: Cannot process request.
            type: bad request
    noContentResponse:
      description: No Content
    tfvPostBadRequestResponse:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/tfvError'
          example:
            description: cannot process request.
            errors:
              businessName: Business name is required.
              businessContactEmail: Business contact email is not a valid email address.
              optInWorkflowImageURLs: Entries must be a valid array of objects.
    tfvUnauthorizedResponse:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/tfvError'
          example:
            description: Client is providing incorrect or invalid credentials.
            type: unauthorized
    tfvForbiddenResponse:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/tfvError'
          example:
            description: Client is not authorized for the action.
            type: forbidden
    tfvNotFoundResponse:
      description: Cannot find the requested resource.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/tfvError'
          example:
            description: Cannot find the requested resource.
            type: Not Found
    tfvNotAllowedResponse:
      description: Method Not Allowed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/tfvError'
          example:
            description: Method is not allowed.
            type: Method Not Allowed
    tfvTooManyRequestsResponse:
      description: Too Many Requests
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/tfvError'
          example:
            description: Throttling error. Too many requests.
            type: Too Many Requests
    tfvServerErrorResponse:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/tfvError'
          example:
            description: Internal Server Error.
            type: Internal Server Error
    tfvServiceUnavailableResponse:
      description: Service Unavailable
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/tfvError'
          example:
            description: Service Unavailable Error.
            type: Service Unavailable
  parameters:
    accountId:
      in: path
      name: accountId
      required: true
      schema:
        type: string
      description: Your Bandwidth Account ID.
      example: '9900000'
    mediaId:
      in: path
      name: mediaId
      required: true
      description: Media ID to retrieve.
      example: 14762070468292kw2fuqty55yp2b2/0/bw.png
      schema:
        type: string
    contentType:
      in: header
      name: Content-Type
      style: simple
      explode: false
      description: The media type of the entity-body.
      example: audio/wav
      schema:
        type: string
    cacheControl:
      in: header
      name: Cache-Control
      style: simple
      explode: false
      description: >-
        General-header field is used to specify directives that MUST be obeyed
        by all caching mechanisms along the request/response chain.
      example: no-cache
      schema:
        type: string
    continuationToken:
      in: header
      name: Continuation-Token
      description: Continuation token used to retrieve subsequent media.
      example: >-
        1XEi2tsFtLo1JbtLwETnM1ZJ+PqAa8w6ENvC5QKvwyrCDYII663Gy5M4s40owR1tjkuWUif6qbWvFtQJR5/ipqbUnfAqL254LKNlPy6tATCzioKSuHuOqgzloDkSwRtX0LtcL2otHS69hK343m+SjdL+vlj71tT39
      schema:
        type: string
    messageId:
      in: query
      name: messageId
      required: false
      description: >-
        The ID of the message to search for. Special characters need to be
        encoded using URL encoding. Message IDs could come in different formats,
        e.g., 9e0df4ca-b18d-40d7-a59f-82fcdf5ae8e6 and
        1589228074636lm4k2je7j7jklbn2 are valid message ID formats. Note that
        you must include at least one query parameter.
      example: 9e0df4ca-b18d-40d7-a59f-82fcdf5ae8e6
      schema:
        type: string
    sourceTn:
      in: query
      name: sourceTn
      required: false
      description: >-
        The phone number that sent the message. Accepted values are: a single
        full phone number a comma separated list of full phone numbers (maximum
        of 10) or a single partial phone number (minimum of 5 characters e.g.
        '%2B1919').
      example: '%2B15554443333'
      schema:
        type: string
    destinationTn:
      in: query
      name: destinationTn
      required: false
      description: >-
        The phone number that received the message. Accepted values are: a
        single full phone number a comma separated list of full phone numbers
        (maximum of 10) or a single partial phone number (minimum of 5
        characters e.g. '%2B1919').
      example: '%2B15554443333'
      schema:
        type: string
    messageStatus:
      in: query
      name: messageStatus
      required: false
      description: >-
        The status of the message. One of RECEIVED QUEUED SENDING SENT FAILED
        DELIVERED ACCEPTED UNDELIVERED.
      schema:
        $ref: '#/components/schemas/messageStatusEnum'
    messageDirection:
      in: query
      name: messageDirection
      required: false
      description: The direction of the message. One of INBOUND OUTBOUND.
      schema:
        $ref: '#/components/schemas/listMessageDirectionEnum'
    carrierName:
      in: query
      name: carrierName
      required: false
      description: >-
        The name of the carrier used for this message. Possible values include
        but are not limited to Verizon and TMobile. Special characters need to
        be encoded using URL encoding (i.e. AT&T should be passed as AT%26T).
      example: Verizon
      schema:
        type: string
    messageType:
      in: query
      name: messageType
      required: false
      description: The type of message. Either sms or mms.
      schema:
        $ref: '#/components/schemas/messageTypeEnum'
    errorCode:
      in: query
      name: errorCode
      required: false
      description: The error code of the message.
      example: 9902
      schema:
        type: integer
    fromDateTime:
      in: query
      name: fromDateTime
      required: false
      description: >-
        The start of the date range to search in ISO 8601 format. Uses the
        message receive time. The date range to search in is currently 14 days.
      example: 2022-09-14T18:20:16.000Z
      schema:
        type: string
    toDateTime:
      in: query
      name: toDateTime
      required: false
      description: >-
        The end of the date range to search in ISO 8601 format. Uses the message
        receive time. The date range to search in is currently 14 days.
      example: 2022-09-14T18:20:16.000Z
      schema:
        type: string
    campaignId:
      in: query
      name: campaignId
      required: false
      description: The campaign ID of the message.
      example: CJEUMDK
      schema:
        type: string
    fromBwLatency:
      in: query
      name: fromBwLatency
      required: false
      description: >-
        The minimum Bandwidth latency of the message in seconds. Only available
        for accounts with the Advanced Quality Metrics feature enabled.
      example: 5
      schema:
        type: integer
    bwQueued:
      in: query
      name: bwQueued
      required: false
      description: >-
        A boolean value indicating whether the message is queued in the
        Bandwidth network.
      example: true
      schema:
        type: boolean
    product:
      in: query
      name: product
      required: false
      description: Messaging product associated with the message.
      example: P2P
      schema:
        $ref: '#/components/schemas/productTypeEnum'
    location:
      in: query
      name: location
      required: false
      description: Location Id associated with the message.
      example: 123ABC
      schema:
        type: string
    carrierQueued:
      in: query
      name: carrierQueued
      required: false
      description: >-
        A boolean value indicating whether the message is queued in the carrier
        network. Only available for OUTBOUND messages from accounts with the
        Advanced Quality Metrics feature enabled.
      example: true
      schema:
        type: boolean
    fromCarrierLatency:
      in: query
      name: fromCarrierLatency
      required: false
      description: >-
        The minimum carrier latency of the message in seconds. Only available
        for OUTBOUND messages from accounts with the Advanced Quality Metrics
        feature enabled.
      example: 50
      schema:
        type: integer
    callingNumberCountryA3:
      in: query
      name: callingNumberCountryA3
      required: false
      description: Calling number country in A3 format.
      example: USA
      schema:
        type: string
    calledNumberCountryA3:
      in: query
      name: calledNumberCountryA3
      required: false
      description: Called number country in A3 format.
      example: USA
      schema:
        type: string
    fromSegmentCount:
      in: query
      name: fromSegmentCount
      required: false
      description: Segment count (start range).
      example: 1
      schema:
        type: integer
    toSegmentCount:
      in: query
      name: toSegmentCount
      required: false
      description: Segment count (end range).
      example: 3
      schema:
        type: integer
    fromMessageSize:
      in: query
      name: fromMessageSize
      required: false
      description: Message size (start range).
      example: 100
      schema:
        type: integer
    toMessageSize:
      in: query
      name: toMessageSize
      required: false
      description: Message size (end range).
      example: 120
      schema:
        type: integer
    sort:
      in: query
      name: sort
      required: false
      description: >-
        The field and direction to sort by combined with a colon. Direction is
        either asc or desc.
      example: sourceTn:desc
      schema:
        type: string
    pageToken:
      in: query
      name: pageToken
      required: false
      description: A base64 encoded value used for pagination of results.
      example: gdEewhcJLQRB5
      schema:
        type: string
    limit:
      in: query
      name: limit
      required: false
      description: >-
        The maximum records requested in search result. Default 100. The sum of
        limit and after cannot be more than 10000.
      schema:
        type: integer
      example: 50
    limitTotalCount:
      in: query
      name: limitTotalCount
      required: false
      description: >-
        When set to true, the response's totalCount field will have a maximum
        value of 10,000. When set to false, or excluded, this will give an
        accurate totalCount of all messages that match the provided filters. If
        you are experiencing latency, try using this parameter to limit your
        results.
      example: true
      schema:
        type: boolean
    callId:
      name: callId
      in: path
      required: true
      schema:
        type: string
      description: Programmable Voice API Call ID.
      example: c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
    recordingId:
      name: recordingId
      in: path
      required: true
      schema:
        type: string
      description: Programmable Voice API Recording ID.
      example: r-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
    conferenceId:
      name: conferenceId
      in: path
      required: true
      schema:
        type: string
      description: Programmable Voice API Conference ID.
      example: conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9
    memberId:
      name: memberId
      in: path
      required: true
      schema:
        type: string
      description: Programmable Voice API Conference Member ID.
      example: c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
    transcriptionId:
      name: transcriptionId
      in: path
      required: true
      schema:
        type: string
      description: Programmable Voice API Transcription ID.
      example: t-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
    to:
      name: to
      in: query
      required: false
      schema:
        type: string
      description: Filter results by the `to` field.
      example: '%2b19195551234'
    from:
      name: from
      in: query
      required: false
      schema:
        type: string
      description: Filter results by the `from` field.
      example: '%2b19195554321'
    name:
      name: name
      in: query
      required: false
      schema:
        type: string
      description: Filter results by the `name` field.
      example: my-custom-name
    minCreatedTime:
      name: minCreatedTime
      in: query
      required: false
      schema:
        type: string
      description: >-
        Filter results to conferences which have a `createdTime` after or at
        `minCreatedTime` (in ISO8601 format).
      example: '2022-06-21T19:13:21Z'
    maxCreatedTime:
      name: maxCreatedTime
      in: query
      required: false
      schema:
        type: string
      description: >-
        Filter results to conferences which have a `createdTime` before or at
        `maxCreatedTime` (in ISO8601 format).
      example: '2022-06-21T19:13:21Z'
    minStartTime:
      name: minStartTime
      in: query
      required: false
      schema:
        type: string
      description: >-
        Filter results to recordings which have a `startTime` after or including
        `minStartTime` (in ISO8601 format).
      example: '2022-06-21T19:13:21Z'
    maxStartTime:
      name: maxStartTime
      in: query
      required: false
      schema:
        type: string
      description: >-
        Filter results to recordings which have a `startTime` before
        `maxStartTime` (in ISO8601 format).
      example: '2022-06-21T19:13:21Z'
    pageSize:
      name: pageSize
      in: query
      required: false
      schema:
        type: integer
        format: int32
        minimum: 1
        maximum: 1000
        default: 1000
      description: Specifies the max number of conferences that will be returned.
      example: 500
    minStartTimeCalls:
      name: minStartTime
      in: query
      required: false
      schema:
        type: string
      description: >-
        Filter results to calls which have a `startTime` after or including
        `minStartTime` (in ISO8601 format).
      example: '2022-06-21T19:13:21Z'
    maxStartTimeCalls:
      name: maxStartTime
      in: query
      required: false
      schema:
        type: string
      description: >-
        Filter results to calls which have a `startTime` before or including
        `maxStartTime` (in ISO8601 format).
      example: '2022-06-21T19:13:21Z'
    pageSizeCalls:
      name: pageSize
      in: query
      required: false
      schema:
        type: integer
        format: int32
        minimum: 1
        maximum: 10000
        default: 1000
      description: Specifies the max number of calls that will be returned.
      example: 500
    pageToken1:
      name: pageToken
      in: query
      required: false
      schema:
        type: string
      description: >-
        Not intended for explicit use. To use pagination, follow the links in
        the `Link` header of the response, as indicated in the endpoint
        description.
      example: eyJwYWdlVG9rZW4iOiJ0b2tlbiJ9
    disconnectCause:
      name: disconnectCause
      in: query
      required: false
      schema:
        type: string
      description: Filter results to calls with specified call Disconnect Cause.
      example: hangup
    accountId1:
      in: path
      name: accountId
      required: true
      schema:
        type: string
        description: Your Bandwidth Account ID.
        example: '9900000'
    requestId:
      in: path
      name: requestId
      required: true
      schema:
        type: string
        format: uuid
        description: The phone number lookup request ID from Bandwidth.
        example: 004223a0-8b17-41b1-bf81-20732adf5590
    tfPhoneNumberPathParam:
      in: path
      name: phoneNumber
      required: true
      schema:
        $ref: '#/components/schemas/tfPhoneNumber'
      description: Valid Toll-Free telephone number in E.164 format.
      example: '+18885555555'
    webhookSubscriptionIdPathParam:
      in: path
      name: id
      required: true
      schema:
        type: string
      description: Webhook subscription ID
      example: 7bt57JcsVYJrN9K1OcV1Nu
  examples:
    smsMessageReceivedCallbackExample:
      summary: An example of a sms message-received callback body.
      value:
        time: '2025-01-06T15:43:35.502180Z'
        type: message-received
        to: '+12345678902'
        description: Incoming message received
        message:
          id: 14762070468292kw2fuqty55yp2b2
          owner: '+12345678902'
          applicationId: 93de2206-9669-4e07-948d-329f4b722ee2
          time: '2025-01-06T15:43:34.000000Z'
          segmentCount: 1
          direction: in
          to:
            - '+12345678902'
          from: '+12345678901'
          text: Hey, check out this SMS!
    mmsMessageReceivedCallbackExample:
      summary: An example of a mms message-received callback body.
      value:
        time: '2024-09-14T18:20:45.160744Z'
        type: message-received
        to: '+12345678902'
        description: Incoming message received
        message:
          id: 14762070468292kw2fuqty55yp2b2
          owner: '+12345678902'
          applicationId: 93de2206-9669-4e07-948d-329f4b722ee2
          time: '2024-09-14T18:20:45.160744Z'
          segmentCount: 1
          direction: in
          to:
            - '+12345678902'
            - '+12345678903'
          from: '+12345678901'
          text: Hey, check out the MMS!
          media:
            - >-
              https://messaging.bandwidth.com/api/v2/users/9900902/media/14762070468292kw2fuqty55yp2b2/0/bw.png
    messageSendingCallbackExample:
      summary: An example of a message-sending callback body.
      value:
        time: '2024-06-25T18:42:36.979456Z'
        type: message-sending
        to: '+15554443333'
        description: Message is sending to carrier.
        message:
          id: 1593110555875xo7watq5px6rbe5d
          owner: '+15552221111'
          applicationId: cfd4fb83-7531-4acc-b471-42d0bb76a65c
          time: '2024-06-25T18:42:35.876906Z'
          segmentCount: 1
          direction: out
          to:
            - '+15554443333'
          from: '+15552221111'
          text: ''
          media:
            - https://dev.bandwidth.com/images/bandwidth-logo.png
          tag: your tag here
    smsMessageDeliveredCallbackExample:
      summary: An example of a sms message-delivered callback body.
      value:
        type: message-delivered
        time: '2024-09-14T18:20:11.160744Z'
        description: Message delivered to carrier.
        to: '+12345678902'
        message:
          id: 14762070468292kw2fuqty55yp2b2
          time: '2024-09-14T18:20:11.160744Z'
          to:
            - '+12345678902'
          from: '+12345678901'
          text: ''
          applicationId: 93de2206-9669-4e07-948d-329f4b722ee2
          owner: '+12345678902'
          direction: out
          segmentCount: 1
    mmsMessageDeliveredCallbackExample:
      summary: An example of a mms message-delivered callback body.
      value:
        type: message-delivered
        time: '2024-09-14T18:20:24.160544Z'
        description: Message delivered to carrier.
        to: '+12345678902'
        message:
          id: 14762070468292kw2fuqty55yp2b2
          time: '2024-09-14T18:20:24.160544Z'
          to:
            - '+12345678902'
          from: '+12345678901'
          text: ''
          applicationId: 93de2206-9669-4e07-948d-329f4b722ee2
          owner: '+12345678902'
          direction: out
          segmentCount: 1
          media:
            - https://dev.bandwidth.com/images/bandwidth-logo.png
    groupMmsMessageDeliveredCallbackExample:
      summary: An example of a group mms message-delivered callback body.
      value:
        type: message-delivered
        time: '2024-09-14T18:20:17.160544Z'
        description: Message delivered to carrier.
        to: '+12345678902'
        message:
          id: 14762070468292kw2fuqty55yp2b2
          time: '2024-09-14T18:20:17.160544Z'
          to:
            - '+12345678902'
            - '+12345678903'
          from: '+12345678901'
          text: ''
          applicationId: 93de2206-9669-4e07-948d-329f4b722ee2
          owner: '+12345678902'
          direction: out
          segmentCount: 1
    messageFailedCallbackExample:
      summary: An example of a message-failed callback body.
      value:
        type: message-failed
        time: '2024-12-18T16:51:27.704450Z'
        description: forbidden to country
        to: '+52345678903'
        errorCode: 4432
        message:
          id: 14762070468292kw2fuqty55yp2b2
          time: '2024-12-18T16:51:27.704450Z'
          to:
            - '+12345678902'
            - '+52345678903'
          from: '+12345678901'
          text: ''
          applicationId: 93de2206-9669-4e07-948d-329f4b722ee2
          media:
            - https://dev.bandwidth.com/images/bandwidth-logo.png
          owner: '+12345678901'
          direction: out
          segmentCount: 1
    createCallResponseExample:
      summary: Example of a createCall Response
      value:
        applicationId: 04e88489-df02-4e34-a0ee-27a91849555f
        accountId: '9900000'
        callId: c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
        to: '+19195551234'
        from: '+19195554312'
        enqueuedTime: '2022-06-16T13:15:07.160Z'
        callUrl: >-
          https://voice.bandwidth.com/api/v2/accounts/9900000/calls/c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85
        callTimeout: 30
        callbackTimeout: 15
        tag: My custom tag value
        answerMethod: POST
        answerUrl: https://myServer.example/bandwidth/webhooks/answer
        answerFallbackMethod: POST
        answerFallbackUrl: https://myServer.example/bandwidth/webhooks/answerFallback
        disconnectMethod: POST
        disconnectUrl: https://myServer.example/bandwidth/webhooks/disconnect
        username: mySecretUsername
        password: '*****'
        fallbackUsername: mySecretUsername
        fallbackPassword: '*****'
        priority: 5
    listConferencesResponseExample:
      summary: Example of a listConferences Response
      value:
        - id: conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9
          name: my-conference-name
          createdTime: '2022-06-17T22:19:40.375Z'
          completedTime: '2022-06-17T22:20:00.000Z'
          conferenceEventUrl: https://myServer.example/bandwidth/webhooks/conferenceEvent
          conferenceEventMethod: POST
          tag: my custom tag
    voiceBadRequestErrorExample:
      summary: Example of a Bad Request (400) Error
      value:
        type: validation
        description: 'Invalid answerUrl: only http and https are allowed.'
    voiceUnauthorizedErrorExample:
      summary: Example of an Unauthorized (401) Error
      value:
        type: validation
        description: 'Invalid answerUrl: only http and https are allowed.'
    voiceForbiddenErrorExample:
      summary: Example of a Forbidden (403) Error
      value:
        type: validation
        description: 'Invalid answerUrl: only http and https are allowed.'
    voiceNotFoundErrorExample:
      summary: Example of a Not Found (404) Error
      value:
        type: validation
        description: 'Invalid answerUrl: only http and https are allowed.'
    voiceNotAllowedErrorExample:
      summary: Example of a Not Allowed (405) Error
      value:
        type: validation
        description: 'Invalid answerUrl: only http and https are allowed.'
    voiceConflictErrorExample:
      summary: Example of a Conflict (409) Error
      value:
        type: validation
        description: 'Invalid answerUrl: only http and https are allowed.'
    voiceUnsupportedMediaTypeErrorExample:
      summary: Example of an Unsupported Media Type (415) Error
      value:
        type: validation
        description: 'Invalid answerUrl: only http and https are allowed.'
    voiceTooManyRequestsErrorExample:
      summary: Example of a Too Many Requests (429) Error
      value:
        type: validation
        description: 'Invalid answerUrl: only http and https are allowed.'
    voiceInternalServerErrorExample:
      summary: Example of an Internal Server (500) Error
      value:
        type: validation
        description: 'Invalid answerUrl: only http and https are allowed.'
    singleNumberRequestExample:
      summary: Number Lookup Request
      value:
        phoneNumbers:
          - '+19196104423'
    multipleNumberRequestExample:
      summary: Number Lookup Request for Multiple Numbers
      value:
        phoneNumbers:
          - '+19196104423'
          - '+19196104424'
    lookupInProgressExample:
      summary: Numbers Lookup In Progress
      value:
        links:
          - href: href
            rel: rel
            method: GET
        data:
          requestId: 004223a0-8b17-41b1-bf81-20732adf5590
          status: IN_PROGRESS
          results: []
        errors: []
    lookupFailedExample:
      summary: Numbers Lookup Failed
      value:
        links:
          - href: href
            rel: rel
            method: GET
        data:
          requestId: 004223a0-8b17-41b1-bf81-20732adf5590
          status: FAILED
          results: []
        errors:
          - code: NO-MATCH
            description: The following TNs could not be found in the Number Industry data
            meta:
              phoneNumbers:
                - '+13992077164'
              message: Invalid TNs
              code: 1001
            type: NumberInventory
    lookupPartialExample:
      summary: Numbers Lookup Partial Complete
      value:
        links:
          - href: href
            rel: rel
            method: GET
        data:
          requestId: 004223a0-8b17-41b1-bf81-20732adf5590
          status: PARTIAL_COMPLETE
          results:
            - phoneNumber: '+19196104423'
              lineType: MOBILE
              messagingProvider: Verizon Wireless
              voiceProvider: Verizon Wireless
              countryCodeA3: USA
            - phoneNumber: '+19196104424'
              lineType: MOBILE
              messagingProvider: T-Mobile USA
              voiceProvider: T-Mobile USA
              countryCodeA3: USA
        errors:
          - code: NO-MATCH
            description: The following TNs could not be found in the Number Industry data
            meta:
              phoneNumbers:
                - '+13992077164'
              message: Invalid TNs
              code: 1001
            type: NumberInventory
    lookupCompleteExample:
      summary: Numbers Lookup Complete (without DNI)
      value:
        links:
          - href: href
            rel: rel
            method: GET
        data:
          requestId: 004223a0-8b17-41b1-bf81-20732adf5590
          status: COMPLETE
          results:
            - phoneNumber: '+10072904497'
              lineType: MOBILE
              messagingProvider: Verizon Wireless
              voiceProvider: Verizon Wireless
              countryCodeA3: USA
            - phoneNumber: '+10072904498'
              lineType: MOBILE
              messagingProvider: T-Mobile USA
              voiceProvider: T-Mobile USA
              countryCodeA3: USA
        errors: []
    lookupCompleteWithDniExample:
      summary: Numbers Lookup Complete (with DNI)
      value:
        links:
          - href: href
            rel: rel
            method: GET
        data:
          requestId: 20732adf-bf81-8b17-41b1-004223a05590
          status: COMPLETE
          results:
            - phoneNumber: '+10072904497'
              countryCodeA3: USA
              lineType: MOBILE
              messagingProvider: T-MOBILE USA INC
              voiceProvider: T-MOBILE USA INC
              latestMessageDeliveryStatus: ACTIVE
              initialMessageDeliveryStatusDate: '2025-05-14'
              latestMessageDeliveryStatusDate: '2025-05-18'
            - phoneNumber: '+10072904498'
              countryCodeA3: USA
              lineType: FIXED
              voiceProvider: VERIZON
              latestMessageDeliveryStatus: DEACTIVATED
              initialMessageDeliveryStatusDate: '2025-09-05'
              latestMessageDeliveryStatusDate: '2025-09-05'
            - phoneNumber: '+10072904499'
              lineType: MOBILE
              countryCodeA3: USA
              messagingProvider: VERIZON
              voiceProvider: VERIZON
              deactivationReporter: Verizon Wireless
              deactivationDate: '2025-09-29 01:23:00'
              deactivationEvent: DEACTIVATED
              latestMessageDeliveryStatus: UNKNOWN
        errors: []
    badRequestExample:
      summary: Example Bad Request Error
      value:
        links: []
        data: {}
        errors:
          - type: bad-request
            description: >-
              Bad Request. Ensure that you have set the requestId as a URL path
              parameter.
    unauthorizedExample:
      summary: Unauthorized Error
      value:
        links: []
        data: {}
        errors:
          - type: Unauthorized
            description: You are not authorized to access this resource.
            code: '1'
        page: null
    forbiddenExample:
      summary: Forbidden Error
      value:
        links: []
        data: {}
        errors:
          - type: Forbidden
            description: You do not have permission to access this resource.
            code: '2'
        page: null
    unsupportedMediaTypeExample:
      summary: Unsupported Media Type Error
      value:
        links: []
        data: {}
        errors:
          - type: invalid-content-type
            description: >-
              Invalid content-type. Ensure that your content-type header is set
              to application/json.
    notFoundExample:
      summary: Not Found Error
      value:
        links: []
        data: {}
        errors:
          - type: not-found
            description: >-
              RequestId not found. Ensure that the requestId used in the URL
              path is valid and maps to a previous request that was submitted.
    tooManyRequestsExample:
      summary: Too Many Requests Error
      value:
        links: []
        data: {}
        errors:
          - type: rate-limiting
            description: >-
              Rate limit exceeded. Wait for the time specified in the
              Retry-After header before sending another request.
    internalServerErrorExample:
      summary: Internal Server Error
      value:
        links: []
        data: {}
        errors:
          - code: '500'
            type: unexpected-error
            description: >-
              Unexpected error. Please contact Bandwidth Support if your
              requests are receiving this status code for an extended period of
              time.
  requestBodies:
    createMessageRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/messageRequest'
      required: true
    createMultiChannelMessageRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/multiChannelMessageRequest'
      required: true
    uploadMediaRequest:
      content:
        application/json:
          schema:
            type: string
            format: binary
        application/ogg:
          schema:
            type: string
            format: binary
        application/pdf:
          schema:
            type: string
            format: binary
        application/rtf:
          schema:
            type: string
            format: binary
        application/zip:
          schema:
            type: string
            format: binary
        application/x-tar:
          schema:
            type: string
            format: binary
        application/xml:
          schema:
            type: string
            format: binary
        application/gzip:
          schema:
            type: string
            format: binary
        application/x-bzip2:
          schema:
            type: string
            format: binary
        application/x-gzip:
          schema:
            type: string
            format: binary
        application/smil:
          schema:
            type: string
            format: binary
        application/javascript:
          schema:
            type: string
            format: binary
        audio/mp4:
          schema:
            type: string
            format: binary
        audio/mpeg:
          schema:
            type: string
            format: binary
        audio/ogg:
          schema:
            type: string
            format: binary
        audio/flac:
          schema:
            type: string
            format: binary
        audio/webm:
          schema:
            type: string
            format: binary
        audio/wav:
          schema:
            type: string
            format: binary
        audio/amr:
          schema:
            type: string
            format: binary
        audio/3gpp:
          schema:
            type: string
            format: binary
        image/bmp:
          schema:
            type: string
            format: binary
        image/gif:
          schema:
            type: string
            format: binary
        image/heic:
          schema:
            type: string
            format: binary
        image/heif:
          schema:
            type: string
            format: binary
        image/jpeg:
          schema:
            type: string
            format: binary
        image/pjpeg:
          schema:
            type: string
            format: binary
        image/png:
          schema:
            type: string
            format: binary
        image/svg+xml:
          schema:
            type: string
            format: binary
        image/tiff:
          schema:
            type: string
            format: binary
        image/webp:
          schema:
            type: string
            format: binary
        image/x-icon:
          schema:
            type: string
            format: binary
        text/css:
          schema:
            type: string
            format: binary
        text/csv:
          schema:
            type: string
            format: binary
        text/calendar:
          schema:
            type: string
            format: binary
        text/html:
          schema:
            type: string
            format: binary
        text/plain:
          schema:
            type: string
            format: binary
        text/javascript:
          schema:
            type: string
            format: binary
        text/vcard:
          schema:
            type: string
            format: binary
        text/vnd.wap.wml:
          schema:
            type: string
            format: binary
        text/xml:
          schema:
            type: string
            format: binary
        video/avi:
          schema:
            type: string
            format: binary
        video/mp4:
          schema:
            type: string
            format: binary
        video/mpeg:
          schema:
            type: string
            format: binary
        video/ogg:
          schema:
            type: string
            format: binary
        video/quicktime:
          schema:
            type: string
            format: binary
        video/webm:
          schema:
            type: string
            format: binary
        video/x-ms-wmv:
          schema:
            type: string
            format: binary
        video/x-flv:
          schema:
            type: string
            format: binary
      required: true
    createCallRequest:
      description: JSON object containing information to create an outbound call
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/createCall'
    updateCallRequest:
      description: >-
        JSON object containing information to redirect an existing call to a new
        BXML document
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/updateCall'
    updateCallBxmlRequest:
      required: true
      content:
        application/xml:
          schema:
            type: string
            description: A valid BXML document to replace the call's current BXML.
          examples:
            speakSentence:
              summary: Speak Sentence
              value: |-
                <?xml version=\"1.0\" encoding=\"UTF-8\"?>
                <Bxml>
                  <SpeakSentence>This is a test sentence.</SpeakSentence>
                </Bxml>
            redirectUrl:
              summary: Redirect
              value: |-
                <?xml version=\"1.0\" encoding=\"UTF-8\"?>
                <Bxml>
                  <Redirect redirectUrl="https://test.example" redirectMethod="GET"/>
                </Bxml>
    updateCallRecordingRequest:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/updateCallRecording'
    transcribeRecordingRequest:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/transcribeRecording'
    updateConferenceRequest:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/updateConference'
    updateConferenceBxmlRequest:
      required: true
      content:
        application/xml:
          schema:
            type: string
            description: A valid BXML document to replace the call's current BXML.
          examples:
            stopRecording:
              summary: Stop Recording
              value: |-
                <?xml version="1.0" encoding="UTF-8"?>
                <Bxml>
                    <StopRecording/>
                </Bxml>
    updateConferenceMemberRequest:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/updateConferenceMember'
    codeRequest:
      description: MFA code request body.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/codeRequest'
    codeVerify:
      description: MFA code verify request body.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/verifyCodeRequest'
    createSyncLookupRequest:
      description: Synchronous phone number lookup request.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/syncLookupRequest'
          examples:
            singleNumberRequestExample:
              $ref: '#/components/examples/singleNumberRequestExample'
            multipleNumberRequestExample:
              $ref: '#/components/examples/multipleNumberRequestExample'
    createAsyncBulkLookupRequest:
      description: Asynchronous bulk phone number lookup request.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/asyncLookupRequest'
          examples:
            multipleNumberRequestExample:
              $ref: '#/components/examples/multipleNumberRequestExample'
    requestTollFreeVerificationRequest:
      description: Request for verification of a toll-free phone number.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/verificationRequest'
    updateTollFreeVerificationRequestRequest:
      description: Update a request for verification of a toll-free phone number.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/tfvSubmissionWrapper'
    verificationWebhookRequest:
      description: Verification callback status of a toll-free phone number.
      required: true
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/verificationWebhook'
              - $ref: '#/components/schemas/verificationDenialWebhook'
              - $ref: '#/components/schemas/failureWebhook'
              - $ref: '#/components/schemas/blockedWebhook'
    webhookSubscriptionRequest:
      description: >-
        Information about a webhook that Bandwidth should send upon the
        completion of event customer is trying to subscribe to.
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/webhookSubscriptionRequestSchema'
  securitySchemes:
    Basic:
      type: http
      scheme: basic
      description: >-
        Basic authentication is a simple authentication scheme built into the
        HTTP protocol. To use it, send your HTTP requests with an
        `Authorization` header that contains the word `Basic` followed by a
        space and a Base64-encoded string `username:password`.


        - Example: `Authorization: Basic ZGVtbZpwQDU1dzByZA==`
    OAuth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://api.bandwidth.com/api/v1/oauth2/token
          scopes: {}
  callbacks:
    inboundCallback:
      '{inboundCallbackUrl}':
        post:
          requestBody:
            required: true
            description: >-
              <p>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. 

              <p>The payload type will be one of <code>message-received</code>,
              <code>suggestion-response</code>, or
              <code>location-request-response</code>.

              <p>Note that <code>suggestion-response</code> and
              <code>location-request-response</code> callback types are
              pertinent only for RBM messages sent from the
              <code>/messages/multiChannel</code> endpoint.

              </p><p>Please visit <a
              href='/docs/messaging/webhooks/'>Webhooks</a></p>
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/inboundCallback'
                examples:
                  smsMessageReceivedCallback:
                    $ref: '#/components/examples/smsMessageReceivedCallbackExample'
                  mmsMessageReceivedCallback:
                    $ref: '#/components/examples/mmsMessageReceivedCallbackExample'
          responses:
            '200':
              description: OK
            '202':
              description: Accepted
    statusCallback:
      '{statusCallbackUrl}':
        post:
          requestBody:
            required: true
            description: >-
              <p>This Outbound Message Webhook is an envelope containing status
              information regarding a message sent (MT)

              from your message-enabled Bandwidth telephone number.
               <p>The payload type will be one of <code>message-sending</code>, <code>message-delivered</code>, <code>message-failed</code> or <code>message-read</code>.
               <p>Note that <code>message-read</code> callbacks are pertinent only for RBM messages sent from the <code>/messages/multiChannel</code> endpoint.
              </p><p>Please visit <a
              href='/docs/messaging/webhooks/'>Webhooks</a></p>
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/statusCallback'
                examples:
                  messageSendingCallback:
                    $ref: '#/components/examples/messageSendingCallbackExample'
                  smsMessageDeliveredCallback:
                    $ref: '#/components/examples/smsMessageDeliveredCallbackExample'
                  mmsMessageDeliveredCallback:
                    $ref: '#/components/examples/mmsMessageDeliveredCallbackExample'
                  groupMmsMessageDeliveredCallback:
                    $ref: >-
                      #/components/examples/groupMmsMessageDeliveredCallbackExample
                  messageFailedCallback:
                    $ref: '#/components/examples/messageFailedCallbackExample'
          responses:
            '200':
              description: OK
            '202':
              description: Accepted
    tfVerificationStatus:
      your_url.com/webhookService:
        post:
          summary: TFV status updates sent to customer's webhook URL.
          description: >-
            Unique webhook URL provided by customers to which Bandwidth sends a
            POST request to notify customer regarding TFV status updates.
          operationId: tfvRequest
          parameters:
            - description: >-
                64-character lowercase hexidecimal HMAC calculated with a shared
                secret key, the canonicalized request body, and SHA256. It is
                only included when a shared secret key is set through webhook
                subscription.
              example: ca7b9e9816c90d336f5dca529e733354b81535c7af027b81878ac98afb2dbaa2
              in: header
              name: x-bandwidth-signature-hmac-sha256
              schema:
                type: string
          requestBody:
            $ref: '#/components/requestBodies/verificationWebhookRequest'
          responses:
            '204':
              $ref: '#/components/responses/noContentResponse'
            '400':
              $ref: '#/components/responses/tfvBadRequestResponse'
            '401':
              $ref: '#/components/responses/tfvUnauthorizedResponse'
            '403':
              $ref: '#/components/responses/tfvForbiddenResponse'
            '404':
              $ref: '#/components/responses/tfvNotFoundResponse'
            '405':
              $ref: '#/components/responses/tfvNotAllowedResponse'
            '429':
              $ref: '#/components/responses/tfvTooManyRequestsResponse'
            '500':
              $ref: '#/components/responses/tfvServerErrorResponse'
            '503':
              $ref: '#/components/responses/tfvServiceUnavailableResponse'
