swagger: '2.0'
info:
title: wazo-call-logd
description: Consult call logs 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: 9298
x-xivo-name: call-logs
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, ...)
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'
NotDoneYetError:
description: Not done yet
schema:
$ref: '#/definitions/Error'
Unauthorized:
description: Unauthorized
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
call_status:
type: string
enum:
- answered
- blocked
- voicemail
- unknown
CDRList:
type: object
properties:
items:
type: array
items:
$ref: '#/definitions/CDR'
total:
type: integer
filtered:
type: integer
CDR:
type: object
properties:
id:
type: integer
start:
type: string
format: date-time
answer:
type: string
format: date-time
end:
type: string
format: date-time
source_name:
type: string
source_extension:
type: string
source_internal_extension:
type: string
description: the internal extension of the line that placed the call
source_internal_context:
type: string
source_internal_name:
type: string
source_internal_tenant_uuid:
type: string
source_user_uuid:
type: string
source_tenant_uuid:
type: string
source_line_id:
type: integer
requested_name:
type: string
description: name of the intended recipient as dialed
requested_extension:
type: string
description: extension dialed by the caller
requested_context:
type: string
description: dialplan context of the dialed extension
requested_tenant_uuid:
type: string
requested_internal_extension:
type: string
description: internal extension of the first line to ring
requested_internal_context:
type: string
description: internal context of the first line to ring
requested_internal_tenant_uuid:
type: string
requested_user_uuid:
type: string
destination_details:
type: object
description: Contains the `type` of the called destination; which can be either `user`, `conference`, `meeting`, `group`,
`voicemail` or `unknown` by default. Also contains useful information about the destination (`id` and `name`). A
call that was redirected to a voicemail and not answered reports `type` `voicemail`, even when the call was originally
placed to a user; the user remains available in `destination_user_uuid`.
destination_name:
type: string
description: name of the party that answered the call
destination_extension:
type: string
description: extension of the party that answered the call
destination_internal_extension:
type: string
description: internal extension of the line that answered the call, or the first line to ring if unanswered
destination_internal_context:
type: string
description: internal context of the line that answered the call, or the first line to ring if unanswered
destination_internal_tenant_uuid:
type: string
destination_user_uuid:
type: string
destination_tenant_uuid:
type: string
destination_line_id:
type: integer
duration:
type: integer
description: Duration of the call, in seconds.
answered:
type: boolean
call_direction:
type: string
enum:
- inbound
- internal
- outbound
conversation_id:
type: string
tags:
type: array
items:
type: string
recordings:
type: array
items:
$ref: '#/definitions/Recording'
call_status:
$ref: '#/definitions/call_status'
Recording:
type: object
properties:
uuid:
type: string
start_time:
type: string
format: date-time
end_time:
type: string
format: date-time
deleted:
type: boolean
filename:
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`
Export:
type: object
properties:
uuid:
type: string
tenant_uuid:
type: string
user_uuid:
type: string
requested_at:
type: string
format: date-time
filename:
type: string
status:
type: string
enum:
- pending
- processing
- finished
- deleted
- error
Retention:
type: object
properties:
cdr_days:
type: integer
export_days:
type: integer
recording_days:
type: integer
default_cdr_days:
type: integer
readOnly: true
default_export_days:
type: integer
readOnly: true
default_recording_days:
type: integer
readOnly: true
StatusSummary:
type: object
properties:
bus_consumer:
$ref: '#/definitions/ComponentWithStatus'
task_queue:
$ref: '#/definitions/ComponentWithStatus'
service_token:
$ref: '#/definitions/ComponentWithStatus'
ComponentWithStatus:
type: object
properties:
status:
$ref: '#/definitions/StatusValue'
StatusValue:
type: string
enum:
- fail
- ok
AgentStatistics:
type: object
properties:
items:
type: array
items:
$ref: '#/definitions/AgentStatistic'
total:
type: integer
AgentsStatistics:
type: object
properties:
items:
type: array
items:
$ref: '#/definitions/AgentStatistic'
total:
type: integer
AgentStatistic:
type: object
properties:
from:
type: string
description: Start of the statistic interval.
until:
type: string
description: End of the statistic interval.
tenant_uuid:
type: string
format: uuid
description: Tenant UUID of the corresponding queue.
agent_id:
type: integer
description: ID of the corresponding agent.
agent_number:
type: string
description: The number of this agent
answered:
type: integer
description: The number of answered calls
conversation_time:
type: integer
description: The time spent in conversation in seconds
login_time:
type: integer
description: The time spent logged-in in seconds
pause_time:
type: integer
description: The time spent in pause in seconds
wrapup_time:
type: integer
description: The time spent in wrapup in seconds
queues:
type: array
description: Per-queue breakdown of agent activity over this interval
items:
$ref: '#/definitions/AgentQueueStatistic'
AgentQueueStatistic:
type: object
properties:
queue_id:
type: integer
description: ID of the queue.
answered:
type: integer
description: Number of calls this agent answered on this queue
conversation_time:
type: integer
description: Time this agent spent in conversation on this queue, in seconds
login_time:
type: integer
description: Time this agent was logged in to this queue, in seconds
pause_time:
type: integer
description: Time this agent spent in pause on this queue, in seconds
wrapup_time:
type: integer
description: Time this agent spent in wrap-up after calls on this queue, in seconds
QueuesStatistics:
type: object
properties:
items:
type: array
items:
$ref: '#/definitions/QueueStatistic'
total:
type: integer
QueueStatistics:
type: object
properties:
items:
type: array
items:
$ref: '#/definitions/QueueStatistic'
total:
type: integer
QueueStatistic:
type: object
properties:
from:
type: string
description: Start of the statistic interval.
until:
type: string
description: End of the statistic interval.
tenant_uuid:
type: string
format: uuid
description: Tenant UUID of the corresponding queue.
queue_id:
type: integer
description: ID of the corresponding queue.
queue_name:
type: string
description: Name of the corresponding queue.
received:
type: integer
description: Total number of calls received in the interval.
answered:
type: integer
description: Number of calls answered by an agent.
abandoned:
type: integer
description: Number of calls that were abandoned while they were waiting for an answer.
closed:
type: integer
description: Number of calls received when the queue was closed.
not_answered:
type: integer
description: Number of calls that reached the ring timeout delay.
saturated:
type: integer
description: Number of calls received when the queue was full or when one of the diversion parameter was reached.
blocked:
type: integer
description: Number of calls received when no agent was available, when there was no agent to take the call, when
the join an empty queue condition is reached, or when the drop callers if no agent condition is reached.
average_waiting_time:
type: integer
description: The average waiting time of calls
answered_rate:
type: number
format: float
description: The number of answered called over (received calls - closed calls)
quality_of_service:
type: number
format: float
description: Percentage based on the number of calls answered in less than the defined quality of service threshold
over the number of answered calls.
QueueQoSStatistics:
type: object
properties:
items:
type: array
items:
$ref: '#/definitions/QueueQoSStatistic'
total:
type: integer
QueueQoSStatistic:
type: object
properties:
from:
type: string
description: Start of the statistic interval.
until:
type: string
description: End of the statistic interval.
tenant_uuid:
type: string
format: uuid
description: Tenant UUID of the corresponding queue.
queue_id:
type: integer
description: ID of the corresponding queue.
queue_name:
type: string
description: Name of the corresponding queue.
quality_of_service:
type: array
items:
type: object
properties:
min:
type: integer
description: Minimum of the QoS interval
max:
type: integer
description: Maximum of the QoS interval
answered:
type: integer
description: Number of calls answered by an agent.
abandoned:
type: integer
description: Number of calls that were abandoned while they were waiting for an answer.
Transcription:
type: object
properties:
message_id:
type: string
description: The voicemail message ID
tenant_uuid:
type: string
format: uuid
voicemail_id:
type: integer
description: The voicemail ID (mailbox number)
transcription_text:
type: string
description: The transcription text
provider_id:
type: string
description: Transcription provider/model identifier
language:
type: string
description: Detected language code (ISO 639-1)
duration:
type: number
format: float
description: Voicemail duration in seconds
created_at:
type: string
format: date-time
TranscriptionList:
type: object
properties:
items:
type: array
items:
$ref: '#/definitions/Transcription'
total:
type: integer
filtered:
type: integer
parameters:
TokenID:
name: token
in: query
description: The token's ID
type: string
recurse:
name: recurse
in: query
type: boolean
description: Should the query include sub-tenants
default: false
required: false
tenantuuid:
name: Wazo-Tenant
type: string
in: header
description: The tenant's UUID, defining the ownership of a given resource.
required: false
format:
name: format
description: Overrides the Content-Type header. This is used to be able to have a downloadable link. Allowed values are
"csv" and "json"
in: query
type: string
required: false
enum:
- csv
- json
from:
name: from
description: Ignore CDR starting before the given date. Format is ISO-8601.
in: query
type: string
format: date-time
required: false
until:
name: until
description: Ignore CDR starting at or after the given date. Format is ISO-8601.
in: query
type: string
format: date-time
required: false
limit:
required: false
name: limit
in: query
type: integer
description: Maximum number of items to return in the list. Default to 1000 if not specified.
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. Unsupported values: ``end``.'
enum:
- created_at
- message_id
direction:
required: false
name: direction
in: query
type: string
enum:
- asc
- desc
description: Sort list of items in 'asc' (ascending) or 'desc' (descending) order
search:
required: false
name: search
in: query
type: string
description: Filter list of items
call_direction:
required: false
name: call_direction
in: query
type: string
enum:
- internal
- inbound
- outbound
description: Filter list of items
distinct:
required: false
name: distinct
in: query
type: string
enum:
- peer_exten
description: Will only return one result for the selected field
number:
required: false
name: number
in: query
type: string
description: Filter by source_extension and destination_extension. A wildcard (underscore) can be used at the start and/or
the end of the number.
tags:
required: false
name: tags
in: query
type: array
items:
type: string
description: Filter by tags. Each tag MUST be separated by a coma (,). Many tag will perform a logical AND.
user_uuid:
required: false
name: user_uuid
in: query
type: array
items:
type: string
description: Filter by user_uuid. Many uuid can be specified. Each uuid MUST be separated by a comma (,). Many uuid will
perform a logical OR.
from_id:
name: from_id
description: Ignore CDR created before the given CDR ID.
in: query
type: integer
required: false
cdr_id:
name: cdr_id
description: ID of the CDR
required: true
type: integer
in: path
recording_uuid:
name: recording_uuid
description: UUID of the recording
required: true
type: string
in: path
recorded:
name: recorded
description: Filter by recorded status.
required: false
type: boolean
in: query
email:
name: email
description: E-mail address
type: string
in: query
requested_internal_extension:
name: requested_internal_extension
description: Filter by requested_internal_extension
required: false
type: string
in: query
requested_internal_context:
name: requested_internal_context
description: Filter by requested_internal_context
required: false
type: string
in: query
conversation_id:
name: conversation_id
description: Filter by conversation identifier
required: false
type: string
in: query
call_status:
name: call_status
description: Filter by call statuses (comma-separated status strings). Defaults to non-blocked calls.
required: false
type: string
enum:
- answered
- blocked
- voicemail
- unknown
in: query
ConfigPatch:
name: ConfigPatch
in: body
required: true
description: See https://en.wikipedia.org/wiki/JSON_Patch.
schema:
type: array
items:
$ref: '#/definitions/ConfigPatchItem'
export_uuid:
name: export_uuid
description: UUID of the given export
required: true
type: string
in: path
interval:
name: interval
description: Aggregation interval. An empty value means no interval, so an aggregation on all values.
in: query
type: string
enum:
- hour
- day
- month
required: false
qos_threshold:
name: qos_threshold
description: The number of seconds representing a good quality of service.
in: query
type: integer
required: false
qos_thresholds:
name: qos_thresholds
description: The steps of quality of service times used for the interval generation.
in: query
type: array
items:
type: integer
minimum: 1
uniqueItems: true
required: false
day_start_time:
name: day_start_time
description: The time at which a day starts, inclusively. Accepted format is `HH:MM`, minutes are ignored.
in: query
type: string
required: false
day_end_time:
name: day_end_time
description: The time at which a day ends, inclusively. Accepted format is `HH:MM`, minutes are ignored.
in: query
type: string
required: false
week_days:
name: week_days
description: The days of the week that should be included. A week starts on Monday (1) and ends on Sunday (7).
in: query
type: array
items:
type: integer
minimum: 1
maximum: 7
uniqueItems: true
default:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
required: false
timezone:
name: timezone
description: 'Name of the timezone to use for dates and times. Example: America/New_York. Valid timezones
are defined by the Time Zone Database
version installed on the server.
'
in: query
type: string
default: UTC
required: false
voicemail_id:
name: voicemail_id
in: query
type: array
collectionFormat: csv
description: The voicemail ID of the message
items:
type: integer
search_text:
name: search_text
in: query
type: string
description: Full-text search in transcript content
paths:
/cdr:
get:
summary: List CDR
description: '**Required ACL:** `call-logd.cdr.read`
This endpoint allow to use `?token={token_uuid}` and `?tenant={tenant_uuid}` query string to bypass headers
'
tags:
- cdr
parameters:
- $ref: '#/parameters/tenantuuid'
- $ref: '#/parameters/from'
- $ref: '#/parameters/until'
- $ref: '#/parameters/limit'
- $ref: '#/parameters/offset'
- $ref: '#/parameters/order'
- $ref: '#/parameters/direction'
- $ref: '#/parameters/search'
- $ref: '#/parameters/call_direction'
- $ref: '#/parameters/number'
- $ref: '#/parameters/tags'
- $ref: '#/parameters/user_uuid'
- $ref: '#/parameters/from_id'
- $ref: '#/parameters/recurse'
- $ref: '#/parameters/distinct'
- $ref: '#/parameters/recorded'
- $ref: '#/parameters/format'
- $ref: '#/parameters/conversation_id'
- $ref: '#/parameters/call_status'
- $ref: '#/parameters/requested_internal_extension'
- $ref: '#/parameters/requested_internal_context'
responses:
'200':
description: List CDR
schema:
$ref: '#/definitions/CDRList'
'400':
$ref: '#/responses/InvalidRequest'
produces:
- application/json
- text/csv; charset=utf-8
/cdr/recordings/media:
delete:
summary: Delete multiple CDRs recording media
description: '**Required ACL:** `call-logd.cdr.recordings.media.delete`'
tags:
- cdr
parameters:
- name: body
in: body
description: The CDR IDs list from which to delete recording media
required: true
schema:
type: object
properties:
cdr_ids:
type: array
items:
type: integer
responses:
'204':
description: The CDRs recording media were deleted successfully
'404':
$ref: '#/responses/NotFoundError'
/cdr/recordings/media/export:
post:
summary: Create an export for the recording media of multiple CDRs
description: '**Required ACL:** `call-logd.cdr.recordings.media.export.create`
This endpoint creates a new export and returns its UUID.
'
tags:
- cdr
- exports
parameters:
- $ref: '#/parameters/from'
- $ref: '#/parameters/until'
- $ref: '#/parameters/search'
- $ref: '#/parameters/call_direction'
- $ref: '#/parameters/number'
- $ref: '#/parameters/tags'
- $ref: '#/parameters/user_uuid'
- $ref: '#/parameters/from_id'
- $ref: '#/parameters/recurse'
- $ref: '#/parameters/tenantuuid'
- $ref: '#/parameters/email'
- name: body
in: body
description: The CDR IDs list from which to create an export
required: false
schema:
type: object
properties:
cdr_ids:
type: array
items:
type: string
responses:
'202':
description: Creation of multiple recording media export started
schema:
type: object
properties:
export_uuid:
type: string
'404':
$ref: '#/responses/NotFoundError'
/cdr/{cdr_id}:
get:
summary: Get a CDR by ID
description: '**Required ACL:** `call-logd.cdr.{cdr_id}.read`'
tags:
- cdr
parameters:
- $ref: '#/parameters/cdr_id'
responses:
'200':
description: Get a CDR by ID
schema:
$ref: '#/definitions/CDR'
'404':
$ref: '#/responses/NotFoundError'
produces:
- application/json
- text/csv; charset=utf-8
/cdr/{cdr_id}/recordings/{recording_uuid}/media:
get:
summary: Get a recording media
description: '**Required ACL:** `call-logd.cdr.{cdr_id}.recordings.{recording_uuid}.media.read`
This endpoint allow to use `?token={token_uuid}` and `?tenant={tenant_uuid}` query string to bypass headers
'
tags:
- cdr
parameters:
- $ref: '#/parameters/cdr_id'
- $ref: '#/parameters/recording_uuid'
- name: Range
description: 'Header requesting a chunk of media to be streamed (e.g: bytes=0-1023 to request the first 1024 bytes)
'
required: false
in: header
type: string
pattern: ^bytes=[0-9]+-[0-9]*$
responses:
'200':
description: Get a recording media
'206':
description: Partial chunk (stream) of a recording media (specified by Range header)
'404':
$ref: '#/responses/NotFoundError'
'416':
description: The requested Range is not satisfiable by the server (invalid value)
produces:
- audio/wav
delete:
summary: Delete a recording media
description: '**Required ACL:** `call-logd.cdr.{cdr_id}.recordings.{recording_uuid}.media.delete`'
tags:
- cdr
parameters:
- $ref: '#/parameters/cdr_id'
- $ref: '#/parameters/recording_uuid'
responses:
'204':
description: The recording was deleted successfully
'404':
$ref: '#/responses/NotFoundError'
/users/{user_uuid}/cdr:
get:
summary: List CDR of the given user
description: '**Required ACL:** `call-logd.users.{user_uuid}.cdr.read`
This endpoint allow to use `?token={token_uuid}` and `?tenant={tenant_uuid}` query string to bypass headers
'
tags:
- cdr
- users
parameters:
- name: user_uuid
description: UUID of the given user
required: true
type: string
in: path
- $ref: '#/parameters/from'
- $ref: '#/parameters/until'
- $ref: '#/parameters/limit'
- $ref: '#/parameters/offset'
- $ref: '#/parameters/order'
- $ref: '#/parameters/direction'
- $ref: '#/parameters/search'
- $ref: '#/parameters/call_direction'
- $ref: '#/parameters/number'
- $ref: '#/parameters/from_id'
- $ref: '#/parameters/distinct'
- $ref: '#/parameters/recorded'
- $ref: '#/parameters/format'
- $ref: '#/parameters/conversation_id'
- $ref: '#/parameters/call_status'
- $ref: '#/parameters/requested_internal_extension'
- $ref: '#/parameters/requested_internal_context'
responses:
'200':
description: List CDR
schema:
$ref: '#/definitions/CDRList'
'400':
$ref: '#/responses/InvalidRequest'
produces:
- application/json
- text/csv; charset=utf-8
/users/me/cdr:
get:
summary: List CDR of the authenticated user
description: '**Required ACL:** `call-logd.users.me.cdr.read`
This endpoint allow to use `?token={token_uuid}` and `?tenant={tenant_uuid}` query string to bypass headers
'
tags:
- cdr
- users
parameters:
- $ref: '#/parameters/from'
- $ref: '#/parameters/until'
- $ref: '#/parameters/limit'
- $ref: '#/parameters/offset'
- $ref: '#/parameters/order'
- $ref: '#/parameters/direction'
- $ref: '#/parameters/search'
- $ref: '#/parameters/call_direction'
- $ref: '#/parameters/number'
- $ref: '#/parameters/from_id'
- $ref: '#/parameters/user_uuid'
- $ref: '#/parameters/distinct'
- $ref: '#/parameters/recorded'
- $ref: '#/parameters/format'
- $ref: '#/parameters/conversation_id'
- $ref: '#/parameters/call_status'
- $ref: '#/parameters/requested_internal_extension'
- $ref: '#/parameters/requested_internal_context'
responses:
'200':
description: List CDR
schema:
$ref: '#/definitions/CDRList'
'400':
$ref: '#/responses/InvalidRequest'
produces:
- application/json
- text/csv; charset=utf-8
/users/me/cdr/{cdr_id}/recordings/{recording_uuid}/media:
get:
summary: Get a recording media from a user
description: '**Required ACL:** `call-logd.users.me.cdr.{cdr_id}.recordings.{recording_uuid}.media.read`
'
tags:
- cdr
parameters:
- $ref: '#/parameters/cdr_id'
- $ref: '#/parameters/recording_uuid'
- name: Range
description: 'Header requesting a chunk of media to be streamed (e.g: bytes=0-1023 to request the first 1024 bytes)
'
required: false
in: header
type: string
pattern: ^bytes=[0-9]+-[0-9]*$
responses:
'200':
description: Get a recording media
'206':
description: Partial chunk (stream) of a recording media (specified by Range header)
'404':
$ref: '#/responses/NotFoundError'
'416':
description: The requested Range is not satisfiable by the server (invalid value)
produces:
- audio/wav
/config:
get:
produces:
- application/json
summary: Show the current configuration
description: '**Required ACL:** `call_logd.config.read`'
operationId: getConfig
tags:
- config
responses:
'200':
description: The configuration of the service
patch:
produces:
- application/json
summary: Update the current configuration.
description: '**Required ACL:** `call_logd.config.update`
Changes are not persistent across service restart.
'
operationId: patchConfig
tags:
- config
parameters:
- $ref: '#/parameters/ConfigPatch'
responses:
'200':
description: The updated configuration of the service
'400':
description: The given confiuration is invalid
/exports/{export_uuid}:
get:
summary: Get an export by the given UUID
description: '**Required ACL:** `call-logd.exports.{export_uuid}.read`'
tags:
- exports
parameters:
- $ref: '#/parameters/export_uuid'
responses:
'200':
description: Get an export by UUID
schema:
$ref: '#/definitions/Export'
'404':
$ref: '#/responses/NotFoundError'
/exports/{export_uuid}/download:
get:
summary: Download an export as a ZIP archive by the given UUID
description: '**Required ACL:** `call-logd.exports.{export_uuid}.download.read`
This endpoint allow to use `?token={token_uuid}` and `?tenant={tenant_uuid}` query string to bypass headers
'
tags:
- exports
parameters:
- $ref: '#/parameters/export_uuid'
responses:
'200':
description: Download an export by UUID
'202':
$ref: '#/responses/NotDoneYetError'
'404':
$ref: '#/responses/NotFoundError'
produces:
- application/zip
/retention:
get:
summary: Retention configuration
description: '**Required ACL:** `call-logd.retention.read`'
tags:
- retention
parameters:
- $ref: '#/parameters/tenantuuid'
responses:
'200':
description: Retention
schema:
$ref: '#/definitions/Retention'
'400':
$ref: '#/responses/InvalidRequest'
put:
summary: Update retention configuration
description: '**Required ACL:** `call-logd.retention.update`
**WARNING** This endpoint reset undefined keys to `null`.
'
tags:
- retention
parameters:
- $ref: '#/parameters/tenantuuid'
- name: body
in: body
description: The retention configuration to apply
required: true
schema:
$ref: '#/definitions/Retention'
responses:
'204':
description: Retention was updated successfully
'400':
$ref: '#/responses/InvalidRequest'
/status:
get:
summary: Print infos about internal status of wazo-call-logd
description: '**Required ACL:** `call-logd.status.read`'
tags:
- status
responses:
'200':
description: The internal infos of wazo-call-logd
schema:
$ref: '#/definitions/StatusSummary'
/agents/statistics:
get:
summary: Statistics for all agents
description: '**Required ACL:** `call-logd.agents.statistics.read`
Statistics are aggregated by agents over the period specified by the `from` and `until` query parameters.'
tags:
- agent_statistics
parameters:
- $ref: '#/parameters/tenantuuid'
- $ref: '#/parameters/from'
- $ref: '#/parameters/until'
- $ref: '#/parameters/day_start_time'
- $ref: '#/parameters/day_end_time'
- $ref: '#/parameters/week_days'
- $ref: '#/parameters/timezone'
responses:
'200':
description: Get an agent statistics by ID
schema:
$ref: '#/definitions/AgentsStatistics'
'400':
$ref: '#/responses/InvalidRequest'
/agents/{agent_id}/statistics:
get:
summary: Statistics for a specific agent
description: '**Required ACL:** `call-logd.agents.statistics.{agent_id}.read` Statistics for an agent are aggregated
by the `interval` query parameter, or if not specified or empty, as a unique result over the period. The period is
specified by the `from` and `until` query parameters. The last result returned by this route is always the aggregation
of all calls over the whole specified period.'
tags:
- agent_statistics
parameters:
- name: agent_id
description: ID of the agent.
required: true
type: integer
in: path
- $ref: '#/parameters/tenantuuid'
- $ref: '#/parameters/from'
- $ref: '#/parameters/until'
- $ref: '#/parameters/interval'
- $ref: '#/parameters/day_start_time'
- $ref: '#/parameters/day_end_time'
- $ref: '#/parameters/week_days'
- $ref: '#/parameters/timezone'
responses:
'200':
description: Get an agent statistics by ID
schema:
$ref: '#/definitions/AgentStatistics'
'400':
$ref: '#/responses/InvalidRequest'
'404':
$ref: '#/responses/NotFoundError'
/queues/statistics:
get:
summary: Statistics for all queues
description: '**Required ACL:** `call-logd.queues.statistics.read`
Statistics are aggregated by queues over the period specified by the `from` and `until`
query parameters.
**Notice**: Statistics are generated every 6 hours
'
tags:
- queue_statistics
parameters:
- $ref: '#/parameters/tenantuuid'
- $ref: '#/parameters/from'
- $ref: '#/parameters/until'
- $ref: '#/parameters/qos_threshold'
- $ref: '#/parameters/day_start_time'
- $ref: '#/parameters/day_end_time'
- $ref: '#/parameters/week_days'
- $ref: '#/parameters/timezone'
responses:
'200':
description: Get aggregated statistics for all queues.
schema:
$ref: '#/definitions/QueuesStatistics'
'400':
$ref: '#/responses/InvalidRequest'
/queues/{queue_id}/statistics:
get:
summary: Statistics for a specific queue
description: '**Required ACL:** `call-logd.queues.statistics.{queue_id}.read`
Statistics for a queue are aggregated by the `interval` query parameter, or if not
specified or empty, as a unique result over the period. The period is specified by the
`from` and `until` query parameters. The last result returned by this route is always the
aggregation of all calls over the whole specified period.
**Notice**: Statistics are generated every 6 hours
'
tags:
- queue_statistics
parameters:
- name: queue_id
description: ID of the queue.
required: true
type: integer
in: path
- $ref: '#/parameters/tenantuuid'
- $ref: '#/parameters/from'
- $ref: '#/parameters/until'
- $ref: '#/parameters/interval'
- $ref: '#/parameters/qos_threshold'
- $ref: '#/parameters/day_start_time'
- $ref: '#/parameters/day_end_time'
- $ref: '#/parameters/week_days'
- $ref: '#/parameters/timezone'
responses:
'200':
description: Get a queue statistics by ID
schema:
$ref: '#/definitions/QueueStatistics'
'400':
$ref: '#/responses/InvalidRequest'
'404':
$ref: '#/responses/NotFoundError'
/queues/{queue_id}/statistics/qos:
get:
summary: QoS statistics for a specific queue
description: '**Required ACL:** `call-logd.queues.statistics.{queue_id}.qos.read`
QoS thresholds implicitly include a starting 0 and ending to infinite (null).
Statistics for a queue are aggregated by the `interval` query parameter, or if not
specified or empty, as a unique result over the period. The period is specified by the
`from` and `until` query parameters. The last result returned by this route is always the
aggregation of all calls over the whole specified period.
**Notice**: Statistics are generated every 6 hours
'
tags:
- queue_statistics
parameters:
- name: queue_id
description: ID of the queue.
required: true
type: integer
in: path
- $ref: '#/parameters/tenantuuid'
- $ref: '#/parameters/from'
- $ref: '#/parameters/until'
- $ref: '#/parameters/interval'
- $ref: '#/parameters/qos_thresholds'
- $ref: '#/parameters/day_start_time'
- $ref: '#/parameters/day_end_time'
- $ref: '#/parameters/week_days'
- $ref: '#/parameters/timezone'
responses:
'200':
description: Get a queue QoS statistics by ID
schema:
$ref: '#/definitions/QueueQoSStatistics'
'400':
$ref: '#/responses/InvalidRequest'
'404':
$ref: '#/responses/NotFoundError'
/voicemails/transcriptions:
get:
summary: List voicemail transcriptions
description: '**Required ACL:** `call-logd.voicemails.transcriptions.read`'
operationId: list_voicemail_transcriptions
tags:
- voicemail_transcriptions
parameters:
- $ref: '#/parameters/from'
- $ref: '#/parameters/until'
- $ref: '#/parameters/voicemail_id'
- $ref: '#/parameters/limit'
- $ref: '#/parameters/offset'
- $ref: '#/parameters/order'
- $ref: '#/parameters/direction'
- $ref: '#/parameters/search_text'
responses:
'200':
description: List of voicemail transcriptions
schema:
$ref: '#/definitions/TranscriptionList'
'401':
$ref: '#/responses/Unauthorized'
x-apievangelist-source:
harvested_from: https://github.com/wazo-platform/wazo-call-logd
assembly: base plugin api.yml deep-merged with all plugin api.yml fragments, reproducing what the running service serves
at /api/call-logd/1.0/api/api.yml (see wazo_call_logd/plugins/api/http.py — xivo.chain_map.ChainMap)
spec_version: Swagger 2.0 (as published by Wazo)
harvested: '2026-08-17'