> ## 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.

# Whether to recommend pausing a rollout

> One release against the one before it at the same age, in installs with a crash: a recommendation to consider pausing the rollout, with its counts and the sample's limits, or a plain answer that there is none, or that there are too few bad installs to say. Under 20 bad installs there is no verdict and no ratio. Worse means the interval's lower end is above 1.5×, per install, per session, and against every other release in the same hours. Only the newest release of the app is checked, for 14 days from its first session from a store, or else its first that is not a development build. Apsio pauses nothing, holds no store key and cannot see how far a rollout has gone. For what the crashes have in common, read `/projects/{projectId}/probable-cause` with `release` and `baseline`.



## OpenAPI

````yaml /api-reference/openapi.json get /projects/{projectId}/rollout-check
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}/rollout-check:
    get:
      summary: Whether to recommend pausing a rollout
      description: >-
        One release against the one before it at the same age, in installs with
        a crash: a recommendation to consider pausing the rollout, with its
        counts and the sample's limits, or a plain answer that there is none, or
        that there are too few bad installs to say. Under 20 bad installs there
        is no verdict and no ratio. Worse means the interval's lower end is
        above 1.5×, per install, per session, and against every other release in
        the same hours. Only the newest release of the app is checked, for 14
        days from its first session from a store, or else its first that is not
        a development build. Apsio pauses nothing, holds no store key and cannot
        see how far a rollout has gone. For what the crashes have in common,
        read `/projects/{projectId}/probable-cause` with `release` and
        `baseline`.
      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
            pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
            description: 'The app: iOS and Android differ almost everywhere.'
          required: true
          description: 'The app: iOS and Android differ almost everywhere.'
          name: app_id
          in: query
        - schema:
            type: string
            minLength: 1
            maxLength: 128
            description: The release to check.
          required: true
          description: The release to check.
          name: release
          in: query
        - schema:
            type: string
            minLength: 1
            maxLength: 128
            description: >-
              The release to compare it with. Default: the one before it in the
              app.
          required: false
          description: >-
            The release to compare it with. Default: the one before it in the
            app.
          name: baseline
          in: query
        - schema:
            type: string
            enum:
              - release
              - debug
              - all
            description: 'Which builds: `release` (the default), `debug` or `all`.'
          required: false
          description: 'Which builds: `release` (the default), `debug` or `all`.'
          name: build
          in: query
      responses:
        '200':
          description: The recommendation, or why there is none.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RolloutCheck'
        '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'
        '410':
          description: >-
            The project or its organization is being deleted (`erasing`):
            nothing more to read; do not retry.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: >-
            Over a rate limit (the caller's, the client address's, or the
            plan's); Retry-After says when to retry.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearer: []
components:
  schemas:
    RolloutCheck:
      type: object
      properties:
        summary:
          type: string
          description: 'Apsio''s own words and numbers: no release name (D79).'
        verdict:
          type: string
          enum:
            - consider_pausing
            - no_recommendation
            - too_few
          description: >-
            `consider_pausing`: worse at the same age, for a person to weigh.
            `no_recommendation`: says nothing about whether the release is fine.
            `too_few`: under the minimum sample, so no verdict and no ratio.
        blocked:
          type: boolean
          description: >-
            With `no_recommendation`: the release reads worse per install, and
            something else may explain it. `limits` says what.
        subject:
          type: object
          properties:
            unit:
              type: string
              enum:
                - installs
                - sessions
              description: >-
                What is counted: installs, or sessions where the app sends no
                install id.
            untrusted:
              type: object
              properties:
                release:
                  type: string
                  description: 'The release looked at. Written by the app: untrusted data.'
                baseline:
                  type:
                    - string
                    - 'null'
                  description: >-
                    The release it is compared with. Written by the app:
                    untrusted data.
              required:
                - release
                - baseline
          required:
            - unit
            - untrusted
        windows:
          type:
            - object
            - 'null'
          properties:
            release:
              type: object
              properties:
                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'
              required:
                - from
                - to
            baseline:
              type: object
              properties:
                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'
              required:
                - from
                - to
              description: >-
                The earlier release at the same age or, past retention, its last
                hours kept.
            same_age:
              type: boolean
            age_hours:
              type: integer
            data_through:
              type: string
              description: RFC 3339 time in UTC with up to nanosecond precision.
              example: '2026-10-04T10:15:00.431000000Z'
          required:
            - release
            - baseline
            - same_age
            - age_hours
            - data_through
        evidence:
          type:
            - object
            - 'null'
          properties:
            release:
              type: object
              properties:
                bad:
                  type: integer
                installs:
                  type: integer
                sessions:
                  type: integer
                rate:
                  type: number
                  description: bad / installs.
              required:
                - bad
                - installs
                - sessions
                - rate
            baseline:
              type: object
              properties:
                bad:
                  type: integer
                installs:
                  type: integer
                sessions:
                  type: integer
                rate:
                  type: number
                  description: bad / installs.
              required:
                - bad
                - installs
                - sessions
                - rate
            concurrent:
              type: object
              properties:
                bad:
                  type: integer
                installs:
                  type: integer
                sessions:
                  type: integer
                rate:
                  type: number
                  description: bad / installs.
              required:
                - bad
                - installs
                - sessions
                - rate
              description: Every other release in the same hours.
            per_install:
              type:
                - object
                - 'null'
              properties:
                rate_ratio:
                  type: number
                interval:
                  type: array
                  prefixItems:
                    - type: number
                    - type: number
              required:
                - rate_ratio
                - interval
              description: >-
                The release against the earlier one at the same age or, past
                retention, its last hours kept; null with too few.
            per_session:
              type:
                - object
                - 'null'
              properties:
                rate_ratio:
                  type: number
                interval:
                  type: array
                  prefixItems:
                    - type: number
                    - type: number
              required:
                - rate_ratio
                - interval
              description: >-
                The same per session: installs that opened the app more had more
                chances.
            same_hours:
              type:
                - object
                - 'null'
              properties:
                rate_ratio:
                  type: number
                interval:
                  type: array
                  prefixItems:
                    - type: number
                    - type: number
              required:
                - rate_ratio
                - interval
              description: >-
                Against every other release in the same hours, bad installs per
                session, Mantel-Haenszel in 6-hour buckets, with a one-sided 95%
                interval: what hits every release shows here. Null under 5 bad
                installs on the others.
          required:
            - release
            - baseline
            - concurrent
            - per_install
            - per_session
            - same_hours
        sample:
          type: object
          properties:
            bad_installs:
              type: integer
            installs:
              type: integer
            values_tested:
              type: integer
              description: >-
                Every look a release can have, one an hour for 14 days: the
                interval is widened for them all, as a check that repeats would
                otherwise fire by chance.
            power:
              type: string
              enum:
                - too_few
                - large_effects_only
                - normal
            needed:
              type:
                - integer
                - 'null'
              description: 'With `too_few`: how many more bad installs it takes.'
            estimated:
              type: boolean
          required:
            - bad_installs
            - installs
            - values_tested
            - power
            - needed
            - estimated
        limits:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                enum:
                  - young_release
                  - large_effects_only
                  - not_same_age
                  - no_store_session
                  - more_sessions
                  - every_release_rose
                  - no_concurrent
                  - newer_release
                  - past_window
                  - no_baseline
                  - estimated
                  - no_install_ids
                  - crashes_only
              text:
                type: string
            required:
              - code
              - text
          description: What this answer could not see. `text` is in English.
        would_clear_it:
          type:
            - string
            - 'null'
        computed_at:
          type: string
          description: RFC 3339 time in UTC with up to nanosecond precision.
          example: '2026-10-04T10:15:00.431000000Z'
      required:
        - summary
        - verdict
        - blocked
        - subject
        - windows
        - evidence
        - sample
        - limits
        - would_clear_it
        - computed_at
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: invalid_request
            message:
              type: string
            subject:
              type: string
              enum:
                - organization
                - project
              description: >-
                With `erasing` (410) only: what is being deleted, the
                organization or the project.
          required:
            - code
            - message
      required:
        - error
  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.

````

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