---
title: "Patient detail (360)"
method: GET
path: "/api/analytics/patient-access/{patient_id}"
tags: ["analytics"]
---

# Patient detail (360)

`GET /api/analytics/patient-access/{patient_id}`

Profile card, activation milestones, and the paginated activity timeline for a single patient.

## Path parameters

- `patient_id` string, uuid, required

## Query parameters

- `per_page` integer — Activity timeline page size.
- `page` integer — Activity timeline page number (1-based).

## Response `200`

Successful Response

- PatientDetailResponse — Patient 360: profile card, activation milestones, and the paginated activity timeline.
  - `patient` RegisteredPatientRow, required — One registered patient in the list, with activation milestones.
    - `patient_id` string, uuid, required — Patient UUID
    - `user_id` string, uuid, required — User UUID
    - `first_name` string, nullable
    - `last_name` string, nullable
    - `email` string, nullable
    - `phone` string, nullable
    - `registration_method` string, nullable — email / google / apple / facebook
    - `registration_reason` string, nullable — Reason selected at registration
    - `email_verified` boolean, nullable
    - `registered_at` string, date-time, nullable
    - `questionnaire_started_at` string, date-time, nullable
    - `questionnaire_completed_at` string, date-time, nullable
    - `story_registration_opened_at` string, date-time, nullable
    - `story_registration_completed_at` string, date-time, nullable
    - `has_opened_journey_step` boolean — Whether the patient opened at least one journey step
    - `completed_journey_steps_count` integer — Completed journey steps
    - `free_call_booked_at` string, date-time, nullable
    - `free_call_done` boolean, nullable
    - `intro_call_booked_at` string, date-time, nullable
    - `intro_call_done` boolean, nullable
    - `corabea_plus_opened_at` string, date-time, nullable
    - `has_corabea_plus_subscription` boolean, nullable
    - `last_activity_at` string, date-time, nullable
    - `tracked_sessions` integer
    - `total_foreground_seconds` integer
    - `avg_session_seconds` number, nullable
  - `activation` RegisteredPatientActivityEvent[], required — Activation milestones, oldest first
    - `type` 'registration' | 'story_opened' | 'story_completed' | 'questionnaire_opened' | 'questionnaire_completed' | 'free_call_booked' | 'intro_call_booked' | 'corabea_plus_opened', required — Event type
    - `occurred_at` string, date-time, required — Event time
  - `accesses_all_time` integer, required — All-time accesses
  - `accesses_last_90d` integer, required — Accesses in the last 90 days
  - `accesses_last_30d` integer, required — Accesses in the last 30 days
  - `accesses_last_7d` integer, required — Accesses in the last 7 days
  - `usage_seconds_all_time` integer, required — Measured foreground seconds, all time
  - `usage_seconds_last_30d` integer, required — Measured foreground seconds in the last 30 days
  - `usage_seconds_last_7d` integer, required — Measured foreground seconds in the last 7 days
  - `timeline_total` integer, required — Total events in the activity timeline
  - `per_page` integer, required
  - `page` integer, required
  - `timeline` PatientAccessEvent[], required — Paginated activity timeline, most recent first
    - `type` 'app_open' | 'usage_session' | 'login' | 'logout' | 'call_booking_free' | 'call_booking_intro' | 'stripe_checkout' | 'event_registration' | 'availability_request' | 'questionnaire_opened' | 'questionnaire_completed' | 'journey_step_opened' | 'journey_content_opened' | 'journey_content_completed' | 'corabea_plus_card_opened' | 'notifications_list' | 'faq_list' | 'packages_list' | 'video_type_filter' | 'video_opened', required — Event type
    - `occurred_at` string, date-time, required — Event time
    - `last_hit_at` string, date-time, nullable — Last open within the session (app-open only)
    - `target_key` string, nullable — What the event is about: content/event id, questionnaire/availability/video/checkout type, journey step code
    - `appointment_at` string, date-time, nullable — Scheduled datetime of the linked appointment (call bookings and appointment-tied checkouts)
    - `card_date` string, date, nullable — Day represented by a Corabea+ program card
    - `client_occurred_at` string, date-time, nullable — Client-reported start time (app-open or usage-session)
    - `open_type` 'cold_start' | 'resume' — How the native app entered the foreground.
    - `channel` 'native_app' | 'web' — Delivery channel used for an app-open event.
    - `platform` 'ios' | 'android' | 'web' — Runtime platform used for an app-open event.
    - `form_factor` 'mobile' | 'tablet' | 'desktop' — Physical device class used for an app-open event.
    - `app_version` string, nullable — Native app version (app-open or usage-session)
    - `device_id` string, uuid, nullable — Stable app installation or browser UUID (app-open or usage-session)
    - `foreground_seconds` integer, nullable — Measured foreground time (usage-session only)
    - `usage_ended_at` string, date-time, nullable — Server end time (usage-session only)
    - `usage_status` 'active' | 'ended'

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/corabea/apis/corabea-api.md) · [All operations](https://skmtc.dev/corabea/apis/corabea-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/corabea/corabea-api/revisions/13c1bce1bdc4/schema)
