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

# Get the changes of an app's deploy

> Get the definition a deploy of the app ran with and the definition of the app's newest deploy that succeeded before it, each written as ravion-app.yaml, to…



## OpenAPI

````yaml https://api.ravion.com/openapi.yaml get /apps/{id}/deploys/{pipelineRunId}/changes
openapi: 3.0.0
info:
  title: Ravion
  version: 0.0.0
servers:
  - url: https://api.ravion.com
security:
  - BearerAuth: []
tags:
  - name: Projects
  - name: Environments
  - name: FeatureFlags
  - name: Pipelines
  - name: PipelineRuns
  - name: TerraformResources
  - name: TerraformExecutionSummaries
  - name: PipelineStepExecutions
  - name: AwsCloudWatch
  - name: AwsAmp
  - name: PipelineVersions
  - name: Organizations
  - name: Stacks
  - name: StackWorkspaces
  - name: Auth
  - name: OAuth
  - name: User
  - name: Health
  - name: Memberships
  - name: ServiceAccounts
  - name: Integrations
  - name: AwsDefaultNetworks
  - name: AwsAccounts
  - name: ApiKeys
  - name: EksPrometheus
  - name: EksLoki
  - name: ExecutionEnvironments
  - name: ModuleDefinitions
  - name: ModuleCategories
  - name: ModuleVersions
  - name: ModuleInstances
  - name: DefaultValueDefinitions
  - name: DefaultValues
  - name: CodeSources
  - name: Github
  - name: GitHub Actions
  - name: Alerts
  - name: Gitlab
  - name: Slack
  - name: Git
  - name: MergeQueues
  - name: Values
  - name: Deployments
  - name: DeploymentResources
  - name: InfrastructureEvents
  - name: WebSocket
  - name: Domains
  - name: AcmCertificates
  - name: NotificationDestinations
  - name: NotificationDispatches
  - name: NotificationEvents
  - name: NotificationRules
  - name: Activity
  - name: Describe
  - name: Reports
  - name: BillingPlans
  - name: BillingAccounts
  - name: BillingCycles
  - name: BillingUsageSummaries
  - name: BillingAddOns
  - name: BillingInvoices
  - name: Authorization
  - name: Sandboxes
  - name: SandboxCommands
  - name: SandboxPorts
  - name: Apps
paths:
  /apps/{id}/deploys/{pipelineRunId}/changes:
    get:
      tags:
        - Apps
      summary: Get the changes of an app's deploy
      description: >-
        Get the definition a deploy of the app ran with and the definition of
        the app's newest deploy that succeeded

        before it, each written as `ravion-app.yaml`, to compare them. `from` is
        absent for the app's first deploy.


        Environment variables are as `ravion-app.yaml` wrote them, so a module
        reference whose output changed reads the

        same. Variables passed with the deploy are never returned.


        Returns 404 when the app does not exist, and `DEPLOY_NOT_FOUND` when the
        pipeline run is not one of its deploys.
      operationId: GetAppDeployChanges
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
        - in: path
          name: pipelineRunId
          required: true
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  data:
                    $ref: '#/components/schemas/AppDeployChanges'
                required:
                  - data
                type: object
          description: The request has succeeded.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.UserFacingErrorData'
          description: The request is invalid or malformed.
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.UserFacingErrorData'
          description: You are not authenticated
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.UserFacingErrorData'
          description: You do not have permission to access this resource.
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.UserFacingErrorData'
          description: The server cannot find the requested resource.
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Errors.UserFacingErrorData'
          description: Server error
components:
  schemas:
    AppDeployChanges:
      additionalProperties: false
      description: >-
        The definition a deploy ran with, and the definition of the app's newest
        deploy that succeeded before it.
      properties:
        from:
          allOf:
            - $ref: '#/components/schemas/AppDeployRevision'
          description: >-
            The newest deploy of the app that succeeded before this one. Absent
            when none did.
        to:
          allOf:
            - $ref: '#/components/schemas/AppDeployRevision'
          description: This deploy.
      required:
        - to
      type: object
    Errors.UserFacingErrorData:
      additionalProperties: false
      description: |-
        User-facing error presentation data.
        This is what the API returns to the frontend after formatting ErrorData
        using CEL templates from the error registry.

        Used for both:
        - Error fields on domain models (e.g., PipelineRun.error)
        - API error response bodies (HTTP 4xx/5xx responses)
      properties:
        action:
          allOf:
            - $ref: '#/components/schemas/Errors.Action'
          description: Optional action to help resolve the error
        code:
          description: Full error code, e.g., "Ravion:Pipeline:NOT_FOUND"
          type: string
        description:
          description: Additional description with more details
          type: string
        details:
          description: Structured details rendered as user-facing sections.
          items:
            $ref: '#/components/schemas/Errors.UserFacingErrorDetailSection'
          type: array
        isInternal:
          description: >-
            Indicates whether this error is internal (only set when
            ShowInternal=true).

            This allows SUPERADMINs to identify internal errors while viewing
            full details.
          type: boolean
        message:
          description: Main error message (required)
          type: string
        metadata:
          additionalProperties: {}
          description: >-
            Error params/metadata. Stripped for internal errors unless
            superadmin.
          type: object
        requestId:
          description: Request ID for correlating errors with server logs.
          type: string
      required:
        - code
        - message
      type: object
    AppDeployRevision:
      additionalProperties: false
      description: A deploy and the definition it ran with.
      properties:
        branch:
          description: >-
            Branch the deployed files were taken from. Absent when they were not
            on a branch.
          type: string
        commit:
          description: >-
            Commit the deployed files were taken from. Absent when they were not
            taken from a git commit.
          type: string
        file:
          allOf:
            - $ref: '#/components/schemas/App.AppFile'
          description: >-
            The definition the deploy ran with, written as `ravion-app.yaml` in
            its long form: every exposed port with its port and health check,
            sizes in their largest whole unit and the idle timeout as a
            duration. Environment variables are as `ravion-app.yaml` wrote them;
            variables passed with the deploy are never part of it.
        pipelineRunId:
          description: Pipeline run (`prun_*`) that carried out the deploy.
          type: string
      required:
        - pipelineRunId
        - file
      type: object
    Errors.Action:
      additionalProperties: false
      description: Action to help user resolve the error
      properties:
        label:
          description: Button/link label text
          type: string
        url:
          description: URL to navigate to for resolution
          type: string
      required:
        - label
        - url
      type: object
    Errors.UserFacingErrorDetailSection:
      additionalProperties: false
      description: Structured user-facing error detail section.
      properties:
        items:
          description: List of detail values for this section.
          items:
            type: string
          type: array
        object:
          additionalProperties: {}
          description: Structured detail payload for object rendering.
          type: object
        render:
          description: Rendering hint for clients. Valid values are list or object.
          type: string
        title:
          description: Detail section title shown in the UI.
          type: string
      required:
        - title
        - render
      type: object
    App.AppFile:
      additionalProperties: false
      description: >-
        `ravion-app.yaml`: how `ravion deploy` builds, starts and serves an app.
        Set exactly one of `compose` or `run`.
      properties:
        compose:
          anyOf:
            - $ref: '#/components/schemas/App.AppPath'
            - $ref: '#/components/schemas/App.AppFileCompose'
          description: >-
            A Docker Compose project: the compose file's path, or its long form.
            Ravion builds the services and starts them with `docker compose up
            --wait`.
        description:
          description: >-
            What the app is, in at most 500 characters, on one line or several.
            Shown on the app's overview.
          maxLength: 500
          type: string
        env:
          additionalProperties:
            anyOf:
              - type: string
              - type: number
              - type: boolean
          description: >-
            Environment variables, in order, for every command and every compose
            service. A value may reference an output of a module in the
            cluster's environment as `<< modules.<given id>.output.<key> >>`.
            Values are committed with this file: pass secrets with `ravion
            deploy --env` or `--env-file` instead. Names starting with `RAVION_`
            are reserved.
          type: object
        expose:
          additionalProperties:
            anyOf:
              - $ref: '#/components/schemas/App.AppHealthCheckPath'
              - $ref: '#/components/schemas/App.AppFileExposure'
          description: >-
            HTTP ports served at the app's URLs, in order, by name: a health
            check path, or the long form. Each name is 1 to 20 lowercase
            letters, digits or hyphens, starting and ending with a letter or
            digit, with no two hyphens in a row; for a compose app it is the
            service whose published port is served. The first is served at
            `https://<app>.<cluster domain>`, the others at
            `https://<app>-<name>.<cluster domain>`, under each of the App
            Cluster's domains; the long form adds domains of your own. Leave it
            out for an app that serves no port.
          type: object
        idle_timeout:
          anyOf:
            - $ref: '#/components/schemas/App.AppDuration'
            - $ref: '#/components/schemas/App.AppNeverPause'
          description: >-
            How long the app may go without a request or a running command
            before it is paused, such as `15m`. `0` never pauses it. Defaults to
            the cluster's default and may not exceed the cluster's limit.
        name:
          description: >-
            Name offered for a new app: 1 to 32 lowercase letters, digits or
            hyphens, starting and ending with a letter or digit, with no two
            hyphens in a row. It names the app's URLs. Defaults to the folder's
            name.
          maxLength: 32
          pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$
          type: string
        resources:
          allOf:
            - $ref: '#/components/schemas/App.AppFileResources'
          description: vCPUs, memory and disk.
        run:
          allOf:
            - $ref: '#/components/schemas/App.AppFileRun'
          description: Your own build and start commands, in place of `compose`.
      type: object
      x-go-type: app.File
      x-go-type-import:
        name: app
        path: ravion/schemas/app
    App.AppPath:
      description: A path relative to the folder that holds `ravion-app.yaml`.
      minLength: 1
      type: string
    App.AppFileCompose:
      additionalProperties: false
      description: The long form of `compose`.
      properties:
        file:
          allOf:
            - $ref: '#/components/schemas/App.AppPath'
          description: Compose file, relative to the folder that holds `ravion-app.yaml`.
        profiles:
          description: Compose profiles to enable.
          items:
            type: string
          type: array
        services:
          description: >-
            Services to build and start. Leave it out to build and start every
            service the enabled profiles include.
          items:
            type: string
          type: array
      required:
        - file
      type: object
    App.AppHealthCheckPath:
      description: An absolute HTTP path, such as `/` or `/readyz`.
      pattern: ^/
      type: string
    App.AppFileExposure:
      additionalProperties: false
      description: The long form of an exposed port.
      properties:
        domains:
          description: >-
            Domains of your own the port is also served at, such as
            `shop.example.com`. Ravion requests one certificate for all of the
            app's domains and gives you the DNS records to add at your DNS
            provider: the certificate's validation records and, for each domain,
            a record that points it at the App Cluster's load balancer. An app
            has at most 10 domains, no two exposures list the same domain, and
            at least one of them is at most 64 characters long. A domain may not
            be under Ravion's domain or under one of the App Cluster's domains,
            and may not be one another app or service already has. Removing a
            domain from the list releases it.
          items:
            $ref: '#/components/schemas/App.AppDomainName'
          maxItems: 10
          type: array
        health_check:
          allOf:
            - $ref: '#/components/schemas/App.AppHealthCheckPath'
          description: >-
            HTTP path requested to tell whether the port is ready. Defaults to
            `/`.
        port:
          description: >-
            Port inside the app. For a compose app it defaults to the port the
            service of this name publishes, and is needed only when the service
            publishes several. A `run` app always sets it.
          format: int32
          maximum: 65535
          minimum: 1
          type: integer
      type: object
    App.AppDuration:
      description: >-
        A duration in hours, minutes and seconds, such as `90s`, `15m` or
        `1h30m`, or `0`.
      pattern: ^(0|[0-9]+h(?:[0-9]+m)?(?:[0-9]+s)?|[0-9]+m(?:[0-9]+s)?|[0-9]+s)$
      type: string
    App.AppNeverPause:
      description: '`0`: the app never pauses.'
      format: int32
      maximum: 0
      minimum: 0
      type: integer
    App.AppFileResources:
      additionalProperties: false
      description: >-
        The app's size. Each value defaults to the cluster's default and may not
        exceed the cluster's limit.
      properties:
        cpu:
          description: vCPUs.
          format: int32
          minimum: 1
          type: integer
        disk:
          allOf:
            - $ref: '#/components/schemas/App.AppSize'
          description: Disk, a whole number of GiB, such as `20GiB`.
        memory:
          allOf:
            - $ref: '#/components/schemas/App.AppSize'
          description: Memory, such as `4GiB`.
      type: object
    App.AppFileRun:
      additionalProperties: false
      description: Your own commands, run in the folder that holds `ravion-app.yaml`.
      properties:
        build:
          description: Commands run in order on every deploy, before `start`.
          items:
            type: string
          type: array
        start:
          description: >-
            Commands run in order on every deploy, after `build`, and every time
            the app wakes. Each command must exit: start long-running processes
            in the background, for example with `docker run -d`.
          items:
            type: string
          minItems: 1
          type: array
      required:
        - start
      type: object
    App.AppDomainName:
      description: >-
        A domain name in a DNS zone you control, such as `shop.example.com`: two
        or more lowercase labels of letters, digits and hyphens, with no `*.`
        and no trailing dot.
      maxLength: 253
      pattern: >-
        ^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$
      type: string
    App.AppSize:
      description: >-
        A size: a whole number followed by `MiB`, `GiB` or `TiB`, such as
        `512MiB` or `4GiB`.
      pattern: ^[1-9][0-9]*(MiB|GiB|TiB)$
      type: string
  securitySchemes:
    BearerAuth:
      scheme: Bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.