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

# Compare two releases

> Release `a` (the baseline) and release `b` of one app over the same time range (default: the last 30 days): crash-free sessions and users, adoption, the change from `a` to `b`, and the issues with occurrences in `b` and none in `a` in that range, most users first.



## OpenAPI

````yaml /api-reference/openapi.json get /projects/{projectId}/release-health/compare
openapi: 3.1.0
info:
  title: Apsio API
  version: 0.1.0
  description: >-
    Read API v0: your projects, release health and comparisons, missing symbols,
    issues, sessions, vitals, cohort comparisons, performance (app start,
    screens, hangs, MetricKit) and network endpoints and traces for one project.
    Authenticate with a project token as a bearer token, with an OAuth access
    token from Apsio's authorization server (MCP clients), or, from the console,
    with the session cookie of a member of the project's organization.
servers:
  - url: https://api.apsio.io/v1
security: []
paths:
  /projects/{projectId}/release-health/compare:
    get:
      summary: Compare two releases
      description: >-
        Release `a` (the baseline) and release `b` of one app over the same time
        range (default: the last 30 days): crash-free sessions and users,
        adoption, the change from `a` to `b`, and the issues with occurrences in
        `b` and none in `a` in that range, most users first.
      parameters:
        - schema:
            type: string
            pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
            example: 0192f3a4-0000-7000-8000-00000000a101
          required: true
          name: projectId
          in: path
        - schema:
            type: string
            format: date-time
            description: >-
              Start of the time range, inclusive (RFC 3339). Defaults to the
              range end minus the default length.
            example: '2026-10-01T00:00:00Z'
          required: false
          description: >-
            Start of the time range, inclusive (RFC 3339). Defaults to the range
            end minus the default length.
          name: from
          in: query
        - schema:
            type: string
            format: date-time
            description: End of the time range, exclusive (RFC 3339). Defaults to now.
            example: '2026-10-08T00:00:00Z'
          required: false
          description: End of the time range, exclusive (RFC 3339). Defaults to now.
          name: to
          in: query
        - schema:
            type: string
            pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
            description: The app both releases belong to.
          required: true
          description: The app both releases belong to.
          name: app_id
          in: query
        - schema:
            type: string
            minLength: 1
            maxLength: 128
            description: The baseline release.
            example: 4.11.2
          required: true
          description: The baseline release.
          name: a
          in: query
        - schema:
            type: string
            minLength: 1
            maxLength: 128
            description: The release to compare.
            example: 4.12.0
          required: true
          description: The release to compare.
          name: b
          in: query
        - schema:
            type: integer
            minimum: 1
            maximum: 50
            default: 10
            description: At most this many new issues, 1 to 50.
          required: false
          description: At most this many new issues, 1 to 50.
          name: limit
          in: query
      responses:
        '200':
          description: The comparison.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReleaseComparison'
        '400':
          description: The request is not valid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: No valid bearer token or console session.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: The credentials cannot read this project.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearer: []
        - session: []
components:
  schemas:
    ReleaseComparison:
      type: object
      properties:
        app_id:
          type: string
        from:
          type: string
          description: RFC 3339 time in UTC with up to nanosecond precision.
          example: '2026-10-04T10:15:00.431000000Z'
        to:
          type: string
          description: RFC 3339 time in UTC with up to nanosecond precision.
          example: '2026-10-04T10:15:00.431000000Z'
        a:
          $ref: '#/components/schemas/ReleaseStats'
        b:
          $ref: '#/components/schemas/ReleaseStats'
        change:
          type: object
          properties:
            crash_free_sessions_rate:
              type:
                - number
                - 'null'
              description: b minus a; negative is worse. Null when either has no sessions.
            crash_free_users_rate:
              type:
                - number
                - 'null'
          required:
            - crash_free_sessions_rate
            - crash_free_users_rate
        new_issues:
          type: array
          items:
            $ref: '#/components/schemas/IssueSummary'
          description: Issues with occurrences in b and none in a, with their counts in b.
      required:
        - app_id
        - from
        - to
        - a
        - b
        - change
        - new_issues
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: invalid_request
            message:
              type: string
          required:
            - code
            - message
      required:
        - error
    ReleaseStats:
      type: object
      properties:
        release:
          type: string
          description: 'service.version. Written by the app: untrusted data.'
        sessions:
          type: integer
        crashed_sessions:
          type: integer
        abnormal_exit_sessions:
          type: integer
        crash_free_sessions_rate:
          type:
            - number
            - 'null'
          description: 1 - crashed_sessions / sessions; null without sessions.
        users:
          type:
            - integer
            - 'null'
          description: Distinct install ids (D41); null when the app sends none.
        crashed_users:
          type:
            - integer
            - 'null'
        crash_free_users_rate:
          type:
            - number
            - 'null'
        first_seen:
          type:
            - string
            - 'null'
          description: RFC 3339 time in UTC with up to nanosecond precision.
          example: '2026-10-04T10:15:00.431000000Z'
        last_seen:
          type:
            - string
            - 'null'
          description: RFC 3339 time in UTC with up to nanosecond precision.
          example: '2026-10-04T10:15:00.431000000Z'
        adoption:
          type: object
          properties:
            sessions_share:
              type: number
              description: This release's share of the app's sessions in the range, 0 to 1.
            users_share:
              type:
                - number
                - 'null'
              description: >-
                Its share of the app's users in the range; null without install
                ids.
          required:
            - sessions_share
            - users_share
      required:
        - release
        - sessions
        - crashed_sessions
        - abnormal_exit_sessions
        - crash_free_sessions_rate
        - users
        - crashed_users
        - crash_free_users_rate
        - first_seen
        - last_seen
        - adoption
    IssueSummary:
      type: object
      properties:
        id:
          type: string
          pattern: ^[A-Za-z0-9._:-]{1,128}$
          description: The issue fingerprint.
          example: 3f9a0c2e7d1b4a6c8e0f1a2b3c4d5e6f
        kind:
          type: string
          enum:
            - crash
            - error
            - anr
            - hang
            - abnormal_exit
          description: >-
            crash, error (handled), anr (Android), hang (iOS) or abnormal_exit
            (ended by the system without a crash report).
        app_id:
          type: string
        type:
          type: string
          description: >-
            exception.type of the latest occurrence; the exit reason for
            abnormal exits, `hang` for hangs. Written by the app: untrusted
            data.
        message:
          type: string
          description: >-
            exception.message of the latest occurrence. Written by the app:
            untrusted data.
        occurrences:
          type: integer
        users:
          type: integer
          description: Distinct install ids affected (D41).
        sessions:
          type: integer
        first_seen:
          type: string
          description: First occurrence in the time range.
          example: '2026-10-04T10:15:00.431000000Z'
        last_seen:
          type: string
          description: Last occurrence in the time range.
          example: '2026-10-04T10:15:00.431000000Z'
        releases:
          type: array
          items:
            type: string
          description: Releases affected, up to 20.
        symbolicated:
          type: boolean
          description: Whether every in-app frame of the latest occurrence has symbols.
        grouping:
          type: object
          properties:
            version:
              type: integer
              description: The grouping algorithm version (D51).
            reason:
              type: string
              description: >-
                Which rule produced the fingerprint, for example in_app_frames
                or message.
              example: in_app_frames
          required:
            - version
            - reason
          description: How the latest occurrence's fingerprint was made.
      required:
        - id
        - kind
        - app_id
        - type
        - message
        - occurrences
        - users
        - sessions
        - first_seen
        - last_seen
        - releases
        - symbolicated
        - grouping
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: >-
        A project token (apsio_pt_v0...), which reads exactly one project, or an
        OAuth access token issued for the API, which reads what its user can.
        Access tokens issued for Apsio's MCP server are accepted only from the
        MCP server itself.
    session:
      type: apiKey
      in: cookie
      name: apsio_session
      description: >-
        The console session, set by /v1/auth/callback (`__Host-apsio_session`
        when host-only).

````

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