{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "Irdeto DWM FE API",
    "description" : "## General\nThe following REST APIs facilitate video content pre-processing in the Irdeto Distributor Watermarking system, providing the Irdeto forensic watermark embedding service to the high-quality media content owners or content management systems. For a general introduction to the Irdeto DWM service refer to [https://help.dwm.irdeto.io](https://help.dwm.irdeto.io).\n## Storage access configuration\nBefore starting using Irdeto APIs listed in this reference (particularly `/v4/jobs` and `/v4/transfers` APIs), content owner should proceed with the configuration of corresponding cloud infrastructure setup in order to allow Irdeto services the necessary level of access to the original content storage. In case of AWS, this relates to AWS IAM configuration via AWS Management console. In case of GCP, this relates to GCP bucket-level IAM configuration via Google Cloud Console. This is typically a once-off effort done in cooperation between content owner and Irdeto support engineer who is assisting initial integration with DWM service.\n## API usage concepts\nContent owner uses DWM service through the means of DWM API calls, integrating thus Irdeto watermarking capability into content owner's business workflows. Among the workflows of customer's business processes, there will be a few defined areas which relates to the use of Irdeto DWM APIs: **identities management**, **watermark pre-processing**, **watermark post-processing**.\n### Identities management\nIrdeto does not store any recipient's privacy infringing information for whom the watermarked files are destined within content owner's business workflows. Instead, DWM defines the term 'identity', which is the abstract reference identifier that the caller must associate with the content recipient. In this page, such reference identifier is generally mentioned as `<identityId>`, and its value is generated and provided by DWM API in the response to particular API endpoint (`/v4/identities`) call specified under \"Identities\" section of the reference below. The returned value is the positive integer as specified by the same reference section. The recommended use of `<identityId>` is to map this identifier value to the user ID of the recipient in content owner's CMS and therefore use this identifier's value for all the files delivered with Irdeto watermark to that recipient. In the pseudo-markup, such a mapping may look like (assuming that the email represents user ID in CMS):\n\n<code> { \"john.smith@company.com\": 1238476105, \"delivery.end@ottservice.com\": 7729541523 } </code>\n\nand is meant to provide the ability to do direct as well as reverse lookups by customer's user ID (email in the example above) and Irdeto Identity ID respectively. New Irdeto identities may be generated on-demand before, during or after pre-processing, but always prior to transferring a file with Irdeto watermark to the associated destination recipient. Note: it is up to content owner, how the storage and persisting of the above mentioned mapping is implemented and integrated into owner's CMS. Irdeto doesn't prescribe any technical guidelines or examples on how to achieve that, except for the above recommendation with regards to semantics.\n\n### <h3 id=\"watermarking-hdr\">Watermark Pre-processing</h3>\nThis is often referred to also as \"watermark embedding\".\n\nDuring this phase the original media file is being analyzed and a variant file containing the binary differences for watermarked video frames is created. Such pre-processing is consuming significant amount of time to complete. The original file is not modified in any way. The variant file is about 3% of the size of the original content and cannot be played as video stream independently. The pre-processing workflow is achieved by using `/v4/jobs` APIs listed under \"Jobs\" of this reference. The pre-processing is triggered by calling `POST /v4/jobs` API request, that will create watermark embedding job in the DWM service. The job \"id\" value is contained within response, and is meant to be used as the required parameter for other `/v4/jobs` API requests. Watermark embedding job has the semantic of the task processing, which in essence it is.\n\nFurther, watermark job data contains such properties like \"status\" and \"progress\" percentage, where important one is `status` that is expected to take value of `COMPLETE` or `ERROR` when DWM service finishes pre-processing of the content for the job. Job's \"status\" value may be `PENDING` a short amount of time right after response to `POST /v4/jobs` API request, until DWM system starts the internal pre-processing flow. After that, job's `status` value changes to `IN_PROGRESS` and remain that until the completion. The created variant file is not exposed externally, and is used internally in both pre-processing (when its data is produced) and post-processing (when its data is consumed) flows.\n\nIn order to complete watermark pre-processing successfully, the input content should comprise video of big enough duration. This is required so that DWM software is given enough frames that can be suitable for watermark embedding. In some cases DWM system may be unable to find enough suitable frames and insert the watermark. If that occurs, job's `status` will be set to `ERROR` and corresponding \"error\" recorded, that is also included into `GET /v4/jobs/<job_id>` API's response. The general recommendation for having successful completion of the pre-processing job is to use input content that is not shorter than 10 minutes in video duration.\n\nIn case when content owner needs to pass relatively short video files through DWM (e.g. less than 10 minutes in duration), there are extra parameters in `POST /v4/jobs` API request which should be set for such usage case. Basically, DWM system can use different watermark insertion routines to achieve \"target\" amount of watermarked frames, and API caller can instruct DWM to automatically select a most suitable watermark embedding strategy. This is done by specifying optional properties `embeddingStrategyResolution`, `embeddingStrategy` and `identityIds` in request JSON payload. For `embeddingStrategyResolution`, only three values are accepted: `DEFAULT`, `AUTO` and `EXPLICIT`, with the first as the implicit value when the property is omitted. The `embeddingStrategy` property is only present when `embeddingStrategyResolution` is `EXPLICIT`, with value either `FIXED_PAYLOAD` or `TMID_SESSION` to specify embedding strategy explicitly. `identityIds` property must be provided when `AUTO` is explicitly specified for `embeddingStrategyResolution`, or in condition that `embeddingStrategyResolution` is `EXPLICIT` and `embeddingStrategy` is `FIXED_PAYLOAD`, and it represents the list of Irdeto identity IDs that are retrieved and mapped into the actual distribution lists as explained in the previous chapter. This is different from the `DEFAULT` pre-processing, where DWM system doesn't require the distribution identity context at the time of watermark embedding. `identityIds` property cannot contain duplicated values and cannot be passed as empty list `[]`.\n\nWhen `POST /v4/jobs` request was containing `AUTO` explicitly set for `embeddingStrategyResolution`, after initial content pre-parsing DWM system will select suitable watermark embedding strategy based on the stream properties. This is reflected in the response properties to `GET /v4/jobs/<job_id>` API, where `embeddingStrategy` property will be present with the value which is one of `{\"TMID_SESSION\", \"FIXED_PAYLOAD\"}` (see API reference schema definitions). Note: if DWM selects `TMID_SESSION` for `embeddingStrategy`, then the association to initially specified (by the time of `POST /v4/jobs` request) `identityIds` list is not retained.\n\nWhen `POST /v4/jobs` request did not specify `embeddingStrategyResolution` explicitly or specified `DEFAULT` for that property, no automatic decision-making is attempted by DWM, and default strategy for watermark pre-processing is used: `TMID_SESSION`. That however requires video content to have big enough duration as explained above, thus is not recommended to opt in when short clips are needed to be watermarked.\n\nWhen `POST /v4/jobs` request specified `EXPLICIT` for `embeddingStrategyResolution`, `embeddingStrategy` should also be present and set to value either `FIXED_PAYLOAD` or `TMID_SESSION`. When `embeddingStrategy` is `FIXED_PAYLOAD`, `identityIds` property must be present as as non-empty list. When `embeddingStrategy` is `TMID_SESSION`,  `identityIds` property should not be present.\n\n### Watermark Post-processing\nThis is often referred to also as \"watermark switching\".\n\nDuring this phase the final individually watermarked version of the media file is created. Currently, post-processing is possible to happen in one of following configurations: * content owner's CMS is integrated with Aspera On Cloud solution by IBM, where Aspera system components are providing interfacing points to transfer content with Irdeto watermark; * content owner's CMS implements the usage of the DWM Transfers-In-Cloud feature, where DWM processing components are used to perform content transfer with Irdeto watermark\n\nThe latter option can only work for the transfers with destinations to the same cloud storage type, e.g. from one AWS bucket to another. In that case, content owner can integrate the use of the relevant APIs defined under \"Transfers\" section of this API specification. Semantically, each transfer must reference the earlier obtained `identityId` and `jobId` values.\n\nAfter the successful response received for `POST /v4/transfers` request, DWM will schedule the actual file transfer with watermarking. That can be tracked by requesting `GET /v4/transfers/<transfer_id>` API, where among the rest of the properties `status` and `progress` are used to indicate processing progress. Transfer's `status` is initially `READY`, and turns to `IN_PROGRESS` when DWM transfer backend actually begins with data sending to the specified `destination`. That `status` value remain till the end of the transfer session, while `progress` will be indicating the completion percentage as floating point number in the range `[0.0, 100.0]`. In case of successful data transfer completion, status value changes to `COMPLETE`; otherwise, if any failures have occurred, status value changes to `ERROR` and the additional error information will be contained in `error` property of the response to `GET /v4/transfers/<transfer_id>`.\n\n### Other APIs\nThe APIs specified in this reference under \"Tasks\" category are not intended to be called by content owner (DWM tenant). Those are the API endpoints needed for DWM system internal purposes, and it could lead to issues if misused.\n\n## Integrated solutions\nIBM [Aspera On Cloud](https://ibmaspera.com) provides the integrated solution where watermarking feature using Irdeto DWM APIs is made available as the part of Aspera On Cloud standard offering. That way IBM Aspera On Cloud (AoC) offloads the integration on the level of Irdeto DWM APIs, allowing customers to use [Packages](https://ibmaspera.com/help/sending/procedures-2/sending_files_and_folders) in AoC GUI for sending files with the Irdeto watermark straight of the box.\n\nFor more details about using Aspera On Cloud, navigate to [https://ibmaspera.com/help](https://ibmaspera.com/help)\n\nFor the details of how to enable DWM integration with IBM Aspera On Cloud, open corresponding Irdeto DWM [documentation chapter](https://help.dwm.irdeto.io/integration_with_IBM_Aspera_on_Cloud.html).\n\n## Definitions\n***\n**Job** is DWM API resource that represents pre-processing of single media content. See `/v4/jobs` APIs grouped under \"Jobs\".\n***\n**Identity** is DWM API personalization identity resource, that has its unique identifier. DWM holds the special personalization payload for each identity, that is used by DWM system privately in order to facilitate personalized media content creation during the post-processing phase. See `/v4/identity` APIs grouped under \"Identities\".\n***\n**Transfer** is DWM API resource that represents (in-cloud) file transfer with watermark (post-processing). See `/v4/transfers` APIs grouped under \"Transfers\".\n\n### JSON Fields\n***\n**jobId** job unique identifier, integer value. It should be used by all the actors that consume this APIs.\n***\n**inFile** is an absolute URI of the media content to be watermarked. Examples: <i>file:///mnt/data/my-files/movie.mov</i>, <i>s3://bucket-data/streams/my-movie.mp4</i>\n***\n**status** represents the completion status for the job or transfer, as explained in the above chapters.\n***\n**destination** is the URI of the destination cloud location for the transfer with the watermark.\n***\n\n### Authorization\n**Authorization** header must be present in every request to DWM API(s) as demanded by below specifications. The value must have \"Bearer\" scheme and contain JWT access token.\n\n## Workflows and use-cases\n\n### DWM API workflow sequence for pre-processing\nDefault API usage workflow diagram for watermark pre-processing with DWM. See associated introduction in [watermark pre-processing](#watermarking-hdr)\n\n![foo](dwm-api-sequence-default.svg \"Default workflow\")\n### API workflow sequence for pre-processing of the shorter video content\nIn this diagram's steps demonstrate how to follow the recommended use of `/v4/jobs` [APIs](#operations-tag-Jobs) when it's required to pre-process and deliver with watermark the samples of shorter video content. e.g. clips less than 10 minutes in duration. See associated explanations in [watermark pre-processing](#watermarking-hdr)\n\nNote: [`PUT /v4/jobs/{id}`](#operations-Jobs-apiUpdateJob) request may have different responses depending on the current status of the watermark job. See possible responses with associated descriptions in API specification under [\"Jobs\" API section](#operations-tag-Jobs).\n\n![foo](dwm-api-sequence-auto.svg \"API workflow - shorter content\")\n### API workflow sequence for both pre-processing and post-processing with DWM using DWM Transfers-In-Cloud\nIn this use-case the creation of the individually watermarked files is done as a ‘transfer’ from originals cloud storage to destination ‘cloud-local’ storage location. This use of the Irdeto SaaS solution does not require integration with a Transfer service provider such as IBM Aspera and gives the content owner full control over the resulting watermarked files, for instance to perform further modifications prior to file transmission to the recipient or use alternative transfer methods. The workflow user is responsible for correct pre-processing of the original files and ensuring the the final transfers are initiated with the Irdeto `<identityId>` values of the relevant files recipients. This solution requires that Irdeto's DWM SaaS components have read-only access to the original input file cloud storage objects (identical in all use cases) and read/write access to the cloud storage location of the output switched/individualized files.\n\nNote: in the below diagram \"once-off pre-configuration\" sections are only for the demonstration purposes, and are not making the part of the actual API integration.\n\n![foo](dwm-api-sequence-transfers.svg \"Workflow with transfers\")\n\n### API workflow with checksums (SHA1) calculation\nThis workflow can be used to pre-create verification checksums for the in-future-downloaded files with Irdeto watermark. This workflow can find its adaptation for IMF distribution processes. Creation of the individually watermarked files in an IMF package may have additional requirements around updating the file SHA-1 hash value and UUIDs used in the file header and filename. The preferred transfer solution is with the switcher library integrated with a transfer provider, like IBM Aspera on Cloud, so that watermarks can be inserted at download time without the need for duplication of the content. IMF files are usually in the Terabyte size range making duplication undesired from a cost, storage and time perspective. The DWM SaaS offers an additional preparation steps after the watermarking job/embedding task to pre-calculate the hash of the video file as it would be received by a user (so with frames replaced by watermarked frames). At actual download a recipient will receive exactly the binary download corresponding to the pre-calculated hash. This hash calculation has to be performed per each intended identity for watermarked content delivery, so that the corresponding composition playlist and other files can be updated by CMS controllers.\n\n![foo](dwm-api-sequence-with-hashing.svg \"Workflow with SHA1 hash computation\")\n",
    "termsOfService" : "https://irdeto.com/support.html",
    "contact" : {
      "email" : "communications@irdeto.com"
    },
    "license" : {
      "name" : "Irdeto Proprietary License",
      "url" : "https://irdeto.com"
    },
    "version" : "3.0"
  },
  "servers" : [ {
    "url" : "/",
    "description" : "Current DWM service instance"
  } ],
  "paths" : {
    "/v4/hashes" : {
      "get" : {
        "tags" : [ "Hashes processing" ],
        "summary" : "List of hash items data",
        "description" : "Search hash items using period (days), status or both",
        "operationId" : "apiGetHashes",
        "parameters" : [ {
          "name" : "job_id",
          "in" : "query",
          "description" : "Filtering parameter: only hash items submitted for watermark job with id 'job_id' are included in the response payload",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int32"
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Filtering parameter: only hash items with given processing 'status' are included in the response payload.",
          "schema" : {
            "type" : "string",
            "enum" : [ "PENDING", "IN_PROGRESS", "COMPLETE", "ERROR" ]
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "0-based 'page' index of the items resultset where the newest items are returned in the foremost 'page'.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The number of items included in a single 'page' of the entire resultset",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 50
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "List of hash items data",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/WatermarkJobDataList"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid value supplied for any of specified query string parameters (job_id, status, page, pageSize)",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Hashes processing" ],
        "summary" : "Submit new hash processing item",
        "description" : "Submit new hash processing item",
        "operationId" : "apiCreateHash",
        "parameters" : [ ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "type" : "string",
                "example" : "{\n        \"jobId\": 1,\n        \"identityId\": 3,\n        \"patches\": [\n          {\n            \"value\": \"5bae5cb5-0b14-4bae-a55b-21fe4355cb19\",\n            \"patchId\": \"mxf_uuid\"  // fixed value\n          }\n        ]\n      }"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "201" : {
            "description" : "Hash processing item is successfully submitted",
            "headers" : {
              "Location" : {
                "description" : "Absolute URI of created hash item",
                "required" : true,
                "style" : "simple"
              }
            }
          },
          "400" : {
            "description" : "Invalid 'request' object supplied",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      }
    },
    "/v4/hashes/{hash_id}" : {
      "get" : {
        "tags" : [ "Hashes processing" ],
        "summary" : "Get a hash item info",
        "description" : "Get a hash item details by given 'hash_id'",
        "operationId" : "apiGetHash",
        "parameters" : [ {
          "name" : "hash_id",
          "in" : "path",
          "description" : "Hash item ID as received when creating one",
          "required" : true,
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Hash item object",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/CrcPreprocessData"
                }
              }
            }
          },
          "404" : {
            "description" : "No hash item can be found for 'hash_id' value",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Error"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid 'hash_id', e.g not a valid type, <0, etc.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      },
      "delete" : {
        "tags" : [ "Hashes processing" ],
        "summary" : "Delete a hash item with a given id",
        "description" : "Delete a hash item with a given id",
        "operationId" : "apiDeleteHash",
        "parameters" : [ {
          "name" : "hash_id",
          "in" : "path",
          "description" : "Hash item ID as received when creating one",
          "required" : true,
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "When hash item has been successfully deleted"
          },
          "400" : {
            "description" : "Invalid 'hash_id', e.g not a valid type, <0, etc.",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Error"
                }
              }
            }
          },
          "404" : {
            "description" : "No hash item can be found for 'hash_id' value",
            "content" : {
              "*/*" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      }
    },
    "/v4/identity" : {
      "post" : {
        "tags" : [ "Identities" ],
        "summary" : "Create new identity",
        "description" : "Create a new identity",
        "operationId" : "apiCreateIdentity",
        "parameters" : [ ],
        "responses" : {
          "201" : {
            "description" : "When identity has been successfully created; location is supplied in the response",
            "headers" : {
              "Location" : {
                "required" : true,
                "style" : "simple"
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      }
    },
    "/v4/identity/{identityId}" : {
      "get" : {
        "tags" : [ "Identities" ],
        "summary" : "Retrieve identity by its ID",
        "description" : "Retrieve identity by its 'identityId'",
        "operationId" : "apiGetIdentity",
        "parameters" : [ {
          "name" : "identityId",
          "in" : "path",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Identity has been found and returned within the response payload"
          },
          "400" : {
            "description" : "Invalid 'identityId' value supplied"
          },
          "404" : {
            "description" : "When there is no identity existing with the provided 'identityId'"
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      }
    },
    "/v4/jobs/{job_id}" : {
      "get" : {
        "tags" : [ "Jobs" ],
        "summary" : "Get a watermarking job by entering its 'job_id'",
        "description" : "Returns the job",
        "operationId" : "apiGetJob",
        "parameters" : [ {
          "name" : "job_id",
          "in" : "path",
          "description" : "Watermark job ID as known by system",
          "required" : true,
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Watermark job object",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WatermarkJobData"
                }
              }
            }
          },
          "404" : {
            "description" : "'job_id' value does not match a job",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid 'job_id'. Not a valid type or <0, etc.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access attempted of the specified job with 'job_id' (e.g. no tenant ID header provided)",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          },
          "403" : {
            "description" : "Access of the specified job with 'job_id' is forbidden (e.g. resource owned by other tenant)",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Jobs" ],
        "summary" : "Update the associated job's identities list",
        "description" : "The request to update the 'identityIds' for the jobs with 'embeddingStrategyResolution'='AUTO'. Otherwise, this request's payload is accepted but ignored, and request results in 200 response.Maximum number of identities in 'identityIds' property is 500. In case when 'status' property for specified job is not 'COMPLETE' or 'ERROR', return 409 conflict response",
        "operationId" : "apiUpdateJob",
        "parameters" : [ {
          "name" : "job_id",
          "in" : "path",
          "description" : "Watermark job ID as known by system",
          "required" : true,
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/WatermarkJobUpdateRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "default" : {
            "description" : "Default 200 response, in the following cases:\n* update successfully performed, updated job object containing updated identity IDs list is added to the response \n* request accepted but processed no-op because specified job has 'embeddingStrategy' value equal to 'TMID_SESSION', updated job object containing empty identity IDs list is added to the response",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WatermarkJobData"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid 'request' object supplied",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          },
          "404" : {
            "description" : "watermarking job not found for 'job_id'",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          },
          "403" : {
            "description" : "attempted to access the data, belonging to other tenant, e.g. job resource, identity resource",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          },
          "409" : {
            "description" : "attempted to update job which is not completed (COMPLETE|ERROR), or attempted to update job for which related video content probing has failed",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      },
      "delete" : {
        "tags" : [ "Jobs" ],
        "summary" : "Delete a watermark job with a given id",
        "description" : "Delete a job with a certain id",
        "operationId" : "apiDeleteJob",
        "parameters" : [ {
          "name" : "job_id",
          "in" : "path",
          "description" : "Watermark job ID as known by system",
          "required" : true,
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "When watermark job has been successfully deleted"
          },
          "400" : {
            "description" : "Invalid 'job_id' value supplied, e.g. not valid type, <0, etc."
          },
          "404" : {
            "description" : "When watemark job is not found by id 'job_id'"
          },
          "409" : {
            "description" : "When there currently active transfers associated with watermark job with id 'job_id'"
          },
          "401" : {
            "description" : "Unauthorized access attempted of the specified job with 'job_id' (e.g. no tenant ID header provided)",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          },
          "403" : {
            "description" : "Access of the specified job with 'job_id' is forbidden (e.g. resource owned by other tenant)",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      }
    },
    "/v4/jobs/{job_id}/variants" : {
      "get" : {
        "tags" : [ "Jobs" ],
        "summary" : "List variants for specified job",
        "description" : "List variants data including processing status for the variants associated with specified job",
        "operationId" : "apiGetJobVariants",
        "parameters" : [ {
          "name" : "job_id",
          "in" : "path",
          "description" : "Watermark job ID as known by system",
          "required" : true,
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64"
          }
        }, {
          "name" : "identityId",
          "in" : "query",
          "description" : "Filtering parameter: identityId",
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Variant(s) processing data for watermarking job with id 'job_id'",
            "content" : {
              "application/json" : {
                "schema" : {
                  "uniqueItems" : true,
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/VariantData"
                  }
                }
              }
            }
          },
          "404" : {
            "description" : "watermarking job not found for 'job_id'",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          },
          "403" : {
            "description" : "attempted to access the data, belonging to other tenant, e.g. job resource",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      }
    },
    "/v4/jobs" : {
      "get" : {
        "tags" : [ "Jobs" ],
        "summary" : "Lists the watermarking jobs",
        "description" : "Search watermarking jobs using period (days), status or both",
        "operationId" : "apiGetJobs",
        "parameters" : [ {
          "name" : "period",
          "in" : "query",
          "description" : "Filtering parameter: All jobs whch have a submission time covered by the number of days supplied are included in the response payload.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "The page number of items in 0-base supplied  sorted starting with the newest items first.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The number of items included on a single page",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 100
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Watermark jobs result",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/WatermarkJobDataList"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid value supplied for any of specified query string parameters (period, page, pageSize)",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          },
          "401" : {
            "description" : "Unauthorized access attempted (e.g. no tenant ID header provided)",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Jobs" ],
        "summary" : "Submit a watermarking job",
        "description" : "Create a watermarking job",
        "operationId" : "apiSubmitJob",
        "parameters" : [ ],
        "requestBody" : {
          "content" : {
            "application/json; charset=UTF-8" : {
              "schema" : {
                "$ref" : "#/components/schemas/WatermarkJobRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "201" : {
            "description" : "A watermarking job is successfully submitted",
            "headers" : {
              "Location" : {
                "description" : "Absolute URI to newly created job",
                "required" : true,
                "style" : "simple"
              }
            }
          },
          "400" : {
            "description" : "Invalid 'request' object supplied"
          },
          "401" : {
            "description" : "Unauthorized API access attempted (e.g. no tenant ID header provided, unregistered tenant ID provided)",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      }
    },
    "/v4/jobs/{job_id}/metadata" : {
      "get" : {
        "tags" : [ "Jobs" ],
        "summary" : "Get the video stream metadata of the input file in a job",
        "description" : "For the original (input) file contaiened for the selected job, return video stream matadata properties",
        "operationId" : "apiGetMetaData",
        "parameters" : [ {
          "name" : "job_id",
          "in" : "path",
          "description" : "Watermark job ID as known by system",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "Video metadata response",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MetadataDetails"
                }
              }
            }
          },
          "404" : {
            "description" : "Content video metadata not found for job",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          },
          "403" : {
            "description" : "When attempted to access the data, belongin to other tenant, e.g. job resource",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "string"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      }
    },
    "/v4/status" : {
      "get" : {
        "tags" : [ "General" ],
        "summary" : "Status of the service",
        "description" : "Get service status overview, including database connection status, and counts for the jobs pending/in progress now, and for the jobs completed/failed during last 24h limited to maximum aggregated total amount of 100.",
        "operationId" : "getStatus",
        "responses" : {
          "200" : {
            "description" : "DWM status object",
            "content" : {
              "application/json; charset=UTF-8" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Status"
                }
              }
            }
          },
          "503" : {
            "description" : "DWM status not healthy",
            "content" : {
              "application/json; charset=UTF-8" : {
                "schema" : {
                  "type" : "string",
                  "example" : {
                    "dbConnection" : "ERROR",
                    "error" : {
                      "code" : 3002,
                      "message" : "Database connection lost"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v4/tasks/{taskId}" : {
      "get" : {
        "tags" : [ "Tasks" ],
        "summary" : "Obtain info about a specific task (internal use only)",
        "description" : "Returns a specific task",
        "operationId" : "apiGetTask",
        "parameters" : [ {
          "name" : "taskId",
          "in" : "path",
          "description" : "Watermark task ID as known by system",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          }
        }, {
          "name" : "type",
          "in" : "query",
          "description" : "task type - EMBED or HASHING",
          "required" : true,
          "schema" : {
            "type" : "string",
            "default" : "EMBED",
            "enum" : [ "EMBED", "HASHING" ]
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "asd",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TaskBaseInfoDTO"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Tasks" ],
        "summary" : "Update the task (internal use only)",
        "description" : "Task will be updated with the values in request payload",
        "operationId" : "apiUpdateTask",
        "parameters" : [ {
          "name" : "taskId",
          "in" : "path",
          "description" : "Watermark task ID as known by system",
          "required" : true,
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          }
        }, {
          "name" : "type",
          "in" : "query",
          "description" : "task type - EMBED or HASHING",
          "required" : true,
          "schema" : {
            "type" : "string",
            "default" : "EMBED",
            "enum" : [ "EMBED", "HASHING" ]
          }
        } ],
        "responses" : {
          "default" : {
            "description" : "default response",
            "content" : {
              "*/*" : { }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      }
    },
    "/v4/tasks" : {
      "get" : {
        "tags" : [ "Tasks" ],
        "summary" : "Obtain a list of tasks (internal use only)",
        "description" : "Returns a list of tasks",
        "operationId" : "apiGetTasks",
        "parameters" : [ {
          "name" : "type",
          "in" : "query",
          "description" : "Task type",
          "required" : true,
          "schema" : {
            "type" : "string",
            "enum" : [ "EMBED", "HASHING" ]
          }
        }, {
          "name" : "status",
          "in" : "query",
          "description" : "Task status (PENDING, SCHEDULED, IN_PROGRESS,COMPLETE,ERROR)",
          "schema" : {
            "type" : "string",
            "enum" : [ "PENDING", "READY", "SCHEDULED", "IN_PROGRESS", "COMPLETE", "ERROR" ]
          }
        }, {
          "name" : "jobId",
          "in" : "query",
          "description" : "Related watermark embedding job ID",
          "schema" : {
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "default" : {
            "description" : "default response",
            "content" : {
              "application/json" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/TaskBaseInfoDTOObjectObject"
                  }
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      }
    },
    "/v4/transfers/{transfer_id}" : {
      "get" : {
        "tags" : [ "Transfers" ],
        "summary" : "Obtain transfer by a supplied id",
        "description" : "Returns a transfer object",
        "operationId" : "apiGetTransfer",
        "parameters" : [ {
          "name" : "transfer_id",
          "in" : "path",
          "description" : "Transfer ID value",
          "required" : true,
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64"
          }
        }, {
          "name" : "X-Ir-Dwm-Expand-SubResource",
          "in" : "header",
          "schema" : {
            "type" : "boolean",
            "default" : false
          }
        } ],
        "responses" : {
          "default" : {
            "description" : "transfer data",
            "content" : {
              "application/json; charset=UTF-8" : {
                "schema" : {
                  "$ref" : "#/components/schemas/TransferData"
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid 'transfer_id' value supplied, e.g. not valid type, <0, etc."
          },
          "404" : {
            "description" : "When transfer is not found by provided 'transfer_id' value"
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      },
      "put" : {
        "tags" : [ "Transfers" ],
        "summary" : "Update a transfer",
        "description" : "Update the properties of the transfer",
        "operationId" : "apiUpdateTransfer",
        "parameters" : [ {
          "name" : "transfer_id",
          "in" : "path",
          "description" : "Transfer ID value",
          "required" : true,
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TransferUpdate"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "When transfer has been successfully updated"
          },
          "400" : {
            "description" : "Update of transfer is logically not permitted with values in provided 'request'",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Error"
                }
              }
            }
          },
          "404" : {
            "description" : "When transfer is not found by id 'transfer_id'",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      },
      "delete" : {
        "tags" : [ "Transfers" ],
        "summary" : "Delete the transfer with a given 'transfer_id'",
        "description" : "Delete a transfer for a specified 'transfer_id'",
        "operationId" : "apiDeleteTransfer",
        "parameters" : [ {
          "name" : "transfer_id",
          "in" : "path",
          "description" : "Transfer ID value",
          "required" : true,
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "When transfer has been successfully deleted"
          },
          "400" : {
            "description" : "Invalid 'transfer_id' value supplied, e.g. not valid type, <0, etc.",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Error"
                }
              }
            }
          },
          "404" : {
            "description" : "When transfer is not found by id 'transfer_id'",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Error"
                }
              }
            }
          },
          "409" : {
            "description" : "When the transfer by 'transfer_id' is not completed",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      }
    },
    "/v4/transfers" : {
      "get" : {
        "tags" : [ "Transfers" ],
        "summary" : "Get the list of transfers",
        "description" : "Transfers list is returned in the response, based on the values of optional query arguments for 'status', 'job_id' and 'identity_id'. The resulting data set is limited by the values of queryr arguments 'page' and 'pageSize'",
        "operationId" : "apiGetTransfers",
        "parameters" : [ {
          "name" : "status",
          "in" : "query",
          "description" : "Filter on: transfer with given 'status' value will be included in the response list",
          "schema" : {
            "type" : "string",
            "enum" : [ "PENDING", "READY", "SCHEDULED", "IN_PROGRESS", "COMPLETE", "ERROR" ]
          }
        }, {
          "name" : "job_id",
          "in" : "query",
          "description" : "Filter on: job ID value to get only transfers associated with that job",
          "schema" : {
            "minimum" : 1,
            "type" : "integer",
            "format" : "int64"
          }
        }, {
          "name" : "identity_id",
          "in" : "query",
          "description" : "Filter on: identity ID value to get only transfers created for that identity",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int64"
          }
        }, {
          "name" : "originalUriContains",
          "in" : "query",
          "description" : "Filter on: original file URI for the associated job (expression applied: 'originalUriContains in job.originalFileUri)",
          "schema" : {
            "type" : "string"
          }
        }, {
          "name" : "page",
          "in" : "query",
          "description" : "The page number in 0-base of paged result set items, sorted starting with the newest first.",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 0
          }
        }, {
          "name" : "pageSize",
          "in" : "query",
          "description" : "The number of items in paged result set",
          "schema" : {
            "minimum" : 0,
            "type" : "integer",
            "format" : "int32",
            "default" : 100
          }
        }, {
          "name" : "X-Ir-Dwm-Expand-SubResource",
          "in" : "header",
          "schema" : {
            "type" : "boolean",
            "default" : false
          }
        } ],
        "responses" : {
          "default" : {
            "description" : "transfer result",
            "content" : {
              "application/json; charset=UTF-8" : {
                "schema" : {
                  "type" : "array",
                  "items" : {
                    "$ref" : "#/components/schemas/TransferData"
                  }
                }
              }
            }
          },
          "400" : {
            "description" : "Invalid 'transfer_id' value supplied, e.g. not valid type, <0, etc."
          },
          "404" : {
            "description" : "When transfer is not found by provided 'transfer_id' value"
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      },
      "post" : {
        "tags" : [ "Transfers" ],
        "summary" : "Submit new transfer",
        "description" : "Create a new transfer",
        "operationId" : "apiSubmitTransfer",
        "parameters" : [ ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/TransferRequest"
              },
              "examples" : {
                "DWM-operated transfer, with destination" : {
                  "summary" : "Example of the payload for the DWM-operated transfer, where the watermarked file is uploaded to given destination URI by DWM itself",
                  "description" : "DWM-operated transfer, with destination",
                  "value" : {
                    "jobId" : 53,
                    "identityId" : 34587093487923867,
                    "destination" : "s3://sendbucket/path/to-destination/file.mp4"
                  }
                },
                "Caller-operated transfer, without destination" : {
                  "summary" : "Example of the payload for the calling client-operated transfer, where client itself is responsible for all IO and thus storing watermarked data to the target destination as well.",
                  "description" : "Example of the payload for the calling client-operated transfer",
                  "value" : {
                    "jobId" : 141,
                    "identityId" : 84963293487923867
                  }
                }
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "201" : {
            "description" : "When transfer has been successfully submitted",
            "headers" : {
              "Location" : {
                "required" : true,
                "style" : "simple"
              }
            }
          },
          "400" : {
            "description" : "Invalid 'request' object supplied",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Error"
                }
              }
            }
          },
          "404" : {
            "description" : "Request references non-existing resources, e.g. job, identity",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Error"
                }
              }
            }
          },
          "409" : {
            "description" : "Embedding operation for job referenced by 'jobId' and for identity referenced by 'identityId' request property is not finished or was not successful",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security" : [ {
          "BearerAuth" : [ ]
        } ]
      }
    },
    "/v4/version" : {
      "get" : {
        "tags" : [ "General" ],
        "summary" : "Obtain service version",
        "description" : "Obtain service version",
        "operationId" : "getVersion",
        "responses" : {
          "200" : {
            "description" : "Returns version of the system",
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/Version"
                }
              }
            }
          }
        }
      }
    }
  },
  "components" : {
    "schemas" : {
      "HashesResource" : {
        "type" : "object"
      },
      "Error" : {
        "required" : [ "code" ],
        "type" : "object",
        "properties" : {
          "code" : {
            "type" : "integer",
            "format" : "int32"
          },
          "message" : {
            "type" : "string"
          }
        }
      },
      "CrcPreprocessRequest" : {
        "required" : [ "identityId", "jobId" ],
        "type" : "object",
        "properties" : {
          "jobId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "identityId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "patches" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/PatchEntryDTO"
            }
          }
        }
      },
      "PatchEntryDTO" : {
        "type" : "object",
        "properties" : {
          "value" : {
            "type" : "string"
          },
          "patchId" : {
            "type" : "string",
            "enum" : [ "mxf_uuid", "pps" ]
          }
        }
      },
      "TenantSpecParam" : {
        "type" : "object",
        "properties" : {
          "tenantCategory" : {
            "type" : "string",
            "enum" : [ "TENANTS", "CLIENTS" ]
          },
          "tenantId" : {
            "type" : "string"
          }
        }
      },
      "CrcPreprocessData" : {
        "required" : [ "id", "identityId", "jobId", "patches", "progress", "status", "submissionTime", "tenantInfo" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "integer",
            "format" : "int64"
          },
          "jobId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "identityId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "patches" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/PatchEntryDTO"
            }
          },
          "status" : {
            "type" : "string",
            "enum" : [ "PENDING", "IN_PROGRESS", "COMPLETE", "ERROR" ]
          },
          "progress" : {
            "type" : "integer",
            "format" : "int32"
          },
          "error" : {
            "$ref" : "#/components/schemas/Error"
          },
          "hashDigest" : {
            "type" : "string"
          },
          "submissionTime" : {
            "type" : "string",
            "format" : "date-time"
          },
          "scheduledTime" : {
            "type" : "string",
            "format" : "date-time"
          },
          "startTime" : {
            "type" : "string",
            "format" : "date-time"
          },
          "completionTime" : {
            "type" : "string",
            "format" : "date-time"
          },
          "tenantInfo" : {
            "$ref" : "#/components/schemas/TenantInfo"
          }
        }
      },
      "TenantInfo" : {
        "required" : [ "tenantId" ],
        "type" : "object",
        "properties" : {
          "tenantId" : {
            "type" : "string"
          }
        }
      },
      "WatermarkJobData" : {
        "required" : [ "embeddingStrategyResolution", "inFile", "jobId", "status", "submissionTime", "tenantInfo" ],
        "type" : "object",
        "properties" : {
          "jobId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "inFile" : {
            "type" : "string",
            "format" : "uri"
          },
          "progress" : {
            "type" : "number",
            "format" : "float"
          },
          "status" : {
            "type" : "string",
            "enum" : [ "PENDING", "IN_PROGRESS", "COMPLETE", "ERROR" ]
          },
          "embeddingStrategyResolution" : {
            "type" : "string",
            "enum" : [ "AUTO", "DEFAULT", "EXPLICIT" ]
          },
          "embeddingStrategy" : {
            "type" : "string",
            "enum" : [ "TMID_SESSION", "FIXED_PAYLOAD" ]
          },
          "submissionTime" : {
            "type" : "string",
            "format" : "date-time"
          },
          "startTime" : {
            "type" : "string",
            "format" : "date-time"
          },
          "completionTime" : {
            "type" : "string",
            "format" : "date-time"
          },
          "error" : {
            "$ref" : "#/components/schemas/Error"
          },
          "identityIds" : {
            "type" : "array",
            "items" : {
              "type" : "integer",
              "format" : "int64"
            }
          },
          "tenantInfo" : {
            "$ref" : "#/components/schemas/TenantInfo"
          }
        }
      },
      "WatermarkJobDataList" : {
        "required" : [ "jobs" ],
        "type" : "object",
        "properties" : {
          "jobs" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/WatermarkJobData"
            }
          }
        }
      },
      "IdentitiesResource" : {
        "type" : "object"
      },
      "IdentityData" : {
        "required" : [ "id", "tmid" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "integer",
            "format" : "int64"
          },
          "tmid" : {
            "type" : "string"
          }
        }
      },
      "JobsResource" : {
        "type" : "object"
      },
      "VariantData" : {
        "required" : [ "status", "submissionTime", "variantTaskId" ],
        "type" : "object",
        "properties" : {
          "variantTaskId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "variantUri" : {
            "type" : "string",
            "format" : "uri"
          },
          "identityId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "status" : {
            "type" : "string",
            "enum" : [ "PENDING", "READY", "SCHEDULED", "IN_PROGRESS", "COMPLETE", "ERROR" ]
          },
          "progress" : {
            "type" : "number",
            "format" : "float"
          },
          "submissionTime" : {
            "type" : "string",
            "format" : "date-time"
          },
          "startTime" : {
            "type" : "string",
            "format" : "date-time"
          },
          "completionTime" : {
            "type" : "string",
            "format" : "date-time"
          },
          "error" : {
            "$ref" : "#/components/schemas/Error"
          }
        }
      },
      "MetadataDetails" : {
        "required" : [ "codecId", "format", "height", "width" ],
        "type" : "object",
        "properties" : {
          "format" : {
            "type" : "string"
          },
          "codecId" : {
            "type" : "string"
          },
          "bitrate" : {
            "type" : "integer",
            "format" : "int64"
          },
          "framerate" : {
            "type" : "number",
            "format" : "float"
          },
          "height" : {
            "type" : "integer",
            "format" : "int32"
          },
          "width" : {
            "type" : "integer",
            "format" : "int32"
          },
          "bitsPerSample" : {
            "type" : "integer",
            "format" : "int32"
          },
          "topBarSize" : {
            "type" : "integer",
            "format" : "int32"
          },
          "bottomBarSize" : {
            "type" : "integer",
            "format" : "int32"
          },
          "rightBarSize" : {
            "type" : "integer",
            "format" : "int32"
          },
          "leftBarSize" : {
            "type" : "integer",
            "format" : "int32"
          },
          "duration" : {
            "type" : "number",
            "format" : "float"
          },
          "fileSize" : {
            "type" : "integer",
            "format" : "int64"
          },
          "hasBFrames" : {
            "type" : "boolean"
          }
        }
      },
      "WatermarkJobRequest" : {
        "required" : [ "inFile" ],
        "type" : "object",
        "properties" : {
          "inFile" : {
            "type" : "string",
            "format" : "uri"
          },
          "embeddingStrategyResolution" : {
            "type" : "string",
            "enum" : [ "AUTO", "DEFAULT", "EXPLICIT" ]
          },
          "embeddingStrategy" : {
            "type" : "string",
            "enum" : [ "TMID_SESSION", "FIXED_PAYLOAD" ]
          },
          "identityIds" : {
            "maxItems" : 500,
            "minItems" : 1,
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "integer",
              "format" : "int64"
            }
          }
        }
      },
      "WatermarkJobUpdateRequest" : {
        "required" : [ "identityIds" ],
        "type" : "object",
        "properties" : {
          "identityIds" : {
            "maxItems" : 500,
            "minItems" : 1,
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "integer",
              "format" : "int64"
            }
          }
        }
      },
      "ApiResponse" : {
        "type" : "object",
        "properties" : {
          "description" : {
            "type" : "string"
          },
          "headers" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Header"
            }
          },
          "content" : {
            "type" : "object",
            "properties" : {
              "empty" : {
                "type" : "boolean"
              }
            },
            "additionalProperties" : {
              "$ref" : "#/components/schemas/MediaType"
            }
          },
          "links" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Link"
            }
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          },
          "get$ref" : {
            "type" : "string"
          }
        }
      },
      "ApiResponses" : {
        "type" : "object",
        "properties" : {
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          },
          "default" : {
            "$ref" : "#/components/schemas/ApiResponse"
          },
          "empty" : {
            "type" : "boolean"
          }
        },
        "additionalProperties" : {
          "$ref" : "#/components/schemas/ApiResponse"
        }
      },
      "Callback" : {
        "type" : "object",
        "properties" : {
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          },
          "get$ref" : {
            "type" : "string"
          },
          "empty" : {
            "type" : "boolean"
          }
        },
        "additionalProperties" : {
          "$ref" : "#/components/schemas/PathItem"
        }
      },
      "Components" : {
        "type" : "object",
        "properties" : {
          "schemas" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Schema"
            }
          },
          "responses" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/ApiResponse"
            }
          },
          "parameters" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Parameter"
            }
          },
          "examples" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Example"
            }
          },
          "requestBodies" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/RequestBody"
            }
          },
          "headers" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Header"
            }
          },
          "securitySchemes" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/SecurityScheme"
            }
          },
          "links" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Link"
            }
          },
          "callbacks" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Callback"
            }
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "Contact" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "url" : {
            "type" : "string"
          },
          "email" : {
            "type" : "string"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "Content" : {
        "type" : "object",
        "properties" : {
          "empty" : {
            "type" : "boolean"
          }
        },
        "additionalProperties" : {
          "$ref" : "#/components/schemas/MediaType"
        }
      },
      "Discriminator" : {
        "type" : "object",
        "properties" : {
          "propertyName" : {
            "type" : "string"
          },
          "mapping" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            }
          }
        }
      },
      "Encoding" : {
        "type" : "object",
        "properties" : {
          "contentType" : {
            "type" : "string"
          },
          "headers" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Header"
            }
          },
          "style" : {
            "type" : "string",
            "enum" : [ "form", "spaceDelimited", "pipeDelimited", "deepObject" ]
          },
          "explode" : {
            "type" : "boolean"
          },
          "allowReserved" : {
            "type" : "boolean"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "Example" : {
        "type" : "object",
        "properties" : {
          "summary" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "value" : {
            "type" : "object"
          },
          "externalValue" : {
            "type" : "string"
          },
          "get$ref" : {
            "type" : "string"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "ExternalDocumentation" : {
        "type" : "object",
        "properties" : {
          "description" : {
            "type" : "string"
          },
          "url" : {
            "type" : "string"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "Header" : {
        "type" : "object",
        "properties" : {
          "description" : {
            "type" : "string"
          },
          "get$ref" : {
            "type" : "string"
          },
          "required" : {
            "type" : "boolean"
          },
          "deprecated" : {
            "type" : "boolean"
          },
          "style" : {
            "type" : "string",
            "enum" : [ "simple" ]
          },
          "explode" : {
            "type" : "boolean"
          },
          "schema" : {
            "$ref" : "#/components/schemas/Schema"
          },
          "examples" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Example"
            }
          },
          "example" : {
            "type" : "object"
          },
          "content" : {
            "type" : "object",
            "properties" : {
              "empty" : {
                "type" : "boolean"
              }
            },
            "additionalProperties" : {
              "$ref" : "#/components/schemas/MediaType"
            }
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "Info" : {
        "type" : "object",
        "properties" : {
          "title" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "termsOfService" : {
            "type" : "string"
          },
          "contact" : {
            "$ref" : "#/components/schemas/Contact"
          },
          "license" : {
            "$ref" : "#/components/schemas/License"
          },
          "version" : {
            "type" : "string"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "License" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "url" : {
            "type" : "string"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "Link" : {
        "type" : "object",
        "properties" : {
          "operationRef" : {
            "type" : "string"
          },
          "operationId" : {
            "type" : "string"
          },
          "parameters" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            }
          },
          "requestBody" : {
            "type" : "object"
          },
          "headers" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Header"
            }
          },
          "description" : {
            "type" : "string"
          },
          "get$ref" : {
            "type" : "string"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          },
          "server" : {
            "$ref" : "#/components/schemas/Server"
          }
        }
      },
      "MediaType" : {
        "type" : "object",
        "properties" : {
          "schema" : {
            "$ref" : "#/components/schemas/Schema"
          },
          "examples" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Example"
            }
          },
          "example" : {
            "type" : "object"
          },
          "encoding" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Encoding"
            }
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "OAuthFlow" : {
        "type" : "object",
        "properties" : {
          "authorizationUrl" : {
            "type" : "string"
          },
          "tokenUrl" : {
            "type" : "string"
          },
          "refreshUrl" : {
            "type" : "string"
          },
          "scopes" : {
            "type" : "object",
            "properties" : {
              "extensions" : {
                "type" : "object",
                "additionalProperties" : {
                  "type" : "object"
                },
                "writeOnly" : true
              },
              "empty" : {
                "type" : "boolean"
              }
            },
            "additionalProperties" : {
              "type" : "string"
            }
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "OAuthFlows" : {
        "type" : "object",
        "properties" : {
          "implicit" : {
            "$ref" : "#/components/schemas/OAuthFlow"
          },
          "password" : {
            "$ref" : "#/components/schemas/OAuthFlow"
          },
          "clientCredentials" : {
            "$ref" : "#/components/schemas/OAuthFlow"
          },
          "authorizationCode" : {
            "$ref" : "#/components/schemas/OAuthFlow"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "OpenAPI" : {
        "type" : "object",
        "properties" : {
          "openapi" : {
            "type" : "string"
          },
          "info" : {
            "$ref" : "#/components/schemas/Info"
          },
          "externalDocs" : {
            "$ref" : "#/components/schemas/ExternalDocumentation"
          },
          "servers" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Server"
            }
          },
          "security" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/SecurityRequirement"
            }
          },
          "tags" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Tag"
            }
          },
          "paths" : {
            "type" : "object",
            "properties" : {
              "extensions" : {
                "type" : "object",
                "additionalProperties" : {
                  "type" : "object"
                },
                "writeOnly" : true
              },
              "empty" : {
                "type" : "boolean"
              }
            },
            "additionalProperties" : {
              "$ref" : "#/components/schemas/PathItem"
            }
          },
          "components" : {
            "$ref" : "#/components/schemas/Components"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          },
          "jsonSchemaDialect" : {
            "type" : "string"
          }
        }
      },
      "OpenAPIConfiguration" : {
        "type" : "object",
        "properties" : {
          "resourcePackages" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "resourceClasses" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "objectMapperProcessorClass" : {
            "type" : "string"
          },
          "readerClass" : {
            "type" : "string"
          },
          "scannerClass" : {
            "type" : "string"
          },
          "filterClass" : {
            "type" : "string"
          },
          "ignoredRoutes" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "openAPI" : {
            "$ref" : "#/components/schemas/OpenAPI"
          },
          "userDefinedOptions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            }
          },
          "readAllResources" : {
            "type" : "boolean"
          },
          "prettyPrint" : {
            "type" : "boolean"
          },
          "cacheTTL" : {
            "type" : "integer",
            "format" : "int64"
          },
          "modelConverterClasses" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "sortOutput" : {
            "type" : "boolean"
          },
          "alwaysResolveAppPath" : {
            "type" : "boolean"
          },
          "skipResolveAppPath" : {
            "type" : "boolean"
          },
          "openAPI31" : {
            "type" : "boolean"
          },
          "convertToOpenAPI31" : {
            "type" : "boolean"
          },
          "defaultResponseCode" : {
            "type" : "string"
          }
        }
      },
      "OpenApiResourceExt" : {
        "type" : "object",
        "properties" : {
          "configLocation" : {
            "type" : "string"
          },
          "resourcePackages" : {
            "uniqueItems" : true,
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "openApiConfiguration" : {
            "$ref" : "#/components/schemas/OpenAPIConfiguration"
          }
        }
      },
      "Operation" : {
        "type" : "object",
        "properties" : {
          "tags" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "summary" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "externalDocs" : {
            "$ref" : "#/components/schemas/ExternalDocumentation"
          },
          "operationId" : {
            "type" : "string"
          },
          "parameters" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Parameter"
            }
          },
          "requestBody" : {
            "$ref" : "#/components/schemas/RequestBody"
          },
          "responses" : {
            "type" : "object",
            "properties" : {
              "extensions" : {
                "type" : "object",
                "additionalProperties" : {
                  "type" : "object"
                },
                "writeOnly" : true
              },
              "default" : {
                "$ref" : "#/components/schemas/ApiResponse"
              },
              "empty" : {
                "type" : "boolean"
              }
            },
            "additionalProperties" : {
              "$ref" : "#/components/schemas/ApiResponse"
            }
          },
          "callbacks" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Callback"
            }
          },
          "deprecated" : {
            "type" : "boolean"
          },
          "security" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/SecurityRequirement"
            }
          },
          "servers" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Server"
            }
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "Parameter" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "in" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "required" : {
            "type" : "boolean"
          },
          "deprecated" : {
            "type" : "boolean"
          },
          "allowEmptyValue" : {
            "type" : "boolean"
          },
          "get$ref" : {
            "type" : "string"
          },
          "style" : {
            "type" : "string",
            "enum" : [ "matrix", "label", "form", "simple", "spaceDelimited", "pipeDelimited", "deepObject" ]
          },
          "explode" : {
            "type" : "boolean"
          },
          "allowReserved" : {
            "type" : "boolean"
          },
          "schema" : {
            "$ref" : "#/components/schemas/Schema"
          },
          "examples" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Example"
            }
          },
          "example" : {
            "type" : "object"
          },
          "content" : {
            "type" : "object",
            "properties" : {
              "empty" : {
                "type" : "boolean"
              }
            },
            "additionalProperties" : {
              "$ref" : "#/components/schemas/MediaType"
            }
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "PathItem" : {
        "type" : "object",
        "properties" : {
          "summary" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "get" : {
            "$ref" : "#/components/schemas/Operation"
          },
          "put" : {
            "$ref" : "#/components/schemas/Operation"
          },
          "post" : {
            "$ref" : "#/components/schemas/Operation"
          },
          "delete" : {
            "$ref" : "#/components/schemas/Operation"
          },
          "options" : {
            "$ref" : "#/components/schemas/Operation"
          },
          "head" : {
            "$ref" : "#/components/schemas/Operation"
          },
          "patch" : {
            "$ref" : "#/components/schemas/Operation"
          },
          "trace" : {
            "$ref" : "#/components/schemas/Operation"
          },
          "servers" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Server"
            }
          },
          "parameters" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Parameter"
            }
          },
          "get$ref" : {
            "type" : "string"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "Paths" : {
        "type" : "object",
        "properties" : {
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          },
          "empty" : {
            "type" : "boolean"
          }
        },
        "additionalProperties" : {
          "$ref" : "#/components/schemas/PathItem"
        }
      },
      "RequestBody" : {
        "type" : "object",
        "properties" : {
          "description" : {
            "type" : "string"
          },
          "content" : {
            "type" : "object",
            "properties" : {
              "empty" : {
                "type" : "boolean"
              }
            },
            "additionalProperties" : {
              "$ref" : "#/components/schemas/MediaType"
            }
          },
          "required" : {
            "type" : "boolean"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          },
          "get$ref" : {
            "type" : "string"
          }
        }
      },
      "Schema" : {
        "type" : "object",
        "properties" : {
          "title" : {
            "type" : "string"
          },
          "multipleOf" : {
            "type" : "number"
          },
          "maximum" : {
            "type" : "number"
          },
          "exclusiveMaximum" : {
            "type" : "boolean"
          },
          "minimum" : {
            "type" : "number"
          },
          "exclusiveMinimum" : {
            "type" : "boolean"
          },
          "maxLength" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minLength" : {
            "type" : "integer",
            "format" : "int32"
          },
          "pattern" : {
            "type" : "string"
          },
          "maxItems" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minItems" : {
            "type" : "integer",
            "format" : "int32"
          },
          "uniqueItems" : {
            "type" : "boolean"
          },
          "maxProperties" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minProperties" : {
            "type" : "integer",
            "format" : "int32"
          },
          "required" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "type" : {
            "type" : "string"
          },
          "not" : {
            "$ref" : "#/components/schemas/Schema"
          },
          "properties" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Schema"
            }
          },
          "additionalProperties" : {
            "type" : "object"
          },
          "description" : {
            "type" : "string"
          },
          "format" : {
            "type" : "string"
          },
          "get$ref" : {
            "type" : "string"
          },
          "nullable" : {
            "type" : "boolean"
          },
          "readOnly" : {
            "type" : "boolean"
          },
          "writeOnly" : {
            "type" : "boolean"
          },
          "example" : {
            "type" : "object"
          },
          "externalDocs" : {
            "$ref" : "#/components/schemas/ExternalDocumentation"
          },
          "deprecated" : {
            "type" : "boolean"
          },
          "xml" : {
            "$ref" : "#/components/schemas/XML"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          },
          "discriminator" : {
            "$ref" : "#/components/schemas/Discriminator"
          },
          "allOf" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Schema"
            }
          },
          "anyOf" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Schema"
            }
          },
          "oneOf" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Schema"
            }
          },
          "items" : {
            "$ref" : "#/components/schemas/SchemaObject"
          },
          "get$vocabulary" : {
            "type" : "string"
          },
          "get$dynamicAnchor" : {
            "type" : "string"
          },
          "default" : {
            "type" : "object"
          },
          "enum" : {
            "type" : "array",
            "items" : {
              "type" : "object"
            }
          }
        }
      },
      "SchemaObject" : {
        "type" : "object",
        "properties" : {
          "title" : {
            "type" : "string"
          },
          "multipleOf" : {
            "type" : "number"
          },
          "maximum" : {
            "type" : "number"
          },
          "exclusiveMaximum" : {
            "type" : "boolean"
          },
          "minimum" : {
            "type" : "number"
          },
          "exclusiveMinimum" : {
            "type" : "boolean"
          },
          "maxLength" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minLength" : {
            "type" : "integer",
            "format" : "int32"
          },
          "pattern" : {
            "type" : "string"
          },
          "maxItems" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minItems" : {
            "type" : "integer",
            "format" : "int32"
          },
          "uniqueItems" : {
            "type" : "boolean"
          },
          "maxProperties" : {
            "type" : "integer",
            "format" : "int32"
          },
          "minProperties" : {
            "type" : "integer",
            "format" : "int32"
          },
          "required" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          },
          "type" : {
            "type" : "string"
          },
          "not" : {
            "$ref" : "#/components/schemas/Schema"
          },
          "properties" : {
            "type" : "object",
            "additionalProperties" : {
              "$ref" : "#/components/schemas/Schema"
            }
          },
          "additionalProperties" : {
            "type" : "object"
          },
          "description" : {
            "type" : "string"
          },
          "format" : {
            "type" : "string"
          },
          "get$ref" : {
            "type" : "string"
          },
          "nullable" : {
            "type" : "boolean"
          },
          "readOnly" : {
            "type" : "boolean"
          },
          "writeOnly" : {
            "type" : "boolean"
          },
          "example" : {
            "type" : "object"
          },
          "externalDocs" : {
            "$ref" : "#/components/schemas/ExternalDocumentation"
          },
          "deprecated" : {
            "type" : "boolean"
          },
          "xml" : {
            "$ref" : "#/components/schemas/XML"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          },
          "discriminator" : {
            "$ref" : "#/components/schemas/Discriminator"
          },
          "allOf" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Schema"
            }
          },
          "anyOf" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Schema"
            }
          },
          "oneOf" : {
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/Schema"
            }
          },
          "items" : {
            "$ref" : "#/components/schemas/SchemaObject"
          },
          "get$vocabulary" : {
            "type" : "string"
          },
          "get$dynamicAnchor" : {
            "type" : "string"
          },
          "default" : {
            "type" : "object"
          },
          "enum" : {
            "type" : "array",
            "items" : {
              "type" : "object"
            }
          }
        }
      },
      "Scopes" : {
        "type" : "object",
        "properties" : {
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          },
          "empty" : {
            "type" : "boolean"
          }
        },
        "additionalProperties" : {
          "type" : "string"
        }
      },
      "SecurityRequirement" : {
        "type" : "object",
        "properties" : {
          "empty" : {
            "type" : "boolean"
          }
        },
        "additionalProperties" : {
          "type" : "array",
          "items" : {
            "type" : "string"
          }
        }
      },
      "SecurityScheme" : {
        "type" : "object",
        "properties" : {
          "type" : {
            "type" : "string",
            "enum" : [ "apiKey", "http", "oauth2", "openIdConnect", "mutualTLS" ]
          },
          "description" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "get$ref" : {
            "type" : "string"
          },
          "in" : {
            "type" : "string",
            "enum" : [ "cookie", "header", "query" ]
          },
          "scheme" : {
            "type" : "string"
          },
          "bearerFormat" : {
            "type" : "string"
          },
          "flows" : {
            "$ref" : "#/components/schemas/OAuthFlows"
          },
          "openIdConnectUrl" : {
            "type" : "string"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "Server" : {
        "type" : "object",
        "properties" : {
          "url" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "variables" : {
            "type" : "object",
            "properties" : {
              "extensions" : {
                "type" : "object",
                "additionalProperties" : {
                  "type" : "object"
                },
                "writeOnly" : true
              },
              "empty" : {
                "type" : "boolean"
              }
            },
            "additionalProperties" : {
              "$ref" : "#/components/schemas/ServerVariable"
            }
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "ServerVariable" : {
        "type" : "object",
        "properties" : {
          "description" : {
            "type" : "string"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          },
          "default" : {
            "type" : "string"
          },
          "enum" : {
            "type" : "array",
            "items" : {
              "type" : "string"
            }
          }
        }
      },
      "ServerVariables" : {
        "type" : "object",
        "properties" : {
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          },
          "empty" : {
            "type" : "boolean"
          }
        },
        "additionalProperties" : {
          "$ref" : "#/components/schemas/ServerVariable"
        }
      },
      "Tag" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "description" : {
            "type" : "string"
          },
          "externalDocs" : {
            "$ref" : "#/components/schemas/ExternalDocumentation"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "XML" : {
        "type" : "object",
        "properties" : {
          "name" : {
            "type" : "string"
          },
          "namespace" : {
            "type" : "string"
          },
          "prefix" : {
            "type" : "string"
          },
          "attribute" : {
            "type" : "boolean"
          },
          "wrapped" : {
            "type" : "boolean"
          },
          "extensions" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "object"
            },
            "writeOnly" : true
          }
        }
      },
      "StatusAPI" : {
        "type" : "object",
        "properties" : {
          "status" : {
            "type" : "object",
            "properties" : {
              "entity" : {
                "type" : "object"
              },
              "mediaType" : {
                "type" : "object",
                "properties" : {
                  "type" : {
                    "type" : "string"
                  },
                  "subtype" : {
                    "type" : "string"
                  },
                  "parameters" : {
                    "type" : "object",
                    "additionalProperties" : {
                      "type" : "string"
                    }
                  },
                  "wildcardType" : {
                    "type" : "boolean"
                  },
                  "wildcardSubtype" : {
                    "type" : "boolean"
                  }
                }
              },
              "length" : {
                "type" : "integer",
                "format" : "int32"
              },
              "location" : {
                "type" : "string",
                "format" : "uri"
              },
              "language" : {
                "type" : "object",
                "properties" : {
                  "language" : {
                    "type" : "string"
                  },
                  "displayName" : {
                    "type" : "string"
                  },
                  "country" : {
                    "type" : "string"
                  },
                  "variant" : {
                    "type" : "string"
                  },
                  "script" : {
                    "type" : "string"
                  },
                  "unicodeLocaleAttributes" : {
                    "uniqueItems" : true,
                    "type" : "array",
                    "items" : {
                      "type" : "string"
                    }
                  },
                  "unicodeLocaleKeys" : {
                    "uniqueItems" : true,
                    "type" : "array",
                    "items" : {
                      "type" : "string"
                    }
                  },
                  "displayLanguage" : {
                    "type" : "string"
                  },
                  "displayScript" : {
                    "type" : "string"
                  },
                  "displayCountry" : {
                    "type" : "string"
                  },
                  "displayVariant" : {
                    "type" : "string"
                  },
                  "extensionKeys" : {
                    "uniqueItems" : true,
                    "type" : "array",
                    "items" : {
                      "type" : "string"
                    }
                  },
                  "iso3Language" : {
                    "type" : "string"
                  },
                  "iso3Country" : {
                    "type" : "string"
                  }
                }
              },
              "date" : {
                "type" : "string",
                "format" : "date-time"
              },
              "lastModified" : {
                "type" : "string",
                "format" : "date-time"
              },
              "status" : {
                "type" : "integer",
                "format" : "int32"
              },
              "metadata" : {
                "type" : "object",
                "additionalProperties" : {
                  "type" : "array",
                  "items" : {
                    "type" : "object"
                  }
                }
              },
              "statusInfo" : {
                "type" : "object",
                "properties" : {
                  "family" : {
                    "type" : "string",
                    "enum" : [ "INFORMATIONAL", "SUCCESSFUL", "REDIRECTION", "CLIENT_ERROR", "SERVER_ERROR", "OTHER" ]
                  },
                  "statusCode" : {
                    "type" : "integer",
                    "format" : "int32"
                  },
                  "reasonPhrase" : {
                    "type" : "string"
                  }
                }
              },
              "stringHeaders" : {
                "type" : "object",
                "additionalProperties" : {
                  "type" : "array",
                  "items" : {
                    "type" : "string"
                  }
                }
              },
              "cookies" : {
                "type" : "object",
                "additionalProperties" : {
                  "type" : "object",
                  "properties" : {
                    "name" : {
                      "type" : "string"
                    },
                    "value" : {
                      "type" : "string"
                    },
                    "version" : {
                      "type" : "integer",
                      "format" : "int32"
                    },
                    "path" : {
                      "type" : "string"
                    },
                    "domain" : {
                      "type" : "string"
                    },
                    "comment" : {
                      "type" : "string"
                    },
                    "maxAge" : {
                      "type" : "integer",
                      "format" : "int32"
                    },
                    "expiry" : {
                      "type" : "string",
                      "format" : "date-time"
                    },
                    "secure" : {
                      "type" : "boolean"
                    },
                    "httpOnly" : {
                      "type" : "boolean"
                    }
                  }
                }
              },
              "allowedMethods" : {
                "uniqueItems" : true,
                "type" : "array",
                "items" : {
                  "type" : "string"
                }
              },
              "entityTag" : {
                "type" : "object",
                "properties" : {
                  "value" : {
                    "type" : "string"
                  },
                  "weak" : {
                    "type" : "boolean"
                  }
                }
              },
              "links" : {
                "uniqueItems" : true,
                "type" : "array",
                "items" : {
                  "type" : "object",
                  "properties" : {
                    "params" : {
                      "type" : "object",
                      "additionalProperties" : {
                        "type" : "string"
                      }
                    },
                    "type" : {
                      "type" : "string"
                    },
                    "title" : {
                      "type" : "string"
                    },
                    "uri" : {
                      "type" : "string",
                      "format" : "uri"
                    },
                    "uriBuilder" : {
                      "type" : "object"
                    },
                    "rel" : {
                      "type" : "string"
                    },
                    "rels" : {
                      "type" : "array",
                      "items" : {
                        "type" : "string"
                      }
                    }
                  }
                }
              },
              "headers" : {
                "type" : "object",
                "additionalProperties" : {
                  "type" : "array",
                  "items" : {
                    "type" : "object"
                  }
                }
              }
            }
          }
        }
      },
      "JobsNow" : {
        "required" : [ "inProgress", "pending" ],
        "type" : "object",
        "properties" : {
          "pending" : {
            "type" : "integer",
            "format" : "int64"
          },
          "inProgress" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "JobsStats" : {
        "required" : [ "complete", "error" ],
        "type" : "object",
        "properties" : {
          "complete" : {
            "type" : "integer",
            "format" : "int64"
          },
          "error" : {
            "type" : "integer",
            "format" : "int64"
          },
          "averageDuration" : {
            "type" : "string"
          }
        }
      },
      "Status" : {
        "required" : [ "dbConnection", "error" ],
        "type" : "object",
        "properties" : {
          "jobsNow" : {
            "$ref" : "#/components/schemas/JobsNow"
          },
          "jobsStats" : {
            "$ref" : "#/components/schemas/JobsStats"
          },
          "dbConnection" : {
            "type" : "string",
            "enum" : [ "OK", "ERROR" ]
          },
          "error" : {
            "$ref" : "#/components/schemas/Error"
          }
        }
      },
      "TasksResource" : {
        "type" : "object"
      },
      "ErrorDTO" : {
        "type" : "object",
        "properties" : {
          "message" : {
            "type" : "string"
          },
          "code" : {
            "type" : "integer",
            "format" : "int32"
          }
        }
      },
      "TaskBaseInfoDTO" : {
        "type" : "object",
        "properties" : {
          "status" : {
            "type" : "string",
            "enum" : [ "PENDING", "READY", "SCHEDULED", "IN_PROGRESS", "COMPLETE", "ERROR" ]
          },
          "error" : {
            "$ref" : "#/components/schemas/ErrorDTO"
          },
          "jobId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "progress" : {
            "type" : "number",
            "format" : "float"
          },
          "originalFile" : {
            "type" : "string",
            "format" : "uri"
          },
          "taskId" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "TaskBaseInfoDTOObjectObject" : {
        "type" : "object",
        "properties" : {
          "status" : {
            "type" : "string",
            "enum" : [ "PENDING", "READY", "SCHEDULED", "IN_PROGRESS", "COMPLETE", "ERROR" ]
          },
          "error" : {
            "type" : "object"
          },
          "jobId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "progress" : {
            "type" : "number",
            "format" : "float"
          },
          "originalFile" : {
            "type" : "string",
            "format" : "uri"
          },
          "taskId" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "ITransferQueriesTransfer" : {
        "type" : "object"
      },
      "TransactionOperations" : {
        "type" : "object"
      },
      "TransfersResource" : {
        "type" : "object",
        "properties" : {
          "transferQueries" : {
            "$ref" : "#/components/schemas/ITransferQueriesTransfer"
          },
          "transactionTemplate" : {
            "$ref" : "#/components/schemas/TransactionOperations"
          }
        }
      },
      "TransferData" : {
        "required" : [ "id", "identityId", "jobId", "status" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "integer",
            "format" : "int64"
          },
          "identityId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "jobId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "status" : {
            "type" : "string",
            "enum" : [ "PENDING", "READY", "SCHEDULED", "IN_PROGRESS", "COMPLETE", "ERROR" ]
          },
          "progress" : {
            "type" : "number",
            "format" : "float"
          },
          "submissionTime" : {
            "type" : "string",
            "format" : "date-time"
          },
          "startTime" : {
            "type" : "string",
            "format" : "date-time"
          },
          "scheduledTime" : {
            "type" : "string",
            "format" : "date-time"
          },
          "completionTime" : {
            "type" : "string",
            "format" : "date-time"
          },
          "error" : {
            "$ref" : "#/components/schemas/Error"
          },
          "destination" : {
            "type" : "string",
            "format" : "uri"
          },
          "result" : {
            "$ref" : "#/components/schemas/TransferResult"
          },
          "tenantInfo" : {
            "$ref" : "#/components/schemas/TenantInfo"
          }
        }
      },
      "TransferResult" : {
        "required" : [ "processedBytes" ],
        "type" : "object",
        "properties" : {
          "processedBytes" : {
            "type" : "integer",
            "format" : "int64"
          },
          "totalBytes" : {
            "type" : "integer",
            "format" : "int64"
          }
        }
      },
      "TransferRequestDTOObject" : {
        "type" : "object",
        "properties" : {
          "jobId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "identityId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "destination" : {
            "type" : "string",
            "format" : "uri"
          }
        }
      },
      "TransferRequest" : {
        "required" : [ "identityId", "jobId" ],
        "type" : "object",
        "properties" : {
          "identityId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "jobId" : {
            "type" : "integer",
            "format" : "int64"
          },
          "destination" : {
            "type" : "string",
            "format" : "uri"
          }
        }
      },
      "TransferUpdate" : {
        "required" : [ "status" ],
        "type" : "object",
        "properties" : {
          "status" : {
            "type" : "string",
            "enum" : [ "PENDING", "READY", "SCHEDULED", "IN_PROGRESS", "COMPLETE", "ERROR" ]
          },
          "error" : {
            "$ref" : "#/components/schemas/Error"
          },
          "progress" : {
            "type" : "number",
            "format" : "float"
          },
          "executorId" : {
            "type" : "string"
          },
          "result" : {
            "$ref" : "#/components/schemas/TransferResult"
          }
        }
      },
      "Version" : {
        "required" : [ "version" ],
        "type" : "object",
        "properties" : {
          "version" : {
            "type" : "string"
          }
        }
      },
      "VersionAPI" : {
        "type" : "object",
        "properties" : {
          "version" : {
            "$ref" : "#/components/schemas/Version"
          }
        }
      }
    },
    "securitySchemes" : {
      "OAuth2ClientCredentials" : {
        "type" : "oauth2",
        "flows" : {
          "clientCredentials" : {
            "tokenUrl" : "/oauth/token",
            "scopes" : {
              "dwm:jobs" : "Grants access to the /v4/jobs APIs",
              "dwm:transfers" : "Grants access to the /v4/transfers APIs",
              "dwm:identity" : "Grants access to the /v4/identity API"
            }
          }
        }
      },
      "Auth0ClientCredentials" : {
        "type" : "oauth2",
        "flows" : {
          "clientCredentials" : {
            "tokenUrl" : "https://irdeto.auth0.com/oauth/token",
            "scopes" : {
              "dwm:jobs" : "Grants access to the /v4/jobs APIs",
              "dwm:transfers" : "Grants access to the /v4/transfers APIs",
              "dwm:identity" : "Grants access to the /v4/identity API",
              "dwm:admin" : "Grants access to all /v4 APIs"
            }
          }
        }
      },
      "BearerAuth" : {
        "type" : "http",
        "scheme" : "bearer",
        "bearerFormat" : "JWT"
      }
    }
  }
}