---
title: "Shared"
method: GET
path: "/plans/shared/{share_id}"
tags: ["plans"]
---

# Shared

`GET /plans/shared/{share_id}`

## Request

- Base URL: `https://api.imperfect.co` (the document declares no server; this is the origin it was published from)
- URL: `https://api.imperfect.co/plans/shared/{share_id}`
- Auth: none declared

## Path parameters

- `share_id` string, required

## Response `200`

Successful Response

- PlanSharePage
  - `weeks` PlanWeek[]
    - `starts` string, date, required
    - `ends` string, date, required
    - `status` 'done' | 'written' | 'planned', required
    - `unknown_days` integer, required
    - `by_sport` object
    - `pace` PacePoint[], nullable
      - `focus_key` string, required
      - `source` 'check' | 'planned', required
      - `rate` RateBand, required
        - `low` number, required
        - `high` number, required
      - `distance_m` RateBand
        - `low` number, required
        - `high` number, required
      - `duration_s` RateBand
        - `low` number, required
        - `high` number, required
      - `protocol` string, nullable
      - `date` string, date, nullable
  - `units` WeekUnits
    - `distance` 'km' | 'mi'
    - `climb` 'm' | 'ft'
  - `chart` PlanChart
    - `focuses` ChartFocus[], required
      - `key` string, required
      - `label` string, required
      - `sport` 'run' | 'ride' | 'swim' | 'strength' | 'mobility' | 'walk' | 'other', required
      - `third` 'climb' | 'pace', nullable
      - `target_status` 'known' | 'none' | 'unknown'
      - `goal_rate` RateBand
        - `low` number, required
        - `high` number, required
      - `units` DisplayUnits
        - `distance` 'm' | 'km' | 'mi' | 'yd', nullable
        - `pace` 's/km' | 'min/km' | 'min/mi' | 'km/h' | 'mph' | 'min/100m' | 'min/100yd', nullable
        - `climb` 'm' | 'ft', nullable
  - `as_of` string, date, required
  - `created_at` string, date-time, required
  - `goal_title` string, nullable
  - `goal_line` string, nullable
  - `goal_sport` string, nullable
  - `goal_date` GoalDate: A dated commitment at its honest resolution. ``precision`` is the band: the date is normalized to the first day of its period (month and season → the 1st of that month, quarter → the quarter's first month), so a coarse band can never license a specific day the source hasn't published — the same normalization the plan rim applies to its events. A season keeps its own start month rather than the quarter holding it (#2945). Seasons do not line up with calendar quarters, and which months one covers depends on the athlete's hemisphere: spring is March in Mexico and September in Chile. The model writes the month it means, so the band runs three months from there; folding it into a quarter kept January and February for a spring and dropped April and May.
    - `date` string, date, required
    - `precision` 'day' | 'month' | 'quarter' | 'season'
  - `goal_kind` 'destination' | 'practice', nullable
  - `goal_week` GoalWeekCommitment[], nullable
    - `name` string, required: The commitment, in two or three words.
    - `detail` string, required: What it is, as the document states it.
  - `goal_url` string, nullable
  - `blocks` PlanBlock[], required
    - `starts` string, date, required
    - `ends` string, date, nullable
    - `purpose` string, nullable
  - `days` PlanDay[], required
    - `date` string, date, required
    - `headline` string, nullable
    - `reading_state` 'present' | 'missing', nullable
    - `morning` PlanPeriod
      - `activities` PlanActivity[]
        - `title` string, nullable
        - `sport` 'run' | 'ride' | 'swim' | 'strength' | 'mobility' | 'walk' | 'other', required
        - `duration` PlanDuration
          - `hours` number, nullable
          - `minutes` number, nullable
        - `distance` PlanDistance
          - `value` number, required
          - `unit` 'km' | 'mi' | 'm' | 'yd', required
          - `approximate` boolean, nullable
        - `climb` PlanClimb
          - `value` number, required
          - `unit` 'm' | 'ft', required
        - `intensity` string, nullable
        - `why` string, nullable
      - `markdown` string, nullable
    - `afternoon` PlanPeriod
      - `activities` PlanActivity[]
        - `title` string, nullable
        - `sport` 'run' | 'ride' | 'swim' | 'strength' | 'mobility' | 'walk' | 'other', required
        - `duration` PlanDuration
          - `hours` number, nullable
          - `minutes` number, nullable
        - `distance` PlanDistance
          - `value` number, required
          - `unit` 'km' | 'mi' | 'm' | 'yd', required
          - `approximate` boolean, nullable
        - `climb` PlanClimb
          - `value` number, required
          - `unit` 'm' | 'ft', required
        - `intensity` string, nullable
        - `why` string, nullable
      - `markdown` string, nullable
    - `evening` PlanPeriod
      - `activities` PlanActivity[]
        - `title` string, nullable
        - `sport` 'run' | 'ride' | 'swim' | 'strength' | 'mobility' | 'walk' | 'other', required
        - `duration` PlanDuration
          - `hours` number, nullable
          - `minutes` number, nullable
        - `distance` PlanDistance
          - `value` number, required
          - `unit` 'km' | 'mi' | 'm' | 'yd', required
          - `approximate` boolean, nullable
        - `climb` PlanClimb
          - `value` number, required
          - `unit` 'm' | 'ft', required
        - `intensity` string, nullable
        - `why` string, nullable
      - `markdown` string, nullable
  - `timeline` PlanStretch[]
    - `kind` 'periods' | 'day' | 'week' | 'stretch', required
    - `starts` string, date, required
    - `ends` string, date, nullable
    - `focus` string, nullable
    - `summary` string, nullable
    - `load` PlanLoad
      - `hours` number, nullable
      - `distance` PlanDistance
        - `value` number, required
        - `unit` 'km' | 'mi' | 'm' | 'yd', required
        - `approximate` boolean, nullable
    - `sessions` PlanActivity[]
      - `title` string, nullable
      - `sport` 'run' | 'ride' | 'swim' | 'strength' | 'mobility' | 'walk' | 'other', required
      - `duration` PlanDuration
        - `hours` number, nullable
        - `minutes` number, nullable
      - `distance` PlanDistance
        - `value` number, required
        - `unit` 'km' | 'mi' | 'm' | 'yd', required
        - `approximate` boolean, nullable
      - `climb` PlanClimb
        - `value` number, required
        - `unit` 'm' | 'ft', required
      - `intensity` string, nullable
      - `why` string, nullable
    - `lighter` boolean, nullable
  - `changes` PlanChange[], required
    - `seq` integer, required
    - `date` string, date, required
    - `touched` PlanTouch[], required
      - `date` string, date, required
      - `through` string, date, nullable
      - `period` 'morning' | 'afternoon' | 'evening', nullable
      - `activity_index` integer, nullable
    - `reason` string, nullable
    - `description` string, nullable
  - `earlier_pages` PlanEarlierPage[], required
    - `share_id` string, required
    - `created_at` string, date-time, required
  - `events` PlanEvent[]
    - `name` string, required
    - `date` string, date, nullable, required
    - `through` string, date, nullable
    - `first` boolean, required
  - `previous_version_date` string, date, nullable
  - `checkpoints` PlanCheckpoint[], nullable
    - `date` string, date, required
    - `through` string, date, nullable
    - `name` string, nullable
    - `measure` string, nullable
  - `factor_links` FactorLink[], nullable
    - `factor` string, required
    - `description` string, required
  - `cadence` integer, nullable
  - `app_url` string

## Other responses

- `422`: Validation Error

## Changes

- **2026-11-02** `33a8821ec7f8`: 2 info
  - added the optional property `chart` to the response with the `200` status
  - added the optional property `weeks/items/pace` to the response with the `200` status
- **2026-10-22** `bc8c745a41a9`: 6 info
  - added the optional property `days/items/afternoon/anyOf[subschema #1: PlanPeriod]/activities/items/distance/anyOf[subschema #1: PlanDistance]/approximate` to the response with the `200` status
  - added the optional property `days/items/evening/anyOf[subschema #1: PlanPeriod]/activities/items/distance/anyOf[subschema #1: PlanDistance]/approximate` to the response with the `200` status
  - added the optional property `days/items/morning/anyOf[subschema #1: PlanPeriod]/activities/items/distance/anyOf[subschema #1: PlanDistance]/approximate` to the response with the `200` status
  - added the optional property `timeline/items/load/anyOf[subschema #1: PlanLoad]/distance/anyOf[subschema #1: PlanDistance]/approximate` to the response with the `200` status
  - …2 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/imperfect/apis/imperfect-api/changes/plans/shared/:share_id/get.md)

---

[API](https://skmtc.dev/imperfect/apis/imperfect-api.md) - [All operations](https://skmtc.dev/imperfect/apis/imperfect-api/llms.txt) - [OpenAPI document](https://skmtc.dev/imperfect/apis/imperfect-api/revisions/33a8821ec7f8?raw)
