{
  "openapi" : "3.1.0",
  "info" : {
    "title" : "Pixop API",
    "description" : "\nThe Pixop API provides a comprehensive RESTful interface for interacting with the Pixop Platform.\nIt allows users to manage API keys, projects, videos, and more.\n\nThe Pixop Platform offers video processing features such as upscaling, format conversion, and compression. It uses\nAI-driven algorithms to optimize video quality, reduce file sizes, and improve playback performance.\n\n**Quick Start Guide**\n- Explore the [Pixop API Documentation](https://docs.pixop.com/reference/) to familiarize yourself with the API's capabilities.\n\n**Required Headers**\nInclude the following headers in all API requests:\n- `Accept`: `application/json`\n- `Content-Type`: `application/json`\n- `X-API-Key`: Your API key for authentication (e.g., `X-API-Key: <your-api-key>`).  \n  **Note:** API key management endpoints that use Basic Authentication do not require the `X-API-Key` header.\n\n**Rate Limits**\nAll endpoints, except those related to API key management, enforce rate limits. Response headers provide the following rate limit details:\n- `X-RateLimit-Limit`: The maximum number of requests allowed per minute.\n- `X-RateLimit-Remaining`: The number of requests remaining in the current rate limit window.\n- `X-RateLimit-Reset`: The number of seconds until the current rate limit window resets.\n",
    "termsOfService" : "https://docs.pixop.com/reference/terms-of-service",
    "contact" : {
      "email" : "api@pixop.com"
    },
    "version" : "2.0.0"
  },
  "x-proxy-enabled" : false,
  "externalDocs" : {
    "description" : "Learn more about Pixop",
    "url" : "https://www.pixop.com"
  },
  "servers" : [ {
    "url" : "https://api.pixop.com/api",
    "description" : "Production environment"
  }, {
    "url" : "https://staging-api.pixop.com/api",
    "description" : "Staging environment"
  } ],
  "tags" : [ {
    "name" : "api key",
    "description" : "Operations for managing API keys. These endpoints use Basic Authentication with an email and password."
  }, {
    "name" : "account",
    "description" : "Operations for viewing user account details."
  }, {
    "name" : "stripe-billing",
    "description" : "Stripe/wallet billing operations."
  }, {
    "name" : "aws-marketplace-billing",
    "description" : "AWS Marketplace billing, subscription, and usage operations."
  }, {
    "name" : "team",
    "description" : "Operations for viewing team details."
  }, {
    "name" : "project",
    "description" : "Operations for creating and managing projects."
  }, {
    "name" : "S3 input location",
    "description" : "Operations for managing S3 input locations, which are used to access video files for ingestion and processing."
  }, {
    "name" : "S3 output location",
    "description" : "Operations for managing S3 output locations, which are used for delivery of video files."
  }, {
    "name" : "video processing configuration",
    "description" : "Operations for creating and managing video processing configurations."
  }, {
    "name" : "video",
    "description" : "Operations for managing videos, including metadata and associations."
  }, {
    "name" : "video in",
    "description" : "Operations for importing and ingesting video data into the Pixop Platform."
  }, {
    "name" : "video processing",
    "description" : "Operations for configuring and executing video processing tasks."
  }, {
    "name" : "video out",
    "description" : "Operations for exporting video data from the Pixop Platform."
  }, {
    "name" : "webhook public key",
    "description" : "Operations for retrieving public keys used to verify webhook signatures."
  }, {
    "name" : "webhook",
    "description" : "Operations for creating and managing webhooks.\n\n---\n\n### Webhook Signature Verification\n\nPixop signs all outgoing webhook requests to allow verification of their authenticity and integrity.\n\nEach request includes the following HTTP headers:\n\n- `X-Pixop-Signature`: A base64-encoded signature of the timestamp and request body.\n- `X-Pixop-Public-Key-Id`: The UUID of the public key used to verify the signature.\n- `X-Pixop-Timestamp`: A Unix timestamp (in seconds) indicating when the request was signed.\n- `X-Pixop-Algorithm`: The signing algorithm. Currently `SHA256withECDSA`.\n\n**Signature format:**\n\n```\n<timestamp>.<payloadJson>\n```\n\n- `<timestamp>` is taken from `X-Pixop-Timestamp`\n- `<payloadJson>` is the raw request body as sent by Pixop\n\nThis string is signed using ECDSA (`SHA256withECDSA`), and the result is base64-encoded.\n\n**Verifying the Signature:**\n\n1. Concatenate the timestamp and request body:\n   ```\n   timestamp + \".\" + rawRequestBody\n   ```\n2. Retrieve the public key using the `X-Pixop-Public-Key-Id`:\n   ```\n   [GET /v1/webhooks/public-keys/{id}](https://docs.pixop.com/reference/getWebhookPublicKeyById/)\n   ```\n3. Verify the signature using the specified algorithm and public key.\n4. Reject requests with timestamps older than an acceptable threshold (e.g., 5 minutes) to mitigate replay attacks.\n\n**Webhook requests have a 10-second timeout. Respond promptly and handle long-running logic asynchronously to avoid delivery failures.**\n\nAlthough public key retrieval is typically fast, it's strongly recommended to **cache** it to reduce latency and improve performance.\n\n**Key rotation:**\n\nPixop rotates webhook signing keys regularly. During rotation, two keys may be valid for a short grace period. Always verify the signature using the public key referenced by `X-Pixop-Public-Key-Id`.\n\n**Code example:**\n\nA public [Spring Boot example project](coming-soon) is available to demonstrate webhook signature verification.\n\n---\n\n### Webhook Retry Behavior\n\nPixop automatically retries failed webhook deliveries using an **exponential backoff strategy***. Retry behavior can be customized per webhook.\n\nA webhook delivery is considered failed if:\n\n- The response status code is not `2xx`\n- The request times out or encounters a network error\n- The `WebhookRateLimitPerSecond` threshold is exceeded and no permit is acquired within 5 seconds\n\nIf a `429 Too Many Requests` response includes a `Retry-After` header (or similar), Pixop honors it when scheduling the next retry attempt.\n\nRetries continue until the maximum retry window (`maxTotalRetryDelayMinutes`) is reached.\n\nDetailed delivery history — including status codes, response bodies, retry timing, and headers — is available via the [GET /v1/webhooks/events](https://docs.pixop.com/reference/getWebhookEvents/) endpoints.\n\nWebhook event history is retained for **10 days**, or **1 day** for test events.\n\n**Event Ordering and Context**\n\nWebhook events are dispatched **asynchronously** and independently. While Pixop makes a best-effort attempt to deliver events in the order they occur, **delivery order is not guaranteed**.\n\nFor instance, a `video_processing.done` event may arrive **before** the corresponding `video_processing.started` event for the same `videoId`. This can happen due to network retries, parallel processing, or delays in webhook delivery.\n\nTo correctly handle events:\n\n  - Treat each event as **self-contained**\n  - Use the `occurredAt` date and time to determine the actual sequence of events\n  - Design webhook receivers to be **idempotent** and resilient to out-of-order delivery\n\nFor additional context about a given event, query the related video resource using:\n  [GET /v1/videos/{videoId}](https://docs.pixop.com/reference/getVideoById/)\n"
  }, {
    "name" : "webhook event",
    "description" : "Operations for viewing webhook event deliveries and their statuses."
  } ],
  "security" : [ {
    "api_key" : [ ]
  } ],
  "paths" : {
    "/v1/api-keys" : {
      "post" : {
        "tags" : [ "api key" ],
        "summary" : "Create a new API key",
        "description" : "Creates a new API key associated with the authenticated user. API keys are used for authentication when accessing the Pixop API.\n\nEach user can have up to **2 active API keys**. If this limit is reached, attempts to create an additional active API key will result in a `409 Conflict` response.\n        \n**Note**\n- API keys become eligible for automatic deletion if they are not used for authentication for 90 consecutive days.\n  Using a key successfully resets this 90-day inactivity window, but the key may become eligible for deletion again after a later period of inactivity.\n- When a key becomes eligible for deletion, the `deletionEligibleAt` field will indicate the earliest date on which it may be deleted.\n",
        "operationId" : "createApiKey",
        "security" : [ {
          "basic_auth" : [ ]
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/ApiKeyPostRequest"
        },
        "responses" : {
          "201" : {
            "description" : "API key successfully created.",
            "$ref" : "#/components/responses/ApiKeyResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "get" : {
        "tags" : [ "api key" ],
        "summary" : "Retrieve API keys",
        "description" : "Retrieves a paginated list of API keys associated with the authenticated user.",
        "operationId" : "getApiKeys",
        "security" : [ {
          "basic_auth" : [ ]
        } ],
        "parameters" : [ {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/SortByBaseParam"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/ApiKeysPageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/api-keys/{id}" : {
      "get" : {
        "tags" : [ "api key" ],
        "summary" : "Retrieve API key details",
        "description" : "Retrieves the details of a specific API key using its unique identifier.",
        "operationId" : "getApiKeyById",
        "security" : [ {
          "basic_auth" : [ ]
        } ],
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/ApiKeyResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "patch" : {
        "tags" : [ "api key" ],
        "summary" : "Update an API key",
        "description" : "Updates the name or description of an existing API key. To activate or deactivate an API key, use the respective endpoints.",
        "operationId" : "patchApiKey",
        "security" : [ {
          "basic_auth" : [ ]
        } ],
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/ApiKeyPatchRequest"
        },
        "responses" : {
          "200" : {
            "description" : "API key successfully updated.",
            "$ref" : "#/components/responses/ApiKeyResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "delete" : {
        "tags" : [ "api key" ],
        "summary" : "Delete an inactive API key",
        "description" : "Deletes an inactive API key. Active API keys must be deactivated before they can be deleted. \nA `409 Conflict` response is returned, if the API key is active.\n",
        "operationId" : "deleteApiKeyById",
        "security" : [ {
          "basic_auth" : [ ]
        } ],
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "204" : {
            "description" : "API key successfully deleted. No content to return.",
            "$ref" : "#/components/responses/NoContent"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/api-keys/{id}/deactivate" : {
      "post" : {
        "tags" : [ "api key" ],
        "summary" : "Deactivate an API key",
        "description" : "Deactivates an API key. If the API key is already inactive, the operation has no effect.",
        "operationId" : "deactivateApiKeyById",
        "security" : [ {
          "basic_auth" : [ ]
        } ],
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "200" : {
            "description" : "API key successfully deactivated.",
            "$ref" : "#/components/responses/ApiKeyResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/api-keys/{id}/activate" : {
      "post" : {
        "tags" : [ "api key" ],
        "summary" : "Activate an API key",
        "description" : "Activates an API key. If the API key is already active, the operation has no effect. \nIf the maximum number of active API keys allowed has been reached, a `409 Conflict` response is returned.\n",
        "operationId" : "activateApiKeyById",
        "security" : [ {
          "basic_auth" : [ ]
        } ],
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "200" : {
            "description" : "API key successfully activated.",
            "$ref" : "#/components/responses/ApiKeyResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/account" : {
      "get" : {
        "tags" : [ "account" ],
        "summary" : "Retrieve account details",
        "description" : "Retrieves account details for the provided API key.",
        "operationId" : "getAccount",
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/AccountResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v2/stripe/financial-details" : {
      "get" : {
        "tags" : [ "stripe-billing" ],
        "summary" : "Retrieve Stripe financial details",
        "description" : "Retrieves financial details for Stripe/wallet-billed teams, including the current balances and total processing amount spent for the selected team.",
        "operationId" : "getStripeFinancialDetails",
        "parameters" : [ {
          "$ref" : "#/components/parameters/SelectTeamId"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/FinancialDetailsResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v2/stripe/billing-periods" : {
      "get" : {
        "tags" : [ "stripe-billing" ],
        "summary" : "Retrieve paginated list of Stripe billing periods",
        "description" : "Retrieves a paginated list of Stripe billing periods associated with the provided API key.",
        "operationId" : "getStripeBillingPeriods",
        "parameters" : [ {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/SortByBaseParam"
        }, {
          "$ref" : "#/components/parameters/FilterByTeamId"
        }, {
          "$ref" : "#/components/parameters/FilterByFromDate"
        }, {
          "$ref" : "#/components/parameters/FilterByToDate"
        }, {
          "$ref" : "#/components/parameters/FilterEndedMode"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/BillingPeriodsPageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v2/stripe/billing-periods/{id}" : {
      "get" : {
        "tags" : [ "stripe-billing" ],
        "summary" : "Retrieve Stripe billing period details",
        "description" : "Retrieves the details of a specific Stripe billing period.",
        "operationId" : "getStripeBillingPeriodById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/BillingPeriodResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v2/stripe/billing-periods/{id}/transactions" : {
      "get" : {
        "tags" : [ "stripe-billing" ],
        "summary" : "Retrieve transactions for a Stripe billing period",
        "description" : "Retrieves a paginated list of transactions for a specific Stripe billing period. `FilterByFromDateTimeParam` defaults to the creation date of the team.",
        "operationId" : "getStripeTransactionsByBillingPeriodId",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        }, {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/FilterByFromDateTimeParam"
        }, {
          "$ref" : "#/components/parameters/FilterByToDateTimeParam"
        }, {
          "$ref" : "#/components/parameters/FilterProcessingTransactionsModeParam"
        }, {
          "$ref" : "#/components/parameters/FilterByVideoId"
        } ],
        "responses" : {
          "200" : {
            "description" : "Successfully retrieved the paginated list of transactions for the given billing period.",
            "$ref" : "#/components/responses/TransactionsPageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v2/stripe/billing-periods/latest/transactions" : {
      "get" : {
        "tags" : [ "stripe-billing" ],
        "summary" : "Retrieve transactions for the latest Stripe billing period",
        "description" : "Retrieves a paginated list of transactions for the selected team’s latest Stripe billing period, sorted by date. `FilterByFromDateTimeParam` defaults to the creation date of the team.",
        "operationId" : "getStripeTransactionsForLatestBillingPeriod",
        "parameters" : [ {
          "$ref" : "#/components/parameters/SelectTeamId"
        }, {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/FilterByFromDateTimeParam"
        }, {
          "$ref" : "#/components/parameters/FilterByToDateTimeParam"
        }, {
          "$ref" : "#/components/parameters/FilterProcessingTransactionsModeParam"
        }, {
          "$ref" : "#/components/parameters/FilterByVideoId"
        } ],
        "responses" : {
          "200" : {
            "description" : "Successfully retrieved the paginated list of transactions for the latest billing period.",
            "$ref" : "#/components/responses/TransactionsPageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v2/aws-marketplace/subscriptions" : {
      "get" : {
        "tags" : [ "aws-marketplace-billing" ],
        "summary" : "Retrieve paginated list of AWS Marketplace subscriptions",
        "description" : "Retrieve paginated list of AWS Marketplace subscriptions associated with the provided API key.",
        "operationId" : "getAwsMarketplaceSubscriptions",
        "parameters" : [ {
          "$ref" : "#/components/parameters/FilterByTeamId"
        }, {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/SortByBaseParam"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/AwsMarketplaceSubscriptionsPageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v2/aws-marketplace/subscriptions/{agreementId}" : {
      "get" : {
        "tags" : [ "aws-marketplace-billing" ],
        "summary" : "Retrieve AWS Marketplace subscription details",
        "description" : "Retrieves details for a single AWS Marketplace subscription identified by agreement ID.",
        "operationId" : "getAwsMarketplaceSubscriptionByAgreementId",
        "parameters" : [ {
          "$ref" : "#/components/parameters/AgreementIdPathParam"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/AwsMarketplaceSubscriptionResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v2/aws-marketplace/subscriptions/current" : {
      "get" : {
        "tags" : [ "aws-marketplace-billing" ],
        "summary" : "Retrieve current AWS Marketplace subscription",
        "description" : "Retrieves the current AWS Marketplace subscription linked to the selected team.",
        "operationId" : "getCurrentAwsMarketplaceSubscription",
        "parameters" : [ {
          "$ref" : "#/components/parameters/SelectTeamId"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/AwsMarketplaceSubscriptionResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v2/aws-marketplace/credits-usage" : {
      "get" : {
        "tags" : [ "aws-marketplace-billing" ],
        "summary" : "Retrieve AWS Marketplace Pixop Credits usage",
        "description" : "Retrieves a paginated list of Pixop Credits usage records for the selected team. `FilterByFromDateTimeParam` defaults to the first date and time the team was linked to an AWS Marketplace agreement.",
        "operationId" : "getAwsMarketplacePixopCreditsUsage",
        "parameters" : [ {
          "$ref" : "#/components/parameters/SelectTeamId"
        }, {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/FilterByFromDateTimeParam"
        }, {
          "$ref" : "#/components/parameters/FilterByToDateTimeParam"
        }, {
          "$ref" : "#/components/parameters/FilterProcessingCreditsUsageModeParam"
        }, {
          "$ref" : "#/components/parameters/FilterByVideoId"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/CreditsUsagePageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/teams" : {
      "get" : {
        "tags" : [ "team" ],
        "summary" : "Retrieve paginated list of teams",
        "description" : "Retrieves a paginated list of teams associated with the provided API key.",
        "operationId" : "getTeams",
        "parameters" : [ {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/SortByBaseParam"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/TeamsPageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/teams/{id}" : {
      "get" : {
        "tags" : [ "team" ],
        "summary" : "Retrieve team details",
        "description" : "Retrieves the details of a team by its unique identifier.",
        "operationId" : "getTeamById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/TeamResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/projects" : {
      "post" : {
        "tags" : [ "project" ],
        "summary" : "Create a new project",
        "description" : "Creates a new project within the selected team.",
        "operationId" : "createProject",
        "parameters" : [ {
          "$ref" : "#/components/parameters/SelectTeamId"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/ProjectPostRequest"
        },
        "responses" : {
          "201" : {
            "description" : "Project successfully created.",
            "$ref" : "#/components/responses/ProjectResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "get" : {
        "tags" : [ "project" ],
        "summary" : "Retrieve paginated list of projects",
        "description" : "Retrieves a paginated list of projects associated with the provided API key.",
        "operationId" : "getProjects",
        "parameters" : [ {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/SortByBaseParam"
        }, {
          "$ref" : "#/components/parameters/FilterByTeamId"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/ProjectsPageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/projects/default" : {
      "get" : {
        "tags" : [ "project" ],
        "summary" : "Retrieve project details for the default project of the selected team",
        "description" : "Retrieves the details of the default project of the selected team. The default project of a team is the oldest\nproject with the name 'Default Project'. If the selected team does not exist or does not have a default project,\na `404 Not Found` response is returned.\n",
        "operationId" : "getDefaultProject",
        "parameters" : [ {
          "$ref" : "#/components/parameters/SelectTeamId"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/ProjectResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/projects/{id}" : {
      "patch" : {
        "tags" : [ "project" ],
        "summary" : "Update an existing project",
        "description" : "Updates the details of an existing project by its unique identifier.",
        "operationId" : "patchProject",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/ProjectPatchRequest"
        },
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/ProjectResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "get" : {
        "tags" : [ "project" ],
        "summary" : "Retrieve project details",
        "description" : "Retrieves the details of a specific project by its unique identifier.",
        "operationId" : "getProjectById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/ProjectResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "delete" : {
        "tags" : [ "project" ],
        "summary" : "Delete a project",
        "description" : "Deletes a project by its unique identifier. If the project has videos associated with it, a `409 Conflict` response is returned.\nVideos must be deleted before deleting the project. Use [GET /v1/videos](https://docs.pixop.com/reference/getVideos/) with the `FilterByProjectId` query parameter to retrieve associated videos.\n",
        "operationId" : "deleteProjectById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "204" : {
            "$ref" : "#/components/responses/NoContent",
            "description" : "Project successfully deleted. No content to return."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/input-locations/s3" : {
      "post" : {
        "tags" : [ "S3 input location" ],
        "summary" : "Create a new S3 input location",
        "description" : "Creates a new S3 input location for the selected team, which can be used with the  [POST /v1/videos/in/s3/{inputLocationId}](https://docs.pixop.com/reference/createMasterVideoFromS3InputLocationId/)  endpoint to create a master video record from video data stored in the bucket defined in the S3 input location.\n",
        "operationId" : "createS3InputLocation",
        "parameters" : [ {
          "$ref" : "#/components/parameters/SelectTeamId"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/S3InputLocationPostRequest"
        },
        "responses" : {
          "201" : {
            "description" : "S3 input location successfully created.",
            "$ref" : "#/components/responses/S3InputLocationResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "get" : {
        "tags" : [ "S3 input location" ],
        "summary" : "Retrieve paginated list of S3 input locations",
        "description" : "Retrieves a paginated list of S3 input locations associated with the provided API key.",
        "operationId" : "getS3InputLocations",
        "parameters" : [ {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/SortByBaseParam"
        }, {
          "$ref" : "#/components/parameters/FilterByTeamId"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/S3InputLocationsPageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/input-locations/s3/{id}" : {
      "get" : {
        "tags" : [ "S3 input location" ],
        "summary" : "Retrieve S3 input location details",
        "description" : "Retrieves the details of an S3 input location by its unique identifier.",
        "operationId" : "getS3InputLocationById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/S3InputLocationResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "patch" : {
        "tags" : [ "S3 input location" ],
        "summary" : "Update an S3 input location",
        "description" : "Updates the details of an existing S3 input location by its unique identifier.",
        "operationId" : "patchS3InputLocation",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/S3InputLocationPatchRequest"
        },
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/S3InputLocationResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "delete" : {
        "tags" : [ "S3 input location" ],
        "summary" : "Delete an S3 input location",
        "description" : "Deletes an S3 input location by its unique identifier.",
        "operationId" : "deleteS3InputLocationById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "204" : {
            "$ref" : "#/components/responses/NoContent",
            "description" : "S3 input location successfully deleted. No content to return."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/output-locations/s3" : {
      "post" : {
        "tags" : [ "S3 output location" ],
        "summary" : "Create a new S3 output location",
        "description" : "Creates a new S3 output location for the selected team. This location can be used with the  [POST /v1/videos/{videoId}/out/s3/{outputLocationId}](https://docs.pixop.com/reference/copyVideoDataToS3OutputLocationId/) endpoint to copy video data to the specified S3 bucket.\n",
        "operationId" : "createS3OutputLocation",
        "parameters" : [ {
          "$ref" : "#/components/parameters/SelectTeamId"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/S3OutputLocationPostRequest"
        },
        "responses" : {
          "201" : {
            "description" : "S3 output location successfully created.",
            "$ref" : "#/components/responses/S3OutputLocationResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "get" : {
        "tags" : [ "S3 output location" ],
        "summary" : "Retrieve paginated list of S3 output locations",
        "description" : "Retrieves a paginated list of S3 output locations associated with the provided API key.",
        "operationId" : "getS3OutputLocations",
        "parameters" : [ {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/SortByBaseParam"
        }, {
          "$ref" : "#/components/parameters/FilterByTeamId"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/S3OutputLocationsPageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/output-locations/s3/{id}" : {
      "get" : {
        "tags" : [ "S3 output location" ],
        "summary" : "Retrieve S3 output location details",
        "description" : "Retrieves the details of an S3 output location by its unique identifier.",
        "operationId" : "getS3OutputLocationById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/S3OutputLocationResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "patch" : {
        "tags" : [ "S3 output location" ],
        "summary" : "Update an S3 output location",
        "description" : "Updates the details of an existing S3 output location by its unique identifier.",
        "operationId" : "patchS3OutputLocation",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/S3OutputLocationPatchRequest"
        },
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/S3OutputLocationResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "delete" : {
        "tags" : [ "S3 output location" ],
        "summary" : "Delete an S3 output location",
        "description" : "Deletes an S3 output location by its unique identifier.",
        "operationId" : "deleteS3OutputLocationById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "204" : {
            "$ref" : "#/components/responses/NoContent",
            "description" : "S3 output location successfully deleted. No content to return."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/in/https" : {
      "post" : {
        "tags" : [ "video in" ],
        "summary" : "Copy video data from an HTTPS URL into the Pixop Platform",
        "description" : "Copies video data from an HTTPS URL into the Pixop Platform, making it available for processing.\n\nA new master video record is created for the selected team, and an asynchronous multipart copy operation from the provided HTTPS URL to Pixop is initiated.  \nThe URL must support **range requests** and remain accessible for the entire duration of the copy process.\n\nThe status of the copy operation can be tracked using:\n- [GET /v1/videos/{videoId}/in/status](https://docs.pixop.com/reference/getVideoInStatus/)\n- [GET /v1/videos/{videoId}](https://docs.pixop.com/reference/getVideoById/) (for full video details)\n- [Webhooks](https://docs.pixop.com/reference/createWebhook/): Subscribe to `video_in` and/or `video_in_ingestion` events to receive real-time updates\n\nThe `videoId` is returned in the response.\n\n**Workflow:**\n1. **Copy Operation**: Once complete, the status updates to `DONE`.\n2. **Ingestion Process**: If `FullIngestion` is `true`, Pixop extracts thumbnails, full frames, and a web video.\n3. **Free 10-Second Clip**: Unless disabled for the team, a free 10-second clip is automatically created and becomes available via [GET /v1/videos/{videoId}/derived](https://docs.pixop.com/reference/getDerivedVideos/).  \n  This clip is treated as a separate video and will trigger its own `clip_processing` and `clip_ingestion` webhook events under a new `videoId`.\n\n**Notes:**\n- If the video size exceeds **500 GB**, a `400 Bad Request` response is returned.\n- A `400 Bad Request` may also be returned if the URL is invalid, inaccessible, or does not support range requests.\n",
        "operationId" : "createMasterVideoFromHttps",
        "requestBody" : {
          "$ref" : "#/components/requestBodies/CreateMasterVideoFromHttpsRequest"
        },
        "parameters" : [ {
          "$ref" : "#/components/parameters/FullIngestion"
        }, {
          "$ref" : "#/components/parameters/SelectTeamId"
        }, {
          "$ref" : "#/components/parameters/Crc32c"
        }, {
          "$ref" : "#/components/parameters/MaxConcurrentConnections"
        } ],
        "responses" : {
          "202" : {
            "$ref" : "#/components/responses/VideoInStatusResponse",
            "description" : "The video copy operation has been successfully initiated."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/in/s3" : {
      "post" : {
        "tags" : [ "video in" ],
        "summary" : "Copy video data from an S3 bucket into the Pixop Platform",
        "description" : "Copies video data from an S3 bucket into the Pixop Platform, making it available for processing.\nA new master video record is created for the selected team, and an asynchronous multipart copy operation from the provided S3 bucket to Pixop is initiated.\n\nThe status of the copy operation can be tracked using:\n- [GET /v1/videos/{videoId}/in/status](https://docs.pixop.com/reference/getVideoInStatus/)\n- [GET /v1/videos/{videoId}](https://docs.pixop.com/reference/getVideoById/) (for full video details)\n- [Webhooks](https://docs.pixop.com/reference/createWebhook/): Subscribe to `video_in` and/or `video_in_ingestion` events to receive real-time updates\n\nThe `videoId` is returned in the response.\n\n**Workflow:**\n1. **Copy Operation**: Once complete, the status updates to `DONE`.\n2. **Ingestion Process**: If `FullIngestion` is `true`, Pixop extracts thumbnails, full frames, and a web video.\n3. **Free 10-Second Clip**: Unless disabled for the team, a free 10-second clip is automatically created and becomes available via [GET /v1/videos/{videoId}/derived](https://docs.pixop.com/reference/getDerivedVideos/).  \n  This clip is treated as a separate video and will trigger its own `clip_processing` and `clip_ingestion` webhook events under a new `videoId`.\n\n**Note**:\n- If the video size exceeds **500 GB**, a `400 Bad Request` response is returned.\n- A `400 Bad Request` may also be returned for other reasons, such as invalid credentials.\n- A `404 Not Found` response is returned if the bucket, or object does not exist.\n",
        "operationId" : "createMasterVideoFromS3Bucket",
        "requestBody" : {
          "$ref" : "#/components/requestBodies/CreateMasterVideoFromS3BucketRequest"
        },
        "parameters" : [ {
          "$ref" : "#/components/parameters/FullIngestion"
        }, {
          "$ref" : "#/components/parameters/SelectTeamId"
        } ],
        "responses" : {
          "202" : {
            "$ref" : "#/components/responses/VideoInStatusResponse",
            "description" : "The video copy operation has been successfully initiated."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/in/s3/{inputLocationId}" : {
      "post" : {
        "tags" : [ "video in" ],
        "summary" : "Copy video data from an S3 input location into the Pixop Platform",
        "description" : "Copies video data from a preconfigured S3 input location into the Pixop Platform, creating a new master video record for the selected team. \nThis is similar to [POST /v1/videos/in/s3](https://docs.pixop.com/reference/createMasterVideoFromS3Bucket/), but uses the `inputLocationId` for the S3 bucket reference.\n",
        "operationId" : "createMasterVideoFromS3InputLocationId",
        "parameters" : [ {
          "$ref" : "#/components/parameters/InputLocationId"
        }, {
          "$ref" : "#/components/parameters/FullIngestion"
        }, {
          "$ref" : "#/components/parameters/SelectTeamId"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/CreateMasterVideoFromS3Request"
        },
        "responses" : {
          "202" : {
            "$ref" : "#/components/responses/VideoInStatusResponse",
            "description" : "The video copy operation has been successfully initiated."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/in/status" : {
      "get" : {
        "tags" : [ "video in" ],
        "summary" : "Retrieve \"video in\" status",
        "description" : "Retrieves the status of the asynchronous copy operation initiated by:\n- [POST /v1/videos/in/https](https://docs.pixop.com/reference/createMasterVideoFromHttps/)\n- [POST /v1/videos/in/s3](https://docs.pixop.com/reference/createMasterVideoFromS3Bucket/)\n- [POST /v1/videos/in/s3/{inputLocationId}](https://docs.pixop.com/reference/createMasterVideoFromS3InputLocationId/)\n\nThe status indicates whether the operation is `IN_PROGRESS`, `DONE`, or `FAILED`.\n",
        "operationId" : "getVideoInStatus",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/VideoInStatusResponse"
          },
          "204" : {
            "$ref" : "#/components/responses/NoContent",
            "description" : "A \"video in\" operation has not been initiated."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/in/restart" : {
      "post" : {
        "tags" : [ "video in" ],
        "summary" : "Restart a failed \"video in\" operation",
        "description" : "Restarts a failed \"video in\" operation. The operation resumes from where it previously failed.\n\n**Note**: This is only allowed when `uploadStatus` is `FAILED`. Otherwise, a `409 Conflict` response is returned.\n",
        "operationId" : "restartFailedVideoInOperation",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        }, {
          "$ref" : "#/components/parameters/SkipChecksumValidation"
        } ],
        "responses" : {
          "202" : {
            "description" : "The video copy operation has been successfully restarted.",
            "$ref" : "#/components/responses/VideoInStatusResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/in/abandon" : {
      "delete" : {
        "tags" : [ "video in" ],
        "summary" : "Abandon a failed \"video in\" operation",
        "description" : "Abandons a failed \"video in\" operation. This operation permanently deletes the video record and all associated data.\n\n**Note**: This is only allowed when `uploadStatus` is `FAILED`. Otherwise, a `409 Conflict` response is returned.\n",
        "operationId" : "abandonFailedVideoInOperation",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        } ],
        "responses" : {
          "204" : {
            "$ref" : "#/components/responses/NoContent",
            "description" : "The \"video in\" operation was successfully abandoned, and the video record was deleted."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos" : {
      "get" : {
        "tags" : [ "video" ],
        "summary" : "Retrieve paginated list of videos",
        "description" : "Retrieves a paginated list of videos associated with the provided API key.",
        "operationId" : "getVideos",
        "parameters" : [ {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/SortByBaseParam"
        }, {
          "$ref" : "#/components/parameters/FilterByTeamId"
        }, {
          "$ref" : "#/components/parameters/FilterByProjectId"
        }, {
          "$ref" : "#/components/parameters/FilterByMasterVideoId"
        }, {
          "$ref" : "#/components/parameters/FilterByClipId"
        }, {
          "$ref" : "#/components/parameters/FilterClipMode"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/VideosPageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}" : {
      "get" : {
        "tags" : [ "video" ],
        "summary" : "Retrieve details about a video",
        "description" : "Retrieves details about a specific video by its unique identifier.",
        "operationId" : "getVideoById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/VideoResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "patch" : {
        "tags" : [ "video" ],
        "summary" : "Update an existing video",
        "description" : "Updates the metadata of an existing video by its unique identifier.",
        "operationId" : "patchVideo",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/VideoPatchRequest"
        },
        "responses" : {
          "200" : {
            "description" : "The video metadata was successfully updated.",
            "$ref" : "#/components/responses/VideoResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "delete" : {
        "tags" : [ "video" ],
        "summary" : "Delete a video",
        "description" : "Deletes a video by its unique identifier.\n- When deleting a master video record, all derived videos will also be deleted.\n- When deleting a clip, any processed clips based on it will also be deleted.\n\nDerived videos can be retrieved using [GET /v1/videos/{videoId}/derived](https://docs.pixop.com/reference/getDerivedVideos/).\nOptionally, a list of expected derived `videoIds` can be specified in the request body.\nIf this list is specified and incomplete, the operation fails with a `409 Conflict` response.\n",
        "operationId" : "deleteVideoById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/VideoDeleteRequest"
        },
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/DeletedVideoIdsResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "description" : "Conflict. The list of expected derived `videoIds` is incomplete.",
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/derived" : {
      "get" : {
        "tags" : [ "video" ],
        "summary" : "Retrieve derived videos",
        "description" : "Retrieves a paginated list of videos derived from the specified `videoId`.\n- When the `videoId` refers to a master video record, all related videos and clips are returned.\n- When the `videoId` refers to a clip, all processed clips based on it are returned.\n",
        "operationId" : "getDerivedVideos",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        }, {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/SortByBaseParam"
        } ],
        "responses" : {
          "200" : {
            "description" : "Successfully retrieved the paginated list of derived video items.",
            "$ref" : "#/components/responses/VideosPageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/compare-with/{targetVideoId}" : {
      "get" : {
        "tags" : [ "video" ],
        "summary" : "Get a web comparison link for two videos",
        "description" : "Provides a link to compare two videos in Pixop Studio, provided both videos have been fully ingested with complete \nframes and a web version, their durations are sufficiently similar, and they share the same master video.\nIf the videos do not meet these criteria, a `409 Conflict` response is returned.\n",
        "operationId" : "getVideoComparisonLink",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        }, {
          "$ref" : "#/components/parameters/TargetVideoId"
        } ],
        "responses" : {
          "200" : {
            "description" : "Successfully retrieved the video comparison link.",
            "$ref" : "#/components/responses/VideoComparisonLinkResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/processing-configurations" : {
      "post" : {
        "tags" : [ "video processing configuration" ],
        "summary" : "Create a new video processing configuration",
        "description" : "Creates a new video processing configuration for the selected team.\n\n**Important:**  \nThe `options` field is required when creating a new configuration.  \nDue to a limitation in our API documentation provider, `options` is not marked as required in the OpenAPI schema to prevent the interactive request builder from pre-populating unintended fields.\nRequests submitted without `options` will be rejected by the API.\n\n**Using the interactive request builder:**  \nSome optional nested settings (such as certain filter and color-space options) may remain present in the request after being selected once, even if they are later cleared in the UI.\nIf you encounter validation errors or unexpected behavior, please review the generated request payload before submitting it.\nRefreshing the page will reset the request builder and remove any previously selected options.\n",
        "operationId" : "createVideoProcessingConfiguration",
        "parameters" : [ {
          "$ref" : "#/components/parameters/SelectTeamId"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/VideoProcessingConfigurationRequest"
        },
        "responses" : {
          "201" : {
            "description" : "Video processing configuration successfully created.",
            "$ref" : "#/components/responses/VideoProcessingConfigurationResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "get" : {
        "tags" : [ "video processing configuration" ],
        "summary" : "Retrieve paginated list of video processing configurations",
        "description" : "Retrieves a paginated list of video processing configurations associated with the provided API key.",
        "operationId" : "getVideoProcessingConfigurations",
        "parameters" : [ {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/SortByBaseParam"
        }, {
          "$ref" : "#/components/parameters/FilterByTeamId"
        }, {
          "$ref" : "#/components/parameters/FilterBuiltInMode"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/VideoProcessingConfigurationsPageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/processing-configurations/{confId}" : {
      "get" : {
        "tags" : [ "video processing configuration" ],
        "summary" : "Retrieve video processing configuration details",
        "description" : "Retrieves the details of a video processing configuration by its unique identifier.",
        "operationId" : "getVideoProcessingConfigurationById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoProcessingConfigurationId"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/VideoProcessingConfigurationResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "delete" : {
        "tags" : [ "video processing configuration" ],
        "summary" : "Delete a video processing configuration",
        "description" : "Deletes a video processing configuration by its unique identifier.",
        "operationId" : "deleteVideoProcessingConfigurationById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoProcessingConfigurationId"
        } ],
        "responses" : {
          "204" : {
            "$ref" : "#/components/responses/NoContent",
            "description" : "Video processing configuration successfully deleted. No content to return."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/processing/appraisals/create/{confId}" : {
      "post" : {
        "tags" : [ "video processing" ],
        "summary" : "Create an appraisal using a configuration ID",
        "description" : "Creates an appraisal for processing a video with options specified in the query parameters and a predefined configuration identified by `confId`.\n\nThe processed video will be associated with the same team and project as the specified `videoId` once accepted. \nAppraisals have an expiry time and must be accepted before the processing task can start.\n",
        "operationId" : "createVideoProcessingAppraisalByConfId",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        }, {
          "$ref" : "#/components/parameters/VideoProcessingConfigurationId"
        }, {
          "$ref" : "#/components/parameters/StartPositionMillisecondsParam"
        }, {
          "$ref" : "#/components/parameters/EndPositionMillisecondsParam"
        } ],
        "responses" : {
          "201" : {
            "description" : "Video processing appraisal successfully created.",
            "$ref" : "#/components/responses/VideoProcessingAppraisalResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/processing/appraisals/create" : {
      "post" : {
        "tags" : [ "video processing" ],
        "summary" : "Create an appraisal for processing a video",
        "description" : "Creates an appraisal for processing a video with options specified in the query parameters and request body.\n\nThe processed video will be associated with the same team and project as the specified `videoId` once accepted. \nAppraisals have an expiry time and must be accepted before the processing task can start.\n",
        "operationId" : "createVideoProcessingAppraisal",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        }, {
          "$ref" : "#/components/parameters/StartPositionMillisecondsParam"
        }, {
          "$ref" : "#/components/parameters/EndPositionMillisecondsParam"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/VideoProcessingRequest"
        },
        "responses" : {
          "201" : {
            "description" : "Video processing appraisal successfully created.",
            "$ref" : "#/components/responses/VideoProcessingAppraisalResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/processing/appraisals/{appraisalId}/accept" : {
      "post" : {
        "tags" : [ "video processing" ],
        "summary" : "Accept a video processing appraisal",
        "description" : "Accepts a video processing appraisal and initiates the processing of the specified video.\n\nA new video, identified by the `videoId` returned in the response, is created. This `videoId` should be used to track the asynchronous processing operation using:\n- [GET /v1/videos/{videoId}/processing/status](https://docs.pixop.com/reference/getVideoProcessingStatus/)\n- [GET /v1/videos/{videoId}](https://docs.pixop.com/reference/getVideoById/) (for full video details)\n- [Webhooks](https://docs.pixop.com/reference/createWebhook/): Subscribe to `clip_processing` and/or `video_processing` events to receive real-time updates\n",
        "operationId" : "acceptVideoProcessingAppraisal",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        }, {
          "$ref" : "#/components/parameters/VideoProcessingAppraisalId"
        }, {
          "$ref" : "#/components/parameters/VideoNameParam"
        }, {
          "$ref" : "#/components/parameters/VideoDescriptionParam"
        } ],
        "responses" : {
          "202" : {
            "description" : "Video processing appraisal successfully accepted.",
            "$ref" : "#/components/responses/VideoProcessingStatusResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "description" : "Conflict. Insufficient projected balance.",
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/processing/start/{confId}" : {
      "post" : {
        "tags" : [ "video processing" ],
        "summary" : "Start video processing using a configuration ID",
        "description" : "Initiates the processing of the specified video with options specified in the query parameters and a predefined configuration identified by `confId`.\n\nA new video, identified by the `videoId` returned in the response, is created. This `videoId` should be used to track the asynchronous processing operation using:\n- [GET /v1/videos/{videoId}/processing/status](https://docs.pixop.com/reference/getVideoProcessingStatus/)\n- [GET /v1/videos/{videoId}](https://docs.pixop.com/reference/getVideoById/) (for full video details)\n- [Webhooks](https://docs.pixop.com/reference/createWebhook/): Subscribe to `clip_processing` and/or `video_processing` events to receive real-time updates\n",
        "operationId" : "startProcessingByVideoIdAndConfId",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        }, {
          "$ref" : "#/components/parameters/VideoProcessingConfigurationId"
        }, {
          "$ref" : "#/components/parameters/VideoNameParam"
        }, {
          "$ref" : "#/components/parameters/VideoDescriptionParam"
        }, {
          "$ref" : "#/components/parameters/StartPositionMillisecondsParam"
        }, {
          "$ref" : "#/components/parameters/EndPositionMillisecondsParam"
        } ],
        "responses" : {
          "202" : {
            "description" : "Video processing successfully started.",
            "$ref" : "#/components/responses/VideoProcessingStatusResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "description" : "Conflict. Insufficient projected balance.",
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/processing/start" : {
      "post" : {
        "tags" : [ "video processing" ],
        "summary" : "Start video processing",
        "description" : "Initiates the processing of the specified video with options specified in the query parameters and request body.\n\nA new video, identified by the `videoId` returned in the response, is created. This `videoId` should be used to track the asynchronous processing operation using:\n- [GET /v1/videos/{videoId}/processing/status](https://docs.pixop.com/reference/getVideoProcessingStatus/)\n- [GET /v1/videos/{videoId}](https://docs.pixop.com/reference/getVideoById/) (for full video details)\n- [Webhooks](https://docs.pixop.com/reference/createWebhook/): Subscribe to `clip_processing` and/or `video_processing` events to receive real-time updates\n",
        "operationId" : "startProcessingByVideoId",
        "requestBody" : {
          "$ref" : "#/components/requestBodies/VideoProcessingRequest"
        },
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        }, {
          "$ref" : "#/components/parameters/VideoNameParam"
        }, {
          "$ref" : "#/components/parameters/VideoDescriptionParam"
        }, {
          "$ref" : "#/components/parameters/StartPositionMillisecondsParam"
        }, {
          "$ref" : "#/components/parameters/EndPositionMillisecondsParam"
        } ],
        "responses" : {
          "202" : {
            "description" : "Video processing successfully started.",
            "$ref" : "#/components/responses/VideoProcessingStatusResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "description" : "Conflict. Insufficient projected balance.",
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/processing/status" : {
      "get" : {
        "tags" : [ "video processing" ],
        "summary" : "Retrieve video processing status",
        "description" : "Retrieves the status of the asynchronous video processing task initiated by:\n- [POST /v1/videos/{videoId}/processing/appraisals/{appraisalId}/accept](https://docs.pixop.com/reference/acceptVideoProcessingAppraisal/)\n- [POST /v1/videos/{videoId}/processing/start/{confId}](https://docs.pixop.com/reference/startProcessingByVideoIdAndConfId/)\n- [POST /v1/videos/{videoId}/processing/start](https://docs.pixop.com/reference/startProcessingByVideoId/)\n\nThe status indicates whether the operation is `IN_PROGRESS`, `DONE`, or `FAILED`.\n",
        "operationId" : "getVideoProcessingStatus",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/VideoProcessingStatusResponse"
          },
          "204" : {
            "$ref" : "#/components/responses/NoContent",
            "description" : "A video processing task has not started yet."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/out/https" : {
      "post" : {
        "tags" : [ "video out" ],
        "summary" : "Generates a pre-signed URL for downloading video data.",
        "description" : "\nGenerates a pre-signed HTTPS URL for downloading the video from the Pixop platform.\n\n- **Resumable downloads** are supported via HTTP Range requests.\n- The URL remains valid for the specified duration.\n- The video file is **not ready for download** until the processing task is complete. \n\n**Notes:**\n- If the video is **not ready for download**, a `409 Conflict` response will be returned.\n",
        "operationId" : "generateVideoDownloadUrl",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        }, {
          "$ref" : "#/components/parameters/DurationMinutes"
        } ],
        "responses" : {
          "201" : {
            "$ref" : "#/components/responses/VideoDownloadUrlResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict",
            "description" : "The video is not ready for download."
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/out/s3" : {
      "post" : {
        "tags" : [ "video out" ],
        "summary" : "Copy video data to an S3 bucket",
        "description" : "Initiates an asynchronous multipart copy operation to transfer video data from the Pixop Platform to the specified S3 bucket.\n\n- The video data is **not ready for copy** until the processing task is complete.  \nYou can check the status of the processing task using [GET /v1/videos/{videoId}/processing/status](https://docs.pixop.com/reference/getVideoProcessingStatus/) (or [GET /v1/videos/{videoId}/in/status](https://docs.pixop.com/reference/getVideoInStatus/) for a \"video in\" copy operation), or subscribe to `clip_processing`, `video_processing` or `video_in` [webhooks](https://docs.pixop.com/reference/createWebhook/) to receive real-time updates.\n\nThe status of this operation can be tracked using:\n- [GET /v1/videos/{videoId}/out/status](https://docs.pixop.com/reference/getVideoOutStatus/)\n- [GET /v1/videos/{videoId}](https://docs.pixop.com/reference/getVideoById/) (for full video details)\n- [Webhooks](https://docs.pixop.com/reference/createWebhook/): Subscribe to `video_out` events to receive real-time updates\n\n- When the operation succeeds, the status updates to `DONE`. If it fails, the status updates to `FAILED`.\n\n**Retry and Abandon Options:**\n- Restart a `FAILED` operation using `POST /v1/videos/{videoId}/out/restart`.\n- Abandon a `FAILED` operation and free up resources using `POST /v1/videos/{videoId}/out/abandon`.\n\n**Notes:**  \n- Only one \"video out\" operation can run per video at a time. Starting a new operation will result in a `409 Conflict` response.  \n- If the specified object key already exists in the S3 bucket, or if the video data is **not ready for copy**, a `409 Conflict` response is also returned.\n",
        "operationId" : "copyVideoDataToS3Bucket",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/CopyVideoToS3BucketRequest"
        },
        "responses" : {
          "202" : {
            "$ref" : "#/components/responses/VideoOutStatusResponse",
            "description" : "The video copy operation has been successfully initiated."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/out/s3/{outputLocationId}" : {
      "post" : {
        "tags" : [ "video out" ],
        "summary" : "Copy video data to an S3 bucket using an output location ID",
        "description" : "Initiates an asynchronous copy operation to transfer video data to an S3 bucket defined by the specified `outputLocationId`.\n\n- The behavior is identical to [POST /v1/videos/{videoId}/out/s3](https://docs.pixop.com/reference/copyVideoDataToS3Bucket/), but uses a predefined S3 output location.\n",
        "operationId" : "copyVideoDataToS3OutputLocationId",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        }, {
          "$ref" : "#/components/parameters/OutputLocationId"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/CopyVideoToS3Request"
        },
        "responses" : {
          "202" : {
            "$ref" : "#/components/responses/VideoOutStatusResponse",
            "description" : "The video copy operation has been successfully initiated."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/out/status" : {
      "get" : {
        "tags" : [ "video out" ],
        "summary" : "Retrieve the status of a \"video out\" operation",
        "description" : "Retrieves the status of the asynchronous copy operation initiated by:\n- [POST /v1/videos/{videoId}/out/s3](https://docs.pixop.com/reference/copyVideoDataToS3Bucket/)\n- [POST /v1/videos/{videoId}/out/s3/{outputLocationId}](https://docs.pixop.com/reference/copyVideoDataToS3OutputLocationId/)\n\nThe status indicates whether the operation is `IN_PROGRESS`, `DONE`, or `FAILED`.\n",
        "operationId" : "getVideoOutStatus",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/VideoOutStatusResponse"
          },
          "204" : {
            "$ref" : "#/components/responses/NoContent",
            "description" : "A \"video out\" operation has not been started yet."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/out/restart" : {
      "post" : {
        "tags" : [ "video out" ],
        "summary" : "Restart a failed \"video out\" operation",
        "description" : "Restarts a failed \"video out\" operation, resuming from the point where it previously failed.\n\n**Note:** This operation is only allowed when the status is `FAILED`. Attempting to restart an active or successful operation will result in a `409 Conflict` response.\n",
        "operationId" : "restartFailedVideoOutOperation",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        } ],
        "responses" : {
          "202" : {
            "description" : "The video copy operation has been successfully restarted.",
            "$ref" : "#/components/responses/VideoOutStatusResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/videos/{videoId}/out/abandon" : {
      "delete" : {
        "tags" : [ "video out" ],
        "summary" : "Abandon a failed \"video out\" operation",
        "description" : "Abandons a failed \"video out\" operation and releases resources allocated for the multipart upload process.\n\n**Note:** This operation is only allowed when the status is `FAILED`. Attempting to abandon an active or successful operation will result in a `409 Conflict` response.\n",
        "operationId" : "abandonFailedVideoOutOperation",
        "parameters" : [ {
          "$ref" : "#/components/parameters/VideoId"
        } ],
        "responses" : {
          "204" : {
            "$ref" : "#/components/responses/NoContent",
            "description" : "Successfully abandoned the \"video out\" operation and cleaned up resources. The video record remains intact."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/webhooks/public-keys" : {
      "get" : {
        "tags" : [ "webhook public key" ],
        "summary" : "List all webhook public keys",
        "description" : "Returns a list of webhook public keys used to verify webhook signatures.\n\nTypically, only one key is active at a time. \nDuring key rotation — which occurs at least every three months — two keys may temporarily exist to support a smooth transition.\n",
        "operationId" : "getWebhookPublicKeys",
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/WebhookPublicKeysResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/webhooks/public-keys/{id}" : {
      "get" : {
        "tags" : [ "webhook public key" ],
        "summary" : "Retrieve a specific webhook public key",
        "description" : "Retrieves the details of a specific webhook public key using its unique identifier.",
        "operationId" : "getWebhookPublicKeyById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/WebhookPublicKeyResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/webhooks" : {
      "post" : {
        "tags" : [ "webhook" ],
        "summary" : "Create a new webhook",
        "description" : "Creates a new webhook for the selected team. Webhooks are used to receive notifications about events on the Pixop Platform.\n\nEach team can have up to **10 active webhooks**. If this limit is reached, attempts to create an additional active webhook will result in a `409 Conflict` response.\n",
        "operationId" : "createWebhook",
        "parameters" : [ {
          "$ref" : "#/components/parameters/SelectTeamId"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/WebhookPostRequest"
        },
        "responses" : {
          "201" : {
            "$ref" : "#/components/responses/WebhookResponse",
            "description" : "Webhook successfully created."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "get" : {
        "tags" : [ "webhook" ],
        "summary" : "Retrieve webhooks",
        "description" : "Retrieves a paginated list of webhooks associated with the provided API key.",
        "operationId" : "getWebhooks",
        "parameters" : [ {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/SortByBaseParam"
        }, {
          "$ref" : "#/components/parameters/FilterByTeamId"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/WebhooksPageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/webhooks/{id}" : {
      "get" : {
        "tags" : [ "webhook" ],
        "summary" : "Retrieve webhook details",
        "description" : "Retrieves the details of a specific webhook using its unique identifier.",
        "operationId" : "getWebhookById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/WebhookResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "patch" : {
        "tags" : [ "webhook" ],
        "summary" : "Update a webhook",
        "description" : "Updates the details of an existing webhook. To activate or deactivate a webhook, use the respective endpoints.",
        "operationId" : "patchWebhook",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "requestBody" : {
          "$ref" : "#/components/requestBodies/WebhookPatchRequest"
        },
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/WebhookResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      },
      "delete" : {
        "tags" : [ "webhook" ],
        "summary" : "Delete a webhook",
        "description" : "Deletes a webhook by its unique identifier.",
        "operationId" : "deleteWebhookById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "204" : {
            "$ref" : "#/components/responses/NoContent",
            "description" : "Webhook successfully deleted. No content returned."
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/webhooks/{id}/test" : {
      "post" : {
        "tags" : [ "webhook" ],
        "summary" : "Test a video webhook",
        "description" : "Sends a test event to the specified video webhook.\n\nYou may optionally provide a `videoId` and/or `eventType`. If `videoId` is omitted, a random UUID will be generated.  \nIf `eventType` is not specified, one of the webhook’s configured event types will be selected at random.\n\nIf the webhook is inactive, or if the specified `eventType` is not among the webhook’s configured types, a `409 Conflict` response is returned.\n\nEach team can send up to **1000 test events** within a 24-hour period.  \nIf this limit is reached, further attempts to send test events will also result in a `409 Conflict` response.\n\nTest events are automatically deleted after 24 hours.\n",
        "operationId" : "testVideoWebhookById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        }, {
          "name" : "videoId",
          "in" : "query",
          "required" : false,
          "schema" : {
            "$ref" : "#/components/schemas/UUID"
          },
          "description" : "Optional video ID to include in the test event. If omitted, a random UUID will be used."
        }, {
          "name" : "eventType",
          "in" : "query",
          "required" : false,
          "schema" : {
            "$ref" : "#/components/schemas/WebhookEventType"
          },
          "description" : "Optional event type to use for the test event. If omitted, one of the webhook’s configured event types is selected at random.\nIf specified, it must match one of the webhook's configured event types.\n"
        } ],
        "responses" : {
          "202" : {
            "description" : "Accepted. A test event will be sent to the webhook. The response includes details about the test event.",
            "$ref" : "#/components/responses/WebhookEventResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/webhooks/{id}/deactivate" : {
      "post" : {
        "tags" : [ "webhook" ],
        "summary" : "Deactivate a webhook",
        "description" : "Deactivates the specified webhook.  \n\nIf the webhook is already inactive, the operation has no effect.\n",
        "operationId" : "deactivateWebhookById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "200" : {
            "description" : "Webhook successfully deactivated.",
            "$ref" : "#/components/responses/WebhookResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/webhooks/{id}/activate" : {
      "post" : {
        "tags" : [ "webhook" ],
        "summary" : "Activate a webhook",
        "description" : "Activates the specified webhook.  \n\nIf the webhook is already active, the operation has no effect.\nIf the team has reached the maximum number of allowed active webhooks, a `409 Conflict` response is returned.\n",
        "operationId" : "activateWebhookById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "200" : {
            "description" : "Webhook successfully activated.",
            "$ref" : "#/components/responses/WebhookResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "409" : {
            "$ref" : "#/components/responses/Conflict"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/webhooks/events" : {
      "get" : {
        "tags" : [ "webhook event" ],
        "summary" : "Retrieve webhook events",
        "description" : "Retrieves a paginated list of webhook events associated with the provided API key.\n\nEach event represents delivery attempts for a configured webhook, including both successful and failed attempts.\n",
        "operationId" : "getWebhookEvents",
        "parameters" : [ {
          "$ref" : "#/components/parameters/PageNumberParam"
        }, {
          "$ref" : "#/components/parameters/PageSizeParam"
        }, {
          "$ref" : "#/components/parameters/SortDirectionParam"
        }, {
          "$ref" : "#/components/parameters/SortByBaseParam"
        }, {
          "$ref" : "#/components/parameters/FilterByTeamId"
        }, {
          "$ref" : "#/components/parameters/FilterSuccessfulMode"
        }, {
          "$ref" : "#/components/parameters/FilterTestMode"
        }, {
          "$ref" : "#/components/parameters/FilterByOccurredAtFrom"
        }, {
          "$ref" : "#/components/parameters/FilterByOccurredAtUntil"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/WebhookEventsPageResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/webhooks/events/{id}" : {
      "get" : {
        "tags" : [ "webhook event" ],
        "summary" : "Retrieve webhook event details",
        "description" : "Retrieves the details of a specific webhook event using its unique identifier.  \n\nThis includes metadata such as timestamps, status code, and payload sent.\n",
        "operationId" : "getWebhookEventById",
        "parameters" : [ {
          "$ref" : "#/components/parameters/IdPathParam"
        } ],
        "responses" : {
          "200" : {
            "$ref" : "#/components/responses/WebhookEventResponse"
          },
          "400" : {
            "$ref" : "#/components/responses/BadRequest"
          },
          "401" : {
            "$ref" : "#/components/responses/Unauthorized"
          },
          "403" : {
            "$ref" : "#/components/responses/Forbidden"
          },
          "404" : {
            "$ref" : "#/components/responses/NotFound"
          },
          "429" : {
            "$ref" : "#/components/responses/TooManyRequests"
          },
          "500" : {
            "$ref" : "#/components/responses/InternalServerError"
          }
        }
      }
    }
  },
  "components" : {
    "schemas" : {
      "UUID" : {
        "type" : "string",
        "format" : "uuid",
        "description" : "A universally unique identifier (UUID) compliant with [RFC 4122](https://tools.ietf.org/html/rfc4122). Used as a unique key to identify resources or entities across systems.",
        "examples" : [ "123e4567-e89b-12d3-a456-426614174000" ]
      },
      "BaseObject" : {
        "type" : "object",
        "description" : "A base schema for common object attributes shared across multiple entities. Includes metadata such as ID and timestamps. Extended by specific schemas to inherit these common attributes.",
        "required" : [ "id", "createdAt", "updatedAt" ],
        "properties" : {
          "id" : {
            "description" : "Unique identifier for the object.",
            "$ref" : "#/components/schemas/UUID",
            "readOnly" : true
          },
          "createdAt" : {
            "description" : "Date and time when the object was created.",
            "type" : "string",
            "format" : "date-time",
            "readOnly" : true,
            "examples" : [ 1734520108148 ]
          },
          "updatedAt" : {
            "description" : "Date and time when the object was last updated.",
            "type" : "string",
            "format" : "date-time",
            "readOnly" : true,
            "examples" : [ 1734520708148 ]
          }
        }
      },
      "ProjectName" : {
        "type" : "string",
        "description" : "The name of the project. Must be between 1 and 47 characters long.",
        "maxLength" : 47,
        "minLength" : 1,
        "examples" : [ "My Project" ]
      },
      "VideoName" : {
        "type" : "string",
        "description" : "The name of the video. Used to easily identify specific videos within projects.\nThe name must be between 1 and 255 characters long.\n",
        "maxLength" : 255,
        "minLength" : 1,
        "examples" : [ "Holiday Trip Video", "Product Demo 2024" ]
      },
      "VideoDescription" : {
        "type" : "string",
        "description" : "Optional description of the video. The description must be between 0 and 511 characters long.",
        "maxLength" : 511,
        "minLength" : 0,
        "examples" : [ "A video showcasing the highlights of our recent holiday trip.", "Product Demo 2024 showcasing the latest features and benefits of our product." ]
      },
      "TeamName" : {
        "type" : "string",
        "description" : "The name of the team. The name must be between 1 and 47 characters long.",
        "maxLength" : 47,
        "minLength" : 1,
        "examples" : [ "API Team" ]
      },
      "VideoProcessingConfigurationName" : {
        "type" : "string",
        "description" : "The name of the video processing configuration. This provides a clear reference for applying specific processing settings to videos.\nThe name must be between 1 and 47 characters long.\n",
        "maxLength" : 47,
        "minLength" : 1,
        "examples" : [ "Live action, digital or film, enhanced, 2x" ]
      },
      "VideoProcessingConfigurationDescription" : {
        "description" : "A description of the video processing configuration. This provides additional context or details about the processing settings, such as the purpose for the configuration.\n",
        "type" : "string",
        "maxLength" : 255,
        "minLength" : 1,
        "examples" : [ "Live action recorded with a higher quality digital camera sensor or on film stock" ]
      },
      "Project" : {
        "description" : "Represents a project, which is a collection of videos grouped together under a specific context. Projects are used to organize videos for processing and collaboration.\n",
        "allOf" : [ {
          "$ref" : "#/components/schemas/BaseObject"
        }, {
          "type" : "object",
          "required" : [ "name", "isSample", "teamId" ],
          "properties" : {
            "name" : {
              "readOnly" : true,
              "$ref" : "#/components/schemas/ProjectName"
            },
            "isSample" : {
              "description" : "Whether this is a sample project. A sample project is a pre-created project containing one demonstration video to showcase platform capabilities.",
              "type" : "boolean",
              "readOnly" : true,
              "examples" : [ false ]
            },
            "teamId" : {
              "description" : "The ID of the team this project belongs to.",
              "readOnly" : true,
              "$ref" : "#/components/schemas/UUID"
            }
          }
        } ]
      },
      "Account" : {
        "type" : "object",
        "description" : "Represents account details for an API key.",
        "required" : [ "user", "defaultTeam" ],
        "properties" : {
          "user" : {
            "description" : "The user associated with the API key.",
            "readOnly" : true,
            "$ref" : "#/components/schemas/User"
          },
          "defaultTeam" : {
            "description" : "The default team for the API key. This team is automatically used when no team is explicitly selected in API requests.\nThe default team is the eldest apiEnabled team that the user has access to. If the user gains access to an older apiEnabled team, the default team will update accordingly.\n",
            "readOnly" : true,
            "$ref" : "#/components/schemas/Team"
          }
        }
      },
      "FinancialDetails" : {
        "type" : "object",
        "description" : "Represents the financial details of a team, including balance, spending, and discounts.",
        "required" : [ "processingCreditsBalanceUsd", "processingLifetimeSpendUsd", "processingBaseVolumeDiscountGp", "processingBaseVolumeDiscountPercentage", "utilitiesBalanceUsd" ],
        "properties" : {
          "processingCreditsBalanceUsd" : {
            "$ref" : "#/components/schemas/Money",
            "description" : "The current available processing credits balance of the team, in USD. \nThis balance reflects the funds available for video processing operations.\n",
            "readOnly" : true
          },
          "processingLifetimeSpendUsd" : {
            "$ref" : "#/components/schemas/Money",
            "description" : "The total amount spent by the team on video processing over time, in USD.",
            "readOnly" : true
          },
          "processingBaseVolumeDiscountGp" : {
            "type" : "number",
            "description" : "The base volume discount, in gigapixels (GP), applied to the team's processing jobs. \nVolume discounts scale with the quantity of gigapixels processed in a single job, reaching the maximum discount percentage at 1000 GP.\n",
            "readOnly" : true,
            "examples" : [ 250.5 ]
          },
          "processingBaseVolumeDiscountPercentage" : {
            "$ref" : "#/components/schemas/DiscountPercentage",
            "description" : "The base volume discount percentage applied to the team's processing jobs.",
            "readOnly" : true
          },
          "utilitiesBalanceUsd" : {
            "$ref" : "#/components/schemas/Money",
            "description" : "The current utilities balance of the team, in USD. \nThis balance indicates the amount allocated for storage, downloads, or other utility costs.\nA negative balance reflects an outstanding amount.\n",
            "readOnly" : true
          }
        }
      },
      "BillingPeriod" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/BaseObject"
        }, {
          "type" : "object",
          "description" : "Represents a billing period, capturing financial details for a specific duration.",
          "required" : [ "teamId" ],
          "properties" : {
            "teamId" : {
              "description" : "The ID of the team this billing period belongs to.",
              "readOnly" : true,
              "$ref" : "#/components/schemas/UUID"
            },
            "endedAt" : {
              "description" : "The date and time when the billing period ended.",
              "type" : "string",
              "format" : "date-time",
              "readOnly" : true,
              "examples" : [ 1735689599999 ]
            },
            "storageCostUsd" : {
              "description" : "The cost of storage in USD for the billing period.",
              "readOnly" : true,
              "$ref" : "#/components/schemas/Money"
            },
            "downloadCostUsd" : {
              "description" : "The cost of downloads in USD for the billing period.",
              "readOnly" : true,
              "$ref" : "#/components/schemas/Money"
            }
          }
        } ]
      },
      "TransactionType" : {
        "type" : "string",
        "description" : "The type of the transaction, representing specific categories of financial activity.\n- `PROCESSING`: A transaction related to video processing.\n- `UTILITIES`: A transaction related to utilities such as downloads or storage.\n",
        "enum" : [ "PROCESSING", "UTILITIES" ]
      },
      "Transaction" : {
        "type" : "object",
        "description" : "Represents a financial transaction within the platform. \nTransactions are categorized by type and include details such as the amount, associated video, and balance adjustments.\n",
        "required" : [ "createdAt", "type", "amountUsd", "balanceUsd" ],
        "discriminator" : {
          "propertyName" : "type",
          "mapping" : {
            "PROCESSING" : "#/components/schemas/ProcessingTransaction",
            "UTILITIES" : "#/components/schemas/UtilitiesTransaction"
          }
        },
        "properties" : {
          "createdAt" : {
            "description" : "The date and time when the transaction was created.",
            "type" : "string",
            "format" : "date-time",
            "examples" : [ 1734520108000 ]
          },
          "type" : {
            "$ref" : "#/components/schemas/TransactionType"
          },
          "amountUsd" : {
            "description" : "The transaction amount in USD.",
            "$ref" : "#/components/schemas/Money"
          },
          "balanceUsd" : {
            "description" : "The wallet balance in USD after the transaction.",
            "$ref" : "#/components/schemas/Money"
          },
          "videoId" : {
            "description" : "The ID of the video associated with the transaction, if applicable.",
            "$ref" : "#/components/schemas/UUID"
          },
          "accountAdjustment" : {
            "$ref" : "#/components/schemas/AccountAdjustment"
          }
        }
      },
      "CreditsUsageType" : {
        "type" : "string",
        "description" : "The type of the credits usage, representing specific categories of usage.\n- `PROCESSING`: Usage related to video processing.\n- `UTILITIES`: Usage related to utilities such as downloads or storage.\n",
        "enum" : [ "PROCESSING", "UTILITIES" ]
      },
      "ProcessingTransaction" : {
        "description" : "A transaction related to video processing.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Transaction"
        }, {
          "type" : "object",
          "properties" : {
            "details" : {
              "$ref" : "#/components/schemas/ProcessingTransactionDetails",
              "readOnly" : true
            }
          }
        } ]
      },
      "UtilitiesTransaction" : {
        "description" : "A transaction related to utilities, such as downloads or storage.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Transaction"
        }, {
          "type" : "object",
          "properties" : {
            "product" : {
              "description" : "The product associated with the utilities transaction.",
              "$ref" : "#/components/schemas/ProductUsd",
              "readOnly" : true
            }
          }
        } ]
      },
      "ProcessingTransactionDetails" : {
        "type" : "object",
        "description" : "Additional details specific to a processing transaction.",
        "properties" : {
          "sourceVideoId" : {
            "readOnly" : true,
            "description" : "The ID of the source video associated with the transaction.",
            "$ref" : "#/components/schemas/UUID"
          },
          "products" : {
            "readOnly" : true,
            "description" : "The list of products involved in the transaction.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ProductUsd"
            }
          },
          "discountPercentage" : {
            "readOnly" : true,
            "description" : "The discount percentage applied to the transaction.",
            "$ref" : "#/components/schemas/DiscountPercentage"
          }
        }
      },
      "AccountAdjustmentType" : {
        "description" : "Represents the type of account adjustment. Each adjustment indicates a specific action or event that affects the account balance.\n- `BILLING_PERIOD_STARTED`: The billing period has started.\n- `CREDITS_BOUGHT`: Credits have been purchased.\n- `UTILITIES_INVOICE_PAID`: A utilities invoice has been paid.\n- `MANUAL_ADJUSTMENT`: A manual adjustment has been made.\n- `PROCESSED_VIDEO_INGESTION_FAILED`: A processed video ingestion has failed.\n- `PROCESSED_VIDEO_COMPUTE_SAVING`: A processed video compute saving has been made.\n- `OTHER`: Other types of account adjustments.\n",
        "type" : "string",
        "enum" : [ "BILLING_PERIOD_STARTED", "CREDITS_BOUGHT", "UTILITIES_INVOICE_PAID", "MANUAL_ADJUSTMENT", "PROCESSED_VIDEO_INGESTION_FAILED", "PROCESSED_VIDEO_COMPUTE_SAVING", "OTHER" ]
      },
      "AccountAdjustment" : {
        "type" : "object",
        "description" : "Represents an adjustment made to an account balance, including the type, category, and reason for the adjustment.",
        "properties" : {
          "type" : {
            "$ref" : "#/components/schemas/AccountAdjustmentType",
            "readOnly" : true
          },
          "category" : {
            "description" : "The category of the account adjustment.",
            "$ref" : "#/components/schemas/Category",
            "readOnly" : true
          },
          "reason" : {
            "description" : "A brief explanation or context for the account adjustment.",
            "type" : "string",
            "readOnly" : true,
            "examples" : [ "Manual adjustment" ]
          }
        }
      },
      "TransactionTotals" : {
        "type" : "object",
        "description" : "A summary of transaction totals categorized by type, including overall totals.",
        "properties" : {
          "totalsForAllCategories" : {
            "description" : "The aggregate totals for all transaction categories.",
            "$ref" : "#/components/schemas/TransactionTotalsByCategory",
            "readOnly" : true
          },
          "totalsByCategory" : {
            "description" : "The list of transaction totals grouped by category.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/TransactionTotalsByCategory"
            },
            "readOnly" : true
          }
        }
      },
      "TransactionTotalsByCategory" : {
        "type" : "object",
        "description" : "A breakdown of transaction totals for a specific category.",
        "properties" : {
          "category" : {
            "description" : "The category of the transactions being summed.",
            "$ref" : "#/components/schemas/Category",
            "readOnly" : true
          },
          "totalCreditUsd" : {
            "description" : "The total credit transactions in USD.",
            "$ref" : "#/components/schemas/Money",
            "readOnly" : true,
            "examples" : [ 500.0 ]
          },
          "totalDebitUsd" : {
            "description" : "The total debit transactions in USD.",
            "$ref" : "#/components/schemas/Money",
            "readOnly" : true,
            "examples" : [ 300.0 ]
          },
          "netTotalUsd" : {
            "description" : "The net balance (totalCreditUsd - totalDebitUsd) in USD.",
            "$ref" : "#/components/schemas/Money",
            "readOnly" : true,
            "examples" : [ 200.0 ]
          }
        }
      },
      "Team" : {
        "description" : "Represents a team, which is a group of users collaborating under a shared workspace.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/BaseObject"
        }, {
          "type" : "object",
          "required" : [ "name", "apiEnabled" ],
          "properties" : {
            "name" : {
              "$ref" : "#/components/schemas/TeamName",
              "readOnly" : true
            },
            "apiEnabled" : {
              "description" : "Indicates whether the team is enabled for API access.",
              "type" : "boolean",
              "readOnly" : true,
              "examples" : [ true ]
            },
            "billingType" : {
              "$ref" : "#/components/schemas/BillingType"
            }
          }
        } ]
      },
      "UserName" : {
        "description" : "The name of the user.",
        "type" : "string",
        "maxLength" : 35,
        "minLength" : 1,
        "examples" : [ "My Name" ]
      },
      "User" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/BaseObject"
        }, {
          "type" : "object",
          "description" : "Represents a user within the platform.",
          "required" : [ "email", "name", "hasConfirmedEmail" ],
          "properties" : {
            "email" : {
              "type" : "string",
              "description" : "The email address of the user.",
              "readOnly" : true,
              "examples" : [ "myname@pixop.com" ]
            },
            "name" : {
              "readOnly" : true,
              "$ref" : "#/components/schemas/UserName"
            },
            "hasConfirmedEmail" : {
              "readOnly" : true,
              "type" : "boolean",
              "description" : "Indicates whether the user's email address has been confirmed."
            }
          }
        } ]
      },
      "MasterVideo" : {
        "description" : "The `MasterVideo` represents the original video uploaded to the Pixop Platform. It serves as the source video for processing and creating derived outputs.\n",
        "allOf" : [ {
          "$ref" : "#/components/schemas/BaseObject"
        }, {
          "type" : "object",
          "required" : [ "videoFile" ],
          "properties" : {
            "videoFile" : {
              "$ref" : "#/components/schemas/VideoFile"
            }
          }
        } ]
      },
      "Video" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/BaseObject"
        }, {
          "type" : "object",
          "description" : "Represents a video resource, which may be a master video, clip, or processed output.",
          "required" : [ "userId", "name", "teamId", "projectId", "flags" ],
          "properties" : {
            "userId" : {
              "description" : "The ID of the user who created this version of the video in the project.",
              "$ref" : "#/components/schemas/UUID"
            },
            "name" : {
              "$ref" : "#/components/schemas/VideoName"
            },
            "description" : {
              "$ref" : "#/components/schemas/VideoDescription"
            },
            "teamId" : {
              "description" : "The ID of the team this video belongs to.",
              "$ref" : "#/components/schemas/UUID"
            },
            "upload" : {
              "$ref" : "#/components/schemas/VideoUpload",
              "description" : "Metadata about the video upload (only applicable for master videos)."
            },
            "ingestion" : {
              "$ref" : "#/components/schemas/VideoIngestion",
              "description" : "Details about the ingestion process for the video."
            },
            "processing" : {
              "$ref" : "#/components/schemas/VideoProcessing"
            },
            "projectId" : {
              "description" : "The ID of the project this video belongs to.",
              "$ref" : "#/components/schemas/UUID"
            },
            "masterVideo" : {
              "$ref" : "#/components/schemas/MasterVideo"
            },
            "processingJobAppraisal" : {
              "$ref" : "#/components/schemas/VideoProcessingJobAppraisal"
            },
            "flags" : {
              "$ref" : "#/components/schemas/VideoFlags"
            },
            "clipId" : {
              "description" : "Reference to this video or a \"parent\" clip if this video is a clip:\n  - `clipId == videoId`: This is an \"original\" clip directly based on the master video or another clip.\n  - `clipId != videoId`: This is a \"processed\" clip based on an \"original\" clip whose videoId is the clipId.\n",
              "$ref" : "#/components/schemas/UUID"
            },
            "output" : {
              "$ref" : "#/components/schemas/VideoOutput",
              "description" : "Details about the most recent output operation."
            }
          }
        } ]
      },
      "VideoFlags" : {
        "description" : "Flags providing status and metadata about a video.",
        "type" : "object",
        "required" : [ "isMaster", "isProcessing", "isProcessed", "isIngesting", "isIngested", "isClip", "isSample" ],
        "properties" : {
          "isMaster" : {
            "description" : "Indicates whether this video is a master video.",
            "type" : "boolean",
            "readOnly" : true,
            "default" : false
          },
          "isProcessing" : {
            "description" : "Indicates whether this video is currently being processed.",
            "type" : "boolean",
            "readOnly" : true,
            "default" : false
          },
          "isProcessed" : {
            "description" : "Indicates whether this video is a successfully processed video.",
            "type" : "boolean",
            "readOnly" : true,
            "default" : false
          },
          "isIngesting" : {
            "description" : "Indicates whether this video is currently being ingested.",
            "type" : "boolean",
            "readOnly" : true,
            "default" : false
          },
          "isIngested" : {
            "description" : "Indicates whether this video has been ingested.",
            "type" : "boolean",
            "readOnly" : true,
            "default" : false
          },
          "isClip" : {
            "description" : "Indicates whether this video is a clip.",
            "type" : "boolean",
            "readOnly" : true,
            "default" : false
          },
          "isSample" : {
            "description" : "Indicates whether this video is a sample video.",
            "type" : "boolean",
            "readOnly" : true,
            "default" : false
          }
        }
      },
      "VideoProcessingAppraisal" : {
        "description" : "An appraisal for processing a video. \nAn appraisal can be created before processing a video to estimate the cost and duration of the processing. \nAppraisals are temporary and deleted after 15 minutes.\n",
        "type" : "object",
        "required" : [ "appraisalId", "expiresAt", "video" ],
        "properties" : {
          "appraisalId" : {
            "description" : "The ID of this video processing appraisal.",
            "$ref" : "#/components/schemas/UUID",
            "readOnly" : true
          },
          "expiresAt" : {
            "description" : "The date and time when this appraisal expires.",
            "type" : "string",
            "format" : "date-time",
            "readOnly" : true
          },
          "video" : {
            "description" : "Information about the video that will be created if accepting the appraisal, including the estimations and the processing cost in the `jobAppraisal` field.",
            "$ref" : "#/components/schemas/Video",
            "readOnly" : true
          }
        }
      },
      "ProcessingEstimation" : {
        "description" : "The estimation of the processing cost, including file size, storage cost, and compute time.",
        "type" : "object",
        "required" : [ "fileSize", "totalComputeTimeSeconds" ],
        "properties" : {
          "fileSize" : {
            "description" : "The estimated size of the processed file in bytes. For example, 606323 bytes.",
            "type" : "integer",
            "format" : "int64",
            "readOnly" : true,
            "examples" : [ 606323 ]
          },
          "totalComputeTimeSeconds" : {
            "description" : "The estimated total compute time in seconds. For example, 38 seconds.",
            "type" : "integer",
            "format" : "int32",
            "readOnly" : true,
            "examples" : [ 38 ]
          }
        }
      },
      "VideoProcessingJobAppraisalCostUsd" : {
        "description" : "The detailed USD cost breakdown for the video processing.",
        "type" : "object",
        "required" : [ "discountPercentage", "totalProcessingCostUsd", "totalProcessingDiscountUsd", "totalNormalProcessingCostUsd", "estimatedStorageCostUsd", "estimatedDownloadCostUsd" ],
        "properties" : {
          "discountPercentage" : {
            "description" : "The discount percentage applied to the processing cost.",
            "$ref" : "#/components/schemas/DiscountPercentage",
            "readOnly" : true
          },
          "totalProcessingCostUsd" : {
            "description" : "The total cost of the processing after discounts, in USD.",
            "$ref" : "#/components/schemas/Money",
            "readOnly" : true
          },
          "totalProcessingDiscountUsd" : {
            "description" : "The total discount amount applied to the processing, in USD.",
            "$ref" : "#/components/schemas/Money",
            "readOnly" : true
          },
          "totalNormalProcessingCostUsd" : {
            "description" : "The processing cost without any discounts, in USD.",
            "$ref" : "#/components/schemas/Money",
            "readOnly" : true
          },
          "estimatedStorageCostUsd" : {
            "description" : "The estimated storage cost in USD.",
            "$ref" : "#/components/schemas/Money",
            "readOnly" : true
          },
          "estimatedDownloadCostUsd" : {
            "description" : "The estimated download cost in USD.",
            "$ref" : "#/components/schemas/Money",
            "readOnly" : true
          }
        }
      },
      "VideoProcessingJobAppraisalCostPixopCredits" : {
        "description" : "The detailed Pixop Credits cost breakdown for the video processing.",
        "type" : "object",
        "required" : [ "totalProcessingCostPixopCredits", "estimatedStorageCostPixopCredits", "estimatedDownloadCostPixopCredits" ],
        "properties" : {
          "totalProcessingCostPixopCredits" : {
            "description" : "The total cost of the processing, in Pixop Credits.",
            "$ref" : "#/components/schemas/PixopCredits",
            "readOnly" : true
          },
          "estimatedStorageCostPixopCredits" : {
            "description" : "The estimated storage cost in Pixop Credits.",
            "$ref" : "#/components/schemas/PixopCredits",
            "readOnly" : true
          },
          "estimatedDownloadCostPixopCredits" : {
            "description" : "The estimated download cost in Pixop Credits.",
            "$ref" : "#/components/schemas/PixopCredits",
            "readOnly" : true
          }
        }
      },
      "VideoProcessingJobAppraisal" : {
        "type" : "object",
        "description" : "An appraisal containing the estimated costs and job details for processing a video.",
        "required" : [ "billingType", "estimation", "outputDurationMillis" ],
        "discriminator" : {
          "propertyName" : "billingType",
          "mapping" : {
            "STRIPE" : "#/components/schemas/VideoProcessingJobAppraisalUsd",
            "AWS_MARKETPLACE" : "#/components/schemas/VideoProcessingJobAppraisalPixopCredits"
          }
        },
        "properties" : {
          "billingType" : {
            "$ref" : "#/components/schemas/BillingType",
            "readOnly" : true
          },
          "estimation" : {
            "description" : "The overall estimation of costs and processing metrics for the job.",
            "$ref" : "#/components/schemas/ProcessingEstimation",
            "readOnly" : true
          },
          "outputDurationMillis" : {
            "description" : "The expected duration of the processed video in milliseconds. For example, 30000 represents a 30-second-long video.",
            "type" : "integer",
            "format" : "int64",
            "readOnly" : true,
            "examples" : [ 30000 ]
          }
        }
      },
      "VideoProcessingJobAppraisalUsd" : {
        "description" : "An appraisal containing the estimated USD costs and job details for processing a video.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/VideoProcessingJobAppraisal"
        }, {
          "type" : "object",
          "required" : [ "jobItems", "cost" ],
          "properties" : {
            "jobItems" : {
              "description" : "A list of job items to be processed as part of this video.",
              "type" : "array",
              "readOnly" : true,
              "items" : {
                "$ref" : "#/components/schemas/VideoProcessingJobItemUsd"
              }
            },
            "cost" : {
              "$ref" : "#/components/schemas/VideoProcessingJobAppraisalCostUsd"
            }
          }
        } ]
      },
      "VideoProcessingJobAppraisalPixopCredits" : {
        "description" : "An appraisal containing the Pixop Credits costs and job details for processing a video.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/VideoProcessingJobAppraisal"
        }, {
          "type" : "object",
          "required" : [ "jobItems", "cost" ],
          "properties" : {
            "jobItems" : {
              "description" : "A list of job items to be processed as part of this video.",
              "type" : "array",
              "readOnly" : true,
              "items" : {
                "$ref" : "#/components/schemas/VideoProcessingJobItemPixopCredits"
              }
            },
            "cost" : {
              "$ref" : "#/components/schemas/VideoProcessingJobAppraisalCostPixopCredits"
            }
          }
        } ]
      },
      "AmountUnit" : {
        "type" : "string",
        "description" : "The unit of measurement for an amount. Common units include GB (gigabytes), and GP (gigapixels).",
        "enum" : [ "GB", "GP" ]
      },
      "Category" : {
        "type" : "string",
        "description" : "The category of a product, indicating its type or purpose.",
        "enum" : [ "ENCODER", "FILTER", "PROCESSING", "STORAGE", "DOWNLOAD_S3", "DOWNLOAD_CLOUDFRONT", "OTHER" ]
      },
      "Product" : {
        "type" : "object",
        "description" : "Base information about a product, including details about the product and its quantity.",
        "required" : [ "productName", "category", "amount", "amountUnit" ],
        "properties" : {
          "productName" : {
            "type" : "string",
            "description" : "The name of the product, such as an encoder or filter. For example, H.264 / AVC.",
            "readOnly" : true,
            "examples" : [ "H.264 / AVC" ]
          },
          "category" : {
            "$ref" : "#/components/schemas/Category",
            "description" : "The category to which this product belongs.",
            "readOnly" : true
          },
          "amount" : {
            "type" : "number",
            "description" : "The quantity of the product or service consumed.",
            "readOnly" : true,
            "examples" : [ 2 ]
          },
          "amountUnit" : {
            "$ref" : "#/components/schemas/AmountUnit",
            "readOnly" : true
          }
        }
      },
      "ProductUsd" : {
        "description" : "Represents a product associated with a transaction or video processing. Includes pricing and discount details in USD.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Product"
        }, {
          "type" : "object",
          "required" : [ "discountPercentage", "unitPriceUsd", "costUsd" ],
          "properties" : {
            "discountPercentage" : {
              "$ref" : "#/components/schemas/DiscountPercentage",
              "description" : "The percentage discount applied to the product, if applicable.",
              "readOnly" : true
            },
            "unitPriceUsd" : {
              "$ref" : "#/components/schemas/Money",
              "description" : "The price of one unit of the product in USD.",
              "readOnly" : true,
              "examples" : [ 0.05 ]
            },
            "costUsd" : {
              "$ref" : "#/components/schemas/Money",
              "description" : "The total cost of the product after applying any discounts, in USD.",
              "readOnly" : true,
              "examples" : [ 0.1 ]
            }
          }
        } ]
      },
      "ProductPixopCredits" : {
        "description" : "Represents a product associated with a Pixop Credits usage.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/Product"
        }, {
          "type" : "object",
          "required" : [ "unitPricePixopCredits", "costPixopCredits" ],
          "properties" : {
            "unitPricePixopCredits" : {
              "$ref" : "#/components/schemas/PixopCredits",
              "description" : "The price of one unit of the product in Pixop Credits.",
              "readOnly" : true,
              "examples" : [ 5 ]
            },
            "costPixopCredits" : {
              "$ref" : "#/components/schemas/PixopCredits",
              "description" : "The total cost of the product in Pixop Credits.",
              "readOnly" : true,
              "examples" : [ 10 ]
            }
          }
        } ]
      },
      "VideoProcessingJobItemUsd" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/ProductUsd"
        }, {
          "type" : "object",
          "description" : "A specific job item involved in video processing, with additional cost and discount details.",
          "required" : [ "discountUsd", "normalCostUsd" ],
          "properties" : {
            "discountUsd" : {
              "$ref" : "#/components/schemas/Money",
              "description" : "The total discount amount in USD for this job item.",
              "readOnly" : true,
              "examples" : [ 0.02 ]
            },
            "normalCostUsd" : {
              "$ref" : "#/components/schemas/Money",
              "description" : "The cost of the job item without applying any discounts, in USD.",
              "readOnly" : true,
              "examples" : [ 0.12 ]
            }
          }
        } ]
      },
      "VideoProcessingJobItemPixopCredits" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/ProductPixopCredits"
        }, {
          "type" : "object",
          "description" : "A specific job item involved in video processing, with its Pixop Credits cost details.",
          "required" : [ "costPixopCredits" ],
          "properties" : {
            "costPixopCredits" : {
              "$ref" : "#/components/schemas/PixopCredits",
              "description" : "The cost of the job item in Pixop Credits.",
              "readOnly" : true,
              "examples" : [ 120 ]
            }
          }
        } ]
      },
      "Money" : {
        "type" : "number",
        "description" : "Represents an amount of money with up to three decimal places, e.g., 1.341 USD.",
        "examples" : [ 1.341 ]
      },
      "DiscountPercentage" : {
        "type" : "number",
        "description" : "Represents the discount percentage applied to a cost or product. For example, 3.3 indicates a 3.3% discount.",
        "readOnly" : true,
        "minimum" : 0,
        "maximum" : 100,
        "examples" : [ 3.3 ]
      },
      "PixopCredits" : {
        "type" : "integer",
        "format" : "int64",
        "description" : "Represents an amount in Pixop Credits, which is the internal unit used for billing in AWS Marketplace. \nSee [AWS Marketplace billing guide](https://docs.pixop.com/reference/aws-marketplace-billing-guide) for more details.\n",
        "examples" : [ 150 ]
      },
      "AwsMarketplaceAgreementId" : {
        "type" : "string",
        "description" : "AWS Marketplace agreement identifier.",
        "examples" : [ "agmt-12gatyyua6bsh8zxh4t5cy6ne" ]
      },
      "AwsMarketplaceOfferId" : {
        "type" : "string",
        "description" : "AWS Marketplace offer identifier.",
        "examples" : [ "offer-3n4pb5gvmarj6" ]
      },
      "AwsMarketplaceLicenseArn" : {
        "type" : "string",
        "description" : "AWS Marketplace License Manager license ARN.",
        "examples" : [ "arn:aws:license-manager::294406891311:license:l-0eaf47552bd544f09b452de373131d2a" ]
      },
      "AwsAccountId" : {
        "type" : "string",
        "examples" : [ "123456789987" ]
      },
      "BillingType" : {
        "type" : "string",
        "description" : "The billing type for the team.",
        "enum" : [ "STRIPE", "AWS_MARKETPLACE" ]
      },
      "AwsMarketplaceSubscriptionStatus" : {
        "type" : "string",
        "description" : "AWS Marketplace subscription status.",
        "enum" : [ "SUBSCRIBED", "UNSUBSCRIBE_PENDING", "UNSUBSCRIBED" ]
      },
      "AwsMarketplaceSubscription" : {
        "type" : "object",
        "description" : "AWS Marketplace subscription details.",
        "required" : [ "agreementId", "createdAt", "updatedAt", "teamId", "status", "licenseArn", "offerId", "productId", "productName", "buyerAwsAccountId", "sellerAwsAccountId", "acceptanceTime", "startTime", "setupCompletedAt", "effectiveFromHour" ],
        "properties" : {
          "agreementId" : {
            "$ref" : "#/components/schemas/AwsMarketplaceAgreementId",
            "readOnly" : true
          },
          "createdAt" : {
            "description" : "Date and time when the object was created.",
            "type" : "string",
            "format" : "date-time",
            "readOnly" : true,
            "examples" : [ 1734520108148 ]
          },
          "updatedAt" : {
            "description" : "Date and time when the object was last updated.",
            "type" : "string",
            "format" : "date-time",
            "readOnly" : true,
            "examples" : [ 1734520708148 ]
          },
          "teamId" : {
            "description" : "The ID of the team associated with the subscription.",
            "$ref" : "#/components/schemas/UUID",
            "readOnly" : true
          },
          "status" : {
            "$ref" : "#/components/schemas/AwsMarketplaceSubscriptionStatus",
            "readOnly" : true
          },
          "licenseArn" : {
            "$ref" : "#/components/schemas/AwsMarketplaceLicenseArn",
            "readOnly" : true
          },
          "offerId" : {
            "$ref" : "#/components/schemas/AwsMarketplaceOfferId",
            "readOnly" : true
          },
          "productId" : {
            "type" : "string",
            "readOnly" : true,
            "description" : "AWS Marketplace product identifier."
          },
          "productName" : {
            "type" : "string",
            "readOnly" : true,
            "description" : "AWS Marketplace product name."
          },
          "buyerAwsAccountId" : {
            "$ref" : "#/components/schemas/AwsAccountId",
            "readOnly" : true,
            "description" : "AWS account ID of the buyer."
          },
          "sellerAwsAccountId" : {
            "$ref" : "#/components/schemas/AwsAccountId",
            "readOnly" : true,
            "description" : "AWS account ID of the seller."
          },
          "acceptanceTime" : {
            "type" : "string",
            "format" : "date-time",
            "readOnly" : true,
            "description" : "The date and time when the agreement was accepted."
          },
          "startTime" : {
            "type" : "string",
            "format" : "date-time",
            "readOnly" : true,
            "description" : "The date and time when the subscription started."
          },
          "setupCompletedAt" : {
            "type" : "string",
            "format" : "date-time",
            "readOnly" : true,
            "description" : "The date and time when the subscription was linked to a team and the setup process completed."
          },
          "cancellationRequestedAt" : {
            "type" : "string",
            "format" : "date-time",
            "readOnly" : true,
            "description" : "The date and time when the cancellation request was made."
          },
          "licenseDeprovisionedAt" : {
            "type" : "string",
            "format" : "date-time",
            "readOnly" : true,
            "description" : "The date and time when the license was deprovisioned."
          },
          "effectiveFromHour" : {
            "type" : "string",
            "format" : "date-time",
            "readOnly" : true,
            "description" : "The date and hour from which this agreement is used for metering."
          },
          "replacesAgreementId" : {
            "$ref" : "#/components/schemas/AwsMarketplaceAgreementId",
            "readOnly" : true,
            "description" : "The ID of previous agreement replaced by this agreement, if any."
          }
        }
      },
      "AwsMarketplaceSubscriptionsPage" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "required" : [ "items" ],
          "properties" : {
            "items" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/AwsMarketplaceSubscription"
              }
            }
          }
        } ]
      },
      "CreditsUsage" : {
        "type" : "object",
        "description" : "Base Pixop Credits usage details.",
        "required" : [ "createdAt", "type", "pixopCredits" ],
        "discriminator" : {
          "propertyName" : "type",
          "mapping" : {
            "PROCESSING" : "#/components/schemas/ProcessingCreditsUsage",
            "UTILITIES" : "#/components/schemas/UtilitiesCreditsUsage"
          }
        },
        "properties" : {
          "createdAt" : {
            "description" : "The date and time when the usage record was created.",
            "type" : "string",
            "format" : "date-time",
            "examples" : [ 1734520108000 ]
          },
          "type" : {
            "$ref" : "#/components/schemas/CreditsUsageType"
          },
          "pixopCredits" : {
            "description" : "The usage amount in Pixop Credits.",
            "$ref" : "#/components/schemas/PixopCredits"
          },
          "videoId" : {
            "description" : "The ID of the video associated with the usage.",
            "$ref" : "#/components/schemas/UUID"
          }
        }
      },
      "ProcessingCreditsUsage" : {
        "description" : "Pixop Credits usage related to video processing.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/CreditsUsage"
        }, {
          "type" : "object",
          "properties" : {
            "details" : {
              "$ref" : "#/components/schemas/ProcessingCreditsUsageDetails",
              "readOnly" : true
            }
          }
        } ]
      },
      "UtilitiesCreditsUsage" : {
        "description" : "Pixop Credits usage related to utilities, such as downloads or storage.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/CreditsUsage"
        }, {
          "type" : "object",
          "properties" : {
            "product" : {
              "description" : "The product associated with the utilities usage.",
              "$ref" : "#/components/schemas/ProductPixopCredits",
              "readOnly" : true
            }
          }
        } ]
      },
      "ProcessingCreditsUsageDetails" : {
        "type" : "object",
        "description" : "Additional details specific to a processing credits usage.",
        "properties" : {
          "sourceVideoId" : {
            "readOnly" : true,
            "description" : "The ID of the source video associated with the credits usage.",
            "$ref" : "#/components/schemas/UUID"
          },
          "products" : {
            "readOnly" : true,
            "description" : "The list of products involved in the usage.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/ProductPixopCredits"
            }
          }
        }
      },
      "CreditsUsageTotals" : {
        "type" : "object",
        "description" : "A summary of Pixop Credits usage totals categorized by type, including overall totals.",
        "properties" : {
          "totalsForAllCategories" : {
            "description" : "The aggregate usage totals for all categories.",
            "$ref" : "#/components/schemas/CreditsUsageTotalsByCategory",
            "readOnly" : true
          },
          "totalsByCategory" : {
            "description" : "The list of usage totals grouped by category.",
            "type" : "array",
            "items" : {
              "$ref" : "#/components/schemas/CreditsUsageTotalsByCategory"
            },
            "readOnly" : true
          }
        }
      },
      "CreditsUsageTotalsByCategory" : {
        "type" : "object",
        "description" : "A breakdown of usage totals for a specific category.",
        "properties" : {
          "category" : {
            "description" : "The category of the credits usages being summed.",
            "$ref" : "#/components/schemas/Category",
            "readOnly" : true
          },
          "totalPixopCredits" : {
            "description" : "The total Pixop Credit usage.",
            "$ref" : "#/components/schemas/PixopCredits",
            "readOnly" : true,
            "examples" : [ 500 ]
          }
        }
      },
      "CreditsUsagePage" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "required" : [ "teamId", "filterByFromDateTime", "filterByToDateTime", "filterProcessingCreditsUsageMode", "totals", "items" ],
          "properties" : {
            "teamId" : {
              "description" : "The ID of the team for which to retrieve credits usage records.",
              "$ref" : "#/components/schemas/UUID",
              "readOnly" : true
            },
            "filterByFromDateTime" : {
              "$ref" : "#/components/schemas/FilterByFromDateTime",
              "readOnly" : true
            },
            "filterByToDateTime" : {
              "$ref" : "#/components/schemas/FilterByToDateTime",
              "readOnly" : true
            },
            "filterProcessingCreditsUsageMode" : {
              "description" : "Filter the credits usage records by processing credits usage mode.",
              "$ref" : "#/components/schemas/FilterProcessingCreditsUsageMode",
              "readOnly" : true
            },
            "filterByVideoId" : {
              "description" : "By which video ID the credits usage records were filtered.",
              "$ref" : "#/components/schemas/UUID",
              "readOnly" : true
            },
            "totals" : {
              "description" : "The aggregated totals for the filtered credits usage records on all pages.",
              "$ref" : "#/components/schemas/CreditsUsageTotals"
            },
            "items" : {
              "type" : "array",
              "description" : "The list of credits usage records on the current page.",
              "readOnly" : true,
              "items" : {
                "$ref" : "#/components/schemas/CreditsUsage"
              }
            }
          }
        } ]
      },
      "ApiKeyActive" : {
        "type" : "boolean",
        "description" : "Indicates whether this API key is active and can be used for authentication. An inactive API key cannot be used to access the platform's services."
      },
      "ApiKeyName" : {
        "type" : "string",
        "description" : "A user-defined name to associate with the API key.",
        "maxLength" : 47,
        "minLength" : 1,
        "examples" : [ "My API Key" ]
      },
      "ApiKeyDescription" : {
        "type" : "string",
        "description" : "A user-defined description of the API key, providing additional context or details about its purpose or usage.",
        "maxLength" : 255,
        "minLength" : 1,
        "examples" : [ "API key used for accessing video processing endpoints" ]
      },
      "WebhookActive" : {
        "type" : "boolean",
        "description" : "Indicates whether the webhook is currently active and eligible to receive events.  \nInactive webhooks will not receive any event notifications.\n"
      },
      "WebhookName" : {
        "type" : "string",
        "description" : "A user-defined name to help identify and organize the webhook.",
        "maxLength" : 47,
        "minLength" : 1,
        "examples" : [ "My Webhook" ]
      },
      "WebhookDescription" : {
        "type" : "string",
        "description" : "A user-defined description providing context about the webhook’s purpose or usage.",
        "maxLength" : 255,
        "minLength" : 1,
        "examples" : [ "Webhook used for video processing events" ]
      },
      "WebhookRateLimitPerSecond" : {
        "type" : "integer",
        "description" : "The maximum number of requests per second that Pixop will send to the webhook URL.  \nThis rate limit is enforced to avoid overwhelming the receiving system.\n",
        "minimum" : 1,
        "maximum" : 1000,
        "default" : 10,
        "examples" : [ 100 ]
      },
      "MaxTotalRetryDelayMinutes" : {
        "type" : "integer",
        "description" : "The maximum total duration, in minutes, over which retry attempts will be made for a failed webhook event.  \nOnce this threshold is reached, no further retries will be performed.\n",
        "readOnly" : true,
        "minimum" : 0,
        "maximum" : 1440,
        "default" : 180
      },
      "WebhookEventTypes" : {
        "type" : "array",
        "description" : "A list of event types the webhook is subscribed to.  \nThe webhook will receive notifications for all specified event types.\nEach event type corresponds to a specific stage or outcome in the processing pipeline.\n- `video_in.started`: Input video copy operation has started\n- `video_in.done`: Input video copy operation completed\n- `video_in.failed`: Input video copy operation failed\n- `video_in_ingestion.started`: Ingestion of input video has started\n- `video_in_ingestion.done`: Ingestion of input video completed\n- `video_in_ingestion.failed`: Ingestion of input video failed\n- `clip_processing.started`: Video clip processing has started\n- `clip_processing.done`: Video clip processing completed\n- `clip_processing.failed`: Video clip processing failed\n- `clip_ingestion.started`: Ingestion of video clip has started\n- `clip_ingestion.done`: Ingestion of video clip completed\n- `clip_ingestion.failed`: Ingestion of video clip failed\n- `video_processing.started`: Video processing has started\n- `video_processing.done`: Video processing completed\n- `video_processing.failed`: Video processing failed\n- `video_processing_ingestion.started`: Ingestion of processed video has started\n- `video_processing_ingestion.done`: Ingestion of processed video completed\n- `video_processing_ingestion.failed`: Ingestion of processed video failed\n- `video_out.started`: Output video copy operation has started\n- `video_out.done`: Output video copy operation completed\n- `video_out.failed`: Output video copy operation failed\n- `video.deleted`: Video has been deleted\n",
        "minItems" : 1,
        "maxItems" : 22,
        "items" : {
          "$ref" : "#/components/schemas/WebhookEventType"
        }
      },
      "WebhookEventType" : {
        "type" : "string",
        "description" : "The type of event that triggered the webhook.\n",
        "enum" : [ "video_in.started", "video_in.done", "video_in.failed", "video_in_ingestion.started", "video_in_ingestion.done", "video_in_ingestion.failed", "clip_processing.started", "clip_processing.done", "clip_processing.failed", "clip_ingestion.started", "clip_ingestion.done", "clip_ingestion.failed", "video_processing.started", "video_processing.done", "video_processing.failed", "video_processing_ingestion.started", "video_processing_ingestion.done", "video_processing_ingestion.failed", "video_out.started", "video_out.done", "video_out.failed", "video.deleted" ]
      },
      "InputLocationName" : {
        "type" : "string",
        "description" : "A user-defined name to associate with the input location. Helps in organizing and identifying various input locations.",
        "maxLength" : 47,
        "minLength" : 1,
        "examples" : [ "My Input Location" ]
      },
      "OutputLocationName" : {
        "type" : "string",
        "description" : "A user-defined name to associate with the output location. Useful for organizing and identifying various output locations.",
        "maxLength" : 47,
        "minLength" : 1,
        "examples" : [ "My Output Location" ]
      },
      "S3Bucket" : {
        "type" : "string",
        "description" : "The name of the S3 bucket. Bucket names must comply with the rules for DNS-compliant names, with a length between 3 and 63 characters.",
        "maxLength" : 63,
        "minLength" : 3,
        "examples" : [ "example-bucket-name" ]
      },
      "S3AccessKey" : {
        "type" : "string",
        "description" : "The access key for authenticating with the S3 bucket. This key is part of the AWS credentials required to perform operations on the bucket.",
        "examples" : [ "AKIAIOSFODNN7EXAMPLE" ]
      },
      "S3SecretAccessKey" : {
        "type" : "string",
        "description" : "The secret access key for authenticating with the S3 bucket. This key is part of the AWS credentials and should be kept secure.",
        "examples" : [ "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLE123" ]
      },
      "SecretString" : {
        "type" : "string",
        "description" : "A secret string where only the last three characters are visible, while the rest are masked for security purposes. \nTypically used for securely displaying sensitive values such as API keys.\n",
        "readOnly" : true,
        "minLength" : 20,
        "maxLength" : 20,
        "examples" : [ "*****************123" ]
      },
      "ApiKey" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/BaseObject"
        }, {
          "type" : "object",
          "description" : "Represents an API key associated with a user, providing authentication for API access.",
          "required" : [ "userId", "active", "name", "apiKeyHidden" ],
          "properties" : {
            "userId" : {
              "$ref" : "#/components/schemas/UUID",
              "description" : "The ID of the user this API key is associated with.",
              "readOnly" : true
            },
            "active" : {
              "$ref" : "#/components/schemas/ApiKeyActive",
              "readOnly" : true
            },
            "name" : {
              "$ref" : "#/components/schemas/ApiKeyName",
              "readOnly" : true
            },
            "description" : {
              "$ref" : "#/components/schemas/ApiKeyDescription",
              "readOnly" : true
            },
            "apiKeyHidden" : {
              "$ref" : "#/components/schemas/SecretString",
              "description" : "The masked representation of the API key for display purposes.",
              "readOnly" : true
            },
            "apiKey" : {
              "type" : "string",
              "description" : "The full API key. This field is only present in the response when a new API key is created. \nAfterward, the API key is no longer retrievable for security reasons.\n",
              "readOnly" : true
            },
            "deletionEligibleAt" : {
              "type" : "string",
              "format" : "date",
              "readOnly" : true,
              "description" : "Calendar date (YYYY-MM-DD) indicating when this API key becomes eligible for automatic deletion due to inactivity. If the key is successfully used for authentication before this date, it will not be automatically deleted on that date and will remain active for at least another 90 days (a new inactivity window). After that, if it is again unused for a full inactivity window, a new deletionEligibleAt date may be assigned. If this field is null or omitted, the key is not currently eligible for automatic deletion.\n"
            }
          }
        } ]
      },
      "ApiKeyPatch" : {
        "type" : "object",
        "description" : "Represents the fields that can be updated for an existing API key.",
        "properties" : {
          "name" : {
            "$ref" : "#/components/schemas/ApiKeyName"
          },
          "description" : {
            "$ref" : "#/components/schemas/ApiKeyDescription"
          }
        }
      },
      "ApiKeyPost" : {
        "type" : "object",
        "required" : [ "name", "active" ],
        "description" : "Represents the required fields for creating a new API key.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/ApiKeyPatch"
        }, {
          "type" : "object",
          "properties" : {
            "active" : {
              "$ref" : "#/components/schemas/ApiKeyActive"
            }
          }
        } ]
      },
      "WebhookPublicKey" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/BaseObject"
        }, {
          "type" : "object",
          "description" : "Represents a public key used to verify the authenticity of webhook signatures.  \nThis ensures that the webhook payloads originated from Pixop and were not tampered with.\n",
          "required" : [ "algorithm", "publicKey" ],
          "properties" : {
            "algorithm" : {
              "type" : "string",
              "enum" : [ "EC" ],
              "default" : "EC",
              "description" : "The cryptographic algorithm used to generate the public key.  \nCurrently, only Elliptic Curve (EC) is supported.\n",
              "readOnly" : true
            },
            "publicKey" : {
              "type" : "string",
              "description" : "The public key, base64-encoded.  \nThis key is used to verify the signature of received webhook payloads.\n",
              "readOnly" : true
            },
            "expiresAt" : {
              "type" : "string",
              "format" : "date-time",
              "description" : "The date and time when this public key will expire.  \nWhen a new key is generated, the previous key remains valid for a short grace period to ensure uninterrupted verification.\n",
              "readOnly" : true
            }
          }
        } ]
      },
      "Webhook" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/BaseObject"
        }, {
          "type" : "object",
          "description" : "Represents a webhook configuration associated with a specific team.  \nA webhook defines where and how Pixop delivers event notifications.\n",
          "required" : [ "teamId", "active", "name", "url", "rateLimitPerSecond", "maxTotalRetryDelayMinutes", "eventTypes" ],
          "properties" : {
            "teamId" : {
              "$ref" : "#/components/schemas/UUID",
              "description" : "The unique identifier of the team this webhook is associated with.",
              "readOnly" : true
            },
            "active" : {
              "$ref" : "#/components/schemas/WebhookActive",
              "readOnly" : true
            },
            "name" : {
              "$ref" : "#/components/schemas/WebhookName",
              "readOnly" : true
            },
            "description" : {
              "$ref" : "#/components/schemas/WebhookDescription",
              "readOnly" : true
            },
            "url" : {
              "$ref" : "#/components/schemas/HttpsURL",
              "readOnly" : true
            },
            "rateLimitPerSecond" : {
              "$ref" : "#/components/schemas/WebhookRateLimitPerSecond",
              "readOnly" : true
            },
            "maxTotalRetryDelayMinutes" : {
              "$ref" : "#/components/schemas/MaxTotalRetryDelayMinutes"
            },
            "eventTypes" : {
              "$ref" : "#/components/schemas/WebhookEventTypes",
              "readOnly" : true
            }
          }
        } ]
      },
      "WebhookPatch" : {
        "type" : "object",
        "description" : "Defines the fields that can be updated for an existing webhook.  \nUse this object to partially modify webhook properties.\n",
        "properties" : {
          "name" : {
            "$ref" : "#/components/schemas/WebhookName"
          },
          "description" : {
            "$ref" : "#/components/schemas/WebhookDescription"
          },
          "url" : {
            "$ref" : "#/components/schemas/HttpsURL"
          },
          "rateLimitPerSecond" : {
            "type" : "integer",
            "minimum" : 1,
            "maximum" : 1000,
            "description" : "The maximum number of requests per second that Pixop will send to the webhook URL.  \nThis rate limit is enforced to avoid overwhelming the receiving system.\n"
          },
          "maxTotalRetryDelayMinutes" : {
            "type" : "integer",
            "description" : "The maximum total duration, in minutes, over which retry attempts will be made for a failed webhook event.  \nOnce this threshold is reached, no further retries will be performed.\n",
            "minimum" : 0,
            "maximum" : 1440
          },
          "eventTypes" : {
            "x-nullable" : true,
            "default" : null,
            "type" : "array",
            "minItems" : 1,
            "maxItems" : 22,
            "items" : {
              "$ref" : "#/components/schemas/WebhookEventType"
            }
          }
        }
      },
      "WebhookPost" : {
        "type" : "object",
        "description" : "Defines the fields required to create a new webhook.  \n",
        "required" : [ "active", "name", "url", "rateLimitPerSecond", "maxTotalRetryDelayMinutes", "eventTypes" ],
        "allOf" : [ {
          "$ref" : "#/components/schemas/WebhookPatch"
        }, {
          "type" : "object",
          "properties" : {
            "rateLimitPerSecond" : {
              "$ref" : "#/components/schemas/WebhookRateLimitPerSecond"
            },
            "maxTotalRetryDelayMinutes" : {
              "$ref" : "#/components/schemas/MaxTotalRetryDelayMinutes"
            },
            "eventTypes" : {
              "$ref" : "#/components/schemas/WebhookEventTypes"
            },
            "active" : {
              "$ref" : "#/components/schemas/WebhookActive"
            }
          }
        } ]
      },
      "WebhookEventDataType" : {
        "type" : "string",
        "description" : "The type of data associated with a webhook event.  \nThe value determines the schema of the accompanying `data` object.\n- `VIDEO`: The event is related to a video.\n",
        "enum" : [ "VIDEO" ]
      },
      "WebhookEventData" : {
        "type" : "object",
        "description" : "Represents the data associated with a webhook event.  \nThe structure of the `data` object varies depending on the `type` field. Currently, only video-related events are supported.\n",
        "required" : [ "type" ],
        "discriminator" : {
          "propertyName" : "type",
          "mapping" : {
            "VIDEO" : "#/components/schemas/WebhookEventVideoData"
          }
        },
        "properties" : {
          "type" : {
            "$ref" : "#/components/schemas/WebhookEventDataType"
          }
        }
      },
      "WebhookEventVideoData" : {
        "description" : "Represents the payload data for video-related webhook events.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/WebhookEventData"
        }, {
          "type" : "object",
          "properties" : {
            "videoId" : {
              "$ref" : "#/components/schemas/UUID",
              "description" : "The unique identifier of the video associated with the event.",
              "readOnly" : true
            }
          }
        } ]
      },
      "WebhookEvent" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/BaseObject"
        }, {
          "type" : "object",
          "description" : "Represents an event notification sent to a webhook endpoint.  \nIncludes the event payload, retry information, and all received responses.\n",
          "required" : [ "teamId", "payload", "responses" ],
          "properties" : {
            "teamId" : {
              "$ref" : "#/components/schemas/UUID",
              "description" : "The unique identifier of the team that owns the webhook.",
              "readOnly" : true
            },
            "payload" : {
              "$ref" : "#/components/schemas/WebhookEventPayload",
              "readOnly" : true
            },
            "nextAttemptEarliestAt" : {
              "type" : "string",
              "format" : "date-time",
              "description" : "The earliest possible date and time at which the webhook delivery may be attempted.  \nThis applies to both the initial delivery and any subsequent retries.  \nDue to internal scheduling and rate limiting, the actual attempt may occur shortly after this time.\n",
              "readOnly" : true
            },
            "successful" : {
              "type" : "boolean",
              "description" : "Indicates whether the event was successfully delivered to the webhook endpoint.",
              "readOnly" : true
            },
            "responses" : {
              "type" : "array",
              "description" : "One or more responses received from the webhook endpoint.  \nMultiple entries may exist if the event has been retried.\n",
              "items" : {
                "$ref" : "#/components/schemas/WebhookEndpointResponse"
              }
            }
          }
        } ]
      },
      "WebhookEventPayload" : {
        "type" : "object",
        "description" : "Represents the payload of a webhook event, including metadata about the event, its type, and any associated data.",
        "required" : [ "id", "webhookId", "eventType", "occurredAt", "test", "attemptCount" ],
        "properties" : {
          "id" : {
            "$ref" : "#/components/schemas/UUID",
            "description" : "The unique identifier of the webhook event.  \nThis ID is stable across delivery attempts and can be used to ensure idempotent processing on the receiver side.\n\n**Example usage:**  \nTo avoid processing the same event multiple times, store received event IDs in a persistent store (e.g., database or cache).  \nIf an event arrives with an ID that has already been processed, you can safely ignore it.\n",
            "readOnly" : true
          },
          "webhookId" : {
            "$ref" : "#/components/schemas/UUID",
            "description" : "The unique identifier of the webhook to which this event was dispatched.",
            "readOnly" : true
          },
          "eventType" : {
            "$ref" : "#/components/schemas/WebhookEventType",
            "readOnly" : true
          },
          "occurredAt" : {
            "type" : "string",
            "format" : "date-time",
            "description" : "The date and time indicating when the event occurred.",
            "readOnly" : true
          },
          "test" : {
            "type" : "boolean",
            "description" : "Whether the event was a test event.",
            "readOnly" : true
          },
          "attemptCount" : {
            "type" : "integer",
            "description" : "The number of delivery attempts that have been made for this webhook event.",
            "readOnly" : true
          },
          "data" : {
            "$ref" : "#/components/schemas/WebhookEventData",
            "readOnly" : true
          }
        }
      },
      "WebhookEndpointResponse" : {
        "type" : "object",
        "description" : "Represents the response received from a webhook endpoint.  \nThis object is also used when the event was not sent due to rate limiting or other failures.\n",
        "required" : [ "requestedAt", "responseTimeMillis", "statusCode" ],
        "properties" : {
          "requestedAt" : {
            "type" : "string",
            "format" : "date-time",
            "description" : "The date and time when the request was sent to the webhook.",
            "readOnly" : true
          },
          "responseTimeMillis" : {
            "type" : "integer",
            "description" : "The time taken to receive a response, measured in milliseconds.",
            "readOnly" : true
          },
          "statusCode" : {
            "type" : "integer",
            "description" : "The HTTP status code returned by the webhook endpoint.  \nAll non-2xx status codes are considered unsuccessful.\n",
            "readOnly" : true
          },
          "responseBody" : {
            "type" : "string",
            "description" : "The response body returned from the webhook endpoint, truncated to 100 characters.",
            "readOnly" : true
          },
          "errorCode" : {
            "type" : "string",
            "description" : "A machine-readable error code describing the failure, if applicable.",
            "readOnly" : true
          },
          "errorMessage" : {
            "type" : "string",
            "description" : "A human-readable error message associated with the `errorCode`, if present.",
            "readOnly" : true
          },
          "responseRetryAt" : {
            "type" : "string",
            "format" : "date-time",
            "description" : "If the status code is `429` and a retry header (e.g. `Retry-After`) is present and parsed, this field indicates when a retry may be attempted.\n",
            "readOnly" : true
          },
          "responseHeaders" : {
            "type" : "object",
            "additionalProperties" : {
              "type" : "string"
            },
            "description" : "A map of selected response headers returned by the endpoint, truncated to 50 characters each.  \nOnly stored for unsuccessful responses to provide troubleshooting context.\n",
            "readOnly" : true
          }
        }
      },
      "S3InputLocation" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/BaseObject"
        }, {
          "type" : "object",
          "description" : "Represents an S3 input location for video ingestion, containing information about the bucket and credentials used for accessing the S3 bucket.",
          "required" : [ "name", "bucket", "accessKeyHidden", "secretAccessKeyHidden" ],
          "properties" : {
            "name" : {
              "$ref" : "#/components/schemas/InputLocationName",
              "readOnly" : true
            },
            "bucket" : {
              "$ref" : "#/components/schemas/S3Bucket",
              "readOnly" : true
            },
            "accessKeyHidden" : {
              "$ref" : "#/components/schemas/SecretString",
              "description" : "The masked representation of the S3 access key used for authentication.",
              "readOnly" : true
            },
            "secretAccessKeyHidden" : {
              "$ref" : "#/components/schemas/SecretString",
              "description" : "The masked representation of the S3 secret access key used for authentication.",
              "readOnly" : true
            }
          }
        } ]
      },
      "S3BucketWithAccessKeysPatch" : {
        "type" : "object",
        "description" : "Represents the fields that can be updated for an S3 bucket with access keys.",
        "properties" : {
          "bucket" : {
            "$ref" : "#/components/schemas/S3Bucket"
          },
          "accessKey" : {
            "$ref" : "#/components/schemas/S3AccessKey"
          },
          "secretAccessKey" : {
            "$ref" : "#/components/schemas/S3SecretAccessKey"
          }
        }
      },
      "S3BucketWithAccessKeys" : {
        "type" : "object",
        "description" : "Represents an S3 bucket configuration, including the bucket name and access keys required for authentication.",
        "required" : [ "bucket", "accessKey", "secretAccessKey" ],
        "allOf" : [ {
          "$ref" : "#/components/schemas/S3BucketWithAccessKeysPatch"
        }, {
          "type" : "object",
          "properties" : {
            "bucket" : {
              "$ref" : "#/components/schemas/S3Bucket"
            }
          }
        } ]
      },
      "S3InputLocationPatch" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/S3BucketWithAccessKeysPatch"
        }, {
          "type" : "object",
          "description" : "Represents the fields that can be updated for an S3 input location, including the bucket, access keys, and name.",
          "properties" : {
            "name" : {
              "$ref" : "#/components/schemas/InputLocationName"
            }
          }
        } ]
      },
      "S3InputLocationPost" : {
        "type" : "object",
        "description" : "Represents the required fields for creating a new S3 input location, including the bucket name, access keys, and a user-defined name.",
        "required" : [ "bucket", "accessKey", "secretAccessKey", "name" ],
        "allOf" : [ {
          "$ref" : "#/components/schemas/S3InputLocationPatch"
        }, {
          "type" : "object",
          "properties" : {
            "name" : {
              "$ref" : "#/components/schemas/InputLocationName"
            }
          }
        } ]
      },
      "S3OutputLocation" : {
        "type" : "object",
        "description" : "Represents an S3 output location for storing videos. Includes the bucket name and credentials required for accessing the S3 bucket.",
        "allOf" : [ {
          "$ref" : "#/components/schemas/BaseObject"
        }, {
          "type" : "object",
          "required" : [ "name", "bucket", "accessKeyHidden", "secretAccessKeyHidden" ],
          "properties" : {
            "name" : {
              "$ref" : "#/components/schemas/OutputLocationName",
              "readOnly" : true
            },
            "bucket" : {
              "$ref" : "#/components/schemas/S3Bucket",
              "readOnly" : true
            },
            "accessKeyHidden" : {
              "$ref" : "#/components/schemas/SecretString",
              "description" : "The masked representation of the S3 access key used for authentication.",
              "readOnly" : true
            },
            "secretAccessKeyHidden" : {
              "$ref" : "#/components/schemas/SecretString",
              "description" : "The masked representation of the S3 secret access key used for authentication.",
              "readOnly" : true
            }
          }
        } ]
      },
      "S3OutputLocationPatch" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/S3BucketWithAccessKeysPatch"
        }, {
          "type" : "object",
          "description" : "Represents the fields that can be updated for an S3 output location, including the bucket, access keys, and name.",
          "properties" : {
            "name" : {
              "$ref" : "#/components/schemas/OutputLocationName"
            }
          }
        } ]
      },
      "S3OutputLocationPost" : {
        "type" : "object",
        "description" : "Represents the required fields for creating a new S3 output location, including the bucket name, access keys, and a user-defined name.",
        "required" : [ "bucket", "accessKey", "secretAccessKey", "name" ],
        "allOf" : [ {
          "$ref" : "#/components/schemas/S3OutputLocationPatch"
        }, {
          "type" : "object",
          "properties" : {
            "name" : {
              "$ref" : "#/components/schemas/OutputLocationName"
            }
          }
        } ]
      },
      "ProjectPatch" : {
        "type" : "object",
        "description" : "Represents the fields that can be updated for a project.",
        "properties" : {
          "name" : {
            "$ref" : "#/components/schemas/ProjectName"
          }
        }
      },
      "ProjectPost" : {
        "type" : "object",
        "description" : "Represents the required fields for creating a new project. A project is a collection of videos that are grouped together for organizational or processing purposes.",
        "required" : [ "name" ],
        "allOf" : [ {
          "$ref" : "#/components/schemas/ProjectPatch"
        }, {
          "type" : "object",
          "properties" : {
            "name" : {
              "$ref" : "#/components/schemas/ProjectName"
            }
          }
        } ]
      },
      "ListOfUUIDs" : {
        "type" : "array",
        "description" : "A list of universally unique identifiers (UUIDs).",
        "items" : {
          "$ref" : "#/components/schemas/UUID"
        },
        "examples" : [ [ "123e4567-e89b-12d3-a456-426614174000", "456e1234-e89b-12d3-a456-426614174111" ] ]
      },
      "VideoPatch" : {
        "type" : "object",
        "description" : "Represents the fields that can be updated for a video resource.",
        "properties" : {
          "name" : {
            "$ref" : "#/components/schemas/VideoName"
          },
          "description" : {
            "$ref" : "#/components/schemas/VideoDescription"
          }
        }
      },
      "VideoPost" : {
        "type" : "object",
        "description" : "Represents the required fields for creating a new video resource.",
        "required" : [ "name" ],
        "allOf" : [ {
          "$ref" : "#/components/schemas/VideoPatch"
        }, {
          "type" : "object",
          "properties" : {
            "projectId" : {
              "$ref" : "#/components/schemas/UUID",
              "description" : "The ID of the project to which the video belongs. If not specified, the video is added to the default project."
            }
          }
        } ]
      },
      "CreateMasterVideoBase" : {
        "type" : "object",
        "description" : "A base schema for creating a master video by importing it from a source. \nAdditional required fields are defined in the specific components that extend this schema.\n",
        "allOf" : [ {
          "$ref" : "#/components/schemas/VideoPost"
        }, {
          "type" : "object",
          "properties" : {
            "fileName" : {
              "$ref" : "#/components/schemas/FileName",
              "description" : "The name of the video file, such as `myvideo.mp4`. \nIf not specified, a normalized version of `name` will be used.\n"
            }
          }
        } ]
      },
      "CreateMasterVideoFromHttps" : {
        "type" : "object",
        "description" : "Defines the required fields for creating a master video by importing it from an HTTPS URL. \nThis includes the video's name and the HTTPS URL from which the video will be imported.\n",
        "required" : [ "url" ],
        "allOf" : [ {
          "$ref" : "#/components/schemas/CreateMasterVideoBase"
        }, {
          "type" : "object",
          "properties" : {
            "url" : {
              "$ref" : "#/components/schemas/HttpsURL"
            }
          }
        } ]
      },
      "CreateMasterVideoFromS3" : {
        "type" : "object",
        "description" : "Defines the required fields for creating a master video by importing it from an Amazon S3 object. \nThis includes the video's name and the S3 object key.\n",
        "required" : [ "objectKey" ],
        "allOf" : [ {
          "$ref" : "#/components/schemas/CreateMasterVideoBase"
        }, {
          "type" : "object",
          "properties" : {
            "objectKey" : {
              "$ref" : "#/components/schemas/S3ObjectKey",
              "description" : "The key of the object in the S3 bucket from which the video is imported."
            },
            "fileName" : {
              "$ref" : "#/components/schemas/FileName",
              "description" : "The name of the video file, such as `myvideo.mp4`. \nIf not specified, it is derived from the S3 object key.\n"
            }
          }
        } ]
      },
      "CreateMasterVideoFromS3Bucket" : {
        "type" : "object",
        "description" : "Defines the required fields for creating a master video by importing it from an Amazon S3 bucket. \nThis includes details about the S3 bucket and the access credentials used for the import process.\n",
        "required" : [ "s3Bucket" ],
        "allOf" : [ {
          "$ref" : "#/components/schemas/CreateMasterVideoFromS3"
        }, {
          "type" : "object",
          "properties" : {
            "s3Bucket" : {
              "$ref" : "#/components/schemas/S3BucketWithAccessKeys",
              "description" : "Contains details about the S3 bucket and access credentials required to import the master video.\n"
            }
          }
        } ]
      },
      "MasteringDisplayPoint" : {
        "type" : "object",
        "description" : "Represents a 2D coordinate in normalized chromaticity space, typically used to define the primary color coordinates or white point of a mastering display. \nThe values are normalized to the range [0.0, 1.0] as per the CIE 1931 color space.\n",
        "properties" : {
          "x" : {
            "type" : "number",
            "minimum" : 0.0,
            "maximum" : 1.0,
            "description" : "The X coordinate of the point in chromaticity space.",
            "examples" : [ 0.3127 ]
          },
          "y" : {
            "type" : "number",
            "minimum" : 0.0,
            "maximum" : 1.0,
            "description" : "The Y coordinate of the point in chromaticity space.",
            "examples" : [ 0.329 ]
          }
        }
      },
      "MasteringDisplay" : {
        "type" : "object",
        "description" : "Represents the SMPTE ST 2086 metadata of a mastering display, describing the display's color volume and luminance characteristics. \nThis metadata defines the primary color chromaticities, white point, and luminance levels for High Dynamic Range (HDR) content mastering.\nIf `tag` is specified, the individual chromaticity properties (`red`, `green`, `blue`, `whitePoint`) are ignored in favor of the preset values associated with that tag. \nIf `tag` is omitted, the properties `red`, `green`, `blue`, and `whitePoint` must each be defined explicitly.\n",
        "properties" : {
          "tag" : {
            "type" : "string",
            "description" : "Presets for primary color chromaticities and white point, enabling quick selection of standard chromaticity values. For instance:\n  - P3_D65\n    - red: x: 0.68, y: 0.32\n    - green: x: 0.265, y: 0.69\n    - blue: x: 0.15, y: 0.06\n    - whitePoint: x: 0.3127, y: 0.329\n  - BT2020\n    - red: x: 0.708, y: 0.292\n    - green: x: 0.17, y: 0.797\n    - blue: x: 0.131, y: 0.046\n    - whitePoint: x: 0.3127, y: 0.329\n",
            "enum" : [ "P3_D65", "BT2020" ]
          },
          "red" : {
            "$ref" : "#/components/schemas/MasteringDisplayPoint",
            "description" : "The chromaticity coordinates for the red primary color."
          },
          "green" : {
            "$ref" : "#/components/schemas/MasteringDisplayPoint",
            "description" : "The chromaticity coordinates for the green primary color."
          },
          "blue" : {
            "$ref" : "#/components/schemas/MasteringDisplayPoint",
            "description" : "The chromaticity coordinates for the blue primary color."
          },
          "whitePoint" : {
            "$ref" : "#/components/schemas/MasteringDisplayPoint",
            "description" : "The chromaticity coordinates for the white point, representing the display’s reference white."
          },
          "minLuminance" : {
            "type" : "number",
            "default" : 0.005,
            "minimum" : 0.0,
            "maximum" : 10000.0,
            "description" : "The minimum luminance level of the mastering display, measured in cd/m² (nits). \nThis defines the darkest level the display can achieve.\n",
            "examples" : [ 0.001 ]
          },
          "maxLuminance" : {
            "type" : "number",
            "minimum" : 0.0,
            "maximum" : 10000.0,
            "description" : "The maximum luminance level of the mastering display, measured in cd/m² (nits). \nThis defines the brightest level the display can achieve. \nIf omitted, it defaults to `maxCll`; if `maxCll` is also unspecified, it defaults to 1000.\n",
            "examples" : [ 1000.0 ]
          }
        }
      },
      "Colorimetry" : {
        "type" : "object",
        "description" : "Represents the colorimetry profile of video content, including color matrix, range, primaries, transfer characteristics, HDR format, and related static metadata.",
        "properties" : {
          "colorSpace" : {
            "type" : "string",
            "description" : "The color space of the profile.",
            "enum" : [ "BT470BG", "FCC", "SMPTE170M", "SMPTE240M", "BT709", "BT2020NC", "BT2020C" ]
          },
          "colorPrimaries" : {
            "type" : "string",
            "description" : "The color primaries used in the profile.",
            "enum" : [ "BT470BG", "BT470M", "SMPTE170M", "SMPTE240M", "FILM", "BT709", "BT2020", "SMPTE428", "SMPTE431", "SMPTE432" ]
          },
          "transferCharacteristics" : {
            "type" : "string",
            "description" : "The transfer characteristics (transfer curve) of the profile.",
            "enum" : [ "BT470BG", "BT470M", "SMPTE170M", "SMPTE240M", "BT709", "BT2020_10", "BT2020_12", "LINEAR", "SMPTE2084", "ARIB_STD_B67" ]
          },
          "colorRange" : {
            "type" : "string",
            "description" : "The color range of the profile.",
            "enum" : [ "LIMITED", "FULL" ]
          },
          "hdrFormat" : {
            "type" : "string",
            "description" : "The HDR format used in the profile. All HDR formats require:\n  - **BT2020NC** color space  \n  - **BT2020** primaries  \n  - **TV** range  \n\nSpecific requirements for each HDR format:\n\n- `HLG`:  \n  - **Transfer Characteristic**: ARIB_STD_B67  \n  - **Description**: Hybrid Log-Gamma, used in broadcast HDR workflows. Backward-compatible with SDR displays  \n  - **Additional Requirements**: None  \n\n- `PQ10`:  \n  - **Transfer Characteristic**: SMPTE2084  \n  - **Description**: Perceptual Quantizer (PQ), suitable for HDR workflows without metadata  \n  - **Additional Requirements**: 10-bit chroma subsampling  \n\n- `HDR10`:  \n  - **Transfer Characteristic**: SMPTE2084  \n  - **Description**: PQ10 with static metadata for mastering display and light levels  \n  - **Additional Requirements**: HEVC encoding, 4:2:0 10-bit chroma subsampling\n",
            "enum" : [ "HLG", "PQ10", "HDR10" ]
          },
          "masteringDisplay" : {
            "$ref" : "#/components/schemas/MasteringDisplay"
          },
          "maxCll" : {
            "type" : "number",
            "minimum" : 0.0,
            "maximum" : 10000.0,
            "description" : "Maximum content light level (in nits). Used to determine the peak light level for all HDR content. SDR content is 100 nits by definition.",
            "examples" : [ 800.0 ]
          },
          "maxFall" : {
            "type" : "number",
            "minimum" : 0.0,
            "maximum" : 10000.0,
            "description" : "Maximum frame-average light level (in nits). Only used as HDR10 metadata.",
            "examples" : [ 50.0 ]
          }
        }
      },
      "VideoProcessingConfigurationOptions" : {
        "description" : "Configuration parameters for video processing. This schema allows the specification of encoding profiles, encoding configurations, and filter options. \n\nIf an `encodingProfile` is specified, the `encodingConfiguration` is ignored. \n\nSelecting specific encoding or filtering options is optional.\n",
        "type" : "object",
        "properties" : {
          "encodingProfile" : {
            "$ref" : "#/components/schemas/EncodingProfileEnum"
          },
          "encodingConfiguration" : {
            "$ref" : "#/components/schemas/EncodingConfiguration"
          },
          "container" : {
            "$ref" : "#/components/schemas/MediaContainerEnum",
            "description" : "The media container format for the video. Some containers only support specific codecs. Specifying an unsupported codec for a container will result in a `400 Bad Request` response.\n\nSupported codecs by container:\n- `MOV`: `H264`, `PRORES`, `DNXHD`, `HEVC`, `MPEG2`, `FFV1`\n- `MXF`: `H264`, `XDCAM`, `MPEG2`, `DNXHD`\n- `MP4`: `H264`, `HEVC`\n- `MPEGTS`: `H264`, `HEVC`, `MPEG2`\n"
          },
          "filters" : {
            "description" : "Specifies the filters to apply to the video. To disable a specific filter, set its value to `null` or remove the corresponding field.\n",
            "type" : "object",
            "properties" : {
              "deinterlacer" : {
                "description" : "Specifies the deinterlacer to use for video processing.  **Additional settings must be set on `filterSettings.interlacedFieldOrderMode`** E.g.: \n  - `DEINT`: Pixop Deinterlacer. Pixop's deep neural network based video deinterlacer which reduces aliasing artifacts such as interline twitter. Doubles the output frame rate.\n  - `YADIF`: “Yet Another DeInterlacing Filter”. Classic deinterlacer which checks the pixels of previous, current and next frames to re-create the missed field via edge-directed interpolation and applies a spatial check to prevent most artifacts.\n  - `BWDIF`: Bob Weaver. Classic deinterlacer based on a motion adaptive approach that fuses the YADIF and Weston 3-Field methods. Doubles the output frame rate.\n  - `WESTON3F`: Weston Three Field. Classic deinterlacer that considers the same position in the previous and next fields and two of its neighbors in both directions in the current field. Doubles the output frame rate.\n",
                "type" : "string",
                "enum" : [ "DEINT", "YADIF", "BWDIF", "WESTON3F" ]
              },
              "reshaper" : {
                "description" : "Specifies the reshaper to use for video processing. For instance:\n  - `CROP`: Frame Cropper. **Additional settings must be set on `filterSettings.normalizedCropCoordinates`**\n",
                "type" : "string",
                "enum" : [ "CROP" ]
              },
              "prescaler" : {
                "description" : "If the source was previously upscaled, `prescaler` can be used to bring the video back closer to its native resolution before running the rest of the processing pipeline. \nThis is useful when working with older upscaled footage, as it helps remove interpolation artifacts and provides a more appropriate base resolution for further restoration and enhancement. \n**Additional settings must be set on `filterSettings.prescaledResolution`** E.g.:\n- `SCALE`:  Bicubic Interpolation. Classic scaler using the bicubic interpolation resampling method.\n",
                "type" : "string",
                "enum" : [ "SCALE" ]
              },
              "denoiser" : {
                "description" : "Specifies the denoiser to use for video processing. For instance:\n- `DENOISE`: Pixop's deep neural network-based video denoiser trained on a spatio-temporal gaussian noise model.\n- `HQDN3D`: High Quality DeNoise 3D. Classic denoiser based on a three-way low-pass filter, which can completely remove high-frequency noise while minimizing blending artifacts.\n",
                "type" : "string",
                "enum" : [ "DENOISE", "HQDN3D" ]
              },
              "stabilizer" : {
                "description" : "Specifies the stabilizer to use for video processing. For instance:\n- `DEJIT`: Pixop Dejitterer. Pixop's deep neural network based video dejitterer designed for stabilizing video that has been transferred to digital by re-aligning scanlines.\n",
                "type" : "string",
                "enum" : [ "DEJIT" ]
              },
              "augmenter" : {
                "description" : "Specifies the augmenter to use for video processing. For instance:\n- `FACEFORWARD`: Pixop's face enhancement augmenter for recordings of human presenters. Makes lighting appear uniform across the entire face of the subject(s), blurs the background and performs color adjustments. To obtain the desired effect, the entire face must be clearly visible, partially front lit, fill at least 5% of the image frame and remain relatively still. **Additional settings must be set on `filterSettings.faceForward`**\n",
                "type" : "string",
                "enum" : [ "FACEFORWARD" ]
              },
              "scaler" : {
                "description" : "Specifies the scaler to use for video processing. **Additional settings must be set on `filterSettings.resolution`** when set. For instance:\n  - `DVRES2`: Pixop Deep Restoration 2. Pixop's improved deep neural network based video restoration algorithm. **Additional settings can be set on `filterSettings.dvres2Variant`**\n  - `DVRES`:  Pixop Deep Restoration. Pixop's original deep neural network based video restoration algorithm. Optionally scales, then deblurs, eliminates compression artifacts and injects details into degraded video (max HD resolution). For fair to good quality digital SD material.\n  - `PABSR1`: Pixop Super Resolution. Pixop's machine-learned based scaler. Allows upscaling up to 4x of the original displayed frame size. Neither restoration nor AI detail injection is performed. Can optionally be applied without upscaling as final sweetening. **Additional settings must be set on `filterSettings.clarityBoost`**\n  - `SCALE`:  Bicubic Interpolation. Classic scaler using the bicubic interpolation resampling method. Allows both upscaling and downscaling.\n",
                "type" : "string",
                "enum" : [ "DVRES2", "DVRES", "PABSR1", "SCALE" ]
              },
              "frameRateConverter" : {
                "description" : "Specifies the frame rate converter to use for video processing. **Additional settings must be set on `filterSettings.frameRate`** when set. For instance:\n  - `VFI`: Pixop Frame Rate Conversion. Pixop's deep learning method for converting the frame rate accurately by estimating and interpolating the motion between two consecutive frames. Fast motion, line of sight being blocked by an intervening object and scene changes are handled.\n  - `FPS`: Constant FPS. Classic frame rate converter which converts the video to the specified constant frame rate by simply duplicating or dropping source frames as necessary.\n  - `FBLEND`: Frame Blending. Classic frame rate converter that changes the frame rate by blending new video output frames from the source frames.\n  - `MCINTERPOLATE`: Motion Compensation. Classic frame rate converter based on an advanced motion compensation interpolation algorithm.\n",
                "type" : "string",
                "enum" : [ "VFI", "FPS", "FBLEND", "MCINTERPOLATE" ]
              },
              "debander" : {
                "description" : "Specifies the debander to use for video processing. For instance:\n- `GRADFUN`: Gradient Debander. Fixes the banding artifacts that are sometimes introduced into nearly flat regions. Interpolate the gradients that should go where the bands are, and dither them.\n",
                "type" : "string",
                "enum" : [ "GRADFUN" ]
              },
              "postProcessor" : {
                "description" : "Specifies the post-processor to use for video processing. For instance:\n- `FILMGRAIN`: Pixop Film Grain.  Adds a layer of digital film grain to the processed output using a physically-based grain model. By applying this filter, an element of materiality is injected, which makes denoised material look more attractive to some human observers, for example. **Additional settings must be set on `filterSettings.filmGrain`**\n",
                "type" : "string",
                "enum" : [ "FILMGRAIN" ]
              }
            }
          },
          "filterSettings" : {
            "description" : "Additional settings for video filters. These settings allow customization of specific filter behaviors, such as cropping coordinates, deinterlacing modes, and resolution adjustments.",
            "type" : "object",
            "properties" : {
              "interlacedFieldOrderMode" : {
                "description" : "Specifies how to determine the interlaced field order when `filters.deinterlacer` is used. For instance:\n  - `AUTO_METADATA`: Quickly determine the interlaced field order based on the source file metadata\n  - `AUTO_SEGMENT_ANALYSIS`: Auto determine the interlaced field order of the whole video based on a deep analysis of up to three one-minute segments\n  - `TOP_FIELD_FIRST`: Top field first\n  - `BOTTOM_FIELD_FIRST`: Bottom field first\n",
                "type" : "string",
                "enum" : [ "AUTO_METADATA", "AUTO_SEGMENT_ANALYSIS", "TOP_FIELD_FIRST", "BOTTOM_FIELD_FIRST" ]
              },
              "normalizedCropCoordinates" : {
                "description" : "Defines the normalized coordinates for cropping when `filters.reshaper` is set to `CROP`. \nCoordinates are relative to the video dimensions.\n",
                "type" : "object",
                "required" : [ "x1", "y1", "x2", "y2" ],
                "properties" : {
                  "x1" : {
                    "type" : "number",
                    "minimum" : 0,
                    "maximum" : 1,
                    "description" : "X-coordinate of the top-left corner.",
                    "examples" : [ 0.00625 ]
                  },
                  "y1" : {
                    "type" : "number",
                    "minimum" : 0,
                    "maximum" : 1,
                    "description" : "Y-coordinate of the top-left corner.",
                    "examples" : [ 0.01111 ]
                  },
                  "x2" : {
                    "type" : "number",
                    "minimum" : 0,
                    "maximum" : 1,
                    "description" : "X-coordinate of the bottom-right corner.",
                    "examples" : [ 0.99375 ]
                  },
                  "y2" : {
                    "type" : "number",
                    "minimum" : 0,
                    "maximum" : 1,
                    "description" : "Y-coordinate of the bottom-right corner.",
                    "examples" : [ 0.98889 ]
                  }
                }
              },
              "cropRectangle" : {
                "readOnly" : true,
                "description" : "Specifies the cropped rectangle applied to the processed video when `filters.reshaper` is set to `CROP`. \nThe dimensions and position are determined by the normalized crop coordinates and the source video dimensions.\n",
                "type" : "object",
                "required" : [ "width", "height" ],
                "properties" : {
                  "width" : {
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 1,
                    "description" : "The width of the cropped rectangle in pixels.",
                    "examples" : [ 1920 ]
                  },
                  "height" : {
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 1,
                    "description" : "The height of the cropped rectangle in pixels.",
                    "examples" : [ 1080 ]
                  },
                  "x" : {
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 0,
                    "description" : "The X-coordinate of the top-left corner of the cropped rectangle.",
                    "examples" : [ 100 ]
                  },
                  "y" : {
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 0,
                    "description" : "The Y-coordinate of the top-left corner of the cropped rectangle.",
                    "examples" : [ 50 ]
                  }
                }
              },
              "prescaledResolution" : {
                "description" : "Defines the resolution settings for prescaling when `filters.prescaler` is used.\n",
                "required" : [ "width", "height" ],
                "type" : "object",
                "properties" : {
                  "width" : {
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 16,
                    "maximum" : 7680,
                    "description" : "Width of the prescaled video in pixels.",
                    "examples" : [ 768, 1024, 640, 854 ]
                  },
                  "height" : {
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 16,
                    "maximum" : 4320,
                    "description" : "Height of the prescaled video in pixels.",
                    "examples" : [ 576, 480 ]
                  }
                }
              },
              "faceForward" : {
                "description" : "Specifies settings for the face enhancement augmenter when `filters.augmenter` is set to `FACEFORWARD`.",
                "type" : "object",
                "required" : [ "colorBoost", "autoWhiteBalance", "relightIntensity", "backgroundBlur" ],
                "properties" : {
                  "colorBoost" : {
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 0,
                    "maximum" : 30,
                    "description" : "Boosts color saturation in the video.",
                    "examples" : [ 10 ]
                  },
                  "autoWhiteBalance" : {
                    "type" : "boolean",
                    "description" : "Enables or disables automatic white balance adjustment."
                  },
                  "relightIntensity" : {
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 0,
                    "maximum" : 200,
                    "description" : "Intensity of face relighting, expressed as a percentage.",
                    "examples" : [ 100 ]
                  },
                  "backgroundBlur" : {
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 0,
                    "maximum" : 20,
                    "description" : "Level of background blur applied. Set to 0 to disable background blurring.",
                    "examples" : [ 5 ]
                  }
                }
              },
              "dvres2Variant" : {
                "description" : "Specifies the Pixop Deep Restoration 2 variant used when `filters.scaler` is set to `DVRES2`. For instance:\n  - `GENERIC`: Default if not specified. Denoises, deblurs and eliminates compression artifacts, then upscales while injecting details. For any quality digital camera recorded video. \n  - `FINE_TUNING`: Eliminates compression artifacts, then upscales while injecting details. A relatively conservative, fine-tuning mode as neither denoising nor any deblurring is performed. Primarily intended for higher production quality video. \n  - `SELFIE_STYLE`: Denoises and eliminates compression artifacts, then upscales while injecting details. Intended for selfie-style recordings captured on smaller sensors such as web cameras or mobile phones.\n",
                "type" : "string",
                "enum" : [ "GENERIC", "FINE_TUNING", "SELFIE_STYLE" ]
              },
              "clarityBoost" : {
                "description" : "Defines the level of contrast enhancement applied when `filters.scaler` is set to `PABSR1`. \nThis setting controls how much clarity and vibrancy is added to the video.\n",
                "type" : "string",
                "enum" : [ "NONE", "MARGINAL", "VERY_LOW", "LOW", "MEDIUM", "HIGH", "VERY_HIGH" ]
              },
              "resolution" : {
                "description" : "Defines the resolution settings when `filters.scaler` is applied. \nIf `tag` is specified, `width` and `height` are ignored. \nWhen only one of `width` or `height` is provided, the other is determined based on the specified `aspectRatioTag`. \nIf both `width` and `height` are set, `aspectRatioTag` is ignored. \nIf neither `tag` nor `aspectRatioTag` is specified, both `width` and `height` must be defined.\n",
                "type" : "object",
                "properties" : {
                  "tag" : {
                    "type" : "string",
                    "description" : "Presets for resolution scaling, allowing quick selection of standard resolutions or scaling factors. For instance:\n  - STANDARD_HD: 1280 x 720 pixels.\n  - FULL_HD: 1920 x 1080 pixels.\n  - UHD_4K: 3840 x 2160 pixels.\n  - UHD_8K: 7680 x 4320 pixels.\n  - 1X: Source video frame dimensions.\n  - 2X: Source video frame dimensions * 2\n  - 3X: Source video frame dimensions * 3\n  - 4X: Source video frame dimensions * 4\n",
                    "enum" : [ "STANDARD_HD", "FULL_HD", "UHD_4K", "UHD_8K", "1X", "2X", "3X", "4X" ]
                  },
                  "width" : {
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 16,
                    "maximum" : 7680,
                    "description" : "Width of the scaled video in pixels.",
                    "examples" : [ 1920 ]
                  },
                  "height" : {
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 16,
                    "maximum" : 4320,
                    "description" : "Height of the scaled video in pixels.",
                    "examples" : [ 1080 ]
                  },
                  "aspectRatioTag" : {
                    "type" : "string",
                    "description" : "Defines the aspect ratio used for video scaling. This setting determines how width and height adjustments maintain the video’s visual proportions. Available options:\n  - `DISPLAY`: Uses the display aspect ratio (DAR) from the source file's metadata. If DAR is not available, the storage aspect ratio is used instead.\n  - `STORAGE`: Uses the storage aspect ratio of the source file.\n  - `PAR_PRESERVED`: Preserves the pixel aspect ratio. Useful when `filters.reshaper` is also applied.\n  - `16:9`: Enforces a 16:9 aspect ratio.\n  - `4:3`: Enforces a 4:3 aspect ratio.\n",
                    "enum" : [ "DISPLAY", "STORAGE", "PAR_PRESERVED", "16:9", "4:3" ]
                  }
                }
              },
              "frameRate" : {
                "description" : "Defines how to adjust the frame rate of the video when `filters.frameRateConverter` is used. \nSettings can include direct frame rate values or predefined tags for standard rates.\n",
                "type" : "object",
                "properties" : {
                  "tag" : {
                    "type" : "string",
                    "description" : "Specifies frame rate settings using tags for common video standards. \nIf `tag` is used, the `fps` field is ignored.\n\nAvailable tags and their corresponding frame rates:\n- `FILM_NTSC`: Film with NTSC compatibility — 23.976 fps\n- `FILM`: Film — 24 fps\n- `VIDEO_PAL`: PAL video — 25 fps\n- `VIDEO_NTSC`: NTSC video — 29.97 fps\n- `VIDEO_HD`: HD video — 30 fps\n- `VIDEO_PAL_FAST`: PAL video — 50 fps\n- `VIDEO_NTSC_FAST`: HD video with NTSC compatibility — 59.94 fps\n- `VIDEO_HD_FAST`: HD video — 60 fps\n- `VIDEO_PAL_UHD`: PAL UHD video — 100 fps\n- `VIDEO_NTSC_UHD`: UHD video with NTSC compatibility — 119.88 fps\n- `VIDEO_UHD_FAST`: UHD video — 120 fps\n",
                    "enum" : [ "FILM_NTSC", "FILM", "VIDEO_PAL", "VIDEO_NTSC", "VIDEO_HD", "VIDEO_PAL_FAST", "VIDEO_NTSC_FAST", "VIDEO_HD_FAST", "VIDEO_PAL_UHD", "VIDEO_NTSC_UHD", "VIDEO_UHD_FAST" ],
                    "examples" : [ "VIDEO_HD" ]
                  },
                  "fps" : {
                    "type" : "number",
                    "minimum" : 0.001,
                    "maximum" : 999,
                    "description" : "Specifies the output frame rate in frames per second (fps).",
                    "examples" : [ 30 ]
                  }
                }
              },
              "filmGrain" : {
                "description" : "Defines the settings for the Pixop Film Grain filter when `filters.postProcessor` is set to `FILMGRAIN`.\n",
                "type" : "object",
                "required" : [ "grainSize", "grainStrength" ],
                "properties" : {
                  "grainSize" : {
                    "type" : "string",
                    "enum" : [ "SUPER_FINE", "FINE", "MEDIUM", "COARSE", "VERY_COARSE" ],
                    "description" : "Specifies the size of the film grain.",
                    "examples" : [ "FINE" ]
                  },
                  "grainStrength" : {
                    "type" : "integer",
                    "format" : "int32",
                    "minimum" : 0,
                    "maximum" : 50,
                    "description" : "Strength of the film grain effect, where 0 is invisible and 50 is strong.",
                    "examples" : [ 20 ]
                  }
                }
              }
            }
          },
          "processingSettings" : {
            "description" : "Additional processing settings for input and output color space conversions, tone mapping, and fixed output resolutions. \nThese settings ensure precise control over colorimetry and dynamic range transformations during video processing.\n",
            "type" : "object",
            "properties" : {
              "inputColorSpaceConversion" : {
                "description" : "Defines the initial color space conversion applied to the input video, including an optional tone-mapping operation to manage transitions from High Dynamic Range (HDR) to Standard Dynamic Range (SDR). This operation ensures the video is prepared for further processing by aligning it with the desired color space and dynamic range requirements before applying the first video filter.\n\nThe conversion process typically involves:\n  - Adjusting the input color primaries, transfer characteristics, and matrix coefficients to match the target color space.\n  - Optionally applying tone mapping to compress HDR luminance and color values into the SDR range.\n\nThis is critical for workflows requiring consistent color reproduction or transitioning between HDR and SDR formats.\n",
                "type" : "object",
                "required" : [ "mappingMode" ],
                "properties" : {
                  "mappingMode" : {
                    "type" : "string",
                    "description" : "Defines the mapping mode used to determine the colorimetry of the source video when converting to the SDR transfer characteristic (Rec. 709 or Rec. 2020-10) utilized by the processing pipeline internally.\n\nIf the color matrix, range, primaries, or transfer characteristics are missing, they will be inferred based on the input resolution and frame rate as described below:\n\n- `STRICT_USER`: Explicitly use the user-provided specification. Validation will fail if the specification is incomplete.\n- `SOURCE_PRIORITY`: Prioritize metadata from the source file, if available. Fill any missing properties with user-provided data or infer from resolution and frame rate.\n- `USER_PRIORITY`: Prioritize the user-provided specification. Fill any missing properties with source file metadata or infer from resolution and frame rate.\n- `RESOLUTION_ONLY`: Ignore metadata from both the source and the user. Infer colorimetry entirely based on resolution and frame rate, using the following resolution categories:\n\n  - **SD (NTSC)**:  \n    - Resolution ≤ 720×576  \n    - Frame rate: ~30 fps or ~60 fps  \n    - Colorimetry: Rec. 601 (SMPTE 170M)\n\n  - **SD (PAL)**:  \n    - Resolution ≤ 720×576  \n    - Frame rate: non-NTSC  \n    - Colorimetry: Rec. 601 (BT.470BG)\n\n  - **HD**:  \n    - Resolution > 720×576 and ≤ 1920×1080  \n    - Frame rate: any  \n    - Colorimetry: Rec. 709\n\n  - **UHD**:  \n    - Resolution > 1920×1080  \n    - Frame rate: any  \n    - Colorimetry: Rec. 2020\n",
                    "enum" : [ "STRICT_USER", "SOURCE_PRIORITY", "USER_PRIORITY", "RESOLUTION_ONLY" ]
                  },
                  "colorProfile" : {
                    "$ref" : "#/components/schemas/Colorimetry"
                  },
                  "metadataOnly" : {
                    "type" : "boolean",
                    "default" : false,
                    "description" : "If set to `true`, the colorimetry is determined based on the specified mapping mode, but no actual color space conversion is performed. Instead, the determined colorimetry is applied only to the metadata of the output file and used if required for any output color space conversion."
                  },
                  "toneMapper" : {
                    "type" : "object",
                    "description" : "Defines the optional tone-mapper and its settings",
                    "required" : [ "algorithm" ],
                    "properties" : {
                      "algorithm" : {
                        "type" : "string",
                        "description" : "Specifies the tone-mapping algorithm to be applied for converting High Dynamic Range (HDR) content to Standard Dynamic Range (SDR) or managing values within a limited dynamic range.\n\nAvailable algorithms:\n- `LINEAR`: Linear stretch of the reference gamut\n- `CLIP`: Hard-clip out-of-range values\n- `HABLE`: Preserve dark and bright details\n- `REINHARD`: Simple curve for brightness preservation\n- `MOBIUS`: Contrast and color retention for in-range material\n",
                        "enum" : [ "LINEAR", "CLIP", "HABLE", "REINHARD", "MOBIUS" ]
                      },
                      "outputNits" : {
                        "type" : "number",
                        "default" : 100.0,
                        "minimum" : 0.0,
                        "maximum" : 10000.0,
                        "description" : "Defines the output brightness in nits."
                      }
                    }
                  }
                }
              },
              "outputColorSpaceConversion" : {
                "description" : "Defines the color space conversion applied to the output video, including optional inverse tone-mapping operations to align the output colorimetry with the desired specifications. \nThis ensures the processed video meets the target display requirements and matches the desired output dynamic range, color space, and colorimetry.\n\nThe conversion process typically involves:\n  - Adjusting the output color primaries, transfer characteristics, and matrix coefficients to match the specified target color space.\n  - Optionally applying inverse tone mapping to expand the dynamic range values as required for High Dynamic Range (HDR) outputs.\n\nThis is critical for workflows targeting specific output formats or transitioning between SDR and HDR standards.\n",
                "type" : "object",
                "required" : [ "mappingMode" ],
                "properties" : {
                  "mappingMode" : {
                    "type" : "string",
                    "description" : "Defines the mapping mode used to determine the output colorimetry, leveraging input colorimetry as a reference where applicable. \n\nIf the color matrix, range, primaries, or transfer characteristics are missing, they will be inferred based on metadata and resolution as described below:\n\n- `STRICT_USER`: Explicitly use the user-provided specification. Validation will fail if the specification is incomplete.\n- `INPUT_PRIORITY`: Prioritize the resolved input colorimetry. Fill any missing properties with source metadata or user-provided data, then infer from resolution and frame rate.\n- `SOURCE_PRIORITY`: Prioritize metadata from the source file. Fill any missing properties with resolved input colorimetry or user-provided data, then infer from resolution and frame rate.\n- `USER_PRIORITY`: Prioritize user-provided colorimetry. Fill any missing properties with resolved input colorimetry or source metadata, then infer from resolution and frame rate.\n- `RESOLUTION_ONLY`: Infer colorimetry entirely based on resolution and frame rate, ignoring input and user-provided metadata.\n\nResolution-based inference rules:\n- **SD (NTSC)**:  \n  - Resolution ≤ 720×576  \n  - Frame rate: ~30 fps or ~60 fps  \n  - Colorimetry: Rec. 601 (SMPTE 170M)\n\n- **SD (PAL)**:  \n  - Resolution ≤ 720×576  \n  - Frame rate: non-NTSC  \n  - Colorimetry: Rec. 601 (BT.470BG)\n\n- **HD**:  \n  - Resolution > 720×576 and ≤ 1920×1080  \n  - Frame rate: any  \n  - Colorimetry: Rec. 709\n\n- **UHD**:  \n  - Resolution > 1920×1080  \n  - Frame rate: any  \n  - Colorimetry: Rec. 2020\n",
                    "enum" : [ "STRICT_USER", "INPUT_PRIORITY", "SOURCE_PRIORITY", "USER_PRIORITY", "RESOLUTION_ONLY" ]
                  },
                  "colorProfile" : {
                    "$ref" : "#/components/schemas/Colorimetry"
                  },
                  "metadataOnly" : {
                    "type" : "boolean",
                    "default" : false,
                    "description" : "If set to `true`, the output colorimetry is determined based on the specified mapping mode, but no actual color space conversion is performed. Instead, the determined colorimetry is applied only to the metadata of the output file."
                  },
                  "inverseToneMapper" : {
                    "type" : "object",
                    "description" : "Defines the optional inverse tone-mapper and its settings",
                    "required" : [ "algorithm" ],
                    "properties" : {
                      "algorithm" : {
                        "type" : "string",
                        "description" : "Specifies the inverse tone-mapping (ITM) algorithm to be applied for converting Standard Dynamic Range (SDR) to High Dynamic Range (HDR).\n\nAvailable algorithms:\n- `INFINITEHDR`: Pixop InfiniteHDR — Pixop's ML-based SDR-HDR filter with over-exposure compensation\n- `LINEAR`: Linear stretch of the reference gamut\n- `HABLE`: Preserve dark and bright details\n- `REINHARD`: Simple curve for brightness preservation\n- `MOBIUS`: Contrast and color retention for in-range material\n",
                        "enum" : [ "INFINITEHDR", "LINEAR", "HABLE", "REINHARD", "MOBIUS" ]
                      },
                      "outputNits" : {
                        "type" : "number",
                        "default" : 100.0,
                        "minimum" : 0.0,
                        "maximum" : 10000.0,
                        "description" : "Defines the output brightness in nits of the inverse tone-mapping operation. Not used by the `INFINITEHDR` algorithm."
                      },
                      "saturationBoost" : {
                        "type" : "number",
                        "default" : 1.25,
                        "minimum" : 0.0,
                        "description" : "Saturation boost factor used exclusively by the `INFINITEHDR` algorithm. A higher value increases color saturation, enhancing vibrancy."
                      }
                    }
                  }
                }
              },
              "fixedOutputResolution" : {
                "type" : "string",
                "description" : "Enforces a fixed resolution for the processed output by cropping and/or padding the video as needed. \nThis is particularly useful for adapting content to standard formats like widescreen 16:9. Black borders are inserted in padded areas.\n\nAvailable resolution presets:\n- `STANDARD_HD`: 1280 × 720 pixels\n- `FULL_HD`: 1920 × 1080 pixels\n- `UHD_4K`: 3840 × 2160 pixels\n- `UHD_8K`: 7680 × 4320 pixels\n",
                "enum" : [ "STANDARD_HD", "FULL_HD", "UHD_4K", "UHD_8K" ]
              },
              "outputScanning" : {
                "type" : "string",
                "description" : "Specifies the scanning mode for the processed output. Defaults to `AUTO`. For instance:\n- `AUTO`: automatically determine the appropriate scanning type based on metadata of the source and any filters selected\n- `PROGRESSIVE`: force progressive output\n- `INTERLACED_TOP_FIRST`: perform explicit top field first interlacing of the processed video stream, which has the effect of halving the stored frame rate.\n- `INTERLACED_BOTTOM_FIRST`: perform explicit bottom field first interlacing of the processed video stream, which has the effect of halving the stored frame rate.\n",
                "enum" : [ "AUTO", "PROGRESSIVE", "INTERLACED_TOP_FIRST", "INTERLACED_BOTTOM_FIRST" ]
              }
            }
          }
        }
      },
      "VideoProcessingConfiguration" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/BaseObject"
        }, {
          "type" : "object",
          "description" : "Represents a video processing configuration, which includes settings for encoding profiles, encoding configurations, and filter options. \nThis configuration is used to define how videos are processed and encoded within the system.\n",
          "required" : [ "teamId", "name", "options", "builtin" ],
          "properties" : {
            "teamId" : {
              "$ref" : "#/components/schemas/UUID",
              "readOnly" : true,
              "description" : "The unique identifier of the team associated with this video processing configuration."
            },
            "name" : {
              "$ref" : "#/components/schemas/VideoProcessingConfigurationName",
              "readOnly" : true
            },
            "options" : {
              "$ref" : "#/components/schemas/VideoProcessingConfigurationOptions",
              "readOnly" : true,
              "description" : "The options and settings defined for this video processing configuration."
            },
            "builtin" : {
              "type" : "boolean",
              "readOnly" : true,
              "description" : "Indicates whether this configuration is built-in. Built-in configurations cannot be modified.",
              "examples" : [ false ]
            },
            "description" : {
              "$ref" : "#/components/schemas/VideoProcessingConfigurationDescription",
              "readOnly" : true
            }
          }
        } ]
      },
      "VideoProcessingConfigurationPost" : {
        "type" : "object",
        "required" : [ "name" ],
        "description" : "Represents the payload for creating a new video processing configuration.\nThis includes the configuration’s name, processing options, and an optional description.\n\n**Important:**  \nThe `options` field is required when creating a new configuration.  \nDue to a limitation in our API documentation provider, `options` is not marked as\nrequired in the OpenAPI schema to prevent the interactive request builder from\npre-populating unintended fields. Requests submitted without `options` will be\nrejected by the API.\n",
        "properties" : {
          "name" : {
            "$ref" : "#/components/schemas/VideoProcessingConfigurationName",
            "description" : "The name of the video processing configuration to be created."
          },
          "options" : {
            "$ref" : "#/components/schemas/VideoProcessingConfigurationOptions",
            "description" : "The options and settings to apply to the video processing configuration. **This field is required.**"
          },
          "description" : {
            "$ref" : "#/components/schemas/VideoProcessingConfigurationDescription",
            "description" : "A detailed description of the video processing configuration to be created."
          }
        }
      },
      "AspectRatio" : {
        "description" : "Represents the aspect ratio of a video.",
        "properties" : {
          "ratio" : {
            "description" : "The aspect ratio expressed as a decimal number with two decimal points of precision. For example, 1.78 represents 16:9, and 1.33 represents 4:3.",
            "type" : "number",
            "examples" : [ 1.78, 1.33 ]
          },
          "tag" : {
            "description" : "The aspect ratio represented as a tag. Common examples include 16:9, 4:3, and 2.35:1.",
            "type" : "string",
            "examples" : [ 969, 243, "2.35:1" ]
          }
        }
      },
      "FrameRate" : {
        "description" : "Represents the frame rate of a video, expressed in frames per second (FPS).",
        "properties" : {
          "frameRate" : {
            "description" : "The frame rate expressed as a decimal number with three decimal points of precision. Common values include 30, 29.97, 25, and 23.976.",
            "type" : "number",
            "examples" : [ 29.97, 30, 25, 23.976 ]
          },
          "rational" : {
            "description" : "The frame rate expressed as a rational number. For example, 30000:1001 represents 29.97 FPS.",
            "type" : "string",
            "examples" : [ "30000:1001", "30" ]
          }
        }
      },
      "VideoMetadata" : {
        "description" : "Metadata describing the properties and characteristics of a video file.",
        "properties" : {
          "containerName" : {
            "description" : "The short name of the video container format. Examples include mov, mxf, mp4, and mpegts.",
            "type" : "string",
            "examples" : [ "mov", "mxf", "mp4", "mpegts" ]
          },
          "longContainerName" : {
            "description" : "The full name of the video container format. Examples include MPEG-4, QuickTime / MOV, and MPEG-TS (MPEG-2 Transport Stream).",
            "type" : "string",
            "examples" : [ "MPEG-4", "QuickTime / MOV", "MPEG-TS (MPEG-2 Transport Stream)" ]
          },
          "codecName" : {
            "description" : "The short name of the codec used for video encoding. Examples include h264, prores, dnxhd, mpeg2, hevc, xdcam, and ffv1.",
            "type" : "string",
            "examples" : [ "h264", "prores", "dnxhd", "mpeg2", "hevc", "xdcam", "ffv1" ]
          },
          "longCodecName" : {
            "description" : "The full name of the codec used for video encoding. Examples include H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10, H.265 / HEVC (High Efficiency Video Coding), and MPEG-2 video.",
            "type" : "string",
            "examples" : [ "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10", "H.265 / HEVC (High Efficiency Video Coding)", "MPEG-2 video" ]
          },
          "pixelFormatName" : {
            "description" : "The name of the pixel format used in the video. Examples include yuv420p, yuv422p, yuv444p, yuv420p10le, yuv422p10le, and yuv444p10le.",
            "type" : "string",
            "examples" : [ "yuv420p", "yuv422p", "yuv444p", "yuv420p10le", "yuv422p10le", "yuv444p10le" ]
          },
          "primaryBitDepth" : {
            "description" : "The number of bits per pixel used to represent the color information. Examples include 8, 10, and 12.",
            "type" : "integer",
            "examples" : [ 8, 10, 12 ]
          },
          "frameWidth" : {
            "description" : "The width of the video frame in pixels. Examples include 1920, 1280, and 720.",
            "type" : "integer",
            "format" : "int32",
            "examples" : [ 1920, 1280, 720 ]
          },
          "frameHeight" : {
            "description" : "The height of the video frame in pixels. Examples include 1080, 720, and 480.",
            "type" : "integer",
            "format" : "int32",
            "examples" : [ 1080, 720, 480 ]
          },
          "displayAspectRatio" : {
            "$ref" : "#/components/schemas/AspectRatio",
            "description" : "The display aspect ratio of the video."
          },
          "scanning" : {
            "$ref" : "#/components/schemas/VideoScanning",
            "description" : "The scanning type of the video, indicating whether it is progressive or interlaced."
          },
          "averageFrameRate" : {
            "$ref" : "#/components/schemas/FrameRate",
            "description" : "The average frame rate of the video in frames per second."
          },
          "durationInMillis" : {
            "description" : "The duration of the video in milliseconds. Examples include 30000 for a 30-second video.",
            "type" : "integer",
            "format" : "int64",
            "examples" : [ 30000, 60000, 120000 ]
          },
          "totalFrames" : {
            "description" : "The total number of frames in the video. Examples include 900 for a 30-second video at 30 fps.",
            "type" : "integer",
            "format" : "int32",
            "examples" : [ 900, 899, 750 ]
          },
          "size" : {
            "description" : "The total size of the video file in bytes. Examples include 10485760 for a 10 MB video file.",
            "type" : "integer",
            "format" : "int64",
            "examples" : [ 10485760, 20971520, 52428800 ]
          },
          "videoStreamSize" : {
            "description" : "The size of the video stream in bytes, excluding audio and metadata. Examples include 10485760 for a 10 MB video stream.",
            "type" : "integer",
            "format" : "int64",
            "examples" : [ 10000000, 10485760, 20971520 ]
          },
          "colorRangeName" : {
            "description" : "The name of the color range used in the video.",
            "type" : "string"
          },
          "colorSpaceName" : {
            "description" : "The name of the color space used in the video.",
            "type" : "string"
          },
          "colorTransferName" : {
            "description" : "The name of the color transfer function used in the video.",
            "type" : "string"
          },
          "colorPrimariesName" : {
            "description" : "The name of the color primaries used in the video.",
            "type" : "string"
          },
          "hdrStandardName" : {
            "description" : "The name of the HDR standard used in the video, if applicable.",
            "type" : "string"
          }
        }
      },
      "VideoScanning" : {
        "description" : "Represents the scanning information of a video, including metadata and heuristic analysis.",
        "properties" : {
          "metadata" : {
            "description" : "The scanning information extracted from the video's metadata.",
            "$ref" : "#/components/schemas/Scanning"
          },
          "heuristics" : {
            "description" : "The scanning information determined through a deep analysis of video segments.",
            "$ref" : "#/components/schemas/Scanning"
          }
        }
      },
      "Scanning" : {
        "description" : "Specifies the scanning type of a video. Examples include:\n - `PROGRESSIVE`: Video frames are displayed sequentially.\n - `INTERLACED_TOP_FIRST`: Interlaced video with the top field displayed first.\n - `INTERLACED_BOTTOM_FIRST`: Interlaced video with the bottom field displayed first.\n",
        "type" : "string",
        "enum" : [ "PROGRESSIVE", "INTERLACED_TOP_FIRST", "INTERLACED_BOTTOM_FIRST" ]
      },
      "VideoIngestion" : {
        "description" : "Details the ingestion process of a video, including its state, metadata, and quality assessment.",
        "required" : [ "ingestionState", "metadata", "qualityAssessment" ],
        "properties" : {
          "ingestionState" : {
            "$ref" : "#/components/schemas/VideoIngestionState",
            "description" : "The state of the video ingestion process."
          },
          "metadata" : {
            "$ref" : "#/components/schemas/VideoMetadata",
            "description" : "The metadata extracted during the ingestion process."
          },
          "qualityAssessment" : {
            "$ref" : "#/components/schemas/VideoQualityAssessment",
            "description" : "The quality assessment results of the ingested video."
          }
        }
      },
      "VideoIngestionState" : {
        "description" : "Represents the state of the video ingestion process, including status and progress indicators.",
        "properties" : {
          "updatedAt" : {
            "type" : "string",
            "format" : "date-time",
            "description" : "The date and time of the last update to the ingestion state."
          },
          "etaSeconds" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "The estimated time remaining for ingestion completion, in seconds.",
            "examples" : [ 0 ]
          },
          "ingestionStatus" : {
            "$ref" : "#/components/schemas/OperationStatus",
            "description" : "The current status of the ingestion process."
          },
          "webVideoAvailable" : {
            "type" : "boolean",
            "description" : "Indicates if a web-compatible video format is available.",
            "default" : false
          },
          "thumbnailsAvailable" : {
            "type" : "boolean",
            "description" : "Indicates if thumbnails have been generated for the video.",
            "default" : false
          },
          "fullFramesAvailable" : {
            "type" : "boolean",
            "description" : "Indicates if full-frame images have been generated for the video.",
            "default" : false
          },
          "videoMetadataAvailable" : {
            "type" : "boolean",
            "description" : "Indicates if the metadata for the video has been extracted and is available.",
            "default" : false
          },
          "progressPercentage" : {
            "$ref" : "#/components/schemas/Percentage",
            "description" : "The progress of the ingestion process, expressed as a percentage."
          }
        }
      },
      "VideoOutput" : {
        "description" : "Represents the output details of a video.",
        "properties" : {
          "state" : {
            "readOnly" : true,
            "$ref" : "#/components/schemas/VideoOutputState",
            "description" : "Details about the current state of the video output process, if applicable."
          }
        }
      },
      "VideoOutputState" : {
        "description" : "Provides information about the state of a video output process, including status and progress indicators.",
        "properties" : {
          "updatedAt" : {
            "readOnly" : true,
            "type" : "string",
            "format" : "date-time",
            "description" : "The date and time of the last update to the output state."
          },
          "status" : {
            "readOnly" : true,
            "$ref" : "#/components/schemas/OperationStatus",
            "description" : "The current status of the video output process."
          },
          "progressPercentage" : {
            "readOnly" : true,
            "description" : "The progress of the output process, expressed as a percentage.",
            "$ref" : "#/components/schemas/Percentage"
          },
          "errorMessage" : {
            "readOnly" : true,
            "description" : "A description of the error encountered when the status is `FAILED`.",
            "type" : "string",
            "examples" : [ "Bucket not found." ]
          }
        }
      },
      "VideoProcessing" : {
        "description" : "Represents the processing details of a video, including its state, source video, and applied processing options.",
        "properties" : {
          "processingState" : {
            "$ref" : "#/components/schemas/VideoProcessingState",
            "description" : "The current state of the video processing operation."
          },
          "sourceVideo" : {
            "$ref" : "#/components/schemas/SourceVideo",
            "description" : "Information about the source video used for processing."
          },
          "options" : {
            "$ref" : "#/components/schemas/VideoProcessingConfigurationOptions",
            "description" : "The configuration options applied to the video processing."
          }
        }
      },
      "VideoProcessingState" : {
        "description" : "Details the state of the video processing operation, including status, progress, and estimated completion time.",
        "properties" : {
          "updatedAt" : {
            "type" : "string",
            "format" : "date-time",
            "description" : "The date and time of the last update to the processing state."
          },
          "etaSeconds" : {
            "type" : "integer",
            "format" : "int32",
            "description" : "The estimated time remaining for processing completion, in seconds.",
            "examples" : [ 0 ]
          },
          "processingStatus" : {
            "$ref" : "#/components/schemas/OperationStatus",
            "description" : "The current status of the video processing operation."
          },
          "progressPercentage" : {
            "$ref" : "#/components/schemas/Percentage",
            "description" : "The progress of the processing operation, expressed as a percentage."
          }
        }
      },
      "Percentage" : {
        "description" : "A percentage value represented as an integer. Commonly used to denote progress or completion levels. E.g., 0, 50, 100.",
        "type" : "integer",
        "format" : "int32",
        "minimum" : 0,
        "maximum" : 100,
        "examples" : [ 0, 50, 100 ]
      },
      "VideoQualityAssessment" : {
        "description" : "Evaluates the overall quality of the video, including detailed metrics and an overall subjective score.",
        "properties" : {
          "metrics" : {
            "type" : "array",
            "description" : "A list of quality metrics evaluated for the video.",
            "items" : {
              "$ref" : "#/components/schemas/QualityMetric"
            }
          },
          "overallSubjectiveScore" : {
            "description" : "The overall subjective quality score of the video, on a scale from 0 to 5. Higher scores generally indicate better quality.",
            "type" : "number",
            "minimum" : 0,
            "maximum" : 5,
            "examples" : [ 2.68 ]
          }
        }
      },
      "FileName" : {
        "description" : "The name of the file, including its extension. E.g., myvideo.mp4.",
        "type" : "string",
        "pattern" : "^[a-zA-Z0-9_\\-\\.]{1,255}$",
        "minLength" : 1,
        "maxLength" : 255,
        "examples" : [ "myvideo.mp4" ]
      },
      "VideoFile" : {
        "description" : "Represents metadata about a video file, including its name, size, type, and container details.",
        "type" : "object",
        "required" : [ "name", "size", "type", "containerName", "lastModified" ],
        "properties" : {
          "name" : {
            "description" : "The name of the video file, including its extension. E.g., myvideo.mp4.",
            "readOnly" : true,
            "$ref" : "#/components/schemas/FileName"
          },
          "size" : {
            "description" : "The size of the video file in bytes. For example, 10485760 bytes for a 10 MB file.",
            "readOnly" : true,
            "type" : "integer",
            "format" : "int64",
            "examples" : [ 10485760 ]
          },
          "type" : {
            "description" : "The MIME type of the video file. E.g., video/mp4, video/quicktime, video/mp2t.",
            "readOnly" : true,
            "type" : "string",
            "examples" : [ "video/mp4", "video/quicktime", "video/mp2t" ]
          },
          "containerName" : {
            "description" : "The container format of the video file. E.g., MPEG-2 Transport Stream, MPEG-4, QuickTime.",
            "readOnly" : true,
            "type" : "string",
            "examples" : [ "MPEG-2 Transport Stream", "MPEG-4", "QuickTime" ]
          },
          "lastModified" : {
            "description" : "The last modified date and time of the video file.",
            "readOnly" : true,
            "type" : "string",
            "format" : "date-time"
          }
        }
      },
      "VideoInStatus" : {
        "description" : "Information about the upload and ingestion process of a master video.",
        "required" : [ "videoId", "upload" ],
        "properties" : {
          "videoId" : {
            "$ref" : "#/components/schemas/UUID",
            "description" : "The unique identifier of the video being processed."
          },
          "upload" : {
            "$ref" : "#/components/schemas/VideoUpload"
          },
          "ingestion" : {
            "$ref" : "#/components/schemas/VideoIngestion"
          }
        }
      },
      "VideoProcessingStatus" : {
        "description" : "Information regarding the current processing state of a video.",
        "required" : [ "videoId" ],
        "properties" : {
          "videoId" : {
            "$ref" : "#/components/schemas/UUID",
            "description" : "The unique identifier of the video being processed."
          },
          "processingState" : {
            "$ref" : "#/components/schemas/VideoProcessingState"
          }
        }
      },
      "VideoDownloadUrl" : {
        "description" : "Details about the video download URL.",
        "required" : [ "videoId", "presignedUrl", "expiresAt", "fileSize", "mimeType", "fileExtension", "suggestedFileName" ],
        "properties" : {
          "videoId" : {
            "readOnly" : true,
            "$ref" : "#/components/schemas/UUID",
            "description" : "The unique identifier of the video for which the download URL is generated."
          },
          "presignedUrl" : {
            "readOnly" : true,
            "type" : "string",
            "format" : "uri",
            "description" : "The pre-signed URL used for downloading the video."
          },
          "expiresAt" : {
            "readOnly" : true,
            "type" : "string",
            "format" : "date-time",
            "description" : "Date and time for when the pre-signed URL will expire, based on the server's clock."
          },
          "fileSize" : {
            "readOnly" : true,
            "type" : "integer",
            "format" : "int64",
            "description" : "The size of the video file in bytes."
          },
          "mimeType" : {
            "readOnly" : true,
            "type" : "string",
            "description" : "The MIME type of the video file, such as video/mp4 or video/quicktime.",
            "examples" : [ "video/mp4", "video/quicktime" ]
          },
          "fileExtension" : {
            "readOnly" : true,
            "type" : "string",
            "description" : "The file extension of the video file, such as mp4 or mov.",
            "examples" : [ "mp4", "mov" ]
          },
          "suggestedFileName" : {
            "readOnly" : true,
            "type" : "string",
            "description" : "Suggested name for the video file, including its extension. E.g., myvideo.mp4.",
            "examples" : [ "myvideo.mp4" ]
          },
          "crc32cChecksum" : {
            "readOnly" : true,
            "$ref" : "#/components/schemas/CRC32C",
            "description" : "The CRC32C checksum of the video file, if known, represented as a 32-bit unsigned integer."
          }
        }
      },
      "VideoComparisonLink" : {
        "description" : "Details about the video comparison link.",
        "required" : [ "link", "leftVideoId", "rightVideoId" ],
        "properties" : {
          "link" : {
            "readOnly" : true,
            "type" : "string",
            "format" : "uri",
            "description" : "The URL link used for comparing the source and target videos."
          },
          "leftVideoId" : {
            "readOnly" : true,
            "$ref" : "#/components/schemas/UUID",
            "description" : "The unique identifier of the left video in the comparison."
          },
          "rightVideoId" : {
            "readOnly" : true,
            "$ref" : "#/components/schemas/UUID",
            "description" : "The unique identifier of the right video in the comparison."
          }
        }
      },
      "VideoOutStatus" : {
        "description" : "Details about the most recent output operation performed on a video.",
        "required" : [ "videoId", "output" ],
        "properties" : {
          "videoId" : {
            "$ref" : "#/components/schemas/UUID",
            "description" : "The unique identifier of the video being processed."
          },
          "output" : {
            "$ref" : "#/components/schemas/VideoOutput"
          }
        }
      },
      "VideoUpload" : {
        "description" : "Metadata and details about the upload process of a master video.",
        "properties" : {
          "file" : {
            "$ref" : "#/components/schemas/VideoFile"
          },
          "uploadState" : {
            "$ref" : "#/components/schemas/VideoUploadState"
          }
        }
      },
      "VideoUploadState" : {
        "description" : "Represents the current state of a master video upload process.",
        "properties" : {
          "updatedAt" : {
            "description" : "The date and time of the most recent update to the upload state.",
            "readOnly" : true,
            "type" : "string",
            "format" : "date-time"
          },
          "uploadStatus" : {
            "description" : "The current status of the upload operation.",
            "readOnly" : true,
            "$ref" : "#/components/schemas/OperationStatus"
          },
          "progressPercentage" : {
            "description" : "The progress of the upload operation as a percentage.",
            "readOnly" : true,
            "$ref" : "#/components/schemas/Percentage"
          },
          "error" : {
            "type" : "object",
            "description" : "Details about any error encountered during the upload process, applicable when the `uploadStatus` is `FAILED`.",
            "readOnly" : true,
            "required" : [ "code", "message" ],
            "properties" : {
              "code" : {
                "description" : "The error code indicating the specific issue.",
                "readOnly" : true,
                "type" : "string"
              },
              "message" : {
                "description" : "A human-readable message explaining the error code.",
                "readOnly" : true,
                "type" : "string"
              },
              "details" : {
                "description" : "Additional details about the error, if available.",
                "readOnly" : true,
                "additionalProperties" : true
              }
            }
          }
        }
      },
      "OperationStatus" : {
        "description" : "The operational status of an upload, ingestion, processing, or output activity.",
        "type" : "string",
        "enum" : [ "INITIAL", "IN_PROGRESS", "DONE", "FAILED" ]
      },
      "PixelFormat" : {
        "description" : "The pixel format of the video. If not explicitly specified, the output video will inherit the pixel format of the source video. The pixel format defines the chroma subsampling, bit depth, and format name for encoding and processing.\n",
        "properties" : {
          "yuv" : {
            "$ref" : "#/components/schemas/ChromaSubsamplingYUV"
          },
          "bitDepth" : {
            "$ref" : "#/components/schemas/BitDepthEnum"
          },
          "name" : {
            "description" : "The name of the pixel format used in the video. Examples include yuv420p, yuv422p, and yuv444p.\nThe pixel format is closely related to chroma subsampling and determines how color information is stored.\n",
            "type" : "string",
            "readOnly" : true,
            "examples" : [ "yuv420p", "yuv422p", "yuv444p" ]
          }
        }
      },
      "ChromaSubsamplingYUV" : {
        "description" : "The chroma subsampling format used in YUV color encoding. Chroma subsampling reduces the amount of color information in favor of luminance data, optimizing for human visual perception.\nCommon formats:\n  - 4:2:0: Reduces color resolution significantly, commonly used in consumer video.\n  - 4:2:2: Maintains more color data, often used in broadcast applications.\n  - 4:4:4: Retains full color resolution, used in professional workflows.\n",
        "type" : "string",
        "enum" : [ "4:2:0", "4:2:2", "4:4:4" ],
        "default" : "4:2:0"
      },
      "BitDepthEnum" : {
        "description" : "Specifies the number of bits used to represent the color of a single pixel in a video. Higher bit depths allow for more precise color representation and greater dynamic range.\nCommon values:\n  - 8 bits: Standard for many video formats, supporting up to 256 color values per channel.\n  - 10 bits: Used for HDR and professional workflows, supporting up to 1024 color values per channel.\n  - 12 bits: Used in advanced workflows, providing up to 4096 color values per channel.\n",
        "type" : "integer",
        "enum" : [ 8, 10, 12 ],
        "default" : 8
      },
      "Error" : {
        "description" : "Represents an error response returned by the API. Provides details such as the error code, status, and any associated validation errors.\n",
        "type" : "object",
        "required" : [ "timestamp", "requestId", "requestPath", "errorCode", "message", "statusCode" ],
        "properties" : {
          "timestamp" : {
            "description" : "The date and time indicating when the error occurred.",
            "readOnly" : true,
            "type" : "string",
            "format" : "date-time"
          },
          "requestId" : {
            "description" : "The unique identifier for the request that caused the error.",
            "readOnly" : true,
            "type" : "string",
            "format" : "uuid"
          },
          "requestPath" : {
            "description" : "The API path that was accessed when the error occurred.",
            "readOnly" : true,
            "type" : "string"
          },
          "errorCode" : {
            "description" : "A code representing the specific error.",
            "readOnly" : true,
            "type" : "string"
          },
          "errorCodeEnum" : {
            "description" : "If present, the `errorCode` corresponds to one of Pixop’s documented error codes.",
            "readOnly" : true,
            "$ref" : "#/components/schemas/ErrorCodeEnum"
          },
          "message" : {
            "description" : "A human-readable message explaining the error.",
            "readOnly" : true,
            "type" : "string",
            "examples" : [ "Invalid input" ]
          },
          "statusCode" : {
            "description" : "The HTTP status code associated with the error.",
            "readOnly" : true,
            "type" : "integer",
            "examples" : [ 400 ]
          },
          "validationErrors" : {
            "description" : "A list of validation errors, if any.",
            "readOnly" : true,
            "type" : "array",
            "x-nullable" : true,
            "default" : null,
            "items" : {
              "$ref" : "#/components/schemas/ValidationError"
            }
          },
          "errorDetails" : {
            "description" : "Additional details about the error, if available.",
            "readOnly" : true,
            "additionalProperties" : true
          }
        }
      },
      "ErrorField" : {
        "description" : "The field in the request that caused the error.",
        "readOnly" : true,
        "type" : "string",
        "examples" : [ "name" ]
      },
      "ValidationError" : {
        "description" : "Represents a validation error for a specific field in the request. Provides details about the field, the invalid value, and the error message.",
        "type" : "object",
        "properties" : {
          "field" : {
            "$ref" : "#/components/schemas/ErrorField"
          },
          "value" : {
            "description" : "The invalid value provided for the field.",
            "readOnly" : true,
            "type" : "string",
            "examples" : [ 48 ]
          },
          "message" : {
            "description" : "A human-readable message explaining the validation error.",
            "readOnly" : true,
            "type" : "string",
            "examples" : [ "size must be between 1 and 47" ]
          }
        }
      },
      "ErrorCodeEnum" : {
        "type" : "string",
        "description" : "Enumerates the known error codes returned by the API.\nNot all possible codes are listed here, and additional codes may be introduced in the future.\nWhen present, these values correspond to well-defined application or HTTP errors.\n",
        "enum" : [ "UNKNOWN", "TOO_MANY_REQUESTS", "INVALID_CREDENTIALS", "ACCOUNT_LOCKED", "ACCOUNT_DISABLED", "ACCOUNT_EXPIRED", "MISSING_API_KEY", "INVALID_API_KEY", "ACCESS_DENIED", "RESOURCE_NOT_FOUND", "TEAM_NOT_FOUND", "DEFAULT_TEAM_NOT_API_ENABLED", "INVALID_INPUT", "FORBIDDEN", "VALIDATION_ERROR", "WEBHOOK_NOT_ACTIVE", "TOO_MANY_WEBHOOK_TEST_EVENTS", "CONTAINER_IS_NOT_SUPPORTED_FOR_SELECTED_CODEC", "INSUFFICIENT_PROJECTED_BALANCE_ERROR", "PROJECT_WITH_VIDEOS_CANNOT_BE_DELETED", "ACTIVE_API_KEY_CANNOT_BE_DELETED", "VIDEO_IN_OPERATION_NOT_FAILED", "VIDEO_OUT_OPERATION_NOT_FAILED", "VIDEO_ALREADY_BEING_COPIED_TO_OUTPUT_LOCATION", "ONGOING_COPY_TO_OUTPUT_NEEDS_TO_BE_RESTARTED_OR_ABANDONED", "BUCKET_NOT_FOUND", "KEY_NOT_FOUND", "HEAD_BUCKET_ERROR", "HEAD_OBJECT_ERROR", "RESOLVE_OBJECT_METADATA_ERROR", "CONTENT_RANGE_HEADER_INVALID", "CONTENT_NOT_PARTIAL_ERROR", "PARSE_CONTENT_TYPE_ERROR", "NO_CONTENT", "OBJECT_ALREADY_EXISTS", "CONFLICTING_DERIVED_VIDEO_IDS", "MAXIMUM_AMOUNT_OF_ACTIVE_API_KEYS_REACHED", "MAXIMUM_AMOUNT_OF_ACTIVE_WEBHOOKS_REACHED", "INVALID_REQUEST_BODY", "MISSING_REQUEST_BODY", "TARGET_RESOLUTION_OUT_OF_ALLOWED_RANGE", "TARGET_RESOLUTION_CANNOT_BE_LOWER_THAN_CALCULATED_ASPECT_RATIO_RESOLUTION", "INVALID_START_POSITION", "INVALID_END_POSITION", "INVALID_DATE_TIME_RANGE", "MISSING_CUSTOM_RESOLUTION", "INVALID_INPUT_COLOR_CONVERSION", "INVALID_OUTPUT_COLOR_CONVERSION", "UNSUPPORTED_CONTENT_TYPE", "CHECKSUM_MISMATCH", "VIDEO_IN_RESTART_CHECKSUM_MISMATCH", "INVALID_HTTPS_URL", "UNEXPECTED_CONTENT_RANGE", "VIDEO_PROCESSING_NOT_DONE", "WEBHOOK_RATE_LIMIT_EXCEEDED", "VIDEO_NOT_FULLY_INGESTED", "VIDEO_COMPARISON_CONFLICT", "APPRAISAL_BILLING_OUT_DATED", "AWS_MARKETPLACE_ACCESS_NOT_AVAILABLE", "TEAM_NOT_BILLED_THROUGH_AWS_MARKETPLACE", "BAD_REQUEST", "UNAUTHORIZED", "NOT_FOUND", "CONFLICT", "INTERNAL_SERVER_ERROR" ],
        "x-enumDescriptions" : {
          "UNKNOWN" : "Unknown error",
          "TOO_MANY_REQUESTS" : "Too many requests",
          "INVALID_CREDENTIALS" : "Invalid credentials",
          "ACCOUNT_LOCKED" : "Account is locked",
          "ACCOUNT_DISABLED" : "Account is disabled or API key is not active",
          "ACCOUNT_EXPIRED" : "Account has expired",
          "MISSING_API_KEY" : "Missing API key",
          "INVALID_API_KEY" : "Invalid API key",
          "ACCESS_DENIED" : "Access denied",
          "RESOURCE_NOT_FOUND" : "Resource not found",
          "TEAM_NOT_FOUND" : "Team not found. Either the team does not exist, is not apiEnabled, or the authenticated ApiUser does not have access to it.",
          "DEFAULT_TEAM_NOT_API_ENABLED" : "Default team not API enabled",
          "INVALID_INPUT" : "Invalid input",
          "FORBIDDEN" : "Unauthorized",
          "VALIDATION_ERROR" : "Validation error",
          "WEBHOOK_NOT_ACTIVE" : "Webhook not active",
          "TOO_MANY_WEBHOOK_TEST_EVENTS" : "Too many webhook test events",
          "CONTAINER_IS_NOT_SUPPORTED_FOR_SELECTED_CODEC" : "Container is not supported for selected codec",
          "INSUFFICIENT_PROJECTED_BALANCE_ERROR" : "Insufficient projected balance",
          "PROJECT_WITH_VIDEOS_CANNOT_BE_DELETED" : "Project with videos cannot be deleted",
          "ACTIVE_API_KEY_CANNOT_BE_DELETED" : "Active API key cannot be deleted",
          "VIDEO_IN_OPERATION_NOT_FAILED" : "Video-in operation not failed",
          "VIDEO_OUT_OPERATION_NOT_FAILED" : "Video-out operation not failed",
          "VIDEO_ALREADY_BEING_COPIED_TO_OUTPUT_LOCATION" : "Video is already being copied to an output location",
          "ONGOING_COPY_TO_OUTPUT_NEEDS_TO_BE_RESTARTED_OR_ABANDONED" : "Video is already being copied to an output location. Needs to be restarted or abandoned.",
          "BUCKET_NOT_FOUND" : "Bucket not found",
          "KEY_NOT_FOUND" : "The given key does not exist in the bucket",
          "HEAD_BUCKET_ERROR" : "Error in HeadBucket",
          "HEAD_OBJECT_ERROR" : "Error in HeadObject",
          "RESOLVE_OBJECT_METADATA_ERROR" : "Error resolving object metadata",
          "CONTENT_RANGE_HEADER_INVALID" : "Content-Range header invalid or not found",
          "CONTENT_NOT_PARTIAL_ERROR" : "Partial content not received",
          "PARSE_CONTENT_TYPE_ERROR" : "Error parsing content type",
          "NO_CONTENT" : "No content",
          "OBJECT_ALREADY_EXISTS" : "Object already exists",
          "CONFLICTING_DERIVED_VIDEO_IDS" : "Conflicting derived video IDs",
          "MAXIMUM_AMOUNT_OF_ACTIVE_API_KEYS_REACHED" : "Maximum amount of active API keys reached",
          "MAXIMUM_AMOUNT_OF_ACTIVE_WEBHOOKS_REACHED" : "Maximum amount of active webhooks reached",
          "INVALID_REQUEST_BODY" : "Invalid request body",
          "MISSING_REQUEST_BODY" : "Missing request body",
          "TARGET_RESOLUTION_OUT_OF_ALLOWED_RANGE" : "Target resolution out of allowed range",
          "TARGET_RESOLUTION_CANNOT_BE_LOWER_THAN_CALCULATED_ASPECT_RATIO_RESOLUTION" : "Target resolution cannot be lower than calculated aspect ratio resolution",
          "INVALID_START_POSITION" : "Invalid start position",
          "INVALID_END_POSITION" : "Invalid end position",
          "INVALID_DATE_TIME_RANGE" : "Invalid date time range",
          "MISSING_CUSTOM_RESOLUTION" : "Width and height must be provided when tag and aspectRatioTag are not",
          "INVALID_INPUT_COLOR_CONVERSION" : "Invalid input color conversion",
          "INVALID_OUTPUT_COLOR_CONVERSION" : "Invalid output color conversion",
          "UNSUPPORTED_CONTENT_TYPE" : "Unsupported content type",
          "CHECKSUM_MISMATCH" : "Checksum mismatch",
          "VIDEO_IN_RESTART_CHECKSUM_MISMATCH" : "Cannot restart a VideoInOperation that failed due to checksum mismatch without also setting skipChecksumValidation to true",
          "INVALID_HTTPS_URL" : "Invalid HTTPS URL",
          "UNEXPECTED_CONTENT_RANGE" : "Unexpected content range",
          "VIDEO_PROCESSING_NOT_DONE" : "Video processing not done",
          "WEBHOOK_RATE_LIMIT_EXCEEDED" : "Webhook rate limit exceeded",
          "VIDEO_NOT_FULLY_INGESTED" : "Video not fully ingested",
          "VIDEO_COMPARISON_CONFLICT" : "Video comparison conflict.",
          "APPRAISAL_BILLING_OUT_DATED" : "Appraisal billing out of date.",
          "AWS_MARKETPLACE_ACCESS_NOT_AVAILABLE" : "AWS Marketplace access not available.",
          "TEAM_NOT_BILLED_THROUGH_AWS_MARKETPLACE" : "Team not billed through AWS Marketplace.",
          "BAD_REQUEST" : "Standard HTTP 400 Bad Request",
          "UNAUTHORIZED" : "Standard HTTP 401 Unauthorized",
          "NOT_FOUND" : "Standard HTTP 404 Not Found",
          "CONFLICT" : "Standard HTTP 409 Conflict",
          "INTERNAL_SERVER_ERROR" : "Standard HTTP 500 Internal Server Error"
        }
      },
      "PageNumber" : {
        "description" : "The current page number in the paginated result set. Starts at 0.",
        "type" : "integer",
        "format" : "int32",
        "default" : 0,
        "minimum" : 0,
        "examples" : [ 0 ]
      },
      "PageSize" : {
        "description" : "The number of items per page in a paginated result set.",
        "type" : "integer",
        "format" : "int32",
        "default" : 10,
        "minimum" : 1,
        "maximum" : 100,
        "examples" : [ 10 ]
      },
      "Page" : {
        "description" : "Represents the pagination details for a result set.",
        "type" : "object",
        "required" : [ "pageNumber", "pageSize", "numberOfElements", "totalPages", "totalElements" ],
        "properties" : {
          "pageNumber" : {
            "$ref" : "#/components/schemas/PageNumber"
          },
          "pageSize" : {
            "$ref" : "#/components/schemas/PageSize"
          },
          "numberOfElements" : {
            "description" : "The number of items on the current page.",
            "readOnly" : true,
            "type" : "integer",
            "format" : "int32",
            "minimum" : 0
          },
          "totalPages" : {
            "description" : "The total number of pages available for the resource.",
            "readOnly" : true,
            "type" : "integer",
            "format" : "int32",
            "minimum" : 0
          },
          "totalElements" : {
            "description" : "The total number of items available for the resource.",
            "readOnly" : true,
            "type" : "integer",
            "format" : "int64",
            "minimum" : 0
          }
        }
      },
      "ApiKeysPage" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "description" : "Represents a paginated list of API keys.",
          "required" : [ "items" ],
          "properties" : {
            "items" : {
              "type" : "array",
              "description" : "The list of API keys for the current page.",
              "items" : {
                "$ref" : "#/components/schemas/ApiKey"
              }
            }
          }
        } ]
      },
      "WebhooksPage" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "description" : "Represents a paginated list of webhooks.",
          "required" : [ "items" ],
          "properties" : {
            "items" : {
              "type" : "array",
              "description" : "The list of webhooks for the current page.",
              "items" : {
                "$ref" : "#/components/schemas/Webhook"
              }
            }
          }
        } ]
      },
      "WebhookEventsPage" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "description" : "Represents a paginated list of webhook events.",
          "required" : [ "items" ],
          "properties" : {
            "items" : {
              "type" : "array",
              "description" : "The list of webhook events for the current page.",
              "items" : {
                "$ref" : "#/components/schemas/WebhookEvent"
              }
            }
          }
        } ]
      },
      "BillingPeriodsPage" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "description" : "Represents a paginated list of billing periods.",
          "required" : [ "items" ],
          "properties" : {
            "items" : {
              "type" : "array",
              "description" : "The list of billing periods for the current page.",
              "items" : {
                "$ref" : "#/components/schemas/BillingPeriod"
              }
            }
          }
        } ]
      },
      "TransactionsPage" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "description" : "Represents a paginated list of transactions, including associated billing period details and aggregated totals.",
          "required" : [ "billingPeriod", "filterByFromDateTime", "filterByToDateTime", "filterProcessingTransactionsMode", "totals", "items" ],
          "properties" : {
            "billingPeriod" : {
              "description" : "The billing period associated with the transactions.",
              "$ref" : "#/components/schemas/BillingPeriod",
              "readOnly" : true
            },
            "filterByFromDateTime" : {
              "$ref" : "#/components/schemas/FilterByFromDateTime",
              "readOnly" : true
            },
            "filterByToDateTime" : {
              "$ref" : "#/components/schemas/FilterByToDateTime",
              "readOnly" : true
            },
            "filterProcessingTransactionsMode" : {
              "$ref" : "#/components/schemas/FilterProcessingTransactionsMode",
              "readOnly" : true
            },
            "filterByVideoId" : {
              "description" : "The video ID used to filter transactions, if any.",
              "$ref" : "#/components/schemas/UUID",
              "readOnly" : true
            },
            "totals" : {
              "description" : "Aggregated totals for all filtered transactions within the billing period.",
              "$ref" : "#/components/schemas/TransactionTotals",
              "readOnly" : true
            },
            "items" : {
              "type" : "array",
              "description" : "The list of filtered transactions included on the current page.",
              "readOnly" : true,
              "items" : {
                "$ref" : "#/components/schemas/Transaction"
              }
            }
          }
        } ]
      },
      "S3InputLocationsPage" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "description" : "Represents a paginated list of S3 input locations.",
          "required" : [ "items" ],
          "properties" : {
            "items" : {
              "type" : "array",
              "description" : "The list of S3 input locations for the current page.",
              "items" : {
                "$ref" : "#/components/schemas/S3InputLocation"
              }
            }
          }
        } ]
      },
      "S3OutputLocationsPage" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "description" : "Represents a paginated list of S3 output locations.",
          "required" : [ "items" ],
          "properties" : {
            "items" : {
              "type" : "array",
              "description" : "The list of S3 output locations for the current page.",
              "items" : {
                "$ref" : "#/components/schemas/S3OutputLocation"
              }
            }
          }
        } ]
      },
      "TeamsPage" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "description" : "Represents a paginated list of teams.",
          "required" : [ "items" ],
          "properties" : {
            "items" : {
              "type" : "array",
              "description" : "The list of teams for the current page.",
              "items" : {
                "$ref" : "#/components/schemas/Team"
              }
            }
          }
        } ]
      },
      "ProjectsPage" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "description" : "Represents a paginated list of projects.",
          "required" : [ "items" ],
          "properties" : {
            "items" : {
              "type" : "array",
              "description" : "The list of projects for the current page.",
              "items" : {
                "$ref" : "#/components/schemas/Project"
              }
            }
          }
        } ]
      },
      "VideoProcessingConfigurationsPage" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "description" : "Represents a paginated list of video processing configurations.",
          "required" : [ "items" ],
          "properties" : {
            "items" : {
              "type" : "array",
              "description" : "The list of video processing configurations for the current page.",
              "items" : {
                "$ref" : "#/components/schemas/VideoProcessingConfiguration"
              }
            }
          }
        } ]
      },
      "VideosPage" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/Page"
        }, {
          "type" : "object",
          "description" : "Represents a paginated list of videos.",
          "required" : [ "items" ],
          "properties" : {
            "items" : {
              "type" : "array",
              "description" : "The list of videos for the current page.",
              "items" : {
                "$ref" : "#/components/schemas/Video"
              }
            }
          }
        } ]
      },
      "EncodingProfileEnum" : {
        "description" : "The encoding profile used in the video encoding process, controlling the media container, codec, chroma subsampling, and bitrate.\n\nIf `encodingProfile` is set, `encodingConfiguration` should not be specified.\n\nAvailable profiles:\n\n**Apple ProRes**\n- `PRORES_422_LT`: Apple ProRes 422 (LT)\n- `PRORES_422_STANDARD`: Apple ProRes 422 (Standard)\n- `PRORES_422_PROXY`: Apple ProRes 422 (Proxy)\n- `PRORES_422_HQ`: Apple ProRes 422 (HQ)\n- `PRORES_4444_STANDARD`: Apple ProRes 4444 (Standard)\n- `PRORES_4444_XQ`: Apple ProRes 4444 (XQ)\n\n**Avid DNxHD**\n- `DNXHD_36_LB`: Avid DNxHD 36 (Low Bandwidth)\n- `DNXHD_45_LB`: Avid DNxHD 45 (Low Bandwidth)\n- `DNXHD_75_LB`: Avid DNxHD 75 (Low Bandwidth)\n- `DNXHD_90_LB`: Avid DNxHD 90 (Low Bandwidth)\n- `DNXHD_115_SQ`: Avid DNxHD 115 (Standard Quality)\n- `DNXHD_120_SQ`: Avid DNxHD 120 (Standard Quality)\n- `DNXHD_145_SQ`: Avid DNxHD 145 (Standard Quality)\n- `DNXHD_240_SQ`: Avid DNxHD 240 (Standard Quality)\n- `DNXHD_290_SQ`: Avid DNxHD 290 (Standard Quality)\n- `DNXHD_175_HQ`: Avid DNxHD 175 (High Quality)\n- `DNXHD_185_HQ`: Avid DNxHD 185 (High Quality)\n- `DNXHD_220_HQ`: Avid DNxHD 220 (High Quality)\n- `DNXHD_365_HQ`: Avid DNxHD 365 (High Quality)\n- `DNXHD_440_HQ`: Avid DNxHD 440 (High Quality)\n- `DNXHD_175X_HQX`: Avid DNxHD 175X (High Quality Extended)\n- `DNXHD_185X_HQX`: Avid DNxHD 185X (High Quality Extended)\n- `DNXHD_220X_HQX`: Avid DNxHD 220X (High Quality Extended)\n- `DNXHD_365X_HQX`: Avid DNxHD 365X (High Quality Extended)\n- `DNXHD_440X_HQX`: Avid DNxHD 440X (High Quality Extended)\n- `DNXHD_350X_444`: Avid DNxHD 350X (4:4:4)\n- `DNXHD_390X_444`: Avid DNxHD 390X (4:4:4)\n- `DNXHD_440X_444`: Avid DNxHD 440X (4:4:4)\n- `DNXHD_730X_444`: Avid DNxHD 730X (4:4:4)\n- `DNXHD_880X_444`: Avid DNxHD 880X (4:4:4)\n\n**Avid DNxHR**\n- `DNXHR_LB`: Avid DNxHR LB (Low Bandwidth)\n- `DNXHR_SQ`: Avid DNxHR SQ (Standard Quality)\n- `DNXHR_HQ`: Avid DNxHR HQ (High Quality)\n- `DNXHR_HQX`: Avid DNxHR HQX (High Quality Extended)\n- `DNXHR_444`: Avid DNxHR 444 (4:4:4)\n",
        "type" : "string",
        "enum" : [ "PRORES_422_LT", "PRORES_422_STANDARD", "PRORES_422_PROXY", "PRORES_422_HQ", "PRORES_4444_STANDARD", "PRORES_4444_XQ", "DNXHD_36_LB", "DNXHD_45_LB", "DNXHD_75_LB", "DNXHD_90_LB", "DNXHD_115_SQ", "DNXHD_120_SQ", "DNXHD_145_SQ", "DNXHD_240_SQ", "DNXHD_290_SQ", "DNXHD_175_HQ", "DNXHD_185_HQ", "DNXHD_220_HQ", "DNXHD_365_HQ", "DNXHD_440_HQ", "DNXHD_175X_HQX", "DNXHD_185X_HQX", "DNXHD_220X_HQX", "DNXHD_365X_HQX", "DNXHD_440X_HQX", "DNXHD_350X_444", "DNXHD_390X_444", "DNXHD_440X_444", "DNXHD_730X_444", "DNXHD_880X_444", "DNXHR_LB", "DNXHR_SQ", "DNXHR_HQ", "DNXHR_HQX", "DNXHR_444" ]
      },
      "EncodingConfiguration" : {
        "description" : "Configuration options for encoding a video, allowing detailed control over the encoding process. \nShould not be used in conjunction with `encodingProfile`.\n",
        "type" : "object",
        "properties" : {
          "codec" : {
            "$ref" : "#/components/schemas/CodecEnum",
            "description" : "The codec used for video encoding."
          },
          "pixelFormat" : {
            "$ref" : "#/components/schemas/PixelFormat",
            "description" : "The pixel format for the encoded video."
          },
          "bitrate" : {
            "$ref" : "#/components/schemas/Bitrate",
            "description" : "The target bitrate for the video encoding."
          }
        }
      },
      "MediaContainerEnum" : {
        "description" : "The container format of the video, determining its media encapsulation. Examples include MOV (QuickTime), MXF (Material Exchange Format), MP4 (MPEG-4), and MPEGTS (MPEG-2 Transport Stream).",
        "type" : "string",
        "enum" : [ "MOV", "MXF", "MP4", "MPEGTS" ]
      },
      "CodecEnum" : {
        "description" : "The codec used for video compression and encoding. Examples include H264 (H.264 / AVC), MPEG-2 (MPEG-2 video), HEVC (H.265 / HEVC), XDCAM (Sony XDCAM HD422), and FFV1 (FF Video Codec 1).",
        "type" : "string",
        "enum" : [ "H264", "MPEG2", "HEVC", "XDCAM", "FFV1" ]
      },
      "Bitrate" : {
        "description" : "The target bitrate for video encoding, measured in bits per second. For example, 1,000,000 bps corresponds to a bitrate of 1 Mbps. If unspecified, an appropriate value is automatically computed based on the source video and target resolution.",
        "type" : "integer",
        "format" : "int64",
        "minimum" : 10000,
        "examples" : [ 1000000 ]
      },
      "QualityMetric" : {
        "description" : "Represents a quality metric for video assessment, including detailed and subjective scoring information.",
        "type" : "object",
        "properties" : {
          "name" : {
            "description" : "The name of the quality metric, such as noise, details, or colors.",
            "type" : "string",
            "examples" : [ "noise", "details", "colors" ]
          },
          "sampleMean" : {
            "description" : "The sample mean value of the quality metric. For example, 0.377.",
            "type" : "number",
            "examples" : [ 0.377 ]
          },
          "subjectiveLabel" : {
            "description" : "The subjective label of the quality metric, such as poor, good, or untenable.",
            "type" : "string",
            "examples" : [ "good", "poor", "untenable" ]
          },
          "subjectiveScore" : {
            "description" : "The subjective numerical score for the quality metric. For example, 3.726.",
            "type" : "number",
            "examples" : [ 3.726 ]
          }
        }
      },
      "StartPositionMilliseconds" : {
        "description" : "The start position of the source video for processing, in milliseconds.",
        "type" : "integer",
        "format" : "int32",
        "minimum" : 0,
        "examples" : [ 0 ]
      },
      "EndPositionMilliseconds" : {
        "description" : "The end position of the source video for processing, in milliseconds. Must be at least 1000 milliseconds.",
        "type" : "integer",
        "format" : "int32",
        "minimum" : 1000,
        "examples" : [ 10000 ]
      },
      "SourceVideo" : {
        "description" : "Defines the start and end positions of the source video used in processing.",
        "type" : "object",
        "properties" : {
          "videoId" : {
            "$ref" : "#/components/schemas/UUID"
          },
          "startPositionMilliseconds" : {
            "$ref" : "#/components/schemas/StartPositionMilliseconds"
          },
          "endPositionMilliseconds" : {
            "$ref" : "#/components/schemas/EndPositionMilliseconds"
          }
        }
      },
      "SortDirectionEnum" : {
        "description" : "Specifies the direction in which to sort the results.\n- `ASC`: ascending\n- `DESC`: descending\n",
        "type" : "string",
        "enum" : [ "ASC", "DESC" ],
        "default" : "ASC"
      },
      "SortByBaseEnum" : {
        "description" : "Specifies the field by which to sort the results.\n- `createdAt`: Sort by creation date.\n- `updatedAt`: Sort by last updated date.\n",
        "type" : "string",
        "enum" : [ "createdAt", "updatedAt" ],
        "default" : "createdAt"
      },
      "FilterModeEnum" : {
        "description" : "Defines the mode of filtering applied to results. Default is `INCLUDE`.",
        "type" : "string",
        "enum" : [ "INCLUDE", "EXCLUDE", "ONLY" ],
        "default" : "INCLUDE"
      },
      "FilterByFromDateTime" : {
        "description" : "Includes only items created at or after the specified date-time.",
        "type" : "string",
        "format" : "date-time"
      },
      "FilterByToDateTime" : {
        "description" : "Includes only items created at or before the specified date-time.",
        "type" : "string",
        "format" : "date-time"
      },
      "FilterProcessingTransactionsMode" : {
        "description" : "Filters results based on the processing transactions mode:\n- `INCLUDE`: Includes processing transactions in the result / Returns all transaction types in the result.\n- `EXCLUDE`: Excludes processing transactions from the result / Only returns utilities transactions in the result.\n- `ONLY`: Only returns processing transactions in the result.\n",
        "$ref" : "#/components/schemas/FilterModeEnum"
      },
      "FilterProcessingCreditsUsageMode" : {
        "description" : "Filters results based on the processing credits usage mode:\n- `INCLUDE`: Includes processing credits usage in the result / Returns all credits usage types in the result.\n- `EXCLUDE`: Excludes processing credits usage from the result / Only returns utilities credits usage in the result.\n- `ONLY`: Only returns processing credits usage in the result.\n",
        "$ref" : "#/components/schemas/FilterModeEnum"
      },
      "HttpsURL" : {
        "description" : "A URL that must use HTTPS and point to a publicly reachable address. Only port 443 is allowed for HTTPS URLs.\nThe following addresses are not allowed:\n- Loopback (e.g., 127.x.x.x, ::1)\n- Site-local (RFC1918) addresses (e.g., 10.x.x.x, 192.168.x.x, 172.16–31.x.x, IPv6 unique-local)\n- Link-local addresses (e.g., 169.254.x.x, fe80::/10)\n- Multicast addresses (e.g., 224.0.0.0–239.255.255.255, ff00::/8)\n\nThe server will parse the URL, resolve its host, and reject any internal or non-public address.\n",
        "type" : "string",
        "pattern" : "^https://.*",
        "minLength" : 1,
        "maxLength" : 4096,
        "examples" : [ "https://example.com/myvideo.mp4", "https://cdn.example.com/videos/video123.mp4" ]
      },
      "CRC32C" : {
        "description" : "The CRC-32C checksum of a video file, represented as a 32-bit unsigned integer, used to verify data integrity. \nFor more information, see [RFC 3720](https://www.ietf.org/rfc/rfc3720.txt).\n",
        "type" : "integer",
        "format" : "int64",
        "minimum" : 0,
        "maximum" : 4294967295,
        "examples" : [ 123456789 ]
      },
      "S3ObjectKey" : {
        "description" : "The object key of a video in an S3 bucket. For example, `src/myvideo.mp4`.",
        "type" : "string",
        "minLength" : 1,
        "maxLength" : 1024,
        "examples" : [ "src/myvideo.mp4" ]
      },
      "S3ObjectKeyPrefix" : {
        "description" : "The object key prefix for the video in the S3 bucket. \nWhen the video is copied to the bucket, its file name is prefixed with this value to create the `objectKey` for the video in the bucket. \nFor example, if `S3ObjectKeyPrefix=myoutputs` and `fileName=myvideo.mp4`, the `objectKey` becomes `myoutputs/myvideo.mp4`.\n",
        "type" : "string",
        "minLength" : 0,
        "maxLength" : 1020,
        "examples" : [ "myoutputs" ]
      }
    },
    "parameters" : {
      "IdPathParam" : {
        "name" : "id",
        "in" : "path",
        "required" : true,
        "description" : "The unique identifier for the object.",
        "schema" : {
          "$ref" : "#/components/schemas/UUID"
        }
      },
      "VideoId" : {
        "name" : "videoId",
        "in" : "path",
        "required" : true,
        "description" : "The unique identifier for the video.",
        "schema" : {
          "$ref" : "#/components/schemas/UUID"
        }
      },
      "TargetVideoId" : {
        "name" : "targetVideoId",
        "in" : "path",
        "required" : true,
        "description" : "The unique identifier for the target video.",
        "schema" : {
          "$ref" : "#/components/schemas/UUID"
        }
      },
      "SkipChecksumValidation" : {
        "name" : "skipChecksumValidation",
        "in" : "query",
        "description" : "Specifies whether to skip checksum validation for the completion of the \"video in\" operation. \nThis is useful when restarting a \"video in\" operation that was initiated with an incorrect checksum and has failed because of that.\n",
        "required" : false,
        "schema" : {
          "type" : "boolean",
          "default" : false
        }
      },
      "InputLocationId" : {
        "name" : "inputLocationId",
        "in" : "path",
        "required" : true,
        "description" : "The unique identifier for the input location.",
        "schema" : {
          "$ref" : "#/components/schemas/UUID"
        }
      },
      "OutputLocationId" : {
        "name" : "outputLocationId",
        "in" : "path",
        "required" : true,
        "description" : "The unique identifier for the output location.",
        "schema" : {
          "$ref" : "#/components/schemas/UUID"
        }
      },
      "VideoProcessingConfigurationId" : {
        "name" : "confId",
        "in" : "path",
        "required" : true,
        "description" : "The unique identifier for the video processing configuration.",
        "schema" : {
          "$ref" : "#/components/schemas/UUID"
        }
      },
      "VideoProcessingAppraisalId" : {
        "name" : "appraisalId",
        "in" : "path",
        "required" : true,
        "description" : "The unique identifier for the video processing appraisal.",
        "schema" : {
          "$ref" : "#/components/schemas/UUID"
        }
      },
      "Crc32c" : {
        "name" : "crc32c",
        "in" : "query",
        "description" : "Optional CRC32C checksum of the video file, used for data integrity verification.",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/CRC32C"
        }
      },
      "DurationMinutes" : {
        "name" : "durationMinutes",
        "in" : "query",
        "description" : "The duration, in minutes, for which the pre-signed URL will be valid.",
        "required" : false,
        "schema" : {
          "type" : "integer",
          "format" : "int32",
          "minimum" : 1,
          "maximum" : 60,
          "default" : 15,
          "examples" : [ 15 ]
        }
      },
      "MaxConcurrentConnections" : {
        "name" : "maxConcurrentConnections",
        "in" : "query",
        "description" : "The maximum number of concurrent connections allowed for this import.",
        "required" : false,
        "schema" : {
          "type" : "integer",
          "minimum" : 1,
          "maximum" : 20,
          "default" : 10
        }
      },
      "SelectTeamId" : {
        "name" : "selectTeamId",
        "in" : "query",
        "description" : "Specifies the team ID for the operation. \n- For `POST` requests, assigns the new object to the specified team.\n- For `GET` requests, retrieves data for the specified team.\nIf not provided, defaults to the ID of the default team associated with the API key.\n",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/UUID"
        }
      },
      "FilterByTeamId" : {
        "name" : "teamId",
        "in" : "query",
        "description" : "Filters results by the specified team ID.",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/UUID"
        }
      },
      "FilterByProjectId" : {
        "name" : "projectId",
        "in" : "query",
        "description" : "Filters results by the specified project ID. Includes only videos with the given project ID.",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/UUID"
        }
      },
      "FilterByFromDate" : {
        "name" : "fromDate",
        "in" : "query",
        "description" : "Filters results by creation date. Includes only items created at or after the specified date. Defaults to the creation date of the team.\nProviding a value greater than the `FilterByToDate` value results in a `400 Bad Request` response.\n",
        "required" : false,
        "schema" : {
          "type" : "string",
          "format" : "date"
        }
      },
      "FilterByToDate" : {
        "name" : "toDate",
        "in" : "query",
        "description" : "Filters results by creation date. Includes only items created at or before the specified date. Defaults to the current date.\nProviding a value smaller than the `FilterByFromDate` value results in a `400 Bad Request` response.\n",
        "required" : false,
        "schema" : {
          "type" : "string",
          "format" : "date"
        }
      },
      "FilterEndedMode" : {
        "name" : "endedMode",
        "in" : "query",
        "description" : "Filters results based on the ended mode:\n- `INCLUDE`: Includes ended billing periods in the result.\n- `EXCLUDE`: Excludes ended billing periods from the result.\n- `ONLY`: Only returns ended billing periods in the result.\n",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/FilterModeEnum"
        }
      },
      "FilterProcessingTransactionsModeParam" : {
        "name" : "processingTransactionsMode",
        "in" : "query",
        "description" : "Filters results based on the processing transactions mode:\n- `INCLUDE`: Includes processing transactions in the result / Returns all transaction types in the result.\n- `EXCLUDE`: Excludes processing transactions from the result / Only returns utilities transactions in the result.\n- `ONLY`: Only returns processing transactions in the result.\n",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/FilterProcessingTransactionsMode"
        }
      },
      "FilterProcessingCreditsUsageModeParam" : {
        "name" : "processingCreditsUsageMode",
        "in" : "query",
        "description" : "Filters results based on the processing credits usage mode:\n- `INCLUDE`: Includes processing credits usage in the result / Returns all credits usage types in the result.\n- `EXCLUDE`: Excludes processing credits usage from the result / Only returns utilities credits usage in the result.\n- `ONLY`: Only returns processing credits usage in the result.\n",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/FilterProcessingCreditsUsageMode"
        }
      },
      "FilterByVideoId" : {
        "name" : "videoId",
        "in" : "query",
        "description" : "Filters results to include only those transactions that are associated with the specified `videoId`.",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/UUID"
        }
      },
      "FilterByMasterVideoId" : {
        "name" : "masterVideoId",
        "in" : "query",
        "description" : "Filters results to include only videos derived from the specified `masterVideoId`.",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/UUID"
        }
      },
      "FilterByClipId" : {
        "name" : "clipId",
        "in" : "query",
        "description" : "Filters results to include only videos whose `clipId` matches the specified value.",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/UUID"
        }
      },
      "FilterClipMode" : {
        "name" : "clipMode",
        "in" : "query",
        "description" : "Filters results based on the clip mode:\n- `INCLUDE`: Includes clips in the result.\n- `EXCLUDE`: Excludes clips from the result.\n- `ONLY`: Only returns clips in the result.\n",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/FilterModeEnum"
        }
      },
      "FilterBuiltInMode" : {
        "name" : "builtInMode",
        "in" : "query",
        "description" : "Filters results based on the built-in mode:\n- `INCLUDE`: Includes built-in configurations in the result.\n- `EXCLUDE`: Excludes built-in configurations from the result.\n- `ONLY`: Only returns built-in configurations in the result.\n",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/FilterModeEnum"
        }
      },
      "FullIngestion" : {
        "name" : "fullIngestion",
        "in" : "query",
        "description" : "Determines the ingestion level:\n- `false`: Only metadata is ingested. Thumbnails, web video artifacts, quality assessments, and deep scanning type analysis are not performed. This mode is suitable for third-party integrations that process videos in an ephemeral manner.\n- `true`: Full ingestion is performed, including metadata, thumbnails, web video artifacts, quality assessments, and deep scanning analysis. This mode is used for videos that need to be available on the web application.\n",
        "required" : false,
        "schema" : {
          "type" : "boolean",
          "default" : false
        }
      },
      "FilterSuccessfulMode" : {
        "name" : "successfulMode",
        "in" : "query",
        "description" : "Filters results based on the successful mode:\n- `INCLUDE`: Includes successful events in the result.\n- `EXCLUDE`: Excludes successful events from the result.\n- `ONLY`: Only returns successful events in the result.\n",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/FilterModeEnum"
        }
      },
      "FilterTestMode" : {
        "name" : "testMode",
        "in" : "query",
        "description" : "Filters results based on the test mode:\n- `INCLUDE`: Includes test events in the result.\n- `EXCLUDE`: Excludes test events from the result.\n- `ONLY`: Only returns test events in the result.\n",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/FilterModeEnum"
        }
      },
      "FilterByOccurredAtFrom" : {
        "name" : "occurredAtFrom",
        "in" : "query",
        "description" : "Filters results by the occurredAt date and time.  \nIncludes only items where the occurredAt value is greater than or equal to the specified date-time (inclusive).\n",
        "required" : false,
        "schema" : {
          "type" : "string",
          "format" : "date-time"
        }
      },
      "FilterByOccurredAtUntil" : {
        "name" : "occurredAtUntil",
        "in" : "query",
        "description" : "Filters results by the occurredAt date and time.  \nIncludes only items where the occurredAt value is strictly less than the specified date-time (exclusive).\n",
        "required" : false,
        "schema" : {
          "type" : "string",
          "format" : "date-time"
        }
      },
      "VideoNameParam" : {
        "name" : "videoName",
        "in" : "query",
        "description" : "Specifies the name of the video. If not provided, the name will be derived from the source video.",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/VideoName"
        }
      },
      "VideoDescriptionParam" : {
        "name" : "videoDescription",
        "in" : "query",
        "description" : "Optional description for the video.",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/VideoDescription"
        }
      },
      "StartPositionMillisecondsParam" : {
        "name" : "startPosMs",
        "in" : "query",
        "description" : "Specifies the start position of the source video for processing, in milliseconds. Defaults to the start of the source video. \nProviding a value greater than `(source video duration or EndPositionMillisecondsParam) - 1000` results in a `400 Bad Request` response.\n",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/StartPositionMilliseconds"
        }
      },
      "EndPositionMillisecondsParam" : {
        "name" : "endPosMs",
        "in" : "query",
        "description" : "Specifies the end position of the source video for processing, in milliseconds. Defaults to the end of the source video.\n- If the specified value exceeds the source video duration, it will be adjusted to match the end of the source video.\n- Providing a value smaller than `(StartPositionMillisecondsParam + 1000)` results in a `400 Bad Request` response.\n",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/EndPositionMilliseconds"
        }
      },
      "PageNumberParam" : {
        "name" : "pageNumber",
        "in" : "query",
        "description" : "Specifies the current page number, starting at 0.",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/PageNumber"
        }
      },
      "PageSizeParam" : {
        "name" : "pageSize",
        "in" : "query",
        "description" : "Specifies the number of items per page.",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/PageSize"
        }
      },
      "SortByBaseParam" : {
        "name" : "sortBy",
        "in" : "query",
        "description" : "Specifies the field to sort the results by.",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/SortByBaseEnum"
        }
      },
      "SortDirectionParam" : {
        "name" : "sortDirection",
        "in" : "query",
        "description" : "Specifies the sort direction for the results:\n- `ASC`: ascending order.\n- `DESC`: descending order.\n",
        "required" : false,
        "schema" : {
          "$ref" : "#/components/schemas/SortDirectionEnum"
        }
      },
      "AgreementIdPathParam" : {
        "name" : "agreementId",
        "in" : "path",
        "required" : true,
        "description" : "The AWS Marketplace agreement ID.",
        "schema" : {
          "$ref" : "#/components/schemas/AwsMarketplaceAgreementId"
        }
      },
      "FilterByFromDateTimeParam" : {
        "name" : "fromDateTime",
        "in" : "query",
        "required" : false,
        "description" : "Filters results by creation date. Includes only items created at or after the specified date and time.\nProviding a value greater than the resolved `FilterByToDateTimeParam` results in a `400 Bad Request` response.\n",
        "schema" : {
          "$ref" : "#/components/schemas/FilterByFromDateTime"
        }
      },
      "FilterByToDateTimeParam" : {
        "name" : "toDateTime",
        "in" : "query",
        "required" : false,
        "description" : "Filters results by creation date. Includes only items created at or before the specified date and time.\nDefaults to the current date and time.\nProviding a value smaller than the resolved `FilterByFromDateTimeParam` results in a `400 Bad Request` response.\n",
        "schema" : {
          "$ref" : "#/components/schemas/FilterByToDateTime"
        }
      }
    },
    "requestBodies" : {
      "ApiKeyPatchRequest" : {
        "description" : "Fields of an API key that can be updated.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/ApiKeyPatch"
            }
          }
        }
      },
      "ApiKeyPostRequest" : {
        "description" : "Fields required for creating a new API key.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/ApiKeyPost"
            }
          }
        }
      },
      "WebhookPatchRequest" : {
        "description" : "Fields of a webhook that can be updated.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/WebhookPatch"
            }
          }
        }
      },
      "WebhookPostRequest" : {
        "description" : "Fields required for creating a webhook.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/WebhookPost"
            }
          }
        }
      },
      "S3InputLocationPatchRequest" : {
        "description" : "Fields of an S3 input location that can be updated.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/S3InputLocationPatch"
            }
          }
        }
      },
      "S3InputLocationPostRequest" : {
        "description" : "Fields required for creating a new S3 input location.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/S3InputLocationPost"
            }
          }
        }
      },
      "S3OutputLocationPatchRequest" : {
        "description" : "Fields of an S3 output location that can be updated.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/S3OutputLocationPatch"
            }
          }
        }
      },
      "S3OutputLocationPostRequest" : {
        "description" : "Fields required for creating a new S3 output location.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/S3OutputLocationPost"
            }
          }
        }
      },
      "ProjectPatchRequest" : {
        "description" : "Fields of a project that can be updated.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/ProjectPatch"
            }
          }
        }
      },
      "ProjectPostRequest" : {
        "description" : "Fields required for creating a new project.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/ProjectPost"
            }
          }
        }
      },
      "VideoPatchRequest" : {
        "description" : "Fields of a video that can be updated.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/VideoPatch"
            }
          }
        }
      },
      "VideoDeleteRequest" : {
        "description" : "A list of derived video IDs expected to be deleted. An empty list indicates no derived videos are expected to be deleted.",
        "required" : false,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/ListOfUUIDs"
            }
          }
        }
      },
      "VideoPostRequest" : {
        "description" : "Fields required for creating a new video.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/VideoPost"
            }
          }
        }
      },
      "CreateMasterVideoFromHttpsRequest" : {
        "description" : "Parameters required for importing a video from an HTTPS URL into the Pixop Platform.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/CreateMasterVideoFromHttps"
            }
          }
        }
      },
      "CreateMasterVideoFromS3Request" : {
        "description" : "Parameters required for importing a video from an S3 bucket into the Pixop Platform.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/CreateMasterVideoFromS3"
            }
          }
        }
      },
      "CreateMasterVideoFromS3BucketRequest" : {
        "description" : "Parameters required for importing a video from a specified S3 bucket into the Pixop Platform.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/CreateMasterVideoFromS3Bucket"
            }
          }
        }
      },
      "CopyVideoToS3Request" : {
        "description" : "Parameters required for exporting a video from the Pixop Platform into an S3 bucket.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "type" : "object",
              "required" : [ "objectKeyPrefix" ],
              "properties" : {
                "objectKeyPrefix" : {
                  "$ref" : "#/components/schemas/S3ObjectKeyPrefix"
                }
              }
            }
          }
        }
      },
      "CopyVideoToS3BucketRequest" : {
        "description" : "Parameters required for exporting a video from the Pixop Platform into a specified S3 bucket.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "type" : "object",
              "required" : [ "s3Bucket", "objectKeyPrefix" ],
              "properties" : {
                "s3Bucket" : {
                  "$ref" : "#/components/schemas/S3BucketWithAccessKeys"
                },
                "objectKeyPrefix" : {
                  "$ref" : "#/components/schemas/S3ObjectKeyPrefix"
                }
              }
            }
          }
        }
      },
      "VideoProcessingConfigurationRequest" : {
        "description" : "Request payload for creating a `VideoProcessingConfiguration` object, specifying the desired processing settings.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/VideoProcessingConfigurationPost"
            }
          }
        }
      },
      "VideoProcessingRequest" : {
        "description" : "Request payload for processing a video, defining the configuration options and processing filters to apply.",
        "required" : true,
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/VideoProcessingConfigurationOptions"
            }
          }
        }
      }
    },
    "responses" : {
      "ApiKeyResponse" : {
        "description" : "Successfully retrieved API key details.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/ApiKey"
            }
          }
        }
      },
      "ApiKeysPageResponse" : {
        "description" : "Successfully retrieved the paginated list of API keys.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/ApiKeysPage"
            }
          }
        }
      },
      "WebhookPublicKeyResponse" : {
        "description" : "Successfully retrieved webhook public key details.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/WebhookPublicKey"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "WebhookPublicKeysResponse" : {
        "description" : "Successfully retrieved the list of webhook public keys.",
        "content" : {
          "application/json" : {
            "schema" : {
              "type" : "array",
              "items" : {
                "$ref" : "#/components/schemas/WebhookPublicKey"
              }
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "WebhookResponse" : {
        "description" : "Successfully retrieved webhook details.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/Webhook"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "WebhooksPageResponse" : {
        "description" : "Successfully retrieved the paginated list of webhooks.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/WebhooksPage"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "WebhookEventResponse" : {
        "description" : "Successfully retrieved webhook event details.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/WebhookEvent"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "WebhookEventsPageResponse" : {
        "description" : "Successfully retrieved the paginated list of webhook events.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/WebhookEventsPage"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "AccountResponse" : {
        "description" : "Successfully retrieved account information.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/Account"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "FinancialDetailsResponse" : {
        "description" : "Successfully retrieved financial details.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/FinancialDetails"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "BillingPeriodResponse" : {
        "description" : "Successfully retrieved billing period information.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/BillingPeriod"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "BillingPeriodsPageResponse" : {
        "description" : "Successfully retrieved the paginated list of billing periods.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/BillingPeriodsPage"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "TransactionsPageResponse" : {
        "description" : "Successfully retrieved the paginated list of transactions.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/TransactionsPage"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "AwsMarketplaceSubscriptionResponse" : {
        "description" : "Successfully retrieved AWS Marketplace subscription details.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/AwsMarketplaceSubscription"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "AwsMarketplaceSubscriptionsPageResponse" : {
        "description" : "Successfully retrieved the paginated list of AWS Marketplace subscriptions.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/AwsMarketplaceSubscriptionsPage"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "CreditsUsagePageResponse" : {
        "description" : "Successfully retrieved paginated Pixop Credits usage records.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/CreditsUsagePage"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "TeamResponse" : {
        "description" : "Successfully retrieved team details.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/Team"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "TeamsPageResponse" : {
        "description" : "Successfully retrieved the paginated list of teams associated with the provided API key.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/TeamsPage"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "ProjectResponse" : {
        "description" : "Successfully retrieved project details.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/Project"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "ProjectsPageResponse" : {
        "description" : "Successfully retrieved the paginated list of projects.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/ProjectsPage"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "S3InputLocationResponse" : {
        "description" : "Successfully retrieved details of the S3 input location.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/S3InputLocation"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "S3InputLocationsPageResponse" : {
        "description" : "Successfully retrieved the paginated list of S3 input locations.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/S3InputLocationsPage"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "S3OutputLocationResponse" : {
        "description" : "Successfully retrieved details of the S3 output location.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/S3OutputLocation"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "S3OutputLocationsPageResponse" : {
        "description" : "Successfully retrieved the paginated list of S3 output locations.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/S3OutputLocationsPage"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "VideoInStatusResponse" : {
        "description" : "Successfully retrieved the status of a master video upload and ingestion.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/VideoInStatus"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "VideoProcessingStatusResponse" : {
        "description" : "Successfully retrieved the status of video processing.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/VideoProcessingStatus"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "VideoDownloadUrlResponse" : {
        "description" : "Successfully generated and returned the download URL.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/VideoDownloadUrl"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "VideoComparisonLinkResponse" : {
        "description" : "Successfully retrieved the video comparison link.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/VideoComparisonLink"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "VideoOutStatusResponse" : {
        "description" : "Successfully retrieved the status of the video output.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/VideoOutStatus"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "VideoResponse" : {
        "description" : "Successfully retrieved video details.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/Video"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "VideosPageResponse" : {
        "description" : "Successfully retrieved the paginated list of video items.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/VideosPage"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "DeletedVideoIdsResponse" : {
        "description" : "Successfully deleted the video, and retrieved the list of video IDs that were deleted.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/ListOfUUIDs"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "VideoProcessingConfigurationResponse" : {
        "description" : "Successfully retrieved video processing configuration details.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/VideoProcessingConfiguration"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "VideoProcessingConfigurationsPageResponse" : {
        "description" : "Successfully retrieved the paginated list of video processing configuration items.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/VideoProcessingConfigurationsPage"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "VideoProcessingAppraisalResponse" : {
        "description" : "Successfully retrieved video processing appraisal details.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/VideoProcessingAppraisal"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "BadRequest" : {
        "description" : "Invalid request. Inspect the details of the error for more information.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/Error"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "Unauthorized" : {
        "description" : "Authentication failed. Missing or invalid `X-API-Key` or basic authentication credentials.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/Error"
            }
          }
        },
        "headers" : {
          "WWW-Authenticate" : {
            "description" : "The authentication method that should be used to gain access to the resource.",
            "schema" : {
              "type" : "string"
            }
          },
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "Forbidden" : {
        "description" : "Access denied. You do not have the necessary permissions to access this resource.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/Error"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "NotFound" : {
        "description" : "The requested resource could not be found.",
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "NoContent" : {
        "description" : "Success. No content to return.",
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "Conflict" : {
        "description" : "Conflict detected. The request could not be processed due to conflicting data.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/Error"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      },
      "TooManyRequests" : {
        "description" : "Too Many Requests. The rate limit for this resource has been exceeded.",
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          },
          "X-RateLimit-Retry-After" : {
            "$ref" : "#/components/headers/X-RateLimit-Retry-After"
          }
        },
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/Error"
            }
          }
        }
      },
      "InternalServerError" : {
        "description" : "An unexpected error occurred on the server.",
        "content" : {
          "application/json" : {
            "schema" : {
              "$ref" : "#/components/schemas/Error"
            }
          }
        },
        "headers" : {
          "X-RateLimit-Limit" : {
            "$ref" : "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining" : {
            "$ref" : "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset" : {
            "$ref" : "#/components/headers/X-RateLimit-Reset"
          }
        }
      }
    },
    "headers" : {
      "X-RateLimit-Limit" : {
        "description" : "The maximum number of requests allowed per minute.",
        "schema" : {
          "type" : "integer"
        }
      },
      "X-RateLimit-Remaining" : {
        "description" : "The number of requests remaining in the current rate limit window.",
        "schema" : {
          "type" : "integer"
        }
      },
      "X-RateLimit-Reset" : {
        "description" : "The number of seconds until the current rate limit window resets.",
        "schema" : {
          "type" : "integer"
        }
      },
      "X-RateLimit-Retry-After" : {
        "description" : "The number of seconds to wait before retrying a request that failed due to rate limits.",
        "schema" : {
          "type" : "integer"
        }
      }
    },
    "securitySchemes" : {
      "basic_auth" : {
        "type" : "http",
        "scheme" : "basic",
        "description" : "Basic HTTP authentication using an email and password. The `Authorization` header must be set as:\n  - `Authorization: Basic <base64-encoded-credentials>`\nWhere `<base64-encoded-credentials>` is the Base64 encoding of `email:password`.\nExample:\n  - `Authorization: Basic dXNlckBleGFtcGxlLmNvbTpwYXNzd29yZA==`\n"
      },
      "api_key" : {
        "type" : "apiKey",
        "name" : "X-API-Key",
        "in" : "header",
        "description" : "API key authentication using the `X-API-Key` header. \nProvide the API key as part of the request headers:\n  - `X-API-Key: <your-api-key>`\nExample:\n  - `X-API-Key: gTF1d6iQKyu8gzXO4pNCt10WlTjhKzrWtUm1wwTGuMA`\n"
      }
    }
  }
}