> ## Documentation Index
> Fetch the complete documentation index at: https://bunnynet-cb9733c2-support-migration.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Patch Application

> Partially updates an existing application using JSON Merge Patch semantics. Only provided fields will be updated; existing fields not included in the request will remain unchanged. For arrays (containers, volumes, endpoints), items with matching IDs will be updated, items without IDs will be added as new, and items not included will be deleted.



## OpenAPI

````yaml https://api-mc.opsbunny.net/docs/public/swagger.json patch /apps/{appId}
openapi: 3.0.4
info:
  title: Public API
  description: 'Public API endpoints for user consumption. Release version: v1.9.36.0'
  version: '1.0'
servers:
  - url: https://api.bunny.net/mc
security:
  - AccessKey: []
paths:
  /apps/{appId}:
    patch:
      tags:
        - Applications
      summary: Patch Application
      description: >-
        Partially updates an existing application using JSON Merge Patch
        semantics. Only provided fields will be updated; existing fields not
        included in the request will remain unchanged. For arrays (containers,
        volumes, endpoints), items with matching IDs will be updated, items
        without IDs will be added as new, and items not included will be
        deleted.
      operationId: PatchApplication
      parameters:
        - name: appId
          in: path
          description: The ID of the application to update
          required: true
          schema:
            type: string
      requestBody:
        description: Partial application configuration with only the fields to update
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchApplicationRequest'
          text/json:
            schema:
              $ref: '#/components/schemas/PatchApplicationRequest'
          application/*+json:
            schema:
              $ref: '#/components/schemas/PatchApplicationRequest'
      responses:
        '200':
          description: Application was successfully updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddApplicationResponse'
        '400':
          description: Invalid input.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: User is unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: User has invalid card or suspended.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Application not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '422':
          description: Unprocessable entity.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Unexpected server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
components:
  schemas:
    PatchApplicationRequest:
      type: object
      properties:
        name:
          maxLength: 100
          minLength: 1
          pattern: '[A-Za-z0-9-\s]+'
          type: string
          nullable: true
        runtimeType:
          $ref: '#/components/schemas/ApplicationRuntimeType'
        autoScaling:
          $ref: '#/components/schemas/AutoscalingSettings'
        regionSettings:
          $ref: '#/components/schemas/UpdateRegionSettingsRequest'
        containerTemplates:
          type: array
          items:
            $ref: '#/components/schemas/ContainerRequest'
          nullable: true
        volumes:
          type: array
          items:
            $ref: '#/components/schemas/VolumeRequest'
          nullable: true
      additionalProperties: false
    AddApplicationResponse:
      type: object
      properties:
        id:
          type: string
      additionalProperties: false
    ErrorDetails:
      type: object
      properties:
        title:
          type: string
          description: A short, human-readable summary of the problem type.
          readOnly: true
        status:
          type: integer
          description: The HTTP status code.
          format: int32
          readOnly: true
        detail:
          type: string
          description: >-
            A human-readable explanation specific to this occurrence of the
            problem.
          nullable: true
          readOnly: true
        instance:
          type: string
          description: >-
            A URI reference that identifies the specific occurrence of the
            problem.
          nullable: true
          readOnly: true
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ValidationError'
          description: Additional validation errors for field-specific issues.
          nullable: true
          readOnly: true
        id:
          type: string
          description: >-
            The application ID, returned as an RFC 7807 extension field when
            relevant (e.g. partial save errors).

            Matches the "id" field from successful create response for
            consistency.
          nullable: true
          readOnly: true
      additionalProperties: false
      description: RFC 7807 Problem Details response model.
    ProblemDetails:
      type: object
      properties:
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          format: int32
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
      additionalProperties: {}
    ApplicationRuntimeType:
      enum:
        - shared
        - reserved
      type: string
    AutoscalingSettings:
      required:
        - max
        - min
      type: object
      properties:
        min:
          maximum: 1000
          minimum: 1
          type: integer
          format: int32
          example: 1
        max:
          maximum: 1000
          minimum: 1
          type: integer
          format: int32
          example: 10
      additionalProperties: false
    UpdateRegionSettingsRequest:
      type: object
      properties:
        allowedRegionIds:
          type: array
          items:
            type: string
          nullable: true
          example:
            - DE
            - UK
            - US
        requiredRegionIds:
          type: array
          items:
            type: string
          nullable: true
          example:
            - DE
        maxAllowedRegions:
          type: integer
          format: int32
          nullable: true
          example: 5
        nodeSelectors:
          type: object
          additionalProperties:
            type: string
          nullable: true
      additionalProperties: false
    ContainerRequest:
      required:
        - imageName
        - imageNamespace
        - imageRegistryId
        - imageTag
        - name
      type: object
      properties:
        id:
          type: string
          description: >-
            Absence of the id means it is a new container. Presence of the id
            means it is an update of the existing.
          nullable: true
        name:
          maxLength: 50
          minLength: 1
          type: string
        image:
          type: string
          nullable: true
        imageName:
          minLength: 1
          pattern: '[a-zA-Z0-9]+(?:[./_-]{1,2}[a-zA-Z0-9]+)*'
          type: string
        imageNamespace:
          minLength: 1
          pattern: '[a-zA-Z0-9]+(?:[./_-]{1,2}[a-zA-Z0-9]+)*'
          type: string
        imageTag:
          minLength: 1
          pattern: '[a-zA-Z0-9]+(?:[._-]{1,2}[a-zA-Z0-9]+)*'
          type: string
        imageDigest:
          pattern: sha256:[a-z0-9]{64}
          type: string
          nullable: true
        imageRegistryId:
          minLength: 1
          type: string
        imagePullPolicy:
          $ref: '#/components/schemas/ImagePullPolicy'
        entryPoint:
          $ref: '#/components/schemas/ContainerEntryPoint'
        probes:
          $ref: '#/components/schemas/ContainerProbes'
        environmentVariables:
          type: array
          items:
            $ref: '#/components/schemas/EnvironmentVariable'
        endpoints:
          type: array
          items:
            $ref: '#/components/schemas/EndpointRequest'
        volumeMounts:
          type: array
          items:
            $ref: '#/components/schemas/VolumeMountRequest'
      additionalProperties: false
    VolumeRequest:
      required:
        - name
        - size
      type: object
      properties:
        name:
          maxLength: 50
          minLength: 1
          type: string
        size:
          maximum: 100
          minimum: 1
          type: integer
          format: int32
          example: 5
      additionalProperties: false
    ValidationError:
      required:
        - message
      type: object
      properties:
        field:
          type: string
          nullable: true
        message:
          type: string
      additionalProperties: false
    ImagePullPolicy:
      enum:
        - always
        - ifNotPresent
      type: string
    ContainerEntryPoint:
      type: object
      properties:
        command:
          type: string
          nullable: true
        commandArray:
          type: array
          items:
            type: string
          nullable: true
        arguments:
          type: string
          nullable: true
        argumentsArray:
          type: array
          items:
            type: string
          nullable: true
        workingDirectory:
          type: string
          nullable: true
      additionalProperties: false
    ContainerProbes:
      type: object
      properties:
        startup:
          $ref: '#/components/schemas/ContainerProbe'
        readiness:
          $ref: '#/components/schemas/ContainerProbe'
        liveness:
          $ref: '#/components/schemas/ContainerProbe'
      additionalProperties: false
    EnvironmentVariable:
      required:
        - name
      type: object
      properties:
        name:
          minLength: 1
          type: string
        value:
          type: string
      additionalProperties: false
    EndpointRequest:
      required:
        - displayName
      type: object
      properties:
        displayName:
          maxLength: 50
          minLength: 1
          type: string
        cdn:
          $ref: '#/components/schemas/CdnEndpointRequest'
        anycast:
          $ref: '#/components/schemas/AnycastEndpointRequest'
      additionalProperties: false
    VolumeMountRequest:
      required:
        - mountPath
        - name
      type: object
      properties:
        name:
          maxLength: 50
          minLength: 1
          type: string
        mountPath:
          minLength: 1
          pattern: ^/(?!.*//)(?!.*\.\.)(?!.*\s)([a-zA-Z0-9._-]+/?)+$
          type: string
      additionalProperties: false
    ContainerProbe:
      type: object
      properties:
        initialDelaySeconds:
          maximum: 3600
          minimum: 1
          type: integer
          format: int32
          default: 10
          nullable: true
        periodSeconds:
          maximum: 3600
          minimum: 1
          type: integer
          format: int32
          default: 10
          nullable: true
        timeoutSeconds:
          maximum: 3600
          minimum: 1
          type: integer
          format: int32
          default: 7
          nullable: true
        failureThreshold:
          maximum: 1000
          minimum: 1
          type: integer
          format: int32
          default: 3
          nullable: true
        successThreshold:
          maximum: 1000
          minimum: 1
          type: integer
          format: int32
          default: 1
          nullable: true
        httpGet:
          $ref: '#/components/schemas/HttpGetProbe'
        tcpSocket:
          $ref: '#/components/schemas/TcpSocketProbe'
        grpc:
          $ref: '#/components/schemas/GrpcProbe'
      additionalProperties: false
    CdnEndpointRequest:
      type: object
      properties:
        isSslEnabled:
          type: boolean
        stickySessions:
          $ref: '#/components/schemas/StickySessionSettings'
        pullZoneId:
          type: integer
          format: int32
          nullable: true
        portMappings:
          maxItems: 1
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/ContainerPortMappingRequest'
      additionalProperties: false
    AnycastEndpointRequest:
      required:
        - portMappings
        - type
      type: object
      properties:
        type:
          $ref: '#/components/schemas/AnycastIpProtocolVersion'
        portMappings:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/ContainerPortMappingRequest'
      additionalProperties: false
    HttpGetProbe:
      type: object
      properties:
        request:
          $ref: '#/components/schemas/HttpGetProbeRequestDetails'
        response:
          $ref: '#/components/schemas/HttpGetProbeResponseDetails'
      additionalProperties: false
    TcpSocketProbe:
      type: object
      properties:
        request:
          $ref: '#/components/schemas/TcpSocketProbeRequestDetails'
      additionalProperties: false
    GrpcProbe:
      type: object
      properties:
        request:
          $ref: '#/components/schemas/GrpcProbeRequestDetails'
      additionalProperties: false
    StickySessionSettings:
      required:
        - sessionHeaders
      type: object
      properties:
        enabled:
          type: boolean
        sessionHeaders:
          maxItems: 3
          minItems: 1
          type: array
          items:
            type: string
        cookieName:
          type: string
      additionalProperties: false
    ContainerPortMappingRequest:
      required:
        - containerPort
      type: object
      properties:
        containerPort:
          maximum: 65535
          minimum: 1
          type: integer
          format: int32
        exposedPort:
          maximum: 65535
          minimum: 1
          type: integer
          format: int32
          nullable: true
        protocols:
          type: array
          items:
            $ref: '#/components/schemas/Protocol'
      additionalProperties: false
    AnycastIpProtocolVersion:
      enum:
        - iPv4
      type: string
    HttpGetProbeRequestDetails:
      type: object
      properties:
        path:
          type: string
        portNumber:
          maximum: 65535
          minimum: 1
          type: integer
          format: int32
      additionalProperties: false
    HttpGetProbeResponseDetails:
      type: object
      properties:
        expectedStatusCode:
          $ref: '#/components/schemas/HttpStatusCode'
      additionalProperties: false
    TcpSocketProbeRequestDetails:
      type: object
      properties:
        portNumber:
          maximum: 65535
          minimum: 1
          type: integer
          format: int32
      additionalProperties: false
    GrpcProbeRequestDetails:
      type: object
      properties:
        portNumber:
          maximum: 65535
          minimum: 1
          type: integer
          format: int32
        serviceName:
          type: string
          description: >-
            If this is not specified, the default behavior is to probe the
            server's overall health status.
          nullable: true
      additionalProperties: false
    Protocol:
      enum:
        - tcp
        - udp
        - sctp
      type: string
    HttpStatusCode:
      enum:
        - continue
        - switchingProtocols
        - processing
        - earlyHints
        - ok
        - created
        - accepted
        - nonAuthoritativeInformation
        - noContent
        - resetContent
        - partialContent
        - multiStatus
        - alreadyReported
        - imUsed
        - multipleChoices
        - movedPermanently
        - found
        - seeOther
        - notModified
        - useProxy
        - unused
        - temporaryRedirect
        - permanentRedirect
        - badRequest
        - unauthorized
        - paymentRequired
        - forbidden
        - notFound
        - methodNotAllowed
        - notAcceptable
        - proxyAuthenticationRequired
        - requestTimeout
        - conflict
        - gone
        - lengthRequired
        - preconditionFailed
        - requestEntityTooLarge
        - requestUriTooLong
        - unsupportedMediaType
        - requestedRangeNotSatisfiable
        - expectationFailed
        - misdirectedRequest
        - unprocessableEntity
        - locked
        - failedDependency
        - upgradeRequired
        - preconditionRequired
        - tooManyRequests
        - requestHeaderFieldsTooLarge
        - unavailableForLegalReasons
        - internalServerError
        - notImplemented
        - badGateway
        - serviceUnavailable
        - gatewayTimeout
        - httpVersionNotSupported
        - variantAlsoNegotiates
        - insufficientStorage
        - loopDetected
        - notExtended
        - networkAuthenticationRequired
      type: string
  securitySchemes:
    AccessKey:
      type: apiKey
      description: Please enter a valid personal API key.
      name: AccessKey
      in: header

````