Genesys Recording API

Recordings, policies, annotations, orphans

Operations 57

GET /api/v2/recording/crossplatform/mediaretentionpolicies Gets media retention policy list with query options to filter on name and enabled. #
POST /api/v2/recording/crossplatform/mediaretentionpolicies Create media retention policy #
DELETE /api/v2/recording/crossplatform/mediaretentionpolicies Delete media retention policies #
GET /api/v2/recording/crossplatform/mediaretentionpolicies/{policyId} Get a media retention policy #
PUT /api/v2/recording/crossplatform/mediaretentionpolicies/{policyId} Update a media retention policy #
DELETE /api/v2/recording/crossplatform/mediaretentionpolicies/{policyId} Delete a media retention policy #
PATCH /api/v2/recording/crossplatform/mediaretentionpolicies/{policyId} Patch a media retention policy #
GET /api/v2/recording/mediaretentionpolicies Gets media retention policy list with query options to filter on name and enabled. #
POST /api/v2/recording/mediaretentionpolicies Create media retention policy #
DELETE /api/v2/recording/mediaretentionpolicies Delete media retention policies #
GET /api/v2/recording/mediaretentionpolicies/{policyId} Get a media retention policy #
PUT /api/v2/recording/mediaretentionpolicies/{policyId} Update a media retention policy #
DELETE /api/v2/recording/mediaretentionpolicies/{policyId} Delete a media retention policy #
PATCH /api/v2/recording/mediaretentionpolicies/{policyId} Patch a media retention policy #
GET /api/v2/recording/recordingkeys Get encryption key list #
POST /api/v2/recording/recordingkeys Create encryption key #
GET /api/v2/recording/recordingkeys/rotationschedule Get key rotation schedule #
PUT /api/v2/recording/recordingkeys/rotationschedule Update key rotation schedule #
POST /api/v2/recording/localkeys create a local key management recording key #
GET /api/v2/recording/keyconfigurations/{keyConfigurationId} Get the encryption key configurations #
PUT /api/v2/recording/keyconfigurations/{keyConfigurationId} Update the encryption key configurations #
GET /api/v2/recording/keyconfigurations Get a list of key configurations data #
POST /api/v2/recording/keyconfigurations Setup configurations for encryption key creation #
POST /api/v2/recording/keyconfigurations/validate Validate encryption key configurations without saving it #
GET /api/v2/recording/batchrequests/{jobId} Get the status and results for a batch request job, only the user that submitted the job may retrieve results. Each result may contain either a URL to a recording or an error; addi #
POST /api/v2/recording/batchrequests Submit a batch download request for recordings. Recordings in response will be in their original format/codec - configured in the Trunk configuration. If the recording:recording:vi #
POST /api/v2/recordings/deletionprotection Get a list of conversations with protected recordings #
PUT /api/v2/recordings/deletionprotection Apply or revoke recording protection for conversations #
GET /api/v2/orphanrecordings/{orphanId}/media Gets the media of a single orphan recording #
GET /api/v2/orphanrecordings/{orphanId} Gets a single orphan recording #
PUT /api/v2/orphanrecordings/{orphanId} Updates an orphan recording to a regular recording with retention values #
DELETE /api/v2/orphanrecordings/{orphanId} Deletes a single orphan recording #
GET /api/v2/orphanrecordings Gets all orphan recordings #
GET /api/v2/conversations/{conversationId}/recordingmetadata/{recordingId} Get metadata for a specific recording. Does not return playable media. Bookmark annotations will be excluded if either recording:recording:view or recording:annotation:view permiss #
GET /api/v2/conversations/{conversationId}/recordings/{recordingId} Gets a specific recording. #
PUT /api/v2/conversations/{conversationId}/recordings/{recordingId} Updates the retention records on a recording. #
GET /api/v2/conversations/{conversationId}/recordingmetadata Get recording metadata for a conversation. Does not return playable media nor system annotations. Bookmark annotations will be excluded if either recording:recording:view or record #
GET /api/v2/conversations/{conversationId}/recordings Get all of a Conversation's Recordings. #
GET /api/v2/recordings/retention/query Query for recording retention data #
GET /api/v2/conversations/{conversationId}/recordings/{recordingId}/annotations/{annotationId} Get annotation #
PUT /api/v2/conversations/{conversationId}/recordings/{recordingId}/annotations/{annotationId} Update annotation #
DELETE /api/v2/conversations/{conversationId}/recordings/{recordingId}/annotations/{annotationId} Delete annotation #
GET /api/v2/conversations/{conversationId}/recordings/{recordingId}/annotations Get annotations for recording #
POST /api/v2/conversations/{conversationId}/recordings/{recordingId}/annotations Create annotation #
GET /api/v2/recording/jobs/{jobId}/failedrecordings Get IDs of recordings that the bulk job failed for #
GET /api/v2/recording/jobs/{jobId} Get the status of the job associated with the job id. #
PUT /api/v2/recording/jobs/{jobId} Execute the recording bulk job. #
DELETE /api/v2/recording/jobs/{jobId} Delete the recording bulk job #
GET /api/v2/recording/jobs Get the status of all jobs within the user's organization #
POST /api/v2/recording/jobs Create a recording bulk job. #
GET /api/v2/recording/settings Get the Recording Settings for the Organization #
PUT /api/v2/recording/settings Update the Recording Settings for the Organization #
GET /api/v2/recording/uploads/reports/{reportId} Get the status of a recording upload status report #
POST /api/v2/recording/uploads/reports Creates a recording upload status report #
GET /api/v2/recordings/screensessions/details Retrieves an object containing the total number of concurrent active screen recordings #
POST /api/v2/recordings/screensessions/acknowledge Acknowledge a screen recording. #
POST /api/v2/recordings/screensessions/metadata Provide meta-data a screen recording. #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/genesys-recording-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

genesys-recording-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: With the PureCloud Platform API, you can control all aspects of your PureCloud environment. With the APIs you can access the system configuration, manage conversations and more.
  version: v2
  title: PureCloud Platform Agent Assistants Recording API
  termsOfService: https://help.genesys.cloud/articles/terms-and-conditions/
  contact:
    name: PureCloud Developer Evangelists
    url: https://developer.genesys.cloud/
    email: DeveloperEvangelists@genesys.com
  license:
    name: UNLICENSED
    url: https://help.genesys.cloud/articles/terms-and-conditions/
servers:
- url: https://api.mypurecloud.com
tags:
- name: Recording
  description: Recordings, policies, annotations, orphans
  externalDocs:
    description: Recording Documentation
    url: https://developer.genesys.cloud/analyticsdatamanagement/recording/
paths:
  /api/v2/recording/crossplatform/mediaretentionpolicies:
    get:
      tags:
      - Recording
      summary: Gets media retention policy list with query options to filter on name and enabled.
      description: for a less verbose response, add summary=true to this endpoint
      operationId: getRecordingCrossplatformMediaretentionpolicies
      parameters:
      - name: pageSize
        in: query
        description: The total page size requested
        required: false
        schema:
          type: integer
          format: int32
          default: 25
      - name: pageNumber
        in: query
        description: The page number requested
        required: false
        schema:
          type: integer
          format: int32
          default: 1
      - name: sortBy
        in: query
        description: variable name requested to sort by
        required: false
        schema:
          type: string
      - name: expand
        in: query
        description: variable name requested by expand list
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: nextPage
        in: query
        description: next page token
        required: false
        schema:
          type: string
      - name: previousPage
        in: query
        description: Previous page token
        required: false
        schema:
          type: string
      - name: name
        in: query
        description: the policy name - used for filtering results in searches.
        required: false
        schema:
          type: string
      - name: enabled
        in: query
        description: checks to see if policy is enabled - use enabled = true or enabled = false
        required: false
        schema:
          type: boolean
      - name: summary
        in: query
        description: provides a less verbose response of policy lists.
        required: false
        schema:
          type: boolean
          default: false
      - name: hasErrors
        in: query
        description: provides a way to fetch all policies with errors or policies that do not have errors
        required: false
        schema:
          type: boolean
      - name: deleteDaysThreshold
        in: query
        description: provides a way to fetch all policies with any actions having deleteDays exceeding the provided value
        required: false
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PolicyEntityListing'
        '400':
          description: The request could not be understood by the server due to malformed syntax.
          x-inin-error-codes:
            bad.request: The request could not be understood by the server due to malformed syntax.
            response.entity.too.large: The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable
            invalid.date: 'Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ'
            invalid.query.param.value: 'Value [%s] is not valid for parameter [%s]. Allowable values are: %s'
            invalid.property: Value [%s] is not a valid property for object [%s]
            constraint.validation: '%s'
            invalid.value: 'Value [%s] is not valid for field type [%s]. Allowable values are: %s'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '401':
          description: No authentication bearer token specified in authorization header.
          x-inin-error-codes:
            authentication.required: No authentication bearer token specified in authorization header.
            ip.not.authorized: 'Requests originating from this IP address are not authorized: [%s]'
            bad.credentials: Invalid login credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '403':
          description: You are not authorized to perform the requested action.
          x-inin-error-codes:
            missing.division.permission: Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).
            app.not.authorized.for.scope: App not authorized to use scope %s
            missing.permissions: 'Unable to perform the requested action. You are missing the following permission(s): %s'
            not.authorized: You are not authorized to perform the requested action.
            missing.any.permissions: 'Unable to perform the requested action. You must have at least one of the following permissions assigned: %s'
            authz.policy.denied: 'Unable to perform the requested action. Your organization''s security policies have denied access. Policy ID(s): [%s]'
            missing.any.division.permissions: 'Unable to perform the requested action. You must have at least one of the following permissions assigned: %s in at least one of the following division(s): %s'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '404':
          description: The requested resource was not found.
          x-inin-error-codes:
            not.found: The requested resource was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '408':
          description: The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.
          x-inin-error-codes:
            client.timeout: The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '409':
          description: The request conflicts with the current state of the target resource.
          x-inin-error-codes:
            request.conflict: The request conflicts with the current state of the target resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '413':
          description: 'The request is over the size limit. Maximum bytes: %s'
          x-inin-error-codes:
            request.entity.too.large: 'The request is over the size limit. Maximum bytes: %s'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '415':
          description: Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.
          x-inin-error-codes:
            unsupported.media.type: Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '429':
          description: Rate limit exceeded the maximum. Retry the request in [%s] seconds
          x-inin-error-codes:
            too.many.requests.retry.after: Rate limit exceeded the maximum. Retry the request in [%s] seconds
            too.many.requests: Rate limit exceeded the maximum [%s] requests within [%s] seconds
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '500':
          description: The server encountered an unexpected condition which prevented it from fulfilling the request.
          x-inin-error-codes:
            internal.server.error: The server encountered an unexpected condition which prevented it from fulfilling the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '503':
          description: Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).
          x-inin-error-codes:
            service.unavailable: Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '504':
          description: The request timed out.
          x-inin-error-codes:
            authentication.request.timeout: Authentication request timeout.
            request.timeout: The request timed out.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
      security:
      - PureCloud OAuth:
        - recordings
        - recordings:readonly
      x-inin-requires-permissions:
        type: ANY
        permissions:
        - recording:crossPlatformRetentionPolicy:view
      x-purecloud-method-name: getRecordingCrossplatformMediaretentionpolicies
    post:
      tags:
      - Recording
      summary: Create media retention policy
      description: Policy does not work retroactively
      operationId: postRecordingCrossplatformMediaretentionpolicies
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrossPlatformPolicy'
        '400':
          description: The request could not be understood by the server due to malformed syntax.
          x-inin-error-codes:
            recording.media.policy.invalid: One of the configured actions or conditions was invalid.
            bad.request: The request could not be understood by the server due to malformed syntax.
            recording.policy.assign.evaluation.evaluator.permission.check.failed: evaluator permission failure for evaluation
            recording.policy.assign.calibration.evaluator.permission.check.failed: Calibrator permission failure
            invalid.property: Value [%s] is not a valid property for object [%s]
            recording.policy.export.integration.invalid: The specified export integration is not a valid integration.
            constraint.validation: '%s'
            recording.policy.assign.metered.evaluation.evaluator.permission.check.failed: evaluator permission failure for metered evaluation
            recording.policy.calibrator.permission.fail: General calibrator permission failure
            recording.policy.export.integration.disabled: The specified export integration is not in active state.
            recording.policy.invalid.queue: The specified queues was invalid.
            response.entity.too.large: The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable
            invalid.date: 'Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ'
            invalid.query.param.value: 'Value [%s] is not valid for parameter [%s]. Allowable values are: %s'
            client.failed.request: The client did not produce a request with valid end of stream signaling. This can be caused by poor network connection and/or client behavior.
            invalid.value: 'Value [%s] is not valid for field type [%s]. Allowable values are: %s'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '401':
          description: No authentication bearer token specified in authorization header.
          x-inin-error-codes:
            authentication.required: No authentication bearer token specified in authorization header.
            ip.not.authorized: 'Requests originating from this IP address are not authorized: [%s]'
            bad.credentials: Invalid login credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '403':
          description: You are not authorized to perform the requested action.
          x-inin-error-codes:
            missing.division.permission: Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).
            app.not.authorized.for.scope: App not authorized to use scope %s
            missing.permissions: 'Unable to perform the requested action. You are missing the following permission(s): %s'
            not.authorized: You are not authorized to perform the requested action.
            missing.any.permissions: 'Unable to perform the requested action. You must have at least one of the following permissions assigned: %s'
            authz.policy.denied: 'Unable to perform the requested action. Your organization''s security policies have denied access. Policy ID(s): [%s]'
            missing.any.division.permissions: 'Unable to perform the requested action. You must have at least one of the following permissions assigned: %s in at least one of the following division(s): %s'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '404':
          description: The requested resource was not found.
          x-inin-error-codes:
            not.found: The requested resource was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '408':
          description: The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.
          x-inin-error-codes:
            client.timeout: The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '409':
          description: The request conflicts with the current state of the target resource.
          x-inin-error-codes:
            request.conflict: The request conflicts with the current state of the target resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '413':
          description: 'The request is over the size limit. Maximum bytes: %s'
          x-inin-error-codes:
            request.entity.too.large: 'The request is over the size limit. Maximum bytes: %s'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '415':
          description: Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.
          x-inin-error-codes:
            unsupported.media.type: Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '429':
          description: Rate limit exceeded the maximum. Retry the request in [%s] seconds
          x-inin-error-codes:
            too.many.requests.retry.after: Rate limit exceeded the maximum. Retry the request in [%s] seconds
            too.many.requests: Rate limit exceeded the maximum [%s] requests within [%s] seconds
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '500':
          description: The server encountered an unexpected condition which prevented it from fulfilling the request.
          x-inin-error-codes:
            internal.server.error: The server encountered an unexpected condition which prevented it from fulfilling the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '503':
          description: Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).
          x-inin-error-codes:
            service.unavailable: Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '504':
          description: The request timed out.
          x-inin-error-codes:
            authentication.request.timeout: Authentication request timeout.
            request.timeout: The request timed out.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
      security:
      - PureCloud OAuth:
        - recordings
      x-inin-requires-permissions:
        type: ANY
        permissions:
        - recording:crossPlatformRetentionPolicy:add
      x-purecloud-method-name: postRecordingCrossplatformMediaretentionpolicies
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrossPlatformPolicyCreate'
        description: Policy
        required: true
    delete:
      tags:
      - Recording
      summary: Delete media retention policies
      description: Bulk delete of media retention policies, this will only delete the polices that match the ids specified in the query param.
      operationId: deleteRecordingCrossplatformMediaretentionpolicies
      parameters:
      - name: ids
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Operation was successful.
        '400':
          description: The request could not be understood by the server due to malformed syntax.
          x-inin-error-codes:
            bad.request: The request could not be understood by the server due to malformed syntax.
            response.entity.too.large: The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '401':
          description: No authentication bearer token specified in authorization header.
          x-inin-error-codes:
            authentication.required: No authentication bearer token specified in authorization header.
            ip.not.authorized: 'Requests originating from this IP address are not authorized: [%s]'
            bad.credentials: Invalid login credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '403':
          description: You are not authorized to perform the requested action.
          x-inin-error-codes:
            missing.division.permission: Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).
            app.not.authorized.for.scope: App not authorized to use scope %s
            missing.permissions: 'Unable to perform the requested action. You are missing the following permission(s): %s'
            not.authorized: You are not authorized to perform the requested action.
            missing.any.permissions: 'Unable to perform the requested action. You must have at least one of the following permissions assigned: %s'
            authz.policy.denied: 'Unable to perform the requested action. Your organization''s security policies have denied access. Policy ID(s): [%s]'
            missing.any.division.permissions: 'Unable to perform the requested action. You must have at least one of the following permissions assigned: %s in at least one of the following division(s): %s'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '404':
          description: The requested resource was not found.
          x-inin-error-codes:
            not.found: The requested resource was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '408':
          description: The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.
          x-inin-error-codes:
            client.timeout: The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '409':
          description: The request conflicts with the current state of the target resource.
          x-inin-error-codes:
            request.conflict: The request conflicts with the current state of the target resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '413':
          description: 'The request is over the size limit. Maximum bytes: %s'
          x-inin-error-codes:
            request.entity.too.large: 'The request is over the size limit. Maximum bytes: %s'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '415':
          description: Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.
          x-inin-error-codes:
            unsupported.media.type: Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '429':
          description: Rate limit exceeded the maximum. Retry the request in [%s] seconds
          x-inin-error-codes:
            too.many.requests.retry.after: Rate limit exceeded the maximum. Retry the request in [%s] seconds
            too.many.requests: Rate limit exceeded the maximum [%s] requests within [%s] seconds
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '500':
          description: The server encountered an unexpected condition which prevented it from fulfilling the request.
          x-inin-error-codes:
            internal.server.error: The server encountered an unexpected condition which prevented it from fulfilling the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '503':
          description: Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).
          x-inin-error-codes:
            service.unavailable: Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '504':
          description: The request timed out.
          x-inin-error-codes:
            authentication.request.timeout: Authentication request timeout.
            request.timeout: The request timed out.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
      security:
      - PureCloud OAuth:
        - recordings
      x-inin-requires-permissions:
        type: ANY
        permissions:
        - recording:crossPlatformRetentionPolicy:delete
      x-purecloud-method-name: deleteRecordingCrossplatformMediaretentionpolicies
  /api/v2/recording/crossplatform/mediaretentionpolicies/{policyId}:
    get:
      tags:
      - Recording
      summary: Get a media retention policy
      description: ''
      operationId: getRecordingCrossplatformMediaretentionpolicy
      parameters:
      - name: policyId
        in: path
        description: Policy ID
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrossPlatformPolicy'
        '400':
          description: The request could not be understood by the server due to malformed syntax.
          x-inin-error-codes:
            bad.request: The request could not be understood by the server due to malformed syntax.
            response.entity.too.large: The response is over the size limit. Reduce pageSize or expand list to reduce response size if applicable
            invalid.date: 'Dates must be specified as ISO-8601 strings. For example: yyyy-MM-ddTHH:mm:ss.SSSZ'
            invalid.query.param.value: 'Value [%s] is not valid for parameter [%s]. Allowable values are: %s'
            invalid.property: Value [%s] is not a valid property for object [%s]
            constraint.validation: '%s'
            invalid.value: 'Value [%s] is not valid for field type [%s]. Allowable values are: %s'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '401':
          description: No authentication bearer token specified in authorization header.
          x-inin-error-codes:
            authentication.required: No authentication bearer token specified in authorization header.
            ip.not.authorized: 'Requests originating from this IP address are not authorized: [%s]'
            bad.credentials: Invalid login credentials.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '403':
          description: You are not authorized to perform the requested action.
          x-inin-error-codes:
            missing.division.permission: Unable to perform the requested action. You are missing the following permission '%s' in the provided division(s).
            app.not.authorized.for.scope: App not authorized to use scope %s
            missing.permissions: 'Unable to perform the requested action. You are missing the following permission(s): %s'
            not.authorized: You are not authorized to perform the requested action.
            missing.any.permissions: 'Unable to perform the requested action. You must have at least one of the following permissions assigned: %s'
            authz.policy.denied: 'Unable to perform the requested action. Your organization''s security policies have denied access. Policy ID(s): [%s]'
            missing.any.division.permissions: 'Unable to perform the requested action. You must have at least one of the following permissions assigned: %s in at least one of the following division(s): %s'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '404':
          description: The requested resource was not found.
          x-inin-error-codes:
            not.found: The requested resource was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '408':
          description: The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.
          x-inin-error-codes:
            client.timeout: The client did not produce a request within the server timeout limit. This can be caused by a slow network connection and/or large payloads.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '409':
          description: The request conflicts with the current state of the target resource.
          x-inin-error-codes:
            request.conflict: The request conflicts with the current state of the target resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '413':
          description: 'The request is over the size limit. Maximum bytes: %s'
          x-inin-error-codes:
            request.entity.too.large: 'The request is over the size limit. Maximum bytes: %s'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '415':
          description: Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.
          x-inin-error-codes:
            unsupported.media.type: Unsupported Media Type - Unsupported or incorrect media type, such as an incorrect Content-Type value in the header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '429':
          description: Rate limit exceeded the maximum. Retry the request in [%s] seconds
          x-inin-error-codes:
            too.many.requests.retry.after: Rate limit exceeded the maximum. Retry the request in [%s] seconds
            too.many.requests: Rate limit exceeded the maximum [%s] requests within [%s] seconds
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '500':
          description: The server encountered an unexpected condition which prevented it from fulfilling the request.
          x-inin-error-codes:
            internal.server.error: The server encountered an unexpected condition which prevented it from fulfilling the request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '503':
          description: Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).
          x-inin-error-codes:
            service.unavailable: Service Unavailable - The server is currently unavailable (because it is overloaded or down for maintenance).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '504':
          description: The request timed out.
          x-inin-error-codes:
            authentication.request.timeout: Authentication request timeout.
            request.timeout: The request timed out.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
      security:
      - PureCloud OAuth:
        - recordings
        - recordings:readonly
      x-inin-requires-permissions:
        type: ANY
        permissions:
        - recording:crossPlatformRetentionPolicy:view
      x-purecloud-method-name: getRecordingCrossplatformMediaretentionpolicy
    put:
      tags:
      - Recording
      summary: Update a media retention policy
      description: Policy does not work retroactively
      operationId: putRecordingCrossplatformMediaretentionpolicy
      parameters:
      - name: policyId
        in: path
        description: Policy ID
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful op

# --- truncated at 32 KB (675 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/genesys/refs/heads/main/openapi/genesys-recording-api-openapi.yml