QuantCDN Compose API

Docker compose configuration management

Operations 3

GET /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/compose Get the compose file for an environment #
PATCH /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/compose Partially Update Environment Compose Definition #
POST /api/v3/organizations/{organisation}/compose/validate Validate a compose file #

Work with this as data

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

MCP server

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

https://apis.io/mcp

Tools for apis

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

Call it yourself

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

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

Get an API key

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

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

OpenAPI Specification

quantcdn-compose-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: Unified API for QuantCDN Admin and QuantCloud Platform services
  title: QuantCDN AI Agents Compose API
  version: 4.15.8
servers:
- description: QuantCDN Public Cloud
  url: https://dashboard.quantcdn.io
- description: QuantGov Cloud
  url: https://dash.quantgov.cloud
security:
- BearerAuth: []
tags:
- description: Docker compose configuration management
  name: Compose
paths:
  /api/v3/organizations/{organisation}/applications/{application}/environments/{environment}/compose:
    get:
      operationId: getEnvironmentCompose
      parameters:
      - description: The organisation ID
        example: test-org
        explode: false
        in: path
        name: organisation
        required: true
        schema:
          type: string
        style: simple
      - description: The application ID
        example: test-app
        explode: false
        in: path
        name: application
        required: true
        schema:
          type: string
        style: simple
      - description: The environment ID
        example: test-env
        explode: false
        in: path
        name: environment
        required: true
        schema:
          type: string
        style: simple
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Compose'
          description: The compose file
        '404':
          description: The compose file not found
      summary: Get the compose file for an environment
      tags:
      - Compose
    patch:
      description: Partially updates top-level fields of the environment's compose definition, such as architecture, task-level CPU/Memory, or min/max scaling capacity. Only fields included in the request body are modified. The 'containers' array, if provided, REPLACES the existing containers array; if omitted, the existing containers are NOT modified by this PATCH operation. (For modifying individual containers, use PATCH /containers/{containerName}). This triggers a validation, registers a new task definition, and updates the service.
      operationId: patchEnvironmentCompose
      parameters:
      - description: The organisation ID
        example: test-org
        explode: false
        in: path
        name: organisation
        required: true
        schema:
          type: string
        style: simple
      - description: The application ID
        example: test-app
        explode: false
        in: path
        name: application
        required: true
        schema:
          type: string
        style: simple
      - description: The environment ID
        example: test-env
        explode: false
        in: path
        name: environment
        required: true
        schema:
          type: string
        style: simple
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/patchEnvironmentCompose_request'
        description: Partial compose definition updates. All fields are optional.
        required: true
      responses:
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/patchEnvironmentCompose_202_response'
          description: Request accepted, compose definition partial update is processing. Returns the full updated compose definition.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/patchEnvironmentCompose_400_response'
          description: Invalid compose definition or validation failed.
        '404':
          description: Application or environment not found
      summary: Partially Update Environment Compose Definition
      tags:
      - Compose
  /api/v3/organizations/{organisation}/compose/validate:
    post:
      description: 'Accepts a docker-compose.yml file content, translates it into the internal compose definition format, and validates it. Quant Cloud provides comprehensive support for standard Docker Compose features including commands, entrypoints, health checks, dependencies, volume mounts, resource limits, and more. For detailed documentation on supported features and examples, see: https://docs.quantcdn.io/introduction-to-quant-cloud/importing-docker-compose/. Supports image tag suffixing via the imageSuffix query parameter or by sending a JSON wrapper with yamlContent and imageSuffix fields. When provided, internal image tags are transformed to {containerName}-{suffix} format (e.g., ''nginx-feature-xyz'').'
      operationId: validateCompose
      parameters:
      - description: The organisation ID
        example: test-org
        explode: false
        in: path
        name: organisation
        required: true
        schema:
          type: string
        style: simple
      - description: Optional. Image tag suffix to apply during translation. Transforms internal image tags to consistent '{containerName}-{suffix}' format (e.g., 'nginx-pr-456'). External images are left unchanged. Useful for feature branch deployments.
        example: pr-456
        explode: true
        in: query
        name: imageSuffix
        required: false
        schema:
          pattern: ^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
          type: string
        style: form
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/validateCompose_request'
        description: The docker-compose.yml file content. Can be sent as raw YAML string or as a JSON wrapper containing both yamlContent (string) and imageSuffix (string) fields. Query parameter imageSuffix takes precedence if both are provided.
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/validateCompose_200_response'
          description: Validation successful. Body contains the translated compose definition and any warnings.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/validateCompose_422_response'
          description: Invalid YAML input or validation failed
      summary: Validate a compose file
      tags:
      - Compose
components:
  schemas:
    SpotConfiguration:
      description: Spot instance strategy configuration for controlling cost vs reliability. Spot instances provide significant cost savings (~70%) but may be interrupted by AWS. Available for non-production environments.
      example:
        strategy: spot-only
      properties:
        strategy:
          default: spot-only
          description: Spot instance strategy. 'off' = On-Demand only (highest reliability, no savings). 'spot-only' = 100% Spot instances (~70% savings, default for non-prod). 'mixed-safe' = 50% Spot instances (~35% savings, requires multiple instances). 'mixed-aggressive' = 80% Spot instances (~56% savings, requires multiple instances).
          enum:
          - 'off'
          - spot-only
          - mixed-safe
          - mixed-aggressive
          example: spot-only
          type: string
      required:
      - strategy
      type: object
    validateCompose_request:
      properties:
        compose:
          description: The docker-compose.yml file content as a string
          type: string
        imageSuffix:
          description: Optional image tag suffix (query parameter takes precedence)
          pattern: ^[a-z0-9]([a-z0-9-]*[a-z0-9])?$
          type: string
        application:
          description: Optional application name for context
          type: string
      required:
      - compose
      type: object
    patchEnvironmentCompose_202_response_spotConfiguration:
      example:
        tolerateDowntime: true
        strategy: 'off'
      properties:
        strategy:
          example: 'off'
          type: string
        tolerateDowntime:
          example: true
          type: boolean
      type: object
    Container_originProtectionConfig:
      description: Extended origin protection configuration with IP allow list support
      example:
        ipAllow:
        - ipAllow
        - ipAllow
        enabled: true
      properties:
        enabled:
          default: true
          description: Whether origin protection is enabled. Defaults to true if this config object is provided.
          type: boolean
        ipAllow:
          description: List of IP addresses or CIDR ranges that can bypass origin protection for direct access (e.g., VPN IPs)
          items:
            type: string
          type:
          - array
          - 'null'
      type:
      - object
      - 'null'
    patchEnvironmentCompose_400_response:
      example:
        message: message
        errors: '{}'
      properties:
        message:
          type: string
        errors:
          type: object
      type: object
    validateCompose_422_response:
      example:
        error: Invalid YAML
      properties:
        error:
          example: Invalid YAML
          type: string
      type: object
    Container_secrets_inner:
      example:
        name: name
        valueFrom: valueFrom
      properties:
        name:
          description: The environment variable name to be set in the container
          type: string
        valueFrom:
          description: The key of the secret in the environment's 'app-secrets' store
          type: string
      required:
      - name
      - valueFrom
      type: object
    Container_environment_inner:
      example:
        name: name
        value: value
      properties:
        name:
          description: Environment variable name
          type: string
        value:
          description: Environment variable value
          type: string
      required:
      - name
      - value
      type: object
    Container_mountPoints_inner:
      example:
        readOnly: false
        containerPath: containerPath
        sourceVolume: sourceVolume
      properties:
        sourceVolume:
          description: The name of the logical volume
          type: string
        containerPath:
          description: The path inside the container where the volume is mounted
          type: string
        readOnly:
          default: false
          type: boolean
      required:
      - containerPath
      - sourceVolume
      type: object
    patchEnvironmentCompose_202_response:
      example:
        spotConfiguration:
          tolerateDowntime: true
          strategy: 'off'
        taskMemory: '2048'
        maxCapacity: 1
        minCapacity: 1
        containers:
        - '{}'
        - '{}'
        taskCpu: '512'
        enableCrossAppNetworking: true
        architecture: ARM64
        enableCrossEnvNetworking: true
      properties:
        architecture:
          example: ARM64
          type: string
        taskCpu:
          example: '512'
          type: string
        taskMemory:
          example: '2048'
          type: string
        minCapacity:
          example: 1
          type: integer
        maxCapacity:
          example: 1
          type: integer
        containers:
          items:
            type: object
          type: array
        spotConfiguration:
          $ref: '#/components/schemas/patchEnvironmentCompose_202_response_spotConfiguration'
        enableCrossEnvNetworking:
          example: true
          type: boolean
        enableCrossAppNetworking:
          example: true
          type: boolean
      type: object
    Container:
      example:
        originProtectionConfig:
          ipAllow:
          - ipAllow
          - ipAllow
          enabled: true
        memory: 6
        dependsOn:
        - condition: START
          containerName: containerName
        - condition: START
          containerName: containerName
        workingDirectory: workingDirectory
        exposedPorts:
        - 5
        - 5
        cpu: 0
        imageReference:
          identifier: identifier
          type: internal
        secrets:
        - name: name
          valueFrom: valueFrom
        - name: name
          valueFrom: valueFrom
        memoryReservation: 1
        command:
        - command
        - command
        environment:
        - name: name
          value: value
        - name: name
          value: value
        readonlyRootFilesystem: false
        originProtection: false
        healthCheck:
          retries: 7
          startPeriod: 279
          interval: 171
          command:
          - command
          - command
          timeout: 15
        name: name
        mountPoints:
        - readOnly: false
          containerPath: containerPath
          sourceVolume: sourceVolume
        - readOnly: false
          containerPath: containerPath
          sourceVolume: sourceVolume
        entryPoint:
        - entryPoint
        - entryPoint
        user: user
        essential: true
      properties:
        name:
          description: Name of the container
          pattern: ^[a-zA-Z0-9_-]+$
          type: string
        imageReference:
          $ref: '#/components/schemas/Container_imageReference'
        cpu:
          description: Container-level CPU units
          type:
          - integer
          - 'null'
        memory:
          description: Container-level memory hard limit (MiB)
          type:
          - integer
          - 'null'
        memoryReservation:
          description: Container-level memory soft limit (MiB)
          type:
          - integer
          - 'null'
        exposedPorts:
          description: List of container ports to expose
          items:
            type: integer
          type:
          - array
          - 'null'
        mountPoints:
          items:
            $ref: '#/components/schemas/Container_mountPoints_inner'
          type:
          - array
          - 'null'
        environment:
          description: Environment variables specific to this container
          items:
            $ref: '#/components/schemas/Container_environment_inner'
          type:
          - array
          - 'null'
        secrets:
          description: Secrets mapped to environment variables
          items:
            $ref: '#/components/schemas/Container_secrets_inner'
          type:
          - array
          - 'null'
        healthCheck:
          $ref: '#/components/schemas/Container_healthCheck'
        dependsOn:
          description: Container startup dependencies
          items:
            $ref: '#/components/schemas/Container_dependsOn_inner'
          type:
          - array
          - 'null'
        command:
          items:
            type: string
          type:
          - array
          - 'null'
        entryPoint:
          items:
            type: string
          type:
          - array
          - 'null'
        workingDirectory:
          type:
          - string
          - 'null'
        essential:
          default: true
          type:
          - boolean
          - 'null'
        readonlyRootFilesystem:
          default: false
          type:
          - boolean
          - 'null'
        user:
          type:
          - string
          - 'null'
        originProtection:
          default: false
          description: Enable origin protection for all exposed ports on this container. Use originProtectionConfig for advanced options like IP allow lists.
          type:
          - boolean
          - 'null'
        originProtectionConfig:
          $ref: '#/components/schemas/Container_originProtectionConfig'
      required:
      - imageReference
      - name
      type: object
    Compose:
      example:
        spotConfiguration:
          strategy: spot-only
        taskMemory: 2
        maxCapacity: 7
        containers:
        - originProtectionConfig:
            ipAllow:
            - ipAllow
            - ipAllow
            enabled: true
          memory: 6
          dependsOn:
          - condition: START
            containerName: containerName
          - condition: START
            containerName: containerName
          workingDirectory: workingDirectory
          exposedPorts:
          - 5
          - 5
          cpu: 0
          imageReference:
            identifier: identifier
            type: internal
          secrets:
          - name: name
            valueFrom: valueFrom
          - name: name
            valueFrom: valueFrom
          memoryReservation: 1
          command:
          - command
          - command
          environment:
          - name: name
            value: value
          - name: name
            value: value
          readonlyRootFilesystem: false
          originProtection: false
          healthCheck:
            retries: 7
            startPeriod: 279
            interval: 171
            command:
            - command
            - command
            timeout: 15
          name: name
          mountPoints:
          - readOnly: false
            containerPath: containerPath
            sourceVolume: sourceVolume
          - readOnly: false
            containerPath: containerPath
            sourceVolume: sourceVolume
          entryPoint:
          - entryPoint
          - entryPoint
          user: user
          essential: true
        - originProtectionConfig:
            ipAllow:
            - ipAllow
            - ipAllow
            enabled: true
          memory: 6
          dependsOn:
          - condition: START
            containerName: containerName
          - condition: START
            containerName: containerName
          workingDirectory: workingDirectory
          exposedPorts:
          - 5
          - 5
          cpu: 0
          imageReference:
            identifier: identifier
            type: internal
          secrets:
          - name: name
            valueFrom: valueFrom
          - name: name
            valueFrom: valueFrom
          memoryReservation: 1
          command:
          - command
          - command
          environment:
          - name: name
            value: value
          - name: name
            value: value
          readonlyRootFilesystem: false
          originProtection: false
          healthCheck:
            retries: 7
            startPeriod: 279
            interval: 171
            command:
            - command
            - command
            timeout: 15
          name: name
          mountPoints:
          - readOnly: false
            containerPath: containerPath
            sourceVolume: sourceVolume
          - readOnly: false
            containerPath: containerPath
            sourceVolume: sourceVolume
          entryPoint:
          - entryPoint
          - entryPoint
          user: user
          essential: true
        minCapacity: 4
        taskCpu: 3
        enableCrossAppNetworking: false
        architecture: architecture
        enableCrossEnvNetworking: false
      properties:
        containers:
          items:
            $ref: '#/components/schemas/Container'
          type: array
        architecture:
          description: CPU architecture (X86_64 or ARM64)
          type: string
        taskCpu:
          description: Task-level CPU units (e.g., 256, 512, 1024)
          type: integer
        taskMemory:
          description: Task-level memory in MB
          type: integer
        minCapacity:
          description: Minimum number of instances
          type: integer
        maxCapacity:
          description: Maximum number of instances
          type: integer
        spotConfiguration:
          $ref: '#/components/schemas/SpotConfiguration'
        enableCrossEnvNetworking:
          default: false
          description: 'Optional. Enable cross-environment networking within the same application. When false (default): Uses shared security group for complete isolation (most secure). When true: Uses app-specific security group to enable communication between environments of the same application (e.g., staging can connect to production database). Note: If enableCrossAppNetworking is true, this setting is overridden.'
          type:
          - boolean
          - 'null'
        enableCrossAppNetworking:
          default: false
          description: 'Optional. Enable cross-application networking within the same organization. When false (default): Uses shared/app-specific security group based on enableCrossEnvNetworking. When true: Uses org-specific security group to enable container-to-container communication with ALL applications in the same organization via service discovery (microservices architecture). This setting takes priority over enableCrossEnvNetworking.'
          type:
          - boolean
          - 'null'
      type: object
    validateCompose_200_response:
      example:
        translatedComposeDefinition: '{}'
        translationWarnings:
        - Service 'db' uses 'build' directive, image will be internal with a generated tag.
        - Volume 'cache' uses a relative path source, interpreted as logical volume name.
        message: Docker-compose YAML translated and validated successfully.
      properties:
        message:
          example: Docker-compose YAML translated and validated successfully.
          type: string
        translatedComposeDefinition:
          description: The translated internal compose definition format
          type: object
        translationWarnings:
          description: Optional warnings encountered during translation
          example:
          - Service 'db' uses 'build' directive, image will be internal with a generated tag.
          - Volume 'cache' uses a relative path source, interpreted as logical volume name.
          items:
            type: string
          type:
          - array
          - 'null'
      required:
      - message
      - translatedComposeDefinition
      type: object
    patchEnvironmentCompose_request:
      properties:
        architecture:
          type:
          - string
          - 'null'
        taskCpu:
          type:
          - string
          - 'null'
        taskMemory:
          type:
          - string
          - 'null'
        minCapacity:
          minimum: 0
          type:
          - integer
          - 'null'
        maxCapacity:
          minimum: 1
          type:
          - integer
          - 'null'
        containers:
          items:
            type: object
          type:
          - array
          - 'null'
        spotConfiguration:
          $ref: '#/components/schemas/patchEnvironmentCompose_request_spotConfiguration'
        enableCrossEnvNetworking:
          type:
          - boolean
          - 'null'
        enableCrossAppNetworking:
          type:
          - boolean
          - 'null'
      type: object
    Container_healthCheck:
      description: Container health check configuration
      example:
        retries: 7
        startPeriod: 279
        interval: 171
        command:
        - command
        - command
        timeout: 15
      properties:
        command:
          description: The command to run to determine if the container is healthy
          items:
            type: string
          type: array
        interval:
          default: 30
          description: Time period (seconds) between health checks
          maximum: 300
          minimum: 5
          type: integer
        timeout:
          default: 5
          description: Time period (seconds) to wait for a health check to return
          maximum: 60
          minimum: 2
          type: integer
        retries:
          default: 3
          description: Number of times to retry a failed health check
          maximum: 10
          minimum: 1
          type: integer
        startPeriod:
          description: Grace period (seconds) to ignore unhealthy checks after container starts
          maximum: 300
          minimum: 0
          type:
          - integer
          - 'null'
      type:
      - object
      - 'null'
    patchEnvironmentCompose_request_spotConfiguration:
      properties:
        strategy:
          enum:
          - 'off'
          - spot-only
          - mixed-safe
          - mixed-aggressive
          type: string
      type:
      - object
      - 'null'
    Container_imageReference:
      example:
        identifier: identifier
        type: internal
      properties:
        type:
          description: Specifies whether the image is internal (ECR) or external (e.g., Docker Hub)
          enum:
          - internal
          - external
          type: string
        identifier:
          description: The image identifier. For 'internal' type, this is the image tag. For 'external' type, this is the full image name.
          type: string
      required:
      - identifier
      - type
      type: object
    Container_dependsOn_inner:
      example:
        condition: START
        containerName: containerName
      properties:
        containerName:
          description: The name of the container this container depends on
          type: string
        condition:
          description: The condition to wait for on the dependency
          enum:
          - START
          - HEALTHY
          - COMPLETE
          - SUCCESS
          type: string
      required:
      - containerName
      type: object
  securitySchemes:
    BearerAuth:
      bearerFormat: JWT
      description: 'Enter your Bearer token in the format: `Bearer <your-token-here>`. Obtain your API token from the QuantCDN dashboard under Profile > API Tokens.'
      scheme: bearer
      type: http