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

# A funnel over screens

> How many sessions showed these screens in this order (`steps`, repeated, 2 to 6 app.screen.name values; other screens in between are fine), in the time range (default: the last 7 days, at most 30), within the session or within `within_minutes` of the first step. Per step: sessions and users, conversion from the step before and from the first, the median time from the step before, and the screens shown instead by the sessions that stopped there. Screens come from the app.screen.view events (spec 8.6), back navigation included, or for a session without any (an SDK before 8.6), from its app.screen.load spans (spec 8.1), which miss a screen shown again without being created again.



## OpenAPI

````yaml /api-reference/openapi.json get /projects/{projectId}/funnels
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}/funnels:
    get:
      summary: A funnel over screens
      description: >-
        How many sessions showed these screens in this order (`steps`, repeated,
        2 to 6 app.screen.name values; other screens in between are fine), in
        the time range (default: the last 7 days, at most 30), within the
        session or within `within_minutes` of the first step. Per step: sessions
        and users, conversion from the step before and from the first, the
        median time from the step before, and the screens shown instead by the
        sessions that stopped there. Screens come from the app.screen.view
        events (spec 8.6), back navigation included, or for a session without
        any (an SDK before 8.6), from its app.screen.load spans (spec 8.1),
        which miss a screen shown again without being created again.
      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: Only this app.
          required: false
          description: Only this app.
          name: app_id
          in: query
        - schema:
            type: string
            maxLength: 128
            description: Only this release.
          required: false
          description: Only this release.
          name: release
          in: query
        - schema:
            anyOf:
              - type: string
                minLength: 1
                maxLength: 256
              - type: array
                items:
                  type: string
                  minLength: 1
                  maxLength: 256
            description: 'The screens, in order: repeat the parameter.'
          required: true
          description: 'The screens, in order: repeat the parameter.'
          name: steps
          in: query
        - schema:
            type: integer
            minimum: 1
            maximum: 1440
            description: 'From the first step. Default: anywhere later in the session.'
          required: false
          description: 'From the first step. Default: anywhere later in the session.'
          name: within_minutes
          in: query
      responses:
        '200':
          description: The funnel.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Funnel'
        '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:
    Funnel:
      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'
        within_minutes:
          type:
            - integer
            - 'null'
        steps:
          type: array
          items:
            type: object
            properties:
              screen:
                type: string
                description: 'app.screen.name. Written by the app: untrusted data.'
              sessions:
                type: integer
              users:
                type: integer
                description: Distinct install ids (D41).
              conversion_from_previous:
                type:
                  - number
                  - 'null'
              conversion_from_first:
                type:
                  - number
                  - 'null'
              median_ms_from_previous:
                type:
                  - number
                  - 'null'
                description: On the session's first pass through the steps.
              dropped:
                type:
                  - object
                  - 'null'
                properties:
                  sessions:
                    type: integer
                    description: Sessions that reached this step and not the next.
                  ended:
                    type: integer
                    description: Of those, the ones that showed no other screen after it.
                  next_screens:
                    type: array
                    items:
                      type: object
                      properties:
                        screen:
                          type: string
                          description: 'app.screen.name. Written by the app: untrusted data.'
                        sessions:
                          type: integer
                      required:
                        - screen
                        - sessions
                required:
                  - sessions
                  - ended
                  - next_screens
                description: Null for the last step.
            required:
              - screen
              - sessions
              - users
              - conversion_from_previous
              - conversion_from_first
              - median_ms_from_previous
              - dropped
      required:
        - from
        - to
        - within_minutes
        - steps
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: invalid_request
            message:
              type: string
          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.
    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.