openapi: 3.2.0 info: title: wazo-calld Transfers API 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 servers: - url: /1.0 security: - wazo_auth_token: [] tags: - name: transfers paths: /transfers: post: summary: Initiate a transfer description: '**Required ACL:** `calld.transfers.create` The only way to cancel the transfer from the initiator is to use `DELETE /transfers/` (i.e. sending DTMF `*0` will not work).' tags: - transfers responses: '201': description: The transfer being created content: application/json: schema: $ref: '#/components/schemas/Transfer' '400': $ref: '#/components/responses/InvalidRequest' '409': description: A similar transfer (same initiator) is still in progress. content: application/json: schema: $ref: '#/components/schemas/Error' '503': $ref: '#/components/responses/AnotherServiceUnavailable' requestBody: content: application/json: schema: $ref: '#/components/schemas/TransferRequest' description: Parameters of the transfer required: true /transfers/{transfer_id}: get: summary: Get details of a transfer description: '**Required ACL:** `calld.transfers.{transfer_id}.read`' parameters: - $ref: '#/components/parameters/TransferID' tags: - transfers responses: '200': description: The details of the transfer content: application/json: schema: $ref: '#/components/schemas/Transfer' '404': $ref: '#/components/responses/NoSuchTransfer' '503': $ref: '#/components/responses/AnotherServiceUnavailable' delete: summary: Cancel a transfer description: '**Required ACL:** `calld.transfers.{transfer_id}.delete`' parameters: - $ref: '#/components/parameters/TransferID' tags: - transfers responses: '204': description: Transfer cancelled '404': $ref: '#/components/responses/NoSuchTransfer' '503': $ref: '#/components/responses/AnotherServiceUnavailable' /transfers/{transfer_id}/complete: put: summary: Complete a transfer description: '**Required ACL:** `calld.transfers.{transfer_id}.complete.update`' parameters: - $ref: '#/components/parameters/TransferID' tags: - transfers responses: '204': description: The transfer was completed '404': $ref: '#/components/responses/NoSuchTransfer' '503': $ref: '#/components/responses/AnotherServiceUnavailable' /users/me/transfers: get: summary: Get the transfers of the authenticated user description: '**Required ACL:** `calld.users.me.transfers.read`' tags: - transfers responses: '200': description: The list of transfers content: application/json: schema: $ref: '#/components/schemas/TransferList' '503': $ref: '#/components/responses/AnotherServiceUnavailable' post: summary: Initiate a transfer from the authenticated user description: '**Required ACL:** `calld.users.me.transfers.create`' tags: - transfers responses: '201': description: The transfer being created content: application/json: schema: $ref: '#/components/schemas/Transfer' '400': $ref: '#/components/responses/InvalidRequest' '403': description: The authenticated user tried to transfer a call owned by someone else content: application/json: schema: $ref: '#/components/schemas/Error' '409': description: The server could not determine which Call to use as transferred or initiator, usually because too many Calls are eligible content: application/json: schema: $ref: '#/components/schemas/Error' '503': $ref: '#/components/responses/AnotherServiceUnavailable' requestBody: content: application/json: schema: $ref: '#/components/schemas/UserTransferRequest' description: Parameters of the transfer required: true /users/me/transfers/{transfer_id}: delete: summary: Cancel a transfer description: '**Required ACL:** `calld.users.me.transfers.{transfer_id}.delete`' parameters: - $ref: '#/components/parameters/TransferID' tags: - transfers responses: '204': description: Transfer cancelled '403': description: The authenticated user tried to cancel a transfer owned by someone else content: application/json: schema: $ref: '#/components/schemas/Error' '404': $ref: '#/components/responses/NoSuchTransfer' '503': $ref: '#/components/responses/AnotherServiceUnavailable' /users/me/transfers/{transfer_id}/complete: put: summary: Complete a transfer description: '**Required ACL:** `calld.users.me.transfers.{transfer_id}.complete.update`' parameters: - $ref: '#/components/parameters/TransferID' tags: - transfers responses: '204': description: The transfer was completed '403': description: The authenticated user tried to complete a transfer owned by someone else content: application/json: schema: $ref: '#/components/schemas/Error' '404': $ref: '#/components/responses/NoSuchTransfer' '503': $ref: '#/components/responses/AnotherServiceUnavailable' components: responses: NoSuchTransfer: description: The specified transfer does not exist content: application/json: schema: $ref: '#/components/schemas/Error' AnotherServiceUnavailable: description: Another service is unavailable (e.g. wazo-auth, wazo-confd, Asterisk, ...) content: application/json: schema: $ref: '#/components/schemas/Error' InvalidRequest: description: Invalid request content: application/json: schema: $ref: '#/components/schemas/Error' schemas: TransferList: type: object properties: items: type: array items: $ref: '#/components/schemas/Transfer' 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 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: '#/components/schemas/TransferFlow' variables: description: Channel variables to set on the recipient call type: object timeout: $ref: '#/components/schemas/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: '#/components/schemas/TransferFlow' timeout: $ref: '#/components/schemas/TransferTimeout' required: - initiator_call - exten 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 TransferTimeout: description: Maximum ringing time before cancelling the transfer (in seconds). Default (or null) is an unlimited ring time. type: integer parameters: TransferID: name: transfer_id in: path description: Unique identifier of the transfer required: true schema: type: string securitySchemes: wazo_auth_token: type: apiKey name: X-Auth-Token in: header x-xivo-port: 9500 x-xivo-name: calld x-apievangelist-source: harvested_from: https://github.com/wazo-platform/wazo-calld assembly: base plugin api.yml deep-merged with all plugin api.yml fragments, reproducing what the running service serves at /api/calld/1.0/api/api.yml (see wazo_calld/plugins/api/http.py — xivo.chain_map.ChainMap) spec_version: Swagger 2.0 (as published by Wazo) harvested: '2026-08-17'