openapi: 3.2.0 info: title: wazo-confd Incalls API description: "Confd exposes an API for managing core resources on a Wazo server such as users, extensions, devices, voicemails, queues, etc. Resources can be associated together to provide additional functionality. For example: By associating a voicemail with a user, calls will automatically fallback on to the voicemail when the user cannot answer.\n\nImplementation notes\n====================\n\nErrors\n------\n\nResponses containing errors will have a status code in the 400 or 500 class. A list of error messages will be returned in the body of the response as a JSON-encoded array:\n\n~~~\n[\n \"Input error - User not found\",\n \"Resource error - User not associated to a line\"\n]\n~~~\n\n\nUpdating resources via PUT\n--------------------------\n\nWhen updating a resource, all fields become optional. In other words, only values that have been changed need to be sent to the server. Please note that this behavior may change in future versions of the API." version: '1.1' license: name: GPL v3 url: http://www.gnu.org/licenses/gpl.txt 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 servers: - url: /1.1 security: - wazo_auth_token: [] tags: - name: incalls paths: /incalls: get: operationId: list_incalls summary: List incoming calls description: '**Required ACL:** `confd.incalls.read`' tags: - incalls parameters: - $ref: '#/components/parameters/tenantuuid' - $ref: '#/components/parameters/recurse' - $ref: '#/components/parameters/order' - $ref: '#/components/parameters/direction' - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - $ref: '#/components/parameters/search' - $ref: '#/components/parameters/userid' responses: '200': description: Incoming calls list content: application/json: schema: $ref: '#/components/schemas/IncallItems' post: operationId: create_incall summary: Create incoming call description: '**Required ACL:** `confd.incalls.create`' tags: - incalls parameters: - $ref: '#/components/parameters/tenantuuid' responses: '201': description: Incoming call created content: application/json: schema: $ref: '#/components/schemas/Incall' '400': $ref: '#/components/responses/CreateError' requestBody: content: application/json: schema: $ref: '#/components/schemas/Incall' description: Incoming call to create required: true /incalls/{incall_id}: get: operationId: get_incall summary: Get incoming call description: '**Required ACL:** `confd.incalls.{incall_id}.read`' tags: - incalls parameters: - $ref: '#/components/parameters/tenantuuid' - $ref: '#/components/parameters/incallid' responses: '200': description: Incoming call content: application/json: schema: $ref: '#/components/schemas/Incall' '404': $ref: '#/components/responses/NotFoundError' put: operationId: update_incall summary: Update incoming call description: '**Required ACL:** `confd.incalls.{incall_id}.update`' tags: - incalls parameters: - $ref: '#/components/parameters/tenantuuid' - $ref: '#/components/parameters/incallid' responses: '204': $ref: '#/components/responses/ResourceUpdated' '400': $ref: '#/components/responses/UpdateError' '404': $ref: '#/components/responses/NotFoundError' requestBody: content: application/json: schema: $ref: '#/components/schemas/Incall' required: true delete: operationId: delete_incall summary: Delete incoming call description: '**Required ACL:** `confd.incalls.{incall_id}.delete`' tags: - incalls parameters: - $ref: '#/components/parameters/tenantuuid' - $ref: '#/components/parameters/incallid' responses: '204': $ref: '#/components/responses/ResourceDeleted' '400': $ref: '#/components/responses/DeleteError' '404': $ref: '#/components/responses/NotFoundError' /incalls/{incall_id}/extensions/{extension_id}: put: operationId: associate_incall_extension summary: Associate incall and extension description: '**Required ACL:** `confd.incalls.{incall_id}.extensions.{extension_id}.update`' tags: - incalls parameters: - $ref: '#/components/parameters/incallid' - $ref: '#/components/parameters/extensionid' responses: '204': description: Incall and Extension associated '400': $ref: '#/components/responses/GenericError' '404': $ref: '#/components/responses/NotFoundError' delete: operationId: dissociate_incall_extension summary: Dissociate incall and extension description: '**Required ACL:** `confd.incalls.{incall_id}.extensions.{extension_id}.delete`' tags: - incalls parameters: - $ref: '#/components/parameters/incallid' - $ref: '#/components/parameters/extensionid' responses: '204': description: Incall and Extension dissociated '400': $ref: '#/components/responses/GenericError' '404': $ref: '#/components/responses/NotFoundError' /incalls/{incall_id}/schedules/{schedule_id}: put: operationId: associate_incall_schedule summary: Associate incall and schedule description: '**Required ACL:** `confd.incalls.{incall_id}.schedules.{schedule_id}.update`' tags: - incalls parameters: - $ref: '#/components/parameters/tenantuuid' - $ref: '#/components/parameters/incallid' - $ref: '#/components/parameters/scheduleid' responses: '204': description: Incall and Schedule associated '400': $ref: '#/components/responses/GenericError' '404': $ref: '#/components/responses/NotFoundError' delete: operationId: dissociate_incall_schedule summary: Dissociate incall and schedule description: '**Required ACL:** `confd.incalls.{incall_id}.schedules.{schedule_id}.delete`' tags: - incalls parameters: - $ref: '#/components/parameters/tenantuuid' - $ref: '#/components/parameters/incallid' - $ref: '#/components/parameters/scheduleid' responses: '204': description: Incall and Schedule dissociated '400': $ref: '#/components/responses/GenericError' '404': $ref: '#/components/responses/NotFoundError' components: responses: NotFoundError: description: The resource requested was not found on the server content: application/json: schema: $ref: '#/components/schemas/Error' ResourceDeleted: description: Resource was deleted successfully ResourceUpdated: description: Resource was updated successfully GenericError: description: An error occurred during the operation content: application/json: schema: $ref: '#/components/schemas/Error' CreateError: description: An error occurred when creating the resource content: application/json: schema: $ref: '#/components/schemas/Error' UpdateError: description: An error occurred when updating the resource content: application/json: schema: $ref: '#/components/schemas/Error' DeleteError: description: An error occurred when deleting the resource content: application/json: schema: $ref: '#/components/schemas/Error' schemas: DestinationApplicationDISA: title: DestinationApplicationDISA allOf: - $ref: '#/components/schemas/DestinationApplication' - properties: application: type: string description: MUST be 'disa' context: type: integer description: The context of the application pin: type: string description: the pin of the application required: - application - context DestinationApplicationDirectory: title: DestinationApplicationDirectory allOf: - $ref: '#/components/schemas/DestinationApplication' - properties: application: type: string description: MUST be 'directory' context: type: integer description: The context of the application required: - application - context DestinationUser: title: DestinationUser properties: type: type: string description: MUST be 'user' user_id: type: integer description: The id of the user ring_time: type: number format: float moh_uuid: type: string description: The UUID of the music on hold to use instead of a ringback tone. required: - type - user_id DestinationOutcall: title: DestinationOutcall properties: type: type: string description: MUST be 'outcall' exten: type: string outcall_id: type: integer description: The id of the outcall required: - type - exten - outcall_id DestinationHangup: title: DestinationHangup properties: type: type: string description: MUST be 'hangup' required: - type DestinationQueue: title: DestinationQueue properties: type: type: string description: MUST be 'queue' queue_id: type: integer description: The id of the queue ring_time: type: number format: float skill_rule_id: type: integer description: The id of the skill rule skill_rule_variables: type: object description: key-value where key represents the variable of the skill rule and value represents a value required: - type - queue_id DestinationConference: title: DestinationConference properties: type: type: string description: MUST be 'conference' conference_id: type: integer description: The id of the conference required: - type - conference_id DestinationGroup: title: DestinationGroup properties: type: type: string description: MUST be 'group' group_id: type: integer description: The id of the group ring_time: type: number format: float required: - type - group_id DestinationHangupNormal: title: DestinationHangupNormal allOf: - $ref: '#/components/schemas/DestinationHangup' - properties: cause: type: string description: MUST be 'normal' required: - cause DestinationApplicationVoicemail: title: DestinationApplicationVoicemail allOf: - $ref: '#/components/schemas/DestinationApplication' - properties: application: type: string description: MUST be 'voicemail' context: type: integer description: The context of the application required: - application - context DestinationHangupBusy: title: DestinationHangupBusy allOf: - $ref: '#/components/schemas/DestinationHangup' - properties: cause: type: string description: MUST be 'busy' timeout: type: integer description: The timeout of the hangup required: - cause DestinationHangupCause: title: DestinationHangupCause properties: busy: $ref: '#/components/schemas/DestinationHangupBusy' congestion: $ref: '#/components/schemas/DestinationHangupCongestion' normal: $ref: '#/components/schemas/DestinationHangupNormal' DestinationApplication: title: DestinationApplication properties: type: type: string description: MUST be 'application' required: - type DestinationType: title: DestinationType properties: application: $ref: '#/components/schemas/DestinationApplicationApplication' conference: $ref: '#/components/schemas/DestinationConference' custom: $ref: '#/components/schemas/DestinationCustom' extension: $ref: '#/components/schemas/DestinationExtension' group: $ref: '#/components/schemas/DestinationGroup' hangup: $ref: '#/components/schemas/DestinationHangupCause' ivr: $ref: '#/components/schemas/DestinationIVR' none: $ref: '#/components/schemas/DestinationNone' outcall: $ref: '#/components/schemas/DestinationOutcall' queue: $ref: '#/components/schemas/DestinationQueue' sound: $ref: '#/components/schemas/DestinationSound' switchboard: $ref: '#/components/schemas/DestinationSwitchboard' user: $ref: '#/components/schemas/DestinationUser' voicemail: $ref: '#/components/schemas/DestinationVoicemail' IncallRelationExtensions: properties: extensions: type: array readOnly: true items: $ref: '#/components/schemas/ExtensionRelationBase' DestinationCustom: title: DestinationCustom properties: type: type: string description: MUST be 'custom' command: type: string description: The command to execute required: - type - command DestinationIVR: title: DestinationIVR properties: type: type: string description: MUST be 'ivr' ivr_id: type: integer description: The id of the IVR required: - type - ivr_id IncallRelationSchedules: properties: schedules: type: array readOnly: true items: $ref: '#/components/schemas/ScheduleRelationBase' ExtensionRelationBase: properties: id: type: integer description: Extension ID readOnly: true context: type: string exten: type: string DestinationSound: title: DestinationSound properties: type: type: string description: MUST be 'sound' filename: type: string description: The filename of the sound. The file MUST be imported by to webi in the playback directory. The extension of file SHOULD be not present. skip: type: boolean description: Do not play this sound if the call is not answered no_answer: type: boolean description: Play this sound without answering the call required: - type - filename Incall: title: Incall allOf: - $ref: '#/components/schemas/IncallRelationBase' - properties: tenant_uuid: type: string description: The UUID of the tenant readOnly: true preprocess_subroutine: type: string description: Name of the subroutine to execute in asterisk before receiving a call description: type: string description: Additional information about the incoming call caller_id_mode: type: string enum: - prepend - overwrite - append description: How the caller_id_name will be treated caller_id_name: type: string description: Name to display when calling destination: description: The destination where the incoming call will be redirected $ref: '#/components/schemas/DestinationType' greeting_sound: type: string description: The name of the sound file to be played before redirecting the caller to the destination - $ref: '#/components/schemas/IncallRelationExtensions' - $ref: '#/components/schemas/IncallRelationSchedules' - required: - destination example: id: 1 preprocess_subroutine: subroutine description: My incall caller_id_mode: prepend caller_id_name: incall_ destination: type: user user_id: 2 ring_time: 10.5 DestinationHangupCongestion: title: DestinationHangupCongestion allOf: - $ref: '#/components/schemas/DestinationHangup' - properties: cause: type: string description: MUST be 'congestion' timeout: type: integer description: The timeout of the hangup required: - cause DestinationApplicationCustom: title: DestinationApplicationCustom allOf: - $ref: '#/components/schemas/DestinationApplication' - properties: application: type: string description: MUST be 'custom' application_uuid: type: string description: The UUID of the application. required: - application - application_uuid DestinationVoicemail: title: DestinationVoicemail properties: type: type: string description: MUST be 'voicemail' voicemail_id: type: integer description: The id of the voicemail skip_instructions: type: boolean description: Skip the playback of instructions for leaving a message greeting: type: string enum: - busy - unavailable description: Play the specified greeting required: - type - voicemail_id DestinationApplicationApplication: title: DestinationApplicationApplication properties: callback_disa: $ref: '#/components/schemas/DestinationApplicationCallbackDISA' custom: $ref: '#/components/schemas/DestinationApplicationCustom' directory: $ref: '#/components/schemas/DestinationApplicationDirectory' disa: $ref: '#/components/schemas/DestinationApplicationDISA' fax_to_mail: $ref: '#/components/schemas/DestinationApplicationFaxToMail' voicemail: $ref: '#/components/schemas/DestinationApplicationVoicemail' DestinationSwitchboard: title: DestinationSwitchboard properties: type: type: string description: MUST be 'switchboard' switchboard_uuid: type: string description: The UUID of the switchboard. required: - type - switchboard_uuid ScheduleRelationBase: properties: id: type: integer readOnly: true tenant_uuid: type: string description: The UUID of the tenant readOnly: true name: type: string description: The name to identify the schedule DestinationApplicationCallbackDISA: title: DestinationApplicationCallbackDISA allOf: - $ref: '#/components/schemas/DestinationApplication' - properties: application: type: string description: MUST be 'callback_disa' context: type: integer description: The context of the application pin: type: string description: the pin of the application required: - application - context DestinationApplicationFaxToMail: title: DestinationApplicationFaxToMail allOf: - $ref: '#/components/schemas/DestinationApplication' - properties: application: type: string description: MUST be 'fax_to_mail' email: type: string description: The email of the application required: - application - email Error: type: array items: type: string IncallItems: title: IncallItems properties: items: type: array items: $ref: '#/components/schemas/Incall' total: type: integer required: - total DestinationNone: title: DestinationNone properties: type: type: string description: MUST be 'none' required: - type IncallRelationBase: title: IncallRelation properties: id: type: integer readOnly: true description: The id of the incoming call DestinationExtension: title: DestinationExtension properties: type: type: string description: MUST be 'extension' exten: type: string context: type: string description: Context of the extension required: - type - exten - context parameters: tenantuuid: name: Wazo-Tenant in: header description: The tenant's UUID, defining the ownership of a given resource. required: false schema: type: string offset: required: false name: offset in: query description: Number of items to skip over in the list. Useful for pagination. schema: type: integer extensionid: required: true name: extension_id in: path schema: type: integer incallid: required: true name: incall_id in: path description: Incoming call's ID schema: type: integer order: required: false name: order in: query description: Name of the field to use for sorting the list of items returned. schema: type: string scheduleid: required: true name: schedule_id in: path description: Schedule's ID schema: type: integer direction: required: false name: direction in: query description: Sort list of items in 'asc' (ascending) or 'desc' (descending) order schema: type: string enum: - asc - desc recurse: name: recurse in: query description: Should the query include sub-tenants required: false schema: type: boolean default: false search: required: false name: search in: query description: Search term for filtering a list of items. Only items with a field containing the search term will be returned. schema: type: string userid: required: false name: user_id in: query description: the user's ID schema: type: integer limit: required: false name: limit in: query description: Maximum number of items to return in the list schema: type: integer securitySchemes: wazo_auth_token: type: apiKey name: X-Auth-Token in: header x-xivo-port: 9486 x-xivo-name: confd x-apievangelist-source: harvested_from: https://github.com/wazo-platform/wazo-confd assembly: base plugin api.yml deep-merged with all plugin api.yml fragments, reproducing what the running service serves at /api/confd/1.1/api/api.yml (see wazo_confd/plugins/api/http.py — xivo.chain_map.ChainMap) spec_version: Swagger 2.0 (as published by Wazo) harvested: '2026-08-17'