Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 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"