> ## Documentation Index
> Fetch the complete documentation index at: https://www.qovery.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Update a blueprint service

> Persists new values for a deployed blueprint service. Intended to be called after reviewing the diff returned by GET /blueprint/{blueprintId}/update.
`variables` and `spec_overrides` follow JSON Merge Patch (RFC 7396) semantics: non-null value on a key upserts it, null value removes it, absent keys are left untouched, and passing null for the whole field leaves all existing values unchanged.
**Note:** `name`, `tag`, and `icon` are required on every call.



## OpenAPI

````yaml /api-reference/openapi.yaml patch /blueprint/{blueprintId}
openapi: 3.0.0
info:
  version: 1.0.4
  title: Qovery API
  description: >
    - Qovery is the fastest way to deploy your full-stack apps on any Cloud
    provider.

    - ℹ️ The API is stable and still in development.
  contact:
    name: Qovery Product Team
    url: https://www.qovery.com
    email: support+api+documentation@qovery.com
  x-logo:
    url: https://console.qovery.com/assets/logos/logo-white.svg
    altText: Qovery
servers:
  - url: https://api.qovery.com
security:
  - bearerAuth: []
  - ApiKeyAuth: []
tags:
  - name: Account
  - name: Account Info
  - name: Alert Receivers
  - name: Alert Rules
  - name: Admin
  - name: ArgoCD
  - name: Application
  - name: Application Actions
  - name: Application Configuration
  - name: Application Database
  - name: Application Deployment Restriction
  - name: Application Deployment History
  - name: Application Environment Variable
  - name: Application Logs
  - name: Application Main Calls
  - name: Application Secret
  - name: Application Annotations Group
  - name: Applications
  - name: AutoscalingPolicy
  - name: Container
  - name: Container Actions
  - name: Container Configuration
  - name: Container Database
  - name: Container Deployment History
  - name: Container Environment Variable
  - name: Container Logs
  - name: Container Main Calls
  - name: Container Registry
  - name: Container Secret
  - name: Container Annotations Group
  - name: Containers
  - name: Deployment Stage Main Calls
  - name: Job
  - name: Job Actions
  - name: Job Configuration
  - name: Job Database
  - name: Job Deployment Restriction
  - name: Job Deployment History
  - name: Job Environment Variable
  - name: Job Logs
  - name: Job Main Calls
  - name: Job Registry
  - name: Job Secret
  - name: Job Annotations Group
  - name: Jobs
  - name: KedaTriggerAuthentication
  - name: Helm
  - name: Helm Actions
  - name: Helm Configuration
  - name: Helm Database
  - name: Helm Deployment Restriction
  - name: Helm Deployment History
  - name: Helm Logs
  - name: Helm Main Calls
  - name: Helm Repository
  - name: Helms
  - name: Backups
  - name: Billing
  - name: Blueprint Catalog
  - name: Cloud Provider
  - name: Cloud Provider Credentials
  - name: Clusters
  - name: Custom Domain
  - name: Container Custom Domain
  - name: Database
  - name: Database Actions
  - name: Database Application
  - name: Database Container
  - name: Database Deployment History
  - name: Database Main Calls
  - name: Database Annotations Group
  - name: Databases
  - name: Environment
  - name: Environment Actions
  - name: Environment Deployment History
  - name: Environment Deployment Rule
  - name: Environment Logs
  - name: Environment Main Calls
  - name: Environment Secret
  - name: Environment Variable
  - name: Environments
  - name: Git
  - name: Github App
  - name: Git repositories
  - name: Members
  - name: Organization
  - name: Organization Account Git Repositories
  - name: Organization Cluster Lock
  - name: Organization Main Calls
  - name: Organization Custom Role
  - name: Organization Event
  - name: Organization Api Token
  - name: Organization Webhook
  - name: Organization Annotations Group
  - name: Organization Labels Group
  - name: Organization Enterprise Connection
  - name: Project
  - name: Project Deployment Rule
  - name: Project Environment Variable
  - name: Project Main Calls
  - name: Project Secret
  - name: Projects
  - name: Referral & Rewards
  - name: Secret Manager Access
  - name: Terraforms
  - name: Terraform Main Calls
  - name: Terraform Resources
  - name: Terraform Deployment History
  - name: Terraform Deployment Restriction
  - name: Container Registries
  - name: Helm Repositories
  - name: User Sign Up
  - name: Variable Main Calls
  - name: Helm Custom Domain
  - name: Lifecycle Template Main Calls
  - name: Blueprint Main Calls
paths:
  /blueprint/{blueprintId}:
    patch:
      tags:
        - Blueprint Main Calls
      summary: Update a blueprint service
      description: >-
        Persists new values for a deployed blueprint service. Intended to be
        called after reviewing the diff returned by GET
        /blueprint/{blueprintId}/update.

        `variables` and `spec_overrides` follow JSON Merge Patch (RFC 7396)
        semantics: non-null value on a key upserts it, null value removes it,
        absent keys are left untouched, and passing null for the whole field
        leaves all existing values unchanged.

        **Note:** `name`, `tag`, and `icon` are required on every call.
      operationId: updateBlueprint
      parameters:
        - $ref: '#/components/parameters/blueprintId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BlueprintUpdateRequest'
      responses:
        '200':
          description: Blueprint updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BlueprintResponse'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
components:
  parameters:
    blueprintId:
      name: blueprintId
      in: path
      description: Blueprint ID
      required: true
      schema:
        type: string
        format: uuid
  schemas:
    BlueprintUpdateRequest:
      type: object
      required:
        - name
        - tag
        - icon
      properties:
        name:
          type: string
          description: Display name for the service
          example: my-postgres
        tag:
          type: string
          description: Catalog tag identifying the target blueprint version
          example: aws/postgres/17/1.1.0
        icon:
          type: string
          format: uri
          description: Icon URL for the service
          example: https://cdn.qovery.com/icons/postgresql.svg
        variables:
          type: object
          description: >-
            RFC 7396 patch map keyed by variable name. Non-null value upserts
            the variable; null value removes it. Absent keys are left untouched.
            Omitting the field entirely is equivalent to an empty map — no
            variables are modified.
          additionalProperties:
            $ref: '#/components/schemas/BlueprintUpdateVariableValue'
            nullable: true
        spec_overrides:
          allOf:
            - $ref: '#/components/schemas/BlueprintSpecOverrides'
          nullable: true
          description: >-
            JSON Merge Patch (RFC 7396) applied to the stored spec_overrides
            (see `BlueprintSpecOverrides` for the list of valid fields). A
            non-null field value upserts the override; a null value removes it.
            Pass null or omit the field entirely to leave all existing overrides
            unchanged.
    BlueprintResponse:
      type: object
      required:
        - id
        - catalog_url
        - tag
        - environment_id
      properties:
        id:
          type: string
          format: uuid
        catalog_url:
          type: string
          format: uri
          description: URL to the blueprint catalog entry
        tag:
          type: string
          example: aws/postgres/17/1.0.1
        environment_id:
          type: string
          format: uuid
    BlueprintUpdateVariableValue:
      type: object
      description: >-
        Value object for a variable in a patch map. Set the map value to null to
        remove the variable.
      required:
        - value
      properties:
        value:
          type: string
        is_secret:
          type: boolean
          default: false
    BlueprintSpecOverrides:
      type: object
      description: >-
        Engine-level overrides applied on top of the blueprint manifest. Only
        fields whose corresponding manifest field is `overridable: true` are
        accepted; submitting a non-overridable field returns 422.

        **Terraform / OpenTofu blueprints**

        `engine_version` is **required** on create. The value must be one of the
        versions listed in `spec.engine.terraform.allowedValues` (or
        `opentofu.allowedValues`) in the manifest.

        **Helm blueprints**

        `engine_version`, `credentials`, and `backend` are ignored. Only
        `timeout` and the resource fields apply.
      properties:
        engine_version:
          type: string
          description: >-
            Terraform or OpenTofu version to use for the apply job. Required
            when the blueprint engine type is `terraform` or `opentofu`. Must be
            one of the versions in the manifest's `allowedValues` list.
          example: 1.13.3
        credentials:
          type: string
          enum:
            - cluster
            - env
          description: >-
            How the apply job authenticates against the cloud provider.
            `cluster` reuses the cluster's cloud credentials (default). `env`
            expects the user to supply provider credentials as environment
            variables on the service.
          example: cluster
        backend:
          type: string
          enum:
            - qovery
            - user_provided
          description: >-
            Where the Terraform state is stored. `qovery` stores state in a
            Kubernetes secret managed by Qovery (default). `user_provided`
            delegates to a user-controlled remote backend declared in the
            manifest's `backend.user_provided` block.
          example: qovery
        timeout:
          type: integer
          description: >-
            Maximum duration in seconds for a single apply job before it is
            marked as timed out. Overrides the manifest's `spec.engine.timeout`.
          example: 3600
        cpu:
          type: string
          description: >-
            CPU request/limit for the apply job pod (Kubernetes-style, e.g.
            `500m`). Overrides `spec.engine.resources.cpu` in the manifest.
          example: 500m
        ram:
          type: string
          description: >-
            Memory request/limit for the apply job pod (e.g. `512Mi`, `1Gi`).
            Overrides `spec.engine.resources.ram` in the manifest.
          example: 512Mi
        storage:
          type: string
          description: >-
            Ephemeral storage for the apply job pod — used for state files and
            provider plugins (e.g. `1Gi`). Overrides
            `spec.engine.resources.storage` in the manifest.
          example: 1Gi
      example:
        engine_version: 1.13.3
        credentials: cluster
        backend: qovery
  responses:
    '400':
      description: Bad request
    '401':
      description: Access token is missing or invalid
    '403':
      description: Access forbidden
    '404':
      description: Resource not found
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        JWT tokens should be used with OIDC account (human to machine). JWT
        tokens used by the Qovery console to communicate with the API have a
        TTL. Curl Example ' curl https://console.qovery.com/organization -H
        "Authorization: Bearer $qovery_token" '
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Token API are generated by Qovery to manage machine to machine
        interaction and do not have a TTL. Curl Example ' curl
        https://console.qovery.com/organization -H "Authorization: Token
        $qovery_token" '

````