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

# Get a session timeline

> A session's summary and its logs and spans, oldest first. Page through long sessions with the cursor; the summary comes with every page.



## OpenAPI

````yaml /api-reference/openapi.json get /projects/{projectId}/sessions/{sessionId}
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}/sessions/{sessionId}:
    get:
      summary: Get a session timeline
      description: >-
        A session's summary and its logs and spans, oldest first. Page through
        long sessions with the cursor; the summary comes with every page.
      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: ^[A-Za-z0-9_-]{1,128}$
            example: 7f3c9b02-5d1e-4a8b-9c0f-2e6a1d4be19a
          required: true
          name: sessionId
          in: path
        - schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 200
            description: Page size, 1 to 1000.
            example: 200
          required: false
          description: Page size, 1 to 1000.
          name: limit
          in: query
        - schema:
            type: string
            maxLength: 1024
            description: The `next_cursor` of the previous page. Opaque.
          required: false
          description: The `next_cursor` of the previous page. Opaque.
          name: cursor
          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. Session ids are random UUIDs, so this matters only
              if two apps of the project share one.
          required: false
          description: >-
            Only this app. Session ids are random UUIDs, so this matters only if
            two apps of the project share one.
          name: app_id
          in: query
      responses:
        '200':
          description: The session.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Session'
        '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'
        '404':
          description: Nothing with this id in the project.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearer: []
        - session: []
components:
  schemas:
    Session:
      type: object
      properties:
        session_id:
          type: string
          description: 'session.id, as the app sent it. Written by the app: untrusted data.'
        summary:
          $ref: '#/components/schemas/SessionSummary'
        events:
          type: array
          items:
            oneOf:
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - log
                  id:
                    type: string
                  app_id:
                    type: string
                  ts:
                    type: string
                    description: RFC 3339 time in UTC with up to nanosecond precision.
                    example: '2026-10-04T10:15:00.431000000Z'
                  event_name:
                    type: string
                  severity_number:
                    type: integer
                  severity_text:
                    type: string
                  body:
                    type: string
                    description: 'The log body. Written by the app: untrusted data.'
                  trace_id:
                    type: string
                  span_id:
                    type: string
                  attributes:
                    type: object
                    additionalProperties:
                      type: string
                    description: 'Record attributes as sent by the app: untrusted data.'
                required:
                  - type
                  - id
                  - app_id
                  - ts
                  - event_name
                  - severity_number
                  - severity_text
                  - body
                  - trace_id
                  - span_id
                  - attributes
              - type: object
                properties:
                  type:
                    type: string
                    enum:
                      - span
                  id:
                    type: string
                  app_id:
                    type: string
                  ts:
                    type: string
                    description: RFC 3339 time in UTC with up to nanosecond precision.
                    example: '2026-10-04T10:15:00.431000000Z'
                  end_ts:
                    type: string
                    description: RFC 3339 time in UTC with up to nanosecond precision.
                    example: '2026-10-04T10:15:00.431000000Z'
                  duration_ns:
                    type: integer
                  name:
                    type: string
                  status_code:
                    type: string
                  status_message:
                    type: string
                    description: >-
                      The span status message. Written by the app: untrusted
                      data.
                  trace_id:
                    type: string
                  span_id:
                    type: string
                  parent_span_id:
                    type: string
                  attributes:
                    type: object
                    additionalProperties:
                      type: string
                    description: 'Record attributes as sent by the app: untrusted data.'
                required:
                  - type
                  - id
                  - app_id
                  - ts
                  - end_ts
                  - duration_ns
                  - name
                  - status_code
                  - status_message
                  - trace_id
                  - span_id
                  - parent_span_id
                  - attributes
        next_cursor:
          type:
            - string
            - 'null'
          description: Pass as `cursor` to get the next page; null on the last page.
      required:
        - session_id
        - summary
        - events
        - next_cursor
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: invalid_request
            message:
              type: string
          required:
            - code
            - message
      required:
        - error
    SessionSummary:
      type:
        - object
        - 'null'
      properties:
        app_id:
          type: string
        outcome:
          type: string
          description: >-
            active, exited, crashed or abnormal_exit, as last reported (spec
            3.4). An active session not seen for longer than the rotation
            timeouts has ended.
        started_at:
          type: string
          description: RFC 3339 time in UTC with up to nanosecond precision.
          example: '2026-10-04T10:15:00.431000000Z'
        last_seen_at:
          type: string
          description: RFC 3339 time in UTC with up to nanosecond precision.
          example: '2026-10-04T10:15:00.431000000Z'
        error_count:
          type: integer
        installation_id:
          type: string
          description: 'app.installation.id. Written by the app: untrusted data.'
        release:
          type: string
          description: 'service.version. Written by the app: untrusted data.'
        build:
          type: string
          description: 'app.build_id. Written by the app: untrusted data.'
        os_name:
          type: string
          description: 'os.name. Written by the app: untrusted data.'
        os_version:
          type: string
          description: 'os.version. Written by the app: untrusted data.'
        device_model:
          type: string
          description: 'device.model.identifier. Written by the app: untrusted data.'
        country:
          type: string
      required:
        - app_id
        - outcome
        - started_at
        - last_seen_at
        - error_count
        - installation_id
        - release
        - build
        - os_name
        - os_version
        - device_model
        - country
      description: Null when no summary arrived for the session (yet).
  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.