...
- The deletion/removal of legal holds does not require approval through the API.
- By creating a new legal hold via the API, the application can automatically apply to both historical and future conversations. On the user interface, a separate labeling or case rule has to be defined.
- Only the API allows enabling or disabling the system-wide legal hold configuration setting.
Swagger open api |
---|
---
swagger: "2.0"
info:
version: "1.0"
title: "Verint Financial Compliance REST API"
basePath: "/restapi"
tags:
- name: "Authentication"
- name: "Conversation"
- name: "Current user"
- name: "Legal Hold"
- name: "Time Zones"
paths:
/v1/auth/token:
post:
tags:
- "Authentication"
summary: "Request access and refresh token"
description: "Request an access token and a refresh token, or use the previously\
\ received refresh token to request a new access token. The API uses standard\
\ JWT (JSON Web Tokens) signed by the system. In order to request a token,\
\ you need to provide the Client ID and the Client Secret parameters which\
\ you can get after you configured your application in the system and granted\
\ the necessary permissions by assigning one or more roles.\nAfter you received\
\ the Access Token, it should be sent in all subsequent requests in the \"\
Authorization\" request header after the Bearer keyword:\n```Authorization:\
\ Bearer fL9QPL2U667bBpitMFhtNIn2kLHC15WB```\nAfter the Access Token expired,\
\ you have to call the token function again with the Client ID and the received\
\ Refresh Token. If the token function does not work with the Refresh Token,\
\ then try authenticating again using your Client ID and Client Secret."
operationId: "token"
consumes:
- "application/x-www-form-urlencoded"
produces:
- "application/json"
parameters:
- name: "client_id"
in: "formData"
description: "The identifier of the Application"
required: true
type: "string"
x-example: "verba-client-app"
- name: "client_secret"
in: "formData"
description: "When requesting a new Access Token and Refresh Token"
required: false
type: "string"
x-example: "GBAyfVL7YWtP6gudLIjbRZV_N0dW4f3xETiIxqtokEAZ6FAsBtgyIq0MpU1uQ7J08xOTO2zwP0OuO3pMVAUTid"
- name: "refresh_token"
in: "formData"
description: "When using the previously received Refresh Token to request\
\ a new Access Token"
required: false
type: "string"
x-example: "mE07g3HZkoSaqkysDZLC6B3JA0stEiUz0maA9fu1GhblAQc3"
- name: "eid"
in: "formData"
description: "Environment ID in Multi-Tenant environments"
required: false
type: "string"
x-example: "0000"
- name: "targetEid"
in: "formData"
description: "For Reference Environment users the eid will be 0000, so they\
\ can use this parameter to define the Environment ID they want to work\
\ in"
required: false
type: "string"
x-example: "0001"
- name: "targetTimeZone"
in: "formData"
description: "Set this if want to work in a different time zone than the user's\
\ default. The valid identifiers can be queried by the restapi/v1/timeZone\
\ API call."
required: false
type: "string"
x-example: "US/Eastern"
responses:
"200":
description: "Successful operation"
schema:
$ref: "#/definitions/TokenResponse"
"401":
description: "Invalid credentials or refresh token supplied"
"400":
description: "Invalid request, data validation error"
/v1/conversations:
get:
tags:
- "Conversation"
summary: "Retrieve list of conversations"
description: "A request to this endpoint will retrieve the list of the conversations.\
\ By default the list only contains the finished conversations, however with\
\ query filter parameter the ongoing conversations can be fetched as well.\n\
\n Permissions required:\n * Conversation Access Scope - Standard or Access\
\ All"
operationId: "list"
produces:
- "application/json"
parameters:
- name: "limit"
in: "query"
description: "The maximum number of conversations to be returned"
required: false
type: "integer"
format: "int32"
x-example: 10
- name: "sortBy"
in: "query"
description: "The field the data should be sorted by, the only supported value\
\ is \"startTime\""
required: false
type: "string"
x-example: "startTime"
- name: "sortOrder"
in: "query"
description: "asc|desc"
required: false
type: "string"
x-example: "asc"
- name: "filters"
in: "query"
description: "The filters"
required: false
type: "string"
x-example: "{\"filtersList\": [{\"field\": \"status\", \"operator\": \"EQUAL\"\
, \"values\": [\"finished\"]}]}"
- name: "nextPageToken"
in: "query"
description: "The next page token: to query the next page, use the nextPageToken\
\ received in the previous response. Do not specify sort or filters when\
\ using the nextPageToken."
required: false
type: "string"
responses:
"200":
description: "Successful operation"
schema:
$ref: "#/definitions/ConversationListResponse"
"400":
description: "Invalid request, data validation error"
"403":
description: "Insufficient privileges"
/v1/conversations/{id}:
get:
tags:
- "Conversation"
summary: "Retrieve conversation by the GUID type identifier"
description: "A request to this endpoint will retrieve the information about\
\ the conversation specified by the id parameter.\n\n Permissions required:\n\
\ * Conversation Access Scope - Standard or Access All"
operationId: "getById"
produces:
- "application/json"
parameters:
- name: "id"
in: "path"
description: "The GUID identifier of the conversation object"
required: true
type: "string"
x-example: "3e05f9d6-f687-11eb-8113-00155d001c3b"
responses:
"200":
description: "Successful operation"
schema:
$ref: "#/definitions/Conversation"
"404":
description: "Not found"
"400":
description: "Invalid request, data validation error"
"403":
description: "Insufficient privileges"
/v1/conversationOptions/getSortableFields:
get:
tags:
- "Conversation"
summary: "Retrieve the list of fields available for sorting"
description: "A request to this endpoint will retrieve the list of fields available\
\ for sorting for the Conversation endpoint.\n\n Permissions required:\n *\
\ Conversation Access Scope - Standard or Access All"
operationId: "getSortableFields"
produces:
- "application/json"
parameters: []
responses:
"200":
description: "Successful operation"
examples:
application/json:
- "start_time"
schema:
type: "string"
/v1/conversationOptions/getAllowedFilters:
get:
tags:
- "Conversation"
summary: "Retrieve the list of available filter operators"
description: "A request to this endpoint will retrieve the list of available\
\ filter operators used by the Conversation endpoint for listing.\n\n Permissions\
\ required:\n * Conversation Access Scope - Standard or Access All"
operationId: "getAllowedFilters"
produces:
- "application/json"
parameters: []
responses:
"200":
description: "Successful operation"
schema:
type: "array"
items:
$ref: "#/definitions/FilterField"
/v1/conversationControl/{id}/startRecording:
post:
tags:
- "Conversation"
summary: "Start recording the conversation"
description: "A request to this endpoint will start the recording of the ongoing\
\ controlled conversation. This method can only be used for Conversations\
\ where the value of the manual field is 9.\n\n Permissions required:\n *\
\ Access to the conversation"
operationId: "startRecording"
produces:
- "application/json"
parameters:
- name: "id"
in: "path"
description: "The identifier of the conversation object"
required: true
type: "string"
x-example: "3e05f9d6-f687-11eb-8113-00155d001c3b"
responses:
"200":
description: "Successful operation"
examples:
application/json: null
schema:
type: "string"
"404":
description: "Not found"
"400":
description: "Invalid request, data validation error"
"403":
description: "Insufficient privileges"
/v1/conversationControl/{id}/muteRecording:
post:
tags:
- "Conversation"
summary: "Mute/Unmute recording"
description: "A request to this endpoint will mute or unmute the recording of\
\ the conversation. This method can only be used for Conversations where the\
\ value of the manual field is null, 0 or 1.\n\n Permissions required:\n *\
\ Access to the conversation\n * Mute Recording"
operationId: "muteRecording"
produces:
- "application/json"
parameters:
- name: "id"
in: "path"
description: "The identifier of the conversation object"
required: true
type: "string"
x-example: "3e05f9d6-f687-11eb-8113-00155d001c3b"
- in: "body"
name: "body"
description: "The requested new state. Leave the body empty to query the current\
\ the mute status."
required: false
schema:
$ref: "#/definitions/MuteStatus"
responses:
"200":
description: "Successful operation"
schema:
$ref: "#/definitions/MuteStatus"
"404":
description: "Not found"
"400":
description: "Invalid request, data validation error"
"403":
description: "Insufficient privileges"
/v1/conversationControl/{id}/stopRecording:
post:
tags:
- "Conversation"
summary: "Stop recording the conversation"
description: "A request to this endpoint will stop the recording of the ongoing\
\ controlled conversation. The recording can be restarted later. This method\
\ can only be used for Conversations where the value of the manual field is\
\ a negative integer.\n\n Permissions required:\n * Access to the conversation"
operationId: "stopRecording"
produces:
- "application/json"
parameters:
- name: "id"
in: "path"
description: "The identifier of the conversation object"
required: true
type: "string"
x-example: "3e05f9d6-f687-11eb-8113-00155d001c3b"
responses:
"200":
description: "Successful operation"
examples:
application/json: null
schema:
type: "string"
"404":
description: "Not found"
"400":
description: "Invalid request, data validation error"
"403":
description: "Insufficient privileges"
/v1/conversationControl/{id}/keepOndemand:
post:
tags:
- "Conversation"
summary: "Keeps the on-demand conversation"
description: "A request to this endpoint will mark the on-demand conversation\
\ for recording. This method can only be used for Conversations where the\
\ value of the ondemand field is true and the value of the keep field is false.\
\ Calling this method for other records has no effect.\n\n Permissions required:\n\
\ * Access to the conversation"
operationId: "keepOndemand"
produces:
- "application/json"
parameters:
- name: "id"
in: "path"
description: "The identifier of the conversation object"
required: true
type: "string"
x-example: "3e05f9d6-f687-11eb-8113-00155d001c3b"
responses:
"200":
description: "Successful operation"
examples:
application/json: null
schema:
type: "string"
"404":
description: "Not found"
"400":
description: "Invalid request, data validation error"
"403":
description: "Insufficient privileges"
/v1/me:
get:
tags:
- "Current user"
summary: "Retrieve the user profile of the current user"
description: "A request to this endpoint will retrieve the user profile of the\
\ current user.\n\n Permissions required:\n * TODO"
operationId: "get"
produces:
- "application/json"
parameters: []
responses:
"200":
description: "Successful operation"
schema:
$ref: "#/definitions/UserData"
"404":
description: "Not found"
"400":
description: "Invalid request, data validation error"
"403":
description: "Insufficient privileges"
/v1/myPermissions:
get:
tags:
- "Current user"
summary: "Retrieve the permission set of the current user"
description: "A request to this endpoint will retrieve the permission set of\
\ the current user.\n\n Permissions required:\n * TODO"
operationId: "list_1"
produces:
- "application/json"
parameters: []
responses:
"200":
description: "Successful operation"
schema:
type: "object"
additionalProperties:
type: "object"
"404":
description: "Not found"
"400":
description: "Invalid request, data validation error"
"403":
description: "Insufficient privileges"
/v1/legalHoldAll:
get:
tags:
- "Legal Hold"
summary: "Returns whether the system is configured to put all conversations\
\ under legal hold."
description: "A request to this endpoint will retrieve whether the system is\
\ configured to put all conversations under legal hold. When this setting\
\ is enabled, all historical and future conversations are automatically put\
\ under legal hold.\n\n Permissions required: \n * Manual Labeling - Use"
operationId: "isLegalHoldAll"
produces:
- "application/json"
parameters: []
responses:
"200":
description: "Successful operation"
schema:
$ref: "#/definitions/BooleanHolder"
"403":
description: "Insufficient privileges"
put:
tags:
- "Legal Hold"
summary: "Enables or disables the system wide legal hold configuration."
description: "A request to this endpoint will enable or disable the system wide\
\ legal hold configuration. The system can put all conversations under legal\
\ hold. When this setting is enabled, all historical and future conversations\
\ are automatically put under legal hold. The system will not delete any conversations\
\ if this setting is enabled. This configuration is only available through\
\ this API. The method returns the new status. \n\n Permissions required:\
\ \n * Manual Labeling - Use and Create\n * Enable Legal Hold"
operationId: "update"
consumes:
- "application/json"
produces:
- "application/json"
parameters:
- in: "body"
name: "body"
required: false
schema:
$ref: "#/definitions/BooleanHolder"
responses:
"200":
description: "Successful operation"
schema:
$ref: "#/definitions/BooleanHolder"
"403":
description: "Insufficient privileges"
/v1/legalHolds:
get:
tags:
- "Legal Hold"
summary: "Retrieve list of legal holds"
description: "A request to this endpoint will retrieve the list of the legal\
\ holds ordered by the label.\n\n Permissions required:\n * Manual Labeling\
\ - Use"
operationId: "list_2"
produces:
- "application/json"
parameters:
- name: "limit"
in: "query"
description: "The maximum number of legal holds to be returned"
required: false
type: "integer"
format: "int32"
x-example: 10
- name: "sortBy"
in: "query"
description: "The field the data should be sorted by, supported values are\
\ \"label\" and \"id\""
required: false
type: "string"
x-example: "label"
- name: "sortOrder"
in: "query"
description: "asc|desc"
required: false
type: "string"
x-example: "asc"
- name: "filters"
in: "query"
description: "The filters"
required: false
type: "string"
x-example: "{\"filtersList\": [{\"field\": \"label\", \"operator\": \"IN\"\
, \"values\": [\"Case number 3\", \"John Doe Incident\"]}]}"
- name: "nextPageToken"
in: "query"
description: "The next page token: to query the next page, use the nextPageToken\
\ received in the previous response. Do not specify sort or filters when\
\ using the nextPageToken."
required: false
type: "string"
responses:
"200":
description: "Successful operation"
schema:
$ref: "#/definitions/LegalHoldListResponse"
"400":
description: "Invalid request, data validation error"
"403":
description: "Insufficient privileges"
post:
tags:
- "Legal Hold"
summary: "Create new legal hold"
description: "A request to this endpoint will create a new legal hold label\
\ on conversation records specified by the request parameters. It might take\
\ up to several minutes in the case of large number of conversation records\
\ in the database. The start and end time parameters defines if the legal\
\ hold is applied on historical and/or future conversations as well.\n\n Permissions\
\ required:\n * Manual Labeling - Use and Create\n * Enable Legal Hold"
operationId: "create"
consumes:
- "application/json"
produces:
- "application/json"
parameters:
- in: "body"
name: "body"
required: false
schema:
$ref: "#/definitions/LegalHold"
responses:
"201":
description: "Created"
schema:
$ref: "#/definitions/LegalHold"
"409":
description: "Already exists"
"400":
description: "Invalid request, data validation error"
"403":
description: "Insufficient privileges"
put:
tags:
- "Legal Hold"
summary: "Update legal hold"
description: "A request to this endpoint will update an existing legal hold\
\ label on conversations records specified by the request parameters. It might\
\ take up to several minutes in the case of large number of conversation records\
\ in the database.\n\n The involved users are also updated, so if fewer users\
\ are sent, then the users will be removed from legal hold, and if new users\
\ are sent, then they will be added.\n\n Permissions required:\n * Manual\
\ Labeling - Use and Create\n * Enable Legal Hold\n * Remove Legal Hold From\
\ Conversations"
operationId: "update_1"
consumes:
- "application/json"
produces:
- "application/json"
parameters:
- in: "body"
name: "body"
required: false
schema:
$ref: "#/definitions/LegalHold"
responses:
"200":
description: "Successful operation"
schema:
$ref: "#/definitions/LegalHold"
"404":
description: "Not found"
"400":
description: "Invalid request, data validation error"
"403":
description: "Insufficient privileges"
/v1/legalHolds/{id}:
get:
tags:
- "Legal Hold"
summary: "Retrieve legal hold by the numeric auto-increment identifier"
description: "A request to this endpoint will retrieve the information about\
\ the legal hold specified by the id parameter.\n\n Permissions required:\n\
\ * Manual Labeling - Use"
operationId: "getById_1"
produces:
- "application/json"
parameters:
- name: "id"
in: "path"
description: "The identifier of the legal hold object"
required: true
type: "integer"
format: "int32"
x-example: 16
- name: "countConversations"
in: "query"
description: "Set to true if the caller application wants to receive the number\
\ of conversations having this Legal Hold."
required: false
type: "boolean"
responses:
"200":
description: "Successful operation"
schema:
$ref: "#/definitions/LegalHold"
"404":
description: "Not found"
"400":
description: "Invalid request, data validation error"
"403":
description: "Insufficient privileges"
delete:
tags:
- "Legal Hold"
summary: "Delete legal hold"
description: "A request to this endpoint will permanently delete the legal hold\
\ specified by the id parameter. When the system receives the API call to\
\ delete a legal hold, the system will remove the entire label from the conversations.\
\ It might take up to several minutes in the case of large number of conversation\
\ records in the database. Note: when the legal hold status of a label is\
\ removed through the user interface, the system automatically enforces a\
\ policy which requires the approval of the removal request. This policy is\
\ not enforced when the removal is requested through this API endpoint.\n\n\
\ Permissions required:\n * Manual Labeling - Use and Create\n * Enable Legal\
\ Hold\n * Remove Legal Hold From Conversations"
operationId: "delete"
produces:
- "application/json"
parameters:
- name: "id"
in: "path"
description: "The identifier of the legal hold object"
required: true
type: "integer"
format: "int32"
x-example: 123
responses:
"200":
description: "Successful operation"
examples:
application/json: null
schema:
type: "string"
"404":
description: "Not found"
"400":
description: "Invalid request, data validation error"
"403":
description: "Insufficient privileges"
/v1/legalHoldOptions/getSortableFields:
get:
tags:
- "Legal Hold"
summary: "Retrieve the list of fields available for sorting"
description: "A request to this endpoint will retrieve the list of fields available\
\ for sorting for the Legal Hold API.\n\n Permissions required:\n * Manual\
\ Labeling - Use"
operationId: "getSortableFields_1"
produces:
- "application/json"
parameters: []
responses:
"200":
description: "Successful operation"
examples:
application/json:
- "label"
- "id"
schema:
type: "string"
/v1/legalHoldOptions/getAllowedFilters:
get:
tags:
- "Legal Hold"
summary: "Retrieve the list of available filter operators"
description: "A request to this endpoint will retrieve the list of available\
\ filter operators used by the Legal Hold API endpoints for listing.\n\n Permissions\
\ required:\n * Manual Labeling - Use"
operationId: "getAllowedFilters_1"
produces:
- "application/json"
parameters: []
responses:
"200":
description: "Successful operation"
schema:
type: "array"
items:
$ref: "#/definitions/FilterField"
/v1/timeZones:
get:
tags:
- "Time Zones"
operationId: "list_3"
produces:
- "application/json"
parameters: []
responses:
"200":
description: "successful operation"
headers: {}
schema:
$ref: "#/definitions/TimeZones"
definitions:
TokenResponse:
type: "object"
properties:
access_token:
type: "string"
example: "fL9QPL2U667bBpitMFhtNIn2kLHC15WB"
description: "The requested access token. The application can use this token\
\ to authenticate to the API."
refresh_token:
type: "string"
example: "mE07g3HZkoSaqkysDZLC6B3JA0stEiUz0maA9fu1GhblAQc3"
description: "The refresh token for the requested access token. The application\
\ can use this token to request another access token after the current access\
\ token expires."
token_type:
type: "string"
example: "Bearer"
description: "Indicates the token type value. The only type that the system\
\ supports is Bearer."
expires_in:
type: "integer"
format: "int32"
example: 3600
description: "The length of time, in seconds, that the access token is valid."
user_id:
type: "integer"
format: "int32"
example: 12
description: "The internal identifier of the user."
description: "After a successful authentication, the API responds with the access\
\ and refresh tokens and additional parameters."
Conversation:
type: "object"
properties:
ccdrId:
type: "string"
description: "The unique identifier of the conversation (GUID)"
ownerEid:
type: "string"
description: "The Environment ID. Will be 0000 in non-Multi-Tenant systems"
startTime:
type: "string"
format: "date-time"
description: "The start time of the conversation converted to the user's time\
\ zone"
endTime:
type: "string"
format: "date-time"
description: "The end time of the conversation converted to the user's time\
\ zone"
verbaUserName:
type: "string"
description: "Name of the associated Verba User"
verbaUserLogin:
type: "string"
description: "Login ID of the associated Verba User"
agentId:
type: "string"
description: "Agent / User ID provided by the communication platform"
recordedParty:
type: "integer"
format: "int32"
description: "Signals whether the \"From\" (0) or the \"To\" (1) party was\
\ the recorded participant (or null if it is unknown)"
sourceName:
type: "string"
description: "Caller name (\"From Info\")"
sourceCallerId:
type: "string"
description: "Caller ID (\"From\")"
sourceUserId:
type: "integer"
format: "int32"
description: "Internal ID of the associated Verba User when recordedParty\
\ = 0"
sourceIp:
type: "string"
description: "Caller IP"
sourceDeviceId:
type: "string"
description: "Caller Device ID (for example MAC address)"
sourceProxyIp:
type: "string"
description: "\"From Proxy IP\""
destinationName:
type: "string"
description: "Called name (\"To Info\")"
destinationCallerId:
type: "string"
description: "Called ID (\"To\")"
destinationUserId:
type: "integer"
format: "int32"
description: "Internal ID of the associated Verba User when recordedParty\
\ = 1"
destinationIp:
type: "string"
description: "Called IP"
destinationDeviceId:
type: "string"
description: "Called Device ID (for example MAC address)"
destinationProxyIp:
type: "string"
description: "\"To Proxy IP\""
userLocation:
type: "string"
description: "The associated Verba User's Location attribute at the time when\
\ the conversation was recorded"
modalityId:
type: "string"
description: "The modality ID of the conversation (reference to the d_modality\
\ table)"
modalityName:
type: "string"
description: "The modality of the conversation (see the d_modality table)"
recorderServiceId:
type: "integer"
format: "int32"
description: "ID of the Recorder Service (reference to the recorder_service\
\ table)"
location:
type: "string"
description: "Name of the Recorder Server"
causeId:
type: "integer"
format: "int32"
description: "End Cause ID"
cause:
type: "string"
description: "End Cause"
directionId:
type: "integer"
format: "int32"
description: "Direction ID (reference to the direction table)"
direction:
type: "string"
description: "Direction Name"
url:
type: "string"
description: "The relative path to the media file"
storageFolderId:
type: "integer"
format: "int32"
description: "ID of the Storage Target where the media files are uploaded\
\ to (reference to the storage_folder table)"
storageFolderId2:
type: "integer"
format: "int32"
description: "ID of the 2nd Storage Target (Dual Archiving)"
retentionUntil:
type: "string"
format: "date-time"
description: "End time of the retention"
retentionAutoDelete:
type: "boolean"
description: "If it is true, then the conversation will be deleted automatically\
\ after the retention is over"
retentionUntil2:
type: "string"
format: "date-time"
description: "End time of the retention of the 2nd copy (Dual Archiving)"
retentionAutoDelete2:
type: "boolean"
description: "If it is true, then this copy will be deleted automatically\
\ after the 2nd retention is over"
nativeId:
type: "string"
description: "Identifier provided by the communication platform"
platformCallId:
type: "string"
description: "Computed field that can be used to pair the recorded call legs\
\ of the same call"
secondary:
type: "boolean"
description: "If true, then it is a Secondary recording in a 2N setup"
hold:
type: "string"
format: "byte"
description: "Signals if the conversation is under Legal Hold. Possible values\
\ are:\n * NULL: not under Legal Hold\n * 1: under Legal Hold because got\
\ a Legal Hold Label\n * 2: the Media-Only record is under Legal Hold because\
\ a referencing CDR-Only Record is under Legal Hold\n * 3: the Media-Only\
\ record is under Legal Hold because got a Legal Hold Label and a referencing\
\ CDR-Only Record is under Legal Hold too"
manual:
type: "integer"
format: "int32"
description: "Controlled recording flag:\n * NULL or 0: not a Controlled recording\n\
\ * 9: technical controller record which is not recording currently\n *\
\ negative: technical controller record which is currently recording, the\
\ negative value references the user started the recording\n * 1: a real\
\ recording which was recorded in the controlled mode"
manualSourceCcdrId:
type: "string"
description: "Unique identifier of the contoller record that was used to initiate\
\ this recording"
cdrMediaType:
type: "integer"
format: "int32"
description: "Record Type:\n * 0: Normal\n * 1: CDR-Only\n * 2: Media-Only"
audioCodecId:
type: "integer"
format: "int32"
description: "Audio Codec ID (reference to the codec table)"
audioCodec:
type: "string"
description: "Audio Codec Name (see the codec table)"
videoCodecId:
type: "integer"
format: "int32"
description: "Video Codec ID (reference to the codec table)"
videoCodec:
type: "string"
description: "Video Codec Name (see the codec table)"
encryptionId:
type: "integer"
format: "int32"
description: "ID of the Certificate the media files were encrypted with (reference\
\ to crypto_key table)"
signatureId:
type: "integer"
format: "int32"
description: "ID of the Certificate the media files were signed with (reference\
\ to crypto_key table)"
sourceAudioRtpCount:
type: "integer"
format: "int32"
description: "\"From\" Audio RTP count"
destinationAudioRtpCount:
type: "integer"
format: "int32"
description: "\"To\" Audio RTP count"
recordedExtension:
type: "string"
description: "The Recorded Extension, only filled in when neither the From\
\ nor the To was the recorded party (for example recorded forwarded conversations)"
dialedExtension:
type: "string"
description: "The originally dialed extension"
platformId:
type: "string"
description: "Source Platform (reference to the d_platform table)"
platformName:
type: "string"
description: "Source Platform Name (see the d_platform table)"
importSourceId:
type: "integer"
format: "int32"
description: "ID of the Import Source (reference to the import_source table)"
importSourceName:
type: "string"
description: "Name of the Import Source (see the import_source table)"
transcodeDate:
type: "string"
format: "date-time"
description: "When the media was transcoded"
voiceQuality:
type: "integer"
format: "int32"
description: "Calculated voice quality (percentage)"
forwardReasonName:
type: "string"
description: "Forward Reason"
silencePercent:
type: "integer"
format: "int32"
description: "Percentage of silence in the conversation"
talkoverPercent:
type: "integer"
format: "int32"
description: "Percentage of talkover in the conversation"
longestSilenceLength:
type: "integer"
format: "int32"
description: "Longest silence duration"
mediaDeleteDate:
type: "string"
format: "date-time"
description: "When the media files were deleted by a Delete policy that keeps\
\ the CDR records"
meetingId:
type: "string"
description: "Meeting ID"
recordingId:
type: "string"
description: "Recording ID, not displayed"
recordFailed:
type: "boolean"
description: "Signals if the record was failed"
mediaError:
type: "integer"
format: "int32"
description: "Bitwise combination of the errors, if any occurred"
mediaLength:
type: "integer"
format: "int32"
description: "Length of the media file"
mediaId:
type: "string"
description: "The technical Media ID when record type is Media-Only"
encryptionPriv:
type: "boolean"
description: "Signals whether the private key of the certificate used to encrypt\
\ the conversation is available to the Verba system (if false, then the\
\ conversation cannot be played back in Verba)"
encryptionVer:
type: "integer"
format: "int32"
description: "Version of the encryption certificate (0 = legacy, 1 = Windows\
\ Certificate Store based)"
signatureVer:
type: "integer"
format: "int32"
description: "Version of the singing certificate (0 = legacy, 1 = Windows\
\ Certificate Store based)"
priv:
type: "boolean"
description: "Signals whether the associated Verba User marked this conversation\
\ as Private"
archiveStatus:
type: "boolean"
description: "Signals whether this record was moved to the section_archived\
\ table"
ondemand:
type: "boolean"
description: "Signals whether this is an on-demand recorded conversation"
keep:
type: "boolean"
description: "Signals whether the on-demand conversation was marked for recording"
doNotDelete:
type: "string"
format: "byte"
description: "The Protected flag (this feature is obsolete); if 1, then it\
\ is marked as Protected, if negative, then the recording should be deleted"
locationEid:
type: "string"
description: "The EID of the Recorder Server when it belongs to a tenant"
description: "Conversation object"
ConversationListResponse:
type: "object"
properties:
nextPageToken:
type: "string"
list:
type: "array"
items:
$ref: "#/definitions/Conversation"
FilterField:
type: "object"
properties:
paramName:
type: "string"
operators:
type: "array"
items:
type: "string"
enum:
- "EQUAL"
- "NOT_EQUAL"
- "GREATER_THAN"
- "GREATER_THAN_OR_EQUAL"
- "LESS_THAN"
- "LESS_THAN_OR_EQUAL"
- "CONTAINS"
- "ENDS_WITH"
- "STARTS_WITH"
- "LIKE"
- "BETWEEN"
- "IN"
- "NOT_IN"
MuteStatus:
type: "object"
properties:
callerMuted:
type: "boolean"
calledMuted:
type: "boolean"
description: "Mute status"
ConversationParticipant:
type: "object"
properties:
type:
type: "string"
description: "Defines the tpye of the recorded extension entry. The following\
\ valid values apply:\n * EXTENSION: a recorded phone number, extension\
\ number or address (e.g. SIP address). The system will search in the From/To\
\ metadata fields based on this type of participant entry.\n * USER_ID:\
\ a recorded user ID valid on the recorded platform (e.g. trader ID, agent\
\ ID). The system will search in the User ID metadata field based on this\
\ type of participant entry."
enum:
- "EXTENSION"
- "USER_ID"
identifier:
type: "string"
example: "+123456789"
description: "The identifier of the participant. If type=EXTENSION, then a\
\ phone number, extension number or address, if type=USER_ID, then a trader\
\ ID or an agent ID."
description: "This object provides the participant information for a recorded\
\ conversation which can be used to filter various API endpoints."
LegalHold:
type: "object"
properties:
id:
type: "integer"
format: "int32"
example: 42
description: "The auto-increment identifier of the legal hold object, should\
\ be left null when creating a new object"
label:
type: "string"
example: "Case 3:00CV0001-ABC-XYZ"
description: "The identifier of the legal hold object"
hold:
type: "boolean"
example: true
description: "Indicates if this Label is under Legal Hold. If the hold property\
\ is null then it is considered as a Legal Hold Label."
startTime:
type: "string"
format: "date-time"
example: "2021-01-31T23:00:00"
description: "The start time of the interval within the conversations should\
\ be marked as legal hold. Null value means that the legal hold will be\
\ applied to all historical conversations."
endTime:
type: "string"
format: "date-time"
example: "2021-06-30T21:59:59"
description: "The end time of the interval within the conversations should\
\ be marked as legal hold. Null value or a future time means that the legal\
\ hold will be applied to future conversations too."
numberOfConversations:
type: "integer"
format: "int64"
example: 152388
description: "The number of conversations have been assigned to this Legal\
\ Hold. Will be returned only if the countConversations parameter is set\
\ to true for the get Legal Hold API call."
participants:
type: "array"
description: "List of conversation participant identifiers (extension numbers,\
\ agent IDs, trader IDs etc) whose conversations should be marked as legal\
\ hold. If both participants and users are listed, then the system will\
\ take the union of the matching conversations."
items:
$ref: "#/definitions/ConversationParticipant"
users:
type: "array"
description: "List of VFC users whose conversations should be marked as legal\
\ hold. If both participants and users are listed, then the system will\
\ take the union of the matching conversations."
items:
$ref: "#/definitions/UserIdentificationData"
metadata:
type: "array"
example: "[{\"name\":\"Requestor Name\",\"value\":\"Jerry Jones\"},{\"name\"\
:\"Approver Name\",\"value\":\"Sharon Harrington\"}]"
description: "List of additional metadata that should be attached to the label\
\ object in the Verba system."
items:
$ref: "#/definitions/NameValuePair"
description: "Legal hold object"
NameValuePair:
type: "object"
properties:
name:
type: "string"
example: "Requestor Name"
description: "The name of the metadata."
value:
type: "string"
example: "Jerry Jones"
description: "The value of the metadata."
description: "Object represents custom metadata with a name and a value"
UserIdentificationData:
type: "object"
properties:
userId:
type: "integer"
format: "int32"
example: 47
description: "The Verba User ID. This is an auto-increment field in the Verba\
\ system."
loginId:
type: "string"
example: "jerry.jones"
description: "The Login ID of the user as stored in the Verba system."
email:
type: "string"
example: "jerry.jones@company.com"
description: "The email address of the user."
description: "This object provides Verba user identification data to various API\
\ endpoints. A Verba user can be identified by either their Verba User ID, or\
\ their Login ID or their email address."
Locale:
type: "object"
properties:
language:
type: "string"
country:
type: "string"
displayCountry:
type: "string"
displayLanguage:
type: "string"
displayName:
type: "string"
displayScript:
type: "string"
displayVariant:
type: "string"
extensionKeys:
type: "array"
uniqueItems: true
items:
type: "string"
iso3Country:
type: "string"
iso3Language:
type: "string"
script:
type: "string"
unicodeLocaleAttributes:
type: "array"
uniqueItems: true
items:
type: "string"
unicodeLocaleKeys:
type: "array"
uniqueItems: true
items:
type: "string"
variant:
type: "string"
UserData:
type: "object"
properties:
login:
type: "string"
adSyncMatchId:
type: "string"
fullName:
type: "string"
lastName:
type: "string"
validFrom:
type: "string"
format: "date-time"
validTo:
type: "string"
format: "date-time"
user2:
type: "string"
group2:
type: "string"
email:
type: "string"
crmUserId:
type: "string"
agentId:
type: "string"
samplingRate:
type: "number"
format: "double"
recorderLinePIN:
type: "string"
userID:
type: "string"
languageID:
type: "string"
languageString:
type: "string"
languageLocale:
$ref: "#/definitions/Locale"
primaryExtension:
type: "string"
lastPasswordChange:
type: "string"
format: "date-time"
apiAccessOnly:
type: "boolean"
lastLogin:
type: "string"
format: "date-time"
customDateFormatMine:
type: "string"
customTimeFormatMine:
type: "string"
customDateFormatUse:
type: "string"
customTimeFormatUse:
type: "string"
externalId:
type: "string"
annPromptInbound:
type: "boolean"
annPromptOutbound:
type: "boolean"
annPromptConference:
type: "boolean"
annFileInbound:
type: "string"
annFileOutbound:
type: "string"
annFileConference:
type: "string"
annFileMoh:
type: "string"
annMessageConference:
type: "string"
annPromptInboundCisco:
type: "boolean"
annFileInboundCisco:
type: "string"
annPromptOutboundCisco:
type: "boolean"
annFileOutboundCisco:
type: "string"
annPromptInternalTeams:
type: "boolean"
annPromptInboundTeams:
type: "boolean"
annPromptOutboundTeams:
type: "boolean"
annPromptConferenceTeams:
type: "boolean"
retentionDays:
type: "integer"
format: "int32"
retentionAutoDelete:
type: "boolean"
workflowId:
type: "integer"
format: "int32"
location:
type: "string"
creationDate:
type: "string"
format: "date-time"
createdBy:
type: "string"
lastModificationDate:
type: "string"
format: "date-time"
lastModifiedBy:
type: "string"
defaultTimeZone:
type: "string"
needChangePwdAtNextLogin:
type: "boolean"
sendRecordingNotificationEmails:
type: "boolean"
userType:
type: "string"
nonModifiable:
type: "boolean"
eid:
type: "string"
enabled:
type: "boolean"
restrictedBecause4Eyes:
type: "boolean"
datasource:
type: "string"
synchronizedByAdsync:
type: "boolean"
adSyncId:
type: "string"
adSyncDescription:
type: "string"
adSyncUserMatchAttribute:
type: "string"
adFullDN:
type: "string"
visWindow:
type: "integer"
format: "int32"
spnegoEnabled:
type: "boolean"
passwordVerbaEnabled:
type: "boolean"
passwordADEnabled:
type: "boolean"
hideCDRFields:
type: "string"
locked:
type: "boolean"
passwordExpires:
type: "boolean"
BooleanHolder:
type: "object"
properties:
value:
type: "boolean"
LegalHoldListResponse:
type: "object"
properties:
nextPageToken:
type: "string"
list:
type: "array"
items:
$ref: "#/definitions/LegalHold"
TimeZoneInfo:
type: "object"
properties:
code:
type: "string"
name:
type: "string"
offset:
type: "integer"
format: "int32"
gmtInfo:
type: "string"
TimeZones:
type: "object"
properties:
def:
type: "string"
effective:
type: "string"
timeZones:
type: "array"
items:
$ref: "#/definitions/TimeZoneInfo"
|