openapi: 3.1.0
info:
  title: Cloudinary Environment Config API
  version: 0.5.5
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
  contact:
    name: Cloudinary Support
    email: support@cloudinary.com
    url: https://support.cloudinary.com
  termsOfService: https://cloudinary.com/tou
servers:
  - url: https://{region}.cloudinary.com
    description: Regional API endpoints for optimal performance.
    variables:
      region:
        default: api
        description: Regional endpoint selection
        enum:
          - api
          - api-eu
          - api-ap
  - url: https://{host}
    description: Custom domains for enterprise deployments.
    variables:
      host:
        default: api.cloudinary.com
        description: API host domain.
security:
  - basicAuth: []
  - oauth2:
      - asset_management
      - upload
tags:
  - name: upload_presets
    description: Enables you to manage upload presets.
  - name: upload_mappings
    description: Enables you to manage upload mappings
  - name: moderations
    description: Enables you to manage moderation definitions.
  - name: streaming_profiles
    description: Enables you to manage streaming profiles
  - name: transformations
    description: Enables you to manage named and unnamed transformations.
  - name: triggers
    description: Enables you to manage event triggers and notifications.
paths:
  /v1_1/{cloud_name}/transformations:
    get:
      x-speakeasy-mcp:
        name: list-transformations
        scopes:
          - admin
        title: List Transformations
        readOnlyHint: true
        idempotentHint: true
      summary: Lists all transformation definitions in your account, including named transformations
      description: |
        Retrieves a list of all transformations, which can be filtered to show either only named or unnamed transformations.
      tags:
        - transformations
      operationId: listTransformations
      parameters:
        - $ref: '#/components/parameters/cloud_name'
        - name: named
          in: query
          required: false
          schema:
            type: boolean
          description: Whether to return only named (`true`) or unnamed (`false`) transformations. If this parameter isn't included, both named and unnamed transformations will be returned.
        - $ref: '#/components/parameters/max_results_query'
        - $ref: '#/components/parameters/next_cursor_query'
      responses:
        '200':
          description: Transformations retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/transformation_list_response'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
  /v1_1/{cloud_name}/transformations/{transformation}:
    get:
      x-speakeasy-mcp:
        name: get-transformation-details
        scopes:
          - admin
        title: Get Transformation Details
        readOnlyHint: true
        idempotentHint: true
      summary: Retrieves details of a specific transformation
      description: |
        Retrieves details for a named or unnamed transformation.
      tags:
        - transformations
      operationId: getTransformation
      parameters:
        - $ref: '#/components/parameters/cloud_name'
        - $ref: '#/components/parameters/transformation'
      responses:
        '200':
          description: Transformation details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/transformation_info'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '404':
          description: Transformation not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
    post:
      x-speakeasy-mcp:
        name: create-transformation
        scopes:
          - admin
        title: Create Transformation
      summary: Creates a new named transformation by assigning a custom name to a set of transformation parameters
      description: |
        Creates a new named transformation with the given name and transformation string.
      tags:
        - transformations
      operationId: createTransformation
      parameters:
        - $ref: '#/components/parameters/cloud_name'
        - $ref: '#/components/parameters/transformation_name'
      requestBody:
        description: The named transformation definition.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_request'
      responses:
        '200':
          description: Transformation created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/message_response'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '409':
          description: Conflict (transformation already exists)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
    put:
      x-speakeasy-mcp:
        name: update-transformation
        scopes:
          - admin
        title: Update Transformation
        idempotentHint: true
      summary: Updates the definition of an existing transformation
      description: |
        Updates a named or unnamed transformation.
      tags:
        - transformations
      operationId: updateTransformation
      parameters:
        - $ref: '#/components/parameters/cloud_name'
        - $ref: '#/components/parameters/transformation'
      requestBody:
        description: The updated transformation definition.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_request'
      responses:
        '200':
          description: Transformation updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/message_response'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
    delete:
      x-speakeasy-mcp:
        name: delete-transformation
        scopes:
          - admin
        title: Delete Transformation
        destructiveHint: true
        idempotentHint: true
      summary: Deletes a named transformation from your account
      description: |
        Delete a named or unnamed transformation. Optionally invalidate derived resources generated using the named transformation.
      tags:
        - transformations
      operationId: deleteTransformation
      parameters:
        - $ref: '#/components/parameters/cloud_name'
        - $ref: '#/components/parameters/transformation'
        - name: invalidate
          in: query
          required: false
          schema:
            type: boolean
          description: Invalidate derived resources generated using the deleted transformation from CDN.
          example: true
      responses:
        '200':
          description: Transformation deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/message_response'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '404':
          description: Transformation not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
  /v1_1/{cloud_name}/upload_presets:
    parameters:
      - $ref: '#/components/parameters/cloud_name'
    post:
      x-speakeasy-mcp:
        name: create-upload-preset
        scopes:
          - builder
        title: Create Upload Preset
      operationId: createUploadPreset
      summary: Creates a new upload preset with specified configuration settings
      tags:
        - upload_presets
      parameters: []
      responses:
        '200':
          description: upload preset created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/upload_preset_create_response'
        '400':
          description: request error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '409':
          description: preset exists error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
      requestBody:
        description: The upload preset configuration.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/upload_preset_input'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/upload_preset_input'
    get:
      x-speakeasy-mcp:
        name: list-upload-presets
        scopes:
          - builder
        title: List Upload Presets
        readOnlyHint: true
        idempotentHint: true
      operationId: listUploadPresets
      summary: Lists all upload presets configured in the account
      tags:
        - upload_presets
      parameters:
        - name: order_by
          in: query
          required: false
          description: The field to sort presets by.
          schema:
            type: string
            enum:
              - name
              - id
              - created_at
        - $ref: '#/components/parameters/direction'
        - $ref: '#/components/parameters/max_results_query'
        - $ref: '#/components/parameters/next_cursor_query'
      responses:
        '200':
          description: upload presets retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/upload_preset_list_response'
        '400':
          description: request error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
  /v1_1/{cloud_name}/upload_presets/{name}:
    parameters:
      - $ref: '#/components/parameters/cloud_name'
      - name: name
        in: path
        required: true
        description: The name of the upload preset.
        schema:
          type: string
    get:
      x-speakeasy-mcp:
        name: get-upload-preset-details
        scopes:
          - builder
        title: Get Upload Preset Details
        readOnlyHint: true
        idempotentHint: true
      operationId: getUploadPreset
      summary: Retrieves details of a single upload preset
      tags:
        - upload_presets
      responses:
        '200':
          description: upload preset retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/upload_preset_detail'
        '400':
          description: request error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '404':
          description: preset not found error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
    put:
      x-speakeasy-mcp:
        name: update-upload-preset
        scopes:
          - builder
        title: Update Upload Preset
        idempotentHint: true
      operationId: updateUploadPreset
      summary: Updates an existing upload preset's configuration settings
      tags:
        - upload_presets
      parameters: []
      responses:
        '200':
          description: upload preset updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/upload_preset_mutation_response'
        '400':
          description: request error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '404':
          description: preset not found error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
      requestBody:
        description: The updated upload preset configuration.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/upload_preset_input'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/upload_preset_input'
    delete:
      x-speakeasy-mcp:
        name: delete-upload-preset
        scopes:
          - builder
        title: Delete Upload Preset
        destructiveHint: true
        idempotentHint: true
      operationId: deleteUploadPreset
      summary: Deletes an upload preset from the account
      tags:
        - upload_presets
      responses:
        '200':
          description: upload preset deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/upload_preset_mutation_response'
        '400':
          description: request error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '404':
          description: preset not found error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
  /v1_1/{cloud_name}/upload_mappings:
    parameters:
      - $ref: '#/components/parameters/cloud_name'
    get:
      x-speakeasy-mcp:
        name: list-upload-mappings
        scopes:
          - builder
        title: List Upload Mappings
        readOnlyHint: true
        idempotentHint: true
      operationId: listUploadMappings
      summary: Retrieves a list of all upload mapping rules configured in your Cloudinary product environment
      description: |
        Returns a list of all upload mappings defined for your account.
        Upload mappings allow you to map an upload preset to a specific folder and URL template.
      tags:
        - upload_mappings
      parameters:
        - name: folder
          in: query
          required: false
          description: Get details of a specific mapping by folder name
          schema:
            type: string
        - $ref: '#/components/parameters/next_cursor_query'
        - $ref: '#/components/parameters/max_results_query'
      responses:
        '200':
          description: Upload mappings retrieved successfully
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/upload_mapping_list_response'
                  - $ref: '#/components/schemas/upload_mapping'
        '400':
          description: Validation error (e.g. invalid next_cursor)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: Authentication error - Invalid API key or secret
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '404':
          description: Mapping not found for the specified folder
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
    post:
      x-speakeasy-mcp:
        name: create-upload-mapping
        scopes:
          - builder
        title: Create Upload Mapping
      operationId: createUploadMapping
      summary: Creates a new upload mapping
      description: Creates a new upload mapping for the specified folder
      tags:
        - upload_mappings
      requestBody:
        description: The upload mapping folder and URL template.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/upload_mapping_input'
      responses:
        '200':
          description: Upload mapping created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/upload_mapping_create_response'
              example:
                message: created
                folder: my_folder
                external_id: 1bce826e-ec50-45c6-9f86-c858948c7158
        '400':
          description: Validation error (e.g. invalid template format)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: Authentication error - Invalid API key or secret
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '409':
          description: A mapping for this folder already exists
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
    put:
      x-speakeasy-mcp:
        name: update-upload-mapping
        scopes:
          - builder
        title: Update Upload Mapping
        idempotentHint: true
      operationId: updateUploadMapping
      summary: Updates an existing upload mapping by changing its remote URL template for a given folder
      description: Updates the URL template for an existing folder mapping
      tags:
        - upload_mappings
      requestBody:
        description: The updated upload mapping folder and URL template.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/upload_mapping_input'
      responses:
        '200':
          description: Upload mapping updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/upload_mapping_mutation_response'
              example:
                message: updated
                external_id: 1bce826e-ec50-45c6-9f86-c858948c7158
        '400':
          description: Validation error (e.g. invalid template format)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: Authentication error - Invalid API key or secret
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '404':
          description: No mapping found for the specified folder
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
    delete:
      x-speakeasy-mcp:
        name: delete-upload-mapping
        scopes:
          - builder
        title: Delete Upload Mapping
        destructiveHint: true
        idempotentHint: true
      operationId: deleteUploadMapping
      summary: Deletes a folder upload mapping
      description: Permanently deletes the upload mapping for the specified folder
      tags:
        - upload_mappings
      parameters:
        - name: folder
          in: query
          required: true
          description: The folder name of the mapping to delete
          schema:
            type: string
      responses:
        '200':
          description: Upload mapping deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/upload_mapping_mutation_response'
              example:
                message: deleted
                external_id: 1bce826e-ec50-45c6-9f86-c858948c7158
        '401':
          description: Authentication error - Invalid API key or secret
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '404':
          description: No mapping found for the specified folder
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
  /v1_1/{cloud_name}/upload_mappings/replace:
    parameters:
      - $ref: '#/components/parameters/cloud_name'
    put:
      operationId: replaceUploadMappings
      summary: Replaces all upload mappings
      tags:
        - upload_mappings
      responses:
        '200':
          description: upload mappings replaced
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/message_response'
              example:
                message: replaced
        '400':
          description: validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
      requestBody:
        description: The complete set of upload mappings to replace existing ones.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/replace_upload_mappings_request'
  /v1_1/{cloud_name}/triggers:
    parameters:
      - $ref: '#/components/parameters/cloud_name'
    get:
      x-speakeasy-mcp:
        name: list-triggers
        scopes:
          - admin
        title: List Triggers
        readOnlyHint: true
        idempotentHint: true
      operationId: listTrigger
      summary: Lists all webhook notification triggers configured for your product environment
      description: |
        Retrieves a list of all event triggers and notifications within your product environment.
      tags:
        - triggers
      parameters:
        - name: event_type
          in: query
          required: false
          description: The type of event that will trigger the notification response.
          schema:
            $ref: '#/components/schemas/event_type'
      responses:
        '200':
          description: Triggers retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/trigger_list_response'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
              example:
                error:
                  message: Invalid value a for parameter event_type
        '401':
          description: Authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
              example:
                error:
                  message: Invalid credentials
    post:
      x-speakeasy-mcp:
        name: create-trigger
        scopes:
          - admin
        title: Create Trigger
      operationId: createTrigger
      summary: Creates a new notification trigger (webhook) by specifying an event type and a destination
      description: |
        Creates a new trigger.
        Your product environment supports triggers up to a maximum determined by multiplying the number of unique event types by the limit of 30 notification URLs.
      tags:
        - triggers
      requestBody:
        description: The webhook notification trigger to create.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/create_trigger_request'
      responses:
        '201':
          description: Trigger created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/trigger_info'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
              example:
                error:
                  message: limit_reached
        '401':
          description: Authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
              example:
                error:
                  message: Invalid credentials
        '409':
          description: Validation error - Record already exists
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
              example:
                error:
                  message: record_already_exists
  /v1_1/{cloud_name}/triggers/{id}:
    parameters:
      - $ref: '#/components/parameters/cloud_name'
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: The ID of the trigger.
        example: c2c822dd1aa41ba6d81299df8b5ae949
    put:
      x-speakeasy-mcp:
        name: update-trigger
        scopes:
          - admin
        title: Update Trigger
        idempotentHint: true
      operationId: updateTrigger
      summary: Updates the callback URL of an existing webhook trigger in your Cloudinary account
      description: Updates a notification URL for a trigger.
      tags:
        - triggers
      requestBody:
        description: The updated trigger configuration.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/update_trigger_request'
      responses:
        '200':
          description: Trigger updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/message_response'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
              example:
                error:
                  message: missing_attributes
        '401':
          description: Authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
              example:
                error:
                  message: Invalid credentials
        '404':
          description: No trigger found with the specified id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
              example:
                error:
                  message: record_not_found
    delete:
      x-speakeasy-mcp:
        name: delete-trigger
        scopes:
          - admin
        title: Delete Trigger
        destructiveHint: true
        idempotentHint: true
      operationId: deleteTrigger
      summary: Deletes a notification trigger
      description: Deletes a trigger.
      tags:
        - triggers
      responses:
        '200':
          description: Trigger deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/message_response'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
              example:
                error:
                  message: invalid_or_malformed_attribute
        '401':
          description: Authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
              example:
                error:
                  message: Invalid credentials
        '404':
          description: No trigger found with the specified id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
              example:
                error:
                  message: record_not_found
  /v1_1/{cloud_name}/triggers/{id}/test:
    parameters:
      - $ref: '#/components/parameters/cloud_name'
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: The ID of the trigger to test.
        example: c2c822dd1aa41ba6d81299df8b5ae949
    post:
      x-speakeasy-mcp:
        name: test-trigger
        scopes:
          - admin
        title: Test Trigger Filter
        readOnlyHint: true
        idempotentHint: true
      operationId: testTrigger
      summary: Tests an existing trigger's filter against sample data
      description: |
        Evaluates an existing trigger's filter against provided sample data.
        Use this endpoint to verify that a trigger's filter will match expected events.
      tags:
        - triggers
      requestBody:
        description: The test data for the trigger.
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/test_trigger_request'
      responses:
        '200':
          description: Test completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/test_trigger_response'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
              examples:
                invalid_sample_data:
                  value:
                    error:
                      message: invalid_sample_data_json
        '401':
          description: Authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
              example:
                error:
                  message: Invalid credentials
        '404':
          description: No trigger found with the specified id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
              example:
                error:
                  message: record_not_found
  /v1_1/{cloud_name}/streaming_profiles:
    parameters:
      - $ref: '#/components/parameters/cloud_name'
    post:
      x-speakeasy-mcp:
        name: create-streaming-profile
        scopes:
          - builder
        title: Create Streaming Profile
      operationId: createStreamingProfile
      summary: Creates a new adaptive streaming profile in your Cloudinary account
      tags:
        - streaming_profiles
      parameters: []
      responses:
        '200':
          description: Streaming profile created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/streaming_profile_data_response'
        '400':
          description: Invalid request error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: Authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '409':
          description: Profile name already exists
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
      requestBody:
        description: The streaming profile configuration.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/streaming_profile_create'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/streaming_profile_create'
    get:
      x-speakeasy-mcp:
        name: list-streaming-profiles
        scopes:
          - builder
        title: List Streaming Profiles
        readOnlyHint: true
        idempotentHint: true
      operationId: getStreamingProfiles
      summary: Lists all adaptive streaming profiles (both built-in and custom) defined in your Cloudinary account
      tags:
        - streaming_profiles
      parameters: []
      responses:
        '200':
          description: Streaming profiles retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/streaming_profile_list_response'
        '401':
          description: Authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
  /v1_1/{cloud_name}/streaming_profiles/{name}:
    parameters:
      - $ref: '#/components/parameters/cloud_name'
      - name: name
        in: path
        required: true
        schema:
          type: string
        description: The name of the streaming profile.
    get:
      x-speakeasy-mcp:
        name: get-streaming-profile
        scopes:
          - builder
        title: Get Streaming Profile
        readOnlyHint: true
        idempotentHint: true
      operationId: getStreamingProfile
      summary: Retrieves the details of a single adaptive streaming profile by its name
      tags:
        - streaming_profiles
      responses:
        '200':
          description: Streaming profile retrieved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/streaming_profile_data_response'
        '401':
          description: Authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '404':
          description: Profile not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
    put:
      x-speakeasy-mcp:
        name: update-streaming-profile
        scopes:
          - builder
        title: Update Streaming Profile
        idempotentHint: true
      operationId: updateStreamingProfile
      summary: Modifies an existing adaptive streaming profile's configuration
      tags:
        - streaming_profiles
      parameters: []
      responses:
        '200':
          description: Streaming profile updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/streaming_profile_update_response'
        '400':
          description: Invalid request error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: Authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '404':
          description: Profile not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
      requestBody:
        description: The updated streaming profile configuration.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/streaming_profile_update'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/streaming_profile_update'
    delete:
      x-speakeasy-mcp:
        name: delete-streaming-profile
        scopes:
          - builder
        title: Delete Streaming Profile
        destructiveHint: true
        idempotentHint: true
      operationId: deleteStreamingProfile
      summary: Delete custom streaming profile or revert built-in profile to the original settings
      tags:
        - streaming_profiles
      responses:
        '200':
          description: Streaming profile deleted or reverted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/message_response'
        '400':
          description: Cannot delete predefined profile
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '401':
          description: Authentication error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
        '404':
          description: Profile not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_error'
components:
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
    oauth2:
      type: oauth2
      description: OAuth2 Authorization Code flow for user authentication
      flows:
        authorizationCode:
          authorizationUrl: https://oauth.cloudinary.com/oauth2/auth
          tokenUrl: https://oauth.cloudinary.com/oauth2/token
          scopes:
            asset_management: Allows managing assets, including reading, updating, and deleting.
            upload: Allows uploading new assets.
  parameters:
    cloud_name:
      name: cloud_name
      in: path
      required: true
      schema:
        type: string
      description: The cloud name of your product environment.
      example: my_cloud
    max_results_query:
      name: max_results
      in: query
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 500
        default: 10
      description: The maximum number of results to return. Default is 10.
    next_cursor_query:
      name: next_cursor
      in: query
      required: false
      schema:
        type: string
      description: The cursor for pagination. Use the next_cursor value from a previous response to get the next page of results.
    transformation:
      name: transformation
      in: path
      required: true
      schema:
        type: string
      description: |
        The transformation identifier. Can be either a named transformation (e.g., 'small_profile_thumbnail') or a transformation string (e.g., 'w_100,h_150,c_fill,g_auto').
      examples:
        named:
          summary: Named transformation
          value: small_profile_thumbnail
        string:
          summary: Transformation string
          value: w_100,h_150,c_fill,g_auto
    transformation_name:
      name: transformation
      in: path
      required: true
      schema:
        type: string
      description: The valid transformation name to create.
      example: small_profile_thumbnail
    direction:
      name: direction
      in: query
      required: false
      schema:
        $ref: '#/components/schemas/direction_enum'
      description: The sort direction for the results. Default is "desc".
  schemas:
    transformation_summary:
      type: object
      properties:
        name:
          type: string
          example: t_small_profile_thumbnail
        allowed_for_strict:
          type: boolean
          example: true
        used:
          type: boolean
          example: false
        named:
          type: boolean
          example: true
    transformation_list_response:
      type: object
      properties:
        transformations:
          type: array
          items:
            $ref: '#/components/schemas/transformation_summary'
        next_cursor:
          type:
            - string
            - 'null'
    api_error:
      type: object
      properties:
        error:
          type: object
          properties:
            message:
              type: string
          required:
            - message
      required:
        - error
    transformation_info:
      type: object
      properties:
        name:
          type: string
          example: small_profile_thumbnail
        allowed_for_strict:
          type: boolean
          description: |
            Whether to allow this named transformation when [strict transformations](https://cloudinary.com/documentation/control_access_to_media#strict_transformations) are enabled.
          example: true
        used:
          type: boolean
          example: true
        named:
          type: boolean
          example: true
        info:
          type: array
          description: API transformation parameters
          items:
            type: object
            properties:
              width:
                oneOf:
                  - type: integer
                  - type: string
                description: Width - integer pixels or string variable reference (e.g., "$w")
              height:
                oneOf:
                  - type: integer
                  - type: string
                description: Height - integer pixels or string variable reference (e.g., "$h")
              crop:
                type: string
              gravity:
                type: string
          example:
            - width: 100
              height: 150
              crop: fill
              gravity: auto
        derived:
          type: array
          items:
            type: object
            properties:
              public_id:
                type: string
                example: sample_image
              resource_type:
                type: string
                example: image
              type:
                type: string
                example: upload
              format:
                type: string
                example: jpg
              url:
                type: string
                example: http://res.cloudinary.com/demo/image/upload/v1620000000/sample_image.jpg
              secure_url:
                type: string
                example: https://res.cloudinary.com/demo/image/upload/v1620000000/sample_image.jpg
              bytes:
                type: integer
                example: 123456
              id:
                type: string
                example: 1234abcd5678efgh
        next_cursor:
          type: string
          example: eyJvZmZzZXQiOjEwMH0=
    allowed_for_strict:
      type: boolean
      description: |
        Whether to allow this named transformation when strict transformations are enabled. Strict transformations prevent transformations from being dynamically applied to media assets.
      example: true
    update_request:
      type: object
      properties:
        unsafe_update:
          type: string
          description: |
            Required when modifying the transformation parameters of an existing named transformation. The new transformation definition for the named transformation.
            Because the changed definition can be unsafe for (significantly change) assets in production, the change is applied only to newly generated derived assets that reference this named transformation.

            To apply the change to existing derived assets using this named transformation, invalidate them so that they'll be regenerated with the new definition when next requested.
          example: w_200,h_200,c_fill,g_face
        allowed_for_strict:
          $ref: '#/components/schemas/allowed_for_strict'
    message_response:
      type: object
      properties:
        message:
          type: string
          description: A human-readable status message.
          example: updated
      required:
        - message
    create_request:
      type: object
      required:
        - transformation
      properties:
        transformation:
          type: string
          description: A valid transformation string.
          example: w_100,h_150,c_fill,g_auto
        allowed_for_strict:
          $ref: '#/components/schemas/allowed_for_strict'
    direction_enum:
      type: string
      enum:
        - asc
        - desc
      description: Sort direction.
    upload_preset_summary:
      type: object
      description: An upload preset as returned in list responses. Most settings values are raw strings, but some boolean fields may be returned as native booleans.
      properties:
        name:
          type: string
          description: The name of the upload preset.
          example: my_preset
        unsigned:
          type: boolean
          description: Whether the upload preset allows unsigned uploads.
        settings:
          type: object
          description: Preset configuration settings. Most values are strings (e.g., tags are comma-separated, context is pipe-separated key=value pairs), but some boolean fields may be returned as native booleans.
          additionalProperties:
            oneOf:
              - type: string
              - type: boolean
        external_id:
          type: string
          description: The unique identifier for the upload preset.
          example: 84fbfd12-d00a-4c5b-8e92-05dbac244d43
      required:
        - name
        - external_id
    upload_preset_list_response:
      type: object
      properties:
        presets:
          type: array
          items:
            $ref: '#/components/schemas/upload_preset_summary'
        next_cursor:
          type:
            - string
            - 'null'
          description: Cursor for the next page of results.
      required:
        - presets
    access_control_item:
      type: object
      description: Access control rule that defines when and how the asset can be accessed.
      required:
        - access_type
      properties:
        access_type:
          type: string
          enum:
            - token
            - anonymous
          description: The type of access control to apply to the asset.
        key:
          type: string
          pattern: ^[a-zA-Z0-9]+$
          description: The authentication key identifier for token-based access. Default key is used if not specified or if set to 'default'.
          example: prod2024
        start:
          oneOf:
            - type: string
            - type: integer
          description: The start date and time when anonymous access becomes available. Accepts ISO 8601 string or Unix timestamp.
          example: '2024-03-15T09:00:00Z'
        end:
          oneOf:
            - type: string
            - type: integer
          description: The end date and time when anonymous access expires. Accepts ISO 8601 string or Unix timestamp.
          example: '2024-06-30T23:59:59Z'
    access_control:
      type: array
      description: |
        Restricts access to the asset by specifying one or more access types.
        The asset is restricted unless at least one listed access type is valid.
      items:
        $ref: '#/components/schemas/access_control_item'
      example:
        - access_type: token
          key: prod2024
        - access_type: anonymous
          start: '2024-03-15T09:00:00Z'
          end: '2024-06-30T23:59:59Z'
    structured_metadata_value:
      type: object
      description: A map of custom metadata fields (by external_id) and the values to assign to each of them.
      additionalProperties:
        oneOf:
          - type: string
          - type: integer
          - type: array
            items:
              type: string
      example:
        in_stock_id: 50
        color_id:
          - green
          - red
        caption_id: Summer collection
        shot_date_id: '2024-06-15'
    structured_metadata_param:
      description: |
        A pipe-separated list or a map of custom metadata fields (by external_id) and the values to assign to each of them. The = " and | characters can be supported as values when escaped with a prepended backslash (\). For a multi-select field, you can set a maximum of 3000 different metadata values on an asset.
      oneOf:
        - type: string
          description: A pipe-separated list of custom metadata fields (by external_id) and the values to assign to each of them.
          example: in_stock_id=50|color_id=["green","red"]
        - $ref: '#/components/schemas/structured_metadata_value'
    coordinate_pair:
      type: array
      description: A single [x, y] coordinate pair.
      minItems: 2
      maxItems: 2
      items:
        type: integer
    region_coordinates:
      type: array
      description: Coordinate pairs defining the region boundary.
      minItems: 2
      items:
        $ref: '#/components/schemas/coordinate_pair'
    region_mapping:
      type: object
      description: |
        A map of named region coordinate groups for cropping with region gravity.
        Each key is a region name (letters, numbers, or hyphens only).
        Each value is an array of at least two [x, y] integer coordinate pairs
        defining the region boundary.
      additionalProperties:
        $ref: '#/components/schemas/region_coordinates'
      example:
        face:
          - - 100
            - 200
          - - 300
            - 400
        body:
          - - 50
            - 60
          - - 70
            - 80
          - - 90
            - 100
    responsive_breakpoint:
      type: object
      properties:
        create_derived:
          type: boolean
          description: Whether to generate and store the derived images. Default is true.
        max_width:
          type: integer
          description: The maximum width for responsive breakpoint images.
        min_width:
          type: integer
          description: The minimum width for responsive breakpoint images.
        bytes_step:
          type: integer
          description: The minimum byte size difference between consecutive breakpoint images.
        max_images:
          type: integer
          description: The maximum number of breakpoint images to generate.
        transformation:
          type: string
          description: A transformation string to apply before generating breakpoints.
    upload_base_parameters:
      type: object
      description: Upload configuration parameters such as access control, backup, moderation, and notification settings.
      properties:
        accessibility_analysis:
          type: boolean
          description: Whether to return accessibility analysis values for the image.
        asset_folder:
          type: string
          description: The asset folder to assign to the asset.
        async:
          type: boolean
          description: |
            When set to true, returns the uploaded asset's public_id immediately in the response, before the upload is completed (asynchronously). Default: false.
        auto_chaptering:
          type: boolean
          description: Whether to trigger automatic generation of video chapters. Chapters will be generated and saved as a .vtt file with -chapters appended to the public ID of the video. You can enable chapters as part of the Cloudinary Video Player. Relevant for videos only.
        auto_tagging:
          type: number
          description: |
            Automatically assigns tags to an asset according to detected objects or categories with a confidence score higher than the specified value.
            Use together with the detection parameter for:
            - Cloudinary AI Content Analysis
            - Amazon Rekognition Celebrity Detection
            Use together with the categorization parameter for:
            - Google Automatic Video Tagging
            - Google Auto Tagging
            - Imagga Auto Tagging
            - Amazon Rekognition Auto Tagging
          example: 0.5
          minimum: 0
          maximum: 1
        auto_transcription:
          oneOf:
            - type: boolean
              description: Whether to trigger automatic generation of video transcription. Transcription will be generated and saved as a .vtt file with -transcription appended to the public ID of the video. Relevant for videos only.
              example: true
            - type: object
              description: Configuration object for automatic video transcription with translation options.
              properties:
                translate:
                  type: array
                  items:
                    type: string
                  description: Array of target language codes for transcription translation.
                  example:
                    - pl-PL
                    - he-IL
              example:
                translate:
                  - pl-PL
                  - he-IL
        access_control:
          $ref: '#/components/schemas/access_control'
        access_mode:
          type: string
          deprecated: true
          x-speakeasy-deprecation-message: The access_mode parameter is no longer supported. To restrict access to assets, you can use the access_control parameter.
          x-speakeasy-deprecation-replacement: access_control
          enum:
            - public
            - authenticated
          description: |
            Deprecated. Use access_control instead. Allows the asset to behave as if it's of the authenticated delivery type while still using the default 'upload' type in delivery URLs. The asset can later be made public by changing its access_mode via the Admin API, without having to update any delivery URLs.
        backup:
          type: boolean
          description: Whether to backup the uploaded asset. When set to true, backs up uploaded assets to a secondary storage bucket.
        background_removal:
          type: string
          description: |
            Automatically remove the background of an image using an add-on.
            - Set to cloudinary_ai to use the deep-learning based Cloudinary AI Background Removal add-on.
              Optionally append a template suffix (e.g., cloudinary_ai:fine_edges).
            - Note: this feature has been superseded by background removal on the fly.
            - Set to pixelz to use the human-powered Pixelz Remove-The-Background Editing add-on service.
            Relevant for images only.
          example: cloudinary_ai
        callback:
          deprecated: true
          x-speakeasy-deprecation-message: The callback parameter is deprecated. Not relevant for modern browsers. Starting July 2025 new customers will not be able to use this parameter.
          type: string
          description: |
            A URL to redirect to after the upload/explicit is completed instead of returning the upload response.
            Signed upload result parameters are added to the callback URL. This parameter is ignored for XHR (Ajax XMLHttpRequest) or JavaScript Fetch API upload requests.
            Note: This parameter is relevant for direct uploads from a form in the browser. It is automatically set if you perform direct upload from the browser using Cloudinary's SDKs and the jQuery plugin.
        categorization:
          type: string
          description: |
            A comma-separated list of the categorization add-ons to run on the asset.
            Set to google_tagging, google_video_tagging, imagga_tagging and/or aws_rek_tagging
            to automatically classify the scenes of the uploaded asset.
            Optionally append a language code suffix (e.g., google_tagging:fr).
          example: google_tagging
        cinemagraph_analysis:
          type: boolean
          description: Whether to return a cinemagraph analysis value for the media asset between 0 and 1, where 0 means the asset is not a cinemagraph and 1 means the asset is a cinemagraph. Relevant for animated images and video only. A static image will return 0.
        colors:
          type: boolean
          description: 'Whether to retrieve predominant colors & color histogram of the uploaded image. Note: If all returned colors are opaque, then 6-digit RGB hex values are returned. If one or more colors contain an alpha channel, then 8-digit RGBA hex quadruplet values are returned.'
          default: false
        detection:
          type: string
          description: |
            Invokes the relevant add-on to return a list of detected content.
            Set to:
            - <content-aware model>_[<version>] (e.g. coco_v2) to return a list of detected content using the Cloudinary AI Content Analysis add-on. Can be used together with the auto_tagging parameter to apply tags automatically.
            - captioning to analyze an image and suggest a caption based on the image's contents.
            - iqa to analyze the quality of an image.
            - watermark-detection to detect watermarks in an image.
            - adv_face to return a list of facial attributes using the Advanced Facial Attribute Detection add-on.
            - aws_rek_face to return a list of detected celebrities and facial attributes using the Amazon Rekognition Celebrity Detection add-on. Can be used together with the auto_tagging parameter to apply tags automatically.
          example: coco_v2
        discard_original_filename:
          type: boolean
          description: Whether to discard the name of the original uploaded file. Relevant when delivering assets as attachments (setting the flag disposition:attachment in delivery URLs).
        display_name:
          type: string
          description: A display name for the asset.
        eager_async:
          type: boolean
          description: Whether to generate the eager transformations asynchronously in the background after the upload request is completed rather than before the upload is completed.
        eager_notification_url:
          type: string
          format: uri
          description: A URL to notify when eager transformations are completed.
        eval:
          type: string
          description: Allows you to modify upload parameters by specifying custom logic with JavaScript. This can be useful for conditionally adding tags, contextual metadata, structured metadata or eager transformations depending on specific criteria of the uploaded file.
        faces:
          type: boolean
          description: Whether to detect faces in the asset.
        filename_override:
          type: string
          description: Overrides the originally uploaded asset's file name in downloads that use flags like fl_attachment or fl_force_original.
        folder:
          type: string
          deprecated: true
          x-speakeasy-deprecation-message: |
            If Dynamic folders mode is enabled on your product environment, this parameter is deprecated, and it's recommended to use the asset_folder parameter to control where the asset will be placed. If you also want your public_id to match the initial asset folder path, include the use_asset_folder_as_public_id_prefixparameter.
          description: Folder name where the uploaded asset will be stored. This parameter applies when using the Admin API, or when specifying the upload preset for unsigned uploading with the Upload API.
        format:
          type: string
          description: An optional format to convert the uploaded asset to before saving in the cloud.
          example: jpg
        invalidate:
          type: boolean
          description: |
            Whether to invalidate CDN cache copies of a previously uploaded asset that shares the same public ID. Default: false.
        media_metadata:
          type: boolean
          description: |
            Whether to return IPTC, XMP, and detailed Exif metadata of the uploaded asset in the response.
            Supported for images, video, and audio.
            - Returned metadata for images includes: PixelsPerUnitX, PixelsPerUnitY, PixelUnits, Colorspace, and DPI.
            - Returned metadata for audio and video includes: audio_codec, audio_bit_rate, audio_frequency, channels, channel_layout.
            - Additional metadata for video includes: pix_format, codec, level, profile, video_bit_rate, dar.
        metadata:
          $ref: '#/components/schemas/structured_metadata_param'
        clear_invalid:
          type: boolean
          description: 'Whether to clear metadata field values that have become invalid due to a change in metadata rules. If false, the API returns an error if any existing metadata value is no longer valid. Default: false.'
          default: false
        moderation:
          type: string
          description: |
            For all asset types, set to:
            - manual to add the uploaded asset to a list of pending assets that can be moderated using the Admin API or the Cloudinary Console.
            - perception_point to automatically moderate the uploaded asset using the Perception Point Malware Detection add-on.

            For images only, set to:
            - webpurify to automatically moderate the uploaded image using the WebPurify Image Moderation add-on.
            - aws_rek to automatically moderate the uploaded image using the Amazon Rekognition AI Moderation add-on.
            - duplicate:<threshold> to detect if the same or a similar image already exists using the Cloudinary Duplicate Image Detection add-on. Set threshold to a float greater than 0 and less than or equal to 1.0 to specify how similar an image needs to be in order to be considered a duplicate. Set threshold to 0 to add an image to the index of images that are searched when duplicate detection is invoked for another image.

            For videos only, set to:
            - aws_rek_video to automatically moderate the uploaded video using the Amazon Rekognition Video Moderation add-on.
            - google_video_moderation automatically moderate the uploaded video using the Google AI Video Moderation add-on.

            To request multiple moderations in a single API call:
            - Send the desired list of moderations as a pipe-separated string with manual moderation, if relevant, being last.

            Note: Rejected assets are automatically invalidated on the CDN within approximately ten minutes.
          example: aws_rek|duplicate:0|perception_point|manual
        notification_url:
          type: string
          format: uri
          description: A URL to notify when the asset is ready.
        ocr:
          type: string
          description: |
            Set to adv_ocr to extract all text elements in an image as well as the bounding box
            coordinates of each detected element using the OCR text detection and extraction add-on.
            Optionally append options (e.g., adv_ocr:document).
          example: adv_ocr
        on_success:
          type: string
          description: Allows you to update an asset by specifying custom logic with JavaScript that is executed after the upload to Cloudinary is completed successfully. This can be useful for conditionally adding tags, contextual metadata, and structured metadata, depending on the results of using the detection parameter on upload.
        overwrite:
          type: boolean
          description: |
            Whether to overwrite existing assets with the same public ID. When set to false, return immediately if an asset with the same public ID already exists. Default: true (when using unsigned upload, the default is false and cannot be changed to true).
        phash:
          type: boolean
          description: |
            Whether to return the perceptual hash (pHash) on the uploaded image for image similarity detection.
        proxy:
          type: string
          description: A proxy to use for fetching remote URLs. The format should be http://hostname:port.
        public_id:
          type: string
          description: The identifier that is used for accessing the uploaded asset. If not specified, a unique ID is generated automatically.
        public_id_prefix:
          type: string
          description: A string or path that's automatically prepended to the public_id with a forward slash. The value can contain the same characters as the public_id including additional forward slashes. This prefix can be useful to provide context and improve the SEO of an asset's filename in the delivery URL, but the value does not impact the location where the asset is stored.
        quality_analysis:
          type: boolean
          description: Whether to return a quality analysis value for the image between 0 and 1, where 0 means the image is blurry and out of focus and 1 means the image is sharp and in focus. Relevant for images only.
        raw_convert:
          type: string
          pattern: ^(aspose|azure_video_indexer(:\D+)*|google_speech(:(vt|sr)t)*(:[a-zA-Z-]+)?|extract_text)$
          description: |
            Generates a related file based on the uploaded file.
            - Set to aspose to automatically create a PDF or other image format from a raw Office document using the Aspose Document Conversion add-on. (Asynchronous)
            - Set to google_speech to instruct the Google AI Video Transcription add-on to generate an automatic transcript raw file from an uploaded video. (Asynchronous)
            - Set to extract_text to extract all the text from a PDF file and store it in a raw JSON file with a public ID in the format: [pdf_public_id].extract_text.json. The full URL of the generated JSON file is included in the API response. Unlike the above raw_convert options, this option doesn't require registering for an add-on.(Synchronous)
            - Set to azure_video_indexer to generate AI-powered video insights from Microsoft Azure. (Asynchronous)
          example: google_speech:vtt:en-US
        regions:
          anyOf:
            - type: string
            - $ref: '#/components/schemas/region_mapping'
          description: |
            Named region coordinate groups for cropping with region gravity.
            Can be a JSON-encoded string or an object. Each region name may contain
            only letters, numbers, or hyphens, and must have at least two coordinate pairs.
          example: '{"face": [[100, 200], [300, 400]], "body": [[50, 60], [70, 80], [90, 100]]}'
        responsive_breakpoints:
          description: Settings to automatically generate breakpoints for responsive images.
          anyOf:
            - type: array
              items:
                $ref: '#/components/schemas/responsive_breakpoint'
            - $ref: '#/components/schemas/responsive_breakpoint'
        return_delete_token:
          type: boolean
          description: Whether to return a deletion token in the upload response. The token can be used to delete the uploaded asset within approximately 10 minutes using an unauthenticated API call.
        upload_preset:
          type: string
          description: Name of an upload preset that you defined for your Cloudinary product environment. An upload preset consists of upload parameters centrally managed using the Admin API or from the Upload Presets page of the Console Settings.
        use_asset_folder_as_public_id_prefix:
          type: boolean
          description: Whether to add the asset_folder value as a prefix to the public_id value (prepended with a forward slash). This ensures that the public ID path will always match the initial asset folder, and can help to retain the behavior that previously existed in fixed folder mode. However, keep in mind that even when this option is used during upload, an asset with a certain public ID path can later be moved to a completely different asset folder hierarchy without impacting the public ID. This option only ensures path matching for the initial upload. Relevant only when public_id_prefix (or folder) has not been separately specified.
        use_filename:
          type: boolean
          description: |
            Whether to use the original file name of the uploaded asset if available for the public ID. The file name is normalized and random characters are appended to ensure uniqueness if the file name already exists. Default: false.
        use_filename_as_display_name:
          type: boolean
          description: Whether to automatically assign the original filename of the uploaded asset as the asset's display name. Relevant only if the display_name parameter isn't set.
        unique_display_name:
          type: boolean
          description: Whether the display name should be unique.
        unique_filename:
          type: boolean
          description: |
            When set to false and used together with use_filename, if an asset with the same file name already exists, no random characters are appended to the file name. Instead, the asset is overwritten. Default: true (random characters are added to the file name if needed).
        visual_search:
          type: boolean
          description: Whether to index the image for use with visual searches. Relevant for images only.
    tags_param:
      anyOf:
        - type: string
          description: A comma-separated list of tag names.
        - type: array
          items:
            type: string
          description: An array of tag names.
      description: A comma-separated list of tag names, or an array of tag names.
      example: animal,dog
    context_param:
      type: string
      description: A pipe-separated list of key-value pairs of general textual context metadata to attach to the asset (e.g., "alt=My image|caption=Nice photo"). The =, ", and | characters can be escaped with a prepending backslash (\).
      example: alt=My image|caption=Nice photo
    upload_serializable_input:
      type: object
      description: Upload parameters that accept encoded string values, such as comma-separated tags, pipe-separated context metadata, and transformation strings.
      properties:
        tags:
          $ref: '#/components/schemas/tags_param'
        context:
          $ref: '#/components/schemas/context_param'
        eager:
          type: string
          description: A list of transformations to eagerly generate for the asset. Accepts either a single transformation or a pipe-separated list of transformations.
        transformation:
          type: string
          description: An incoming transformation to run on the uploaded asset before its storage. In contrast to eager, this parameter is applied before the file is stored.
        allowed_formats:
          type: string
          description: |
            A comma-separated list of file formats that are allowed for uploading. Files of other types will be rejected. The formats can be any combination of image types, video formats or raw file extensions.
            Note: You can also add the `format` parameter to convert other file types instead of rejecting them. In this case, only files that would normally be rejected are converted, any file format allowed for upload won't be converted.
          example: mp4,ogv,jpg,png,pdf
        headers:
          type: string
          description: |
            An HTTP header or a list of headers lines for adding as response HTTP headers when delivering the asset to your users. Supported headers: Link, Authorization, X-Robots-Tag.
          example: 'X-Robots-Tag: noindex'
        face_coordinates:
          type: string
          description: Face coordinates as comma-separated values, with multiple faces separated by pipes.
          pattern: ^(\d+,\d+,\d+,\d+)(\|\d+,\d+,\d+,\d+)*$
          example: 10,20,150,130|213,345,82,61
        custom_coordinates:
          type: string
          description: Custom coordinates as comma-separated values, with multiple coordinates separated by pipes.
          pattern: ^(\d+,\d+,\d+,\d+)(\|\d+,\d+,\d+,\d+)*$
          example: 10,20,150,130
    upload_common_parameters:
      description: Common parameters for configuring an asset, including transformation, tagging, metadata, and moderation options.
      allOf:
        - $ref: '#/components/schemas/upload_base_parameters'
        - $ref: '#/components/schemas/upload_serializable_input'
    managed_delivery_type:
      type: string
      enum:
        - upload
        - private
        - authenticated
      description: Managed delivery types for assets uploaded and stored by Cloudinary.
    asset_delivery_type:
      type: string
      enum:
        - asset
      description: Static asset delivery type.
    upload_delivery_type:
      anyOf:
        - $ref: '#/components/schemas/managed_delivery_type'
        - $ref: '#/components/schemas/asset_delivery_type'
      description: Delivery types accepted by upload and rename operations.
    upload_type_parameter:
      type: object
      properties:
        type:
          allOf:
            - $ref: '#/components/schemas/upload_delivery_type'
          description: The delivery type that defines if and how the uploaded asset is available for public delivery. By default, all uploaded assets are public (upload).
    upload_parameters:
      description: Parameters for configuring asset uploads, including transformation, tagging, metadata, and delivery options.
      allOf:
        - $ref: '#/components/schemas/upload_common_parameters'
        - $ref: '#/components/schemas/upload_type_parameter'
    upload_preset_input:
      description: Upload preset configuration for create/update. Settings are sent as top-level string-encoded properties.
      allOf:
        - $ref: '#/components/schemas/upload_parameters'
        - type: object
          properties:
            name:
              type: string
              description: The name of the upload preset. If not provided on create, a random name is generated.
            disallow_public_id:
              type: boolean
              description: |
                When using unsigned upload with an upload preset, this parameter prevents specifying a public ID. Relevant only for unsigned upload presets.
            unsigned:
              type: boolean
              description: Whether the upload preset allows unsigned uploads.
            parameter_whitelist:
              oneOf:
                - type: array
                  items:
                    type: string
                - type: string
                  enum:
                    - none
              description: |
                The parameters that are allowed to be used in an upload request utilizing this preset. If not specified or empty array, all parameters are allowed. If "none", no parameters are allowed.
    upload_preset_create_response:
      type: object
      properties:
        message:
          type: string
          description: The result message.
          example: created
        name:
          type: string
          description: The name of the created upload preset.
          example: my_preset
        external_id:
          type: string
          description: The unique identifier for the upload preset.
          example: 1bce826e-ec50-45c6-9f86-c858948c7158
      required:
        - message
        - name
        - external_id
    tags_response:
      type:
        - array
        - 'null'
      items:
        type: string
      description: Tag names assigned to the asset.
    context_response:
      type:
        - object
        - 'null'
      additionalProperties:
        type: string
      description: Contextual metadata as flat key-value pairs.
    upload_serializable_parsed:
      type: object
      description: Structured versions of upload fields as returned in API responses. Tags and allowed formats are arrays, context is a key-value object, eager and transformation are structured transformation objects, and coordinates are nested number arrays.
      properties:
        tags:
          allOf:
            - $ref: '#/components/schemas/tags_response'
          description: Parsed tag names.
          example:
            - tag1
            - tag2
        context:
          allOf:
            - $ref: '#/components/schemas/context_response'
          description: Parsed contextual metadata as key-value pairs.
          example:
            alt: My image
            caption: Nice photo
        eager:
          type: array
          description: Parsed eager transformations. Each item is an array of transformation step objects.
          items:
            type: array
            items:
              type: object
              additionalProperties: true
          example:
            - - width: 100
                height: 100
                crop: thumb
        transformation:
          type: array
          description: Parsed incoming transformation steps.
          items:
            type: object
            additionalProperties: true
        allowed_formats:
          type: array
          items:
            type: string
          description: Parsed list of allowed file formats.
          example:
            - jpg
            - png
            - gif
        headers:
          type: object
          additionalProperties:
            type: string
          description: Parsed custom HTTP headers as key-value pairs.
        face_coordinates:
          type: array
          description: Parsed face coordinate rectangles.
          items:
            type: array
            items:
              type: number
        custom_coordinates:
          type: array
          description: Parsed custom coordinate rectangles.
          items:
            type: array
            items:
              type: number
    upload_preset_parsed_settings:
      description: Parsed preset configuration settings. Composed from base parameters (stable types) plus parsed serializable fields (arrays/objects instead of strings).
      allOf:
        - $ref: '#/components/schemas/upload_base_parameters'
        - $ref: '#/components/schemas/upload_serializable_parsed'
        - $ref: '#/components/schemas/upload_type_parameter'
    upload_preset_detail:
      type: object
      description: An upload preset as returned by the GET endpoint. Settings values are parsed into their proper types (e.g., tags become arrays, context becomes an object, booleans become true booleans).
      properties:
        name:
          type: string
          description: The name of the upload preset.
          example: my_preset
        unsigned:
          type: boolean
          description: Whether the upload preset allows unsigned uploads.
        settings:
          $ref: '#/components/schemas/upload_preset_parsed_settings'
        external_id:
          type: string
          description: The unique identifier for the upload preset.
          example: 4d92a1bc-25c8-4f5a-a763-1b7dc169fd5a
      required:
        - name
        - external_id
    upload_preset_mutation_response:
      type: object
      properties:
        message:
          type: string
          description: The result message (e.g., "updated" or "deleted").
          example: updated
        external_id:
          type: string
          description: The unique identifier for the upload preset.
          example: 1bce826e-ec50-45c6-9f86-c858948c7158
      required:
        - message
        - external_id
    upload_mapping:
      type: object
      description: Represents an upload mapping
      properties:
        folder:
          type: string
          description: The folder name
          example: my_folder
        template:
          type: string
          description: The template URL
          example: http://example.com/files
        external_id:
          type: string
          description: Unique identifier for the mapping
        upload_preset_name:
          type:
            - string
            - 'null'
          description: Name of an upload preset if one is associated
      required:
        - folder
        - template
        - external_id
    upload_mapping_list_response:
      type: object
      description: List response for upload mappings.
      properties:
        mappings:
          type: array
          description: Array of upload mapping objects.
          items:
            $ref: '#/components/schemas/upload_mapping'
        total_entries:
          type: integer
          description: Total number of mappings.
        next_cursor:
          type: string
          description: Cursor for getting the next page of results.
      required:
        - mappings
        - total_entries
    upload_mapping_input:
      type: object
      properties:
        folder:
          type: string
          description: The folder name for the mapping.
          example: my_folder
        template:
          type: string
          description: The template URL.
          example: http://example.com/files
      required:
        - folder
        - template
    upload_mapping_mutation_response:
      type: object
      properties:
        message:
          type: string
        external_id:
          type: string
          description: Unique identifier of the mapping.
          example: 1bce826e-ec50-45c6-9f86-c858948c7158
      required:
        - message
        - external_id
    upload_mapping_create_response:
      type: object
      properties:
        message:
          type: string
        folder:
          type: string
          description: The folder name that was created.
        external_id:
          type: string
          description: Unique identifier for the mapping.
          example: 1bce826e-ec50-45c6-9f86-c858948c7158
      required:
        - message
        - folder
        - external_id
    replace_upload_mappings_request:
      type: object
      properties:
        mappings:
          type: array
          items:
            $ref: '#/components/schemas/upload_mapping_input'
      required:
        - mappings
    event_type:
      type: string
      description: The type of notification event.
      enum:
        - all
        - access_control_changed
        - bulk_refresh_auto_fetch
        - create_folder
        - delete
        - delete_by_token
        - delete_folder
        - eager
        - error
        - explode
        - generate_archive
        - info
        - invalidate_custom_cdn
        - moderation
        - moderation_summary
        - move
        - move_or_rename_asset_folder
        - multi
        - publish
        - rename
        - report
        - resource_context_changed
        - resource_display_name_changed
        - resource_metadata_changed
        - resource_tags_changed
        - restore_asset_version
        - sprite
        - upload
    uri_type:
      type: string
      enum:
        - webhook
        - flow
    trigger_info:
      type: object
      properties:
        id:
          type: string
          example: c2c822dd1aa41ba6d81299df8b5ae949
        product_environment_id:
          type: string
          example: 7fabb2ff3d687d05b63134cf8fa006ba16
        uri_type:
          $ref: '#/components/schemas/uri_type'
          example: webhook
        uri:
          type: string
          format: uri
          example: http://example.com
        event_type:
          $ref: '#/components/schemas/event_type'
          example: all
        created_at:
          type: string
          format: date-time
          example: '2025-05-13T09:40:29+00:00'
        updated_at:
          type: string
          format: date-time
          example: '2025-05-13T09:40:29+00:00'
      required:
        - uri
        - uri_type
    trigger_list_response:
      type: object
      description: List response for triggers.
      properties:
        triggers:
          type: array
          description: List of trigger objects.
          items:
            $ref: '#/components/schemas/trigger_info'
        total:
          type: integer
          description: Total number of triggers.
          example: 1
      required:
        - triggers
        - total
    create_trigger_request:
      type: object
      properties:
        uri:
          type: string
          description: The URL that will receive the notification response.
          format: uri
          example: https://trigger.site/124
        event_type:
          $ref: '#/components/schemas/event_type'
          description: The type of event that will trigger the notification response.
          example: upload
      required:
        - uri
        - event_type
    update_trigger_request:
      type: object
      properties:
        new_uri:
          type: string
          format: uri
          example: http://example.com
          description: The updated URL that will receive the notification response.
      required:
        - new_uri
    test_trigger_request:
      type: object
      properties:
        sample_data:
          type: object
          description: Sample notification data to evaluate the filter against.
          example:
            resource_type: image
            public_id: sample123
            tags:
              - product
    test_trigger_response:
      type: object
      properties:
        trigger_id:
          type: string
          description: The ID of the trigger that was tested.
          example: c2c822dd1aa41ba6d81299df8b5ae949
        filter_present:
          type: boolean
          description: Whether the trigger has a filter configured.
          example: true
        filter_result:
          type: boolean
          description: Result of evaluating the filter against sample_data (true if no filter).
          example: true
      required:
        - trigger_id
        - filter_present
        - filter_result
    streaming_profile:
      type: object
      properties:
        external_id:
          type: string
          description: The unique identifier of the streaming profile
          example: f6360c4d-4f62-48b7-b56b-8c49d1bd6dcf
        name:
          type: string
          description: The name of the streaming profile
          example: hd_1080p
        display_name:
          type:
            - string
            - 'null'
          description: The display name of the streaming profile
          example: HD 1080p
        predefined:
          type: boolean
          description: Whether this is a predefined streaming profile
          example: false
        representations:
          type: array
          description: The list of representations in the streaming profile
          items:
            type: object
            properties:
              transformation:
                type: array
                description: The transformation parameters for this representation
                items:
                  type: object
                  additionalProperties: true
          example:
            - transformation:
                - width: 1920
                  height: 1080
                  crop: scale
                  video_codec: h264
                  bit_rate: 2500k
                  audio_codec: aac
                  audio_bitrate: 128k
                  fps: 30
            - transformation:
                - width: 1280
                  height: 720
                  crop: scale
                  video_codec: h264
                  bit_rate: 1500k
                  audio_codec: aac
                  audio_bitrate: 128k
                  fps: 30
      required:
        - external_id
        - name
        - predefined
      example:
        external_id: sp_123456789
        name: hd_1080p
        display_name: HD 1080p
        predefined: false
        representations:
          - transformation:
              - width: 1920
                height: 1080
                crop: scale
                video_codec: h264
                bit_rate: 2500k
                audio_codec: aac
                audio_bitrate: 128k
                fps: 30
          - transformation:
              - width: 1280
                height: 720
                crop: scale
                video_codec: h264
                bit_rate: 1500k
                audio_codec: aac
                audio_bitrate: 128k
                fps: 30
    streaming_profile_list_response:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/streaming_profile'
      required:
        - data
    streaming_profile_create:
      type: object
      properties:
        name:
          type: string
          description: The name of the streaming profile
          example: hd_1080p
        display_name:
          type:
            - string
            - 'null'
          description: The display name of the streaming profile
          example: HD 1080p
        representations:
          type: string
          description: A JSON string containing the list of representations with transformation parameters as strings
          example: '[{"transformation":"w_1920,h_1080,c_scale/vc_h264,br_2500k/ac_aac,abr_128k/fps_30"},{"transformation":"w_1280,h_720,c_scale/vc_h264,br_1500k/ac_aac,abr_128k/fps_30"}]'
      required:
        - name
        - representations
      example:
        name: hd_1080p
        display_name: HD 1080p
        representations: '[{"transformation":"w_1920,h_1080,c_scale/vc_h264,br_2500k/ac_aac,abr_128k/fps_30"},{"transformation":"w_1280,h_720,c_scale/vc_h264,br_1500k/ac_aac,abr_128k/fps_30"}]'
    streaming_profile_data_response:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/streaming_profile'
      required:
        - data
    streaming_profile_update:
      type: object
      properties:
        display_name:
          type:
            - string
            - 'null'
          description: The display name of the streaming profile
          example: HD 1080p Updated
        representations:
          type: string
          description: A JSON string containing the list of representations with transformation parameters as strings
          example: '[{"transformation":"w_1920,h_1080,c_scale/vc_h264,br_3000k/ac_aac,abr_192k/fps_30"},{"transformation":"w_1280,h_720,c_scale/vc_h264,br_2000k/ac_aac,abr_192k/fps_30"}]'
      required:
        - representations
      example:
        display_name: HD 1080p Updated
        representations: '[{"transformation":"w_1920,h_1080,c_scale/vc_h264,br_3000k/ac_aac,abr_192k/fps_30"},{"transformation":"w_1280,h_720,c_scale/vc_h264,br_2000k/ac_aac,abr_192k/fps_30"}]'
    streaming_profile_update_response:
      type: object
      properties:
        message:
          type: string
        data:
          $ref: '#/components/schemas/streaming_profile'
      required:
        - message
        - data
x-speakeasy-globals:
  parameters: []
