Wazo Call Control / Application API (wazo-calld)

Runtime call control for the Wazo Platform. Originate, answer, hold, mute, transfer, relocate, record and hang up calls; drive adhoc conferences, conferences, meetings, faxes, voicemails, switchboards, parking lots, and the Stasis-based Application API that lets an external program own call routing, playbacks, snoops and node membership.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/wazo-call-control-application-api-wazo-calld"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

wazo-calld-api-openapi.yml Raw ↑
swagger: '2.0'
info:
  title: wazo-calld
  description: Control your calls from a REST API
  version: 1.0.0
  contact:
    name: Wazo Dev Team
    url: https://wazo-platform.org/
    email: dev@wazo.community
  x-logo:
    url: https://wazo-platform.org/images/logo-black.svg
    backgroundColor: '#FAFAFA'
    altText: Wazo Logo
schemes:
- http
basePath: /1.0
produces:
- application/json
x-xivo-port: 9500
x-xivo-name: calld
securityDefinitions:
  wazo_auth_token:
    type: apiKey
    name: X-Auth-Token
    in: header
security:
- wazo_auth_token: []
responses:
  AnotherServiceUnavailable:
    description: Another service is unavailable (e.g. wazo-auth, wazo-confd, Asterisk, ...)
    schema:
      $ref: '#/definitions/Error'
  NotFoundError:
    description: The resource requested was not found on the server
    schema:
      $ref: '#/definitions/Error'
  InvalidRequest:
    description: Invalid request
    schema:
      $ref: '#/definitions/Error'
  NoSuchAdhocConference:
    description: The specified adhoc conference does not exist
    schema:
      $ref: '#/definitions/Error'
  HostAlreadyInConference:
    description: The host call is already in a conference
    schema:
      $ref: '#/definitions/Error'
  NoSuchConference:
    description: The specified conference does not exist
    schema:
      $ref: '#/definitions/Error'
  NoSuchMeeting:
    description: The specified meeting does not exist
    schema:
      $ref: '#/definitions/Error'
  NoSuchMeetingOrParticipant:
    description: The specified meeting or participant does not exist
    schema:
      $ref: '#/definitions/Error'
  FullOrServiceUnavailable:
    description: Parking is full or another service is unavailable (e.g. wazo-auth, wazo-confd, Asterisk, ...)
    schema:
      $ref: '#/definitions/Error'
  NoSuchRelocate:
    description: The specified relocate does not exist
    schema:
      $ref: '#/definitions/Error'
  NoSuchSwitchboard:
    description: The specified switchboard does not exist
    schema:
      $ref: '#/definitions/Error'
  NoSuchTransfer:
    description: The specified transfer does not exist
    schema:
      $ref: '#/definitions/Error'
definitions:
  Error:
    title: Error
    description: Error message for the client
    properties:
      message:
        description: Human readable explanation of the error
        type: string
      error_id:
        description: Identifier of the type of error. It is more precise than the HTTP status code.
        type: string
      details:
        description: Additional information about the error. The keys are specific to each error.
        type: object
      timestamp:
        description: Time when the error occured
        type: number
        format: timestamp
  AdhocConferenceCreation:
    type: object
    properties:
      host_call_id:
        description: The call_id of the host call
        type: string
      participant_call_ids:
        description: The call_id of the participating calls in this conference, excluding the host.
        type: array
        items:
          type: string
  AdhocConference:
    type: object
    properties:
      conference_id:
        description: The ID of the adhoc conference
        type: string
  Application:
    type: object
    properties:
      destination_node_uuid:
        type: string
  ApplicationCalls:
    type: object
    properties:
      items:
        type: array
        items:
          $ref: '#/definitions/ApplicationCall'
  ApplicationCall:
    type: object
    properties:
      id:
        type: string
      status:
        type: string
        description: '* Down: the call is not connected to anything yet

          * Ring: the call just came in the application

          * Progress: the call is playing a progress ringing tone

          * Up: the call is answered and media can be sent/received

          * Ringing: the call is ringing the phone

          '
      caller_id_name:
        type: string
      caller_id_number:
        type: string
      conversation_id:
        type: string
      creation_time:
        type: string
      node_uuid:
        type: string
      on_hold:
        type: boolean
      is_caller:
        type: boolean
      dialed_extension:
        type: string
      variables:
        type: object
      snoops:
        type: object
  ApplicationCallRequestToExten:
    type: object
    properties:
      exten:
        type: string
      context:
        type: string
      autoanswer:
        type: boolean
        default: false
      variables:
        type: object
        description: channel variables that should be assigned on this new channel
      displayed_caller_id_name:
        type: string
      displayed_caller_id_number:
        type: string
    required:
    - exten
    - context
  ApplicationCallRequestToUser:
    type: object
    properties:
      autoanswer:
        type: boolean
        default: false
      variables:
        type: object
        description: channel variables that should be assigned on this new channel
      displayed_caller_id_name:
        type: string
      displayed_caller_id_number:
        type: string
      user_uuid:
        type: string
    required:
    - user_uuid
  ApplicationNodes:
    type: object
    properties:
      items:
        type: array
        items:
          $ref: '#/definitions/ApplicationNode'
  ApplicationNode:
    type: object
    properties:
      uuid:
        type: string
      calls:
        type: array
        items:
          $ref: '#/definitions/ApplicationCall'
  ApplicationNodeRequest:
    type: object
    properties:
      calls:
        type: array
        items:
          $ref: '#/definitions/ApplicationNodeCallRequest'
  ApplicationNodeCallRequest:
    type: object
    properties:
      id:
        type: string
  ApplicationPlayback:
    type: object
    properties:
      uuid:
        type: string
        readOnly: true
      uri:
        type: string
      language:
        type: string
      state:
        type: string
  ApplicationSnoops:
    type: object
    properties:
      items:
        type: array
        items:
          $ref: '#/definitions/ApplicationSnoop'
  ApplicationSnoop:
    type: object
    properties:
      uuid:
        type: string
        readOnly: true
      snooped_call_id:
        type: string
        readOnly: true
      snooping_call_id:
        type: string
      whisper_mode:
        type: string
        enum:
        - in
        - out
        - none
        - both
    required:
    - snooping_call_id
    - whisper_mode
  ApplicationSnoopPut:
    type: object
    properties:
      whisper_mode:
        type: string
        enum:
        - in
        - out
        - none
        - both
  ConnectCallToUserRequest:
    type: object
    properties:
      timeout:
        description: 'timeout in seconds for the dial attempt to the targeted user,

          or null for no timeout(infinite ring time).

          Omission leads to a default timeout of 30s.

          '
        type: integer
  CallRequest:
    type: object
    properties:
      destination:
        $ref: '#/definitions/CallRequestDestination'
      source:
        $ref: '#/definitions/CallRequestSource'
      variables:
        description: Channel variables to set
        type: object
    required:
    - destination
    - source
  CallRequestDestination:
    description: Destination parameters
    type: object
    properties:
      extension:
        type: string
      context:
        type: string
      priority:
        type: integer
    required:
    - extension
    - context
    - priority
  CallRequestSource:
    description: Caller parameters
    type: object
    properties:
      user:
        type: string
        description: UUID of the user making the call
      line_id:
        type: integer
        description: ID of the line of the user used to make the call. Default is the main line of the user.
      from_mobile:
        type: boolean
        description: Start the call from the user's mobile phone. Default is False
      all_lines:
        type: boolean
        description: Use all of the lines of the user to make the call (ignored when `line_id` is specified).
      auto_answer:
        type: boolean
        description: 'Inform the phone that it should answer automatically. Limitation: this does not work if `all_lines`
          is true, if `from_mobile` is true or if the phone is SCCP.'
    required:
    - user
  Call:
    type: object
    properties:
      call_id:
        type: string
      conversation_id:
        type: string
      user_uuid:
        type: string
      status:
        type: string
      talking_to:
        $ref: '#/definitions/TalkingTo'
      bridges:
        type: array
        items:
          type: string
      creation_time:
        type: string
        format: date-time
      direction:
        type: string
        enum:
        - internal
        - outbound
        - inbound
        - unknown
      answer_time:
        type: string
        format: date-time
      hangup_time:
        type: string
        format: date-time
      caller_id_name:
        type: string
      caller_id_number:
        type: string
      peer_caller_id_name:
        type: string
      peer_caller_id_number:
        type: string
      on_hold:
        type: boolean
      muted:
        type: boolean
      is_caller:
        type: boolean
        description: This value is only correct when the destination of the call is a user or outgoing call. In other cases,
          it is always False.
      parked:
        type: boolean
        description: If this call is currently parked
      is_video:
        type: boolean
        description: If this call has a video track
      dialed_extension:
        type: string
      sip_call_id:
        type: string
        description: Matches the `Call-ID` SIP header of the call. This value can be `null` when not using SIP
        readOnly: true
      line_id:
        type: integer
        description: Line ID of the endpoint making the call
        readOnly: true
      record_state:
        type: string
        enum:
        - active
        - inactive
  UserCallRequest:
    type: object
    properties:
      extension:
        description: Extension to call
        type: string
      variables:
        description: Channel variables to set
        type: object
      line_id:
        type: integer
        description: ID of the line of the user used to make the call. Default is the main line of the user.
      from_mobile:
        type: boolean
        description: 'Start the call from the user''s mobile phone. Default is False. Limitation: this feature may return
          a wrong call_id if the outgoing call used to dial the mobile number has more than one associated trunk.'
      all_lines:
        type: boolean
        description: Use all of the lines of the user to make the call (ignored when `line_id` is specified).
      auto_answer_caller:
        type: boolean
        description: 'Inform the caller phone that it should answer automatically. Limitation: this does not work if `all_lines`
          is true, if `from_mobile` is true or if the phone is SCCP.'
    required:
    - extension
  TalkingTo:
    type: object
    properties:
      '{channel_id}':
        type: string
  ParticipantList:
    type: object
    properties:
      items:
        type: array
        items:
          $ref: '#/definitions/Participant'
  Participant:
    type: object
    properties:
      id:
        description: The participant's ID
        type: string
      caller_id_name:
        description: The participant's name
        type: string
      caller_id_num:
        description: The participant's number
        type: string
      muted:
        description: Is the participant muted?
        type: boolean
      join_time:
        description: Elapsed seconds since the participant joined the conference
        type: integer
      admin:
        description: Is the participant an admin of the conference?
        type: boolean
      language:
        description: The participant's language
        type: string
      call_id:
        description: The ID of the participant's call
        type: string
      user_uuid:
        description: The UUID of the participant's user. `null` when there is no user.
        type: string
  ConfigPatchItem:
    properties:
      op:
        type: string
        description: 'Patch operation. Supported operations: `replace`.'
      path:
        type: string
        description: 'JSON path to operate on. Supported paths: `/debug`.'
      value:
        type: object
        description: The new value for the operation. Type of value is dependent of `path`
  EndpointLine:
    type: object
    properties:
      technology:
        type: string
        description: The technology of that endpoint only (SIP, SCCP or custom)
      name:
        type: string
        description: The name of that given endpoint in Asterisk
      id:
        type: integer
        description: The ID of the matching confd line
      registered:
        type: boolean
        description: Wether or not this trunk is registered.
      current_call_count:
        type: integer
        description: The number of ongoing calls on that line
  EndpointLines:
    type: object
    properties:
      items:
        type: array
        items:
          $ref: '#/definitions/EndpointLine'
      total:
        type: integer
        description: The number of line endpoint
      filtered:
        type: integer
        description: The number of line endpoint matching the searched terms
  EndpointTrunk:
    type: object
    properties:
      technology:
        type: string
        description: The technology of that endpoint only (SIP, IAX or custom)
      name:
        type: string
        description: The name of that given endpoint in Asterisk
      id:
        type: integer
        description: The ID of the matching confd trunk
      registered:
        type: boolean
        description: Wether or not this trunk is registered.
      current_call_count:
        type: integer
        description: The number of ongoing calls on that trunk
  EndpointTrunks:
    type: object
    properties:
      items:
        type: array
        items:
          $ref: '#/definitions/EndpointTrunk'
      total:
        type: integer
        description: The number of trunk endpoint
      filtered:
        type: integer
        description: The number of trunk endpoint matching the searched terms
  Fax:
    type: object
    properties:
      id:
        type: string
        description: The fax ID
      call_id:
        type: string
        description: The ID of the call that produced this fax
      extension:
        type: string
        description: The extension where the fax was sent
      context:
        type: string
        description: The context where the fax was sent
      caller_id:
        type: string
        description: The Caller ID that was presented to the fax recipient
      ivr_extension:
        type: string
        description: Extension to compose before sending fax. Useful for fax in IVR
      wait_time:
        type: string
        description: Time waiting before sending fax when destination has answered (in seconds)
      user_uuid:
        type: string
        description: The UUID of the user that sent the fax. May be null if the fax was sent by another service.
      tenant_uuid:
        type: string
        description: The tenant UUID where the fax was sent from
  MeetingStatus:
    type: object
    properties:
      full:
        description: Wether the meeting is full of not
        type: boolean
  ParkingLot:
    title: Parking lot
    type: object
    properties:
      id:
        type: integer
        example: 3
      name:
        type: string
        example: My Parking Lot
      slots_start:
        type: string
        example: '501'
      slots_end:
        type: string
        example: '510'
      slots_total:
        description: Total number of slots available for parking
        type: integer
        example: 10
      slots_remaining:
        description: Remaining slots to park a call in this lot
        type: integer
        example: 9
      default_timeout:
        description: Default timeout to assign if a timeout value was unspecified when a call was parked
        type: integer
        example: 45
      calls:
        type: array
        items:
          $ref: '#/definitions/ParkedCallItem'
  ParkedCallItem:
    title: Parked Call
    type: object
    properties:
      call_id:
        type: string
        example: 123456789.1
      caller_id_name:
        description: Caller ID name of the person who's call was parked
        type: string
        example: Alice
      caller_id_num:
        description: Caller ID num of the person who's call was parked
        type: string
        example: 1001
      conversation_id:
        type: string
        example: 123456789.0
      parker_caller_id_name:
        description: Caller ID name of the person who parked the call
        type: string
        example: Bob
      parker_caller_id_num:
        description: Caller ID num of the person who parked the call
        type: string
        example: 1002
      slot:
        description: Slots where this call has been parked
        type: string
        example: 508
      parked_at:
        description: Timestamp when the call was parked
        type: string
        format: date-time
      timeout_at:
        description: 'Timestamp when the call will timeout (null if timeout is disabled)

          '
        type: string
        format: date-time
  ParkCallBody:
    title: Information needed to park the call
    required:
    - parking_id
    type: object
    properties:
      parking_id:
        description: Parking lot ID in which to park the call
        type: integer
        minimum: 1
        example: 2
      preferred_slot:
        description: 'Preferred slot in which to park the call.  If slots is already

          occupied, another slot will be automatically chosen

          '
        type: string
        example: '501'
      timeout:
        description: 'A timeout specified in seconds after which the call will redial the

          parker.  If unspecified, it will defaults to the parking''s timeout value.

          (A value of 0 disables the timeout feature)

          '
        type: integer
        minimum: 0
        example: 30
  ParkedCallInfo:
    description: Information returned when a call has been parked
    properties:
      slot:
        description: Parking slot where this call has been parked
        type: string
        example: 501
      timeout_at:
        description: Timestamp when the call will timeout
        type: string
        format: date-time
  LocationLine:
    type: object
    properties:
      line_id:
        type: integer
        description: the ID of the line where the relocated call should be connected
      contact:
        type: string
        description: the SIP contact to use when multiple registers are used
    required:
    - line_id
  Relocate:
    type: object
    properties:
      uuid:
        description: Unique identifier of the relocate
        type: string
      relocated_call:
        description: Call ID of the call being relocated to someone else
        type: string
      initiator_call:
        description: Call ID of the relocate initiator
        type: string
      recipient_call:
        description: Call ID of the recipient of the relocate.
        type: string
      completions:
        description: How the relocate will behave. "answer" will complete the relocate as soon as the destination answers.
          "api" will wait for a call to API `/complete`. "answer" overrides all other values.
        $ref: '#/definitions/RelocateCompletions'
      initiator:
        description: The user UUID of the relocate initiator
        type: string
  RelocateList:
    type: object
    properties:
      items:
        $ref: '#/definitions/Relocate'
  RelocateCompletions:
    type: array
    items:
      $ref: '#/definitions/RelocateCompletion'
  RelocateCompletion:
    type: string
    default: answer
    enum:
    - answer
    - api
  Timeout:
    description: Number of seconds to wait for the recipient to answer
    type: integer
  UserRelocateRequest:
    type: object
    properties:
      initiator_call:
        description: Call ID of the relocate initiator. This call must be owned by the authenticated user.
        type: string
      destination:
        type: string
        description: What kind of destination the relocated call should be connected
        enum:
        - line
        - mobile
      location:
        description: "Describes where exactly the relocated call should be connected. Attributes depend on the `destination`\
          \ value. Example\n```\n{\n  ...\n  destination: line\n  location: {line_id: 14}\n}\n```\n"
        type: object
        $ref: '#/definitions/UserRelocateLocation'
      completions:
        $ref: '#/definitions/RelocateCompletions'
      timeout:
        $ref: '#/definitions/Timeout'
      auto_answer:
        type: boolean
        description: 'Inform the destination phone that it should answer automatically. Limitation: this does not work on
          SCCP phones.'
    example:
      initiator_call: '123456.789'
      destination: line
      location:
        line_id: 14
        contact: 5f3ff5ga
      completions:
      - answer
      auto_answer: false
    required:
    - initiator_call
    - destination
  UserRelocateLocation:
    properties:
      line:
        $ref: '#/definitions/LocationLine'
  StatusSummary:
    type: object
    properties:
      ari:
        $ref: '#/definitions/ComponentWithStatus'
      bus_consumer:
        $ref: '#/definitions/ComponentWithStatus'
      service_token:
        $ref: '#/definitions/ComponentWithStatus'
      plugins:
        $ref: '#/definitions/PluginsStatus'
  PluginsStatus:
    type: object
    properties:
      endpoints:
        $ref: '#/definitions/ComponentWithStatus'
      voicemails:
        $ref: '#/definitions/VoicemailsStatus'
  VoicemailsStatus:
    type: object
    allOf:
    - $ref: '#/definitions/ComponentWithStatus'
    - properties:
        cache_items:
          type: integer
  ComponentWithStatus:
    type: object
    properties:
      status:
        $ref: '#/definitions/StatusValue'
  StatusValue:
    type: string
    enum:
    - fail
    - ok
  SwitchboardQueuedCalls:
    type: object
    properties:
      items:
        type: array
        items:
          $ref: '#/definitions/SwitchboardQueuedCall'
  SwitchboardQueuedCall:
    type: object
    properties:
      id:
        type: string
      caller_id_name:
        type: string
      caller_id_number:
        type: string
  SwitchboardHeldCalls:
    type: object
    properties:
      items:
        type: array
        items:
          $ref: '#/definitions/SwitchboardHeldCall'
  SwitchboardHeldCall:
    type: object
    properties:
      id:
        type: string
      caller_id_name:
        type: string
      caller_id_number:
        type: string
  CallID:
    type: object
    properties:
      call_id:
        type: string
  TransferFlow:
    description: Behavior of the transfer. `attended` allows the initiator to talk to the recipient. `blind` does not.
    type: string
    default: attended
    enum:
    - attended
    - blind
  TransferList:
    type: object
    properties:
      items:
        type: array
        items:
          $ref: '#/definitions/Transfer'
  TransferTimeout:
    description: Maximum ringing time before cancelling the transfer (in seconds). Default (or null) is an unlimited ring
      time.
    type: integer
  TransferRequest:
    type: object
    properties:
      transferred_call:
        description: Call ID of the call being transferred to someone else
        type: string
      initiator_call:
        description: Call ID of the transfer initiator
        type: string
      context:
        description: Context of the recipient of the transfer
        type: string
      exten:
        description: Extension of the recipient of the transfer
        type: string
      flow:
        $ref: '#/definitions/TransferFlow'
      variables:
        description: Channel variables to set on the recipient call
        type: object
      timeout:
        $ref: '#/definitions/TransferTimeout'
    required:
    - transferred_call
    - initiator_call
    - context
    - exten
  Transfer:
    type: object
    properties:
      id:
        description: Unique identifier of the transfer
        type: string
      initiator_uuid:
        description: UUID of the user who initiated the transfer
        type: string
      initiator_tenant_uuid:
        description: Tenant UUID of the user who initiated the transfer
        type: string
      transferred_call:
        description: Call ID of the call being transferred to someone else
        type: string
      initiator_call:
        description: Call ID of the transfer initiator
        type: string
      recipient_call:
        description: Call ID of the recipient of the transfer. May be null when the transfer is 'starting'.
        type: string
      status:
        description: The current step of the transfer
        type: string
        enum:
        - abandoned
        - answered
        - blind_transferred
        - ready
        - ringback
        - starting
      flow:
        description: The behavior of the transfer
        type: string
        default: attended
        enum:
        - attended
        - blind
  UserTransferRequest:
    type: object
    properties:
      initiator_call:
        description: Call ID of the transfer initiator. This call must be owned by the authenticated user.
        type: string
      exten:
        description: Extension of the recipient of the transfer
        type: string
      flow:
        $ref: '#/definitions/TransferFlow'
      timeout:
        $ref: '#/definitions/TransferTimeout'
    required:
    - initiator_call
    - exten
  GreetingCopy:
    type: object
    properties:
      dest_greeting:
        type: string
        description: The destination name of the greeting
    required:
    - dest_greeting
  Voicemail:
    type: object
    properties:
      id:
        type: integer
        description: The voicemail's ID
      number:
        type: string
        description: The voicemail's number
      name:
        type: string
        description: The voicemail's name
      accesstype:
        type: string
        description: The voicemail's access type (either personal or global)
        enum:
        - personal
        - global
      folders:
        type: array
        description: The voicemail's folders
        items:
          $ref: '#/definitions/VoicemailFolder'
  VoicemailFolderBase:
    type: object
    properties:
      id:
        type: integer
        description: The folder's ID
      name:
        type: string
        description: The folder's name
      type:
        type: string
        enum:
        - new
        - old
        - urgent
        - other
        description: The folder's type. When a message if left on a voicemail, it is stored in the folder of type "new", unless
          if it is an urgent message, in which case it is left in the folder of type "urgent". When that messages is read,
          it is moved into the folder of type "old". All other folders used the type "other".
  VoicemailFolder:
    type: object
    allOf:
    - $ref: '#/definitions/VoicemailFolderBase'
    - properties:
        messages:
          type: array
          description: The folder's messages
          items:
            $ref: '#/definitions/VoicemailMessageBase'
  VoicemailTranscription:
    type: object
    properties:
      text:
        type: string
        description: The transcription text
        readOnly: true
  VoicemailMessageBase:
    type: object
    properties:
      id:
        type: string
        description: The message's ID
        readOnly: true
      caller_id_name:
        type: string
        description: The caller's name (or null if no caller ID name)
        readOnly: true
      caller_id_num:
        type: string
        description: The caller's number (or null if no caller ID number)
        readOnly: true
      duration:
        type: integer
        description: The message's duration in seconds
        readOnly: true
      empty:
        type: boolean
        description: True if the message is empty (duration is 0)
        readOnly: true
      timestamp:
        type: integer
        description: The time the message was left as a Unix time value
        readOnly: true
  VoicemailTranscriptedMessageBase:
    type: object
    allOf:
    - $ref: '#/definitions/VoicemailMessageBase'
    - properties:
        transcription:
          $ref: '#/definitions/VoicemailTranscription'
          readOnly: true
  AdminVoicemailMessage:
    type: object
    allOf:
    - $ref: '#/definitions/VoicemailMessageBase'
    - properties:
        transcribed:
          type: boolean
          description: True if a transcription exists for this message
          readOnly: true
  VoicemailMessage:
    type: object
    allOf:
    - $ref: '#/definitions/VoicemailTranscriptedMessageBase'
    - properties:
        folder:
          $ref: '#/definitions/VoicemailFolderBase'
          readOnly: true
  VoicemailMessageUpdate:
    type: object
    properties:
      folder_id:
        type: integer
        description: The folder's ID
    required:
    - folder_id
  VoicemailMessageVoicemail:
    type: object
    properties:
      id:
        type: integer
        description: The containing voicemail's ID
        readOnly: true
      name:
        type: string
        description: The containing voicemail's name
        readOnly: true
      accesstype:
        type: string
        description: The containing voicemail's type (either global or personal)
        enum:
        - global
        - personal
        readOnly: true
  VoicemailMessages:
    type: object
    properties:
      items:
        description: List of voicemail messages
        type: array
        items:
          allOf:
          - $ref: '#/definitions/VoicemailMessage'
          - type: object
            properties:
              voicemail:
                $ref: '#/definitions/VoicemailMessageVoicemail'
        readOnly: true
      total:
        type: integer
        readOnly: true
  AdminVoicemailMessages:
    type: object
    properties:
      items:
        description: List of voicemail messages
        type: array
        items:
          allOf:
          - $ref: '#/definitions/AdminVoicemailMessage'
          - type: object
            properties:
              folder:
                $ref: '#/definitions/VoicemailFolderBase'
                readOnly: true
              voicemail:
                $ref: '#/definitions/VoicemailMessageVoicemail'
        readOnly: true
      total:
        type: integer
        readOnly: true
      filtered:
        type: integer
        readOnly: true
parameters:
  TokenID:
    name: token
    in: query
    description: The token's ID
    type: string
  TenantUUID:
    name: Wazo-Tenant
    type: string
    in: header
    description: The tenant's UUID, defining the ownership of a given resource.
    required: false
  direction:
    required: false
    name: direction
    in: query
    type: string
    enum:
    - asc
    - desc
    description: Sort list of items in 'asc' (ascending) or 'desc' (descending) order
  limit:
    required: false
    name: limit
    in: query
    type: integer
    description: Maximum number of items to return in the list
  offset:
    required: false
    name: offset
    in: query
    type: integer
    description: Number of items to skip over in the list. Useful for pagination.
  order:
    required: false
    name: order
    in: query
    type: string
    description: Name of the field to use for sorting the list of items returned.
  search:
    required: false
    name: search
    in: query
    type: string
    description: Search term for filtering a list of items. Only items with a field containing the search term will be returned.
  DTMFDigits:
    name: digits
    in: query
    description: Digits to send via DTMF. Must contain only `0-9*#ABCD` (letters are case insensitive).
    required: true
    type: string
  AdhocConferenceID:
    name: conference_id
    in: path
    description: ID of the adhoc conference
    required: true
    type: string
  ApplicationCallID:
    name: call_id
    in: path
 

# --- truncated at 32 KB (122 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/wazo/refs/heads/main/openapi/wazo-calld-api-openapi.yml