---
title: "Resolve Share Link Endpoint"
method: GET
path: "/s/{share_id}"
tags: ["sharing-public"]
---

# Resolve Share Link Endpoint

`GET /s/{share_id}`

## Request

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

## Path parameters

- `share_id` string, required

## Response `200`

Successful Response

- union
  - PublicShareResponse
    - `share_id` string, required
    - `permission` string, required
    - `share_type` string
    - `artifacts_status` string, required
    - `commit_sequence_number` integer, nullable
    - `include_source` boolean
    - `strategy_id` string, nullable
    - `strategy` PublicStrategyResponse
      - `name` string, required
      - `description` string, nullable
      - `equity_curve_url` string, required
      - `sharpe_ratio` number, nullable
      - `sharpe_ratio_active` number, nullable
      - `total_return_pct` number, nullable
      - `max_drawdown_pct` number, nullable
      - `win_rate_pct` number, nullable
      - `trade_model` string, nullable
      - `backtest_period_start` string, date, required
      - `backtest_period_end` string, date, required
      - `backtest_period_last_bar` string, date, nullable
      - `fork_count` integer, required
      - `component_names` string[], required
      - `market_count` integer, required
      - `is_live` boolean, required
      - `live_since` string, date-time, nullable
      - `max_leverage` number, nullable
      - `max_daily_loss_pct` number, nullable
      - `fork_url` string, required
      - `share_url` string, required
      - `card_image_url` string, required
    - `backtest` PublicBacktestResponse: Public response for backtest-only shares. SECURITY BOUNDARY: No component_names, no fork_url, no pipeline spec.
      - `strategy_name` string, required
      - `backtest_period_start` string, date, required
      - `backtest_period_end` string, date, required
      - `backtest_period_last_bar` string, date, nullable
      - `sharpe_ratio` number, nullable
      - `sharpe_ratio_active` number, nullable
      - `total_return_pct` number, nullable
      - `max_drawdown_pct` number, nullable
      - `win_rate_pct` number, nullable
      - `sortino_ratio` number, nullable
      - `calmar_ratio` number, nullable
      - `total_trades` integer, nullable
      - `profit_factor` number, nullable
      - `trade_model` string, nullable
      - `positions` integer, nullable
      - `position_win_rate_pct` number, nullable
      - `share_url` string, required
      - `card_image_url` string, required
      - `signup_url` string, required
  - PublicLiveShareV1
    - `schema_version` 1
    - `share_type` 'live'
    - `share_id` string, required
    - `policy_revision` integer, required
    - `is_preview` boolean
    - `title` string, required
    - `about` PublicLiveAbout
      - `markdown` string, required
      - `updated_at` string, required
    - `lifecycle` PublicLiveLifecycle, required
      - `status` 'LIVE' | 'PAUSED' | 'STOPPED', required
      - `deployed_at` string, required
      - `stopped_at` string, nullable
    - `data` PublicLiveDataState, required
      - `as_of` string, nullable
      - `freshness` PublicMoneyFreshness
        - `state` 'COVERED' | 'SYNCING' | 'LEGACY' | 'UNMANAGED', required
        - `fresh_as_of` string, nullable
        - `synced_through` string, nullable
    - `stats` PublicLivePerformanceStats, required
      - `total_return_pct` number, nullable
      - `current_drawdown_pct` number, nullable
      - `max_drawdown_pct` number, nullable
      - `max_drawdown_duration_days` number, nullable
      - `sharpe` number, nullable
      - `sortino` number, nullable
      - `win_rate_pct` number, nullable
      - `profit_factor` number, nullable
      - `total_trades` integer, nullable
      - `winning_trades` integer, nullable
      - `losing_trades` integer, nullable
    - `disclosure` PublicLiveDisclosure, required
      - `show_dollar_values` boolean, required
      - `show_positions` boolean, required
      - `include_strategy_source` boolean, required
      - `show_creator_profile` boolean, required
      - `discoverability` 'unlisted' | 'public', required
      - `approximate_position_notionals_inferable` boolean, required
      - `summary` string[], required
    - `series` PublicLiveSeriesRef, required
      - `url` string, required
      - `ranges` string[]
      - `default_range` 'all'
    - `dollar_values` PublicLiveDollarSummary
      - `state` 'available' | 'unavailable', required
      - `current_account_value` number, nullable
      - `cumulative_pnl` number, nullable
    - `positions` PublicLivePositions
      - `state` 'current' | 'stale' | 'unavailable' | 'final', required
      - `as_of` string, nullable
      - `gross_exposure_pct` number, nullable
      - `long_exposure_pct` number, nullable
      - `short_exposure_pct` number, nullable
      - `items` PublicLivePositionItem[]
        - `symbol` string, required
        - `side` 'LONG' | 'SHORT', required
        - `weight_pct` number, required
    - `strategy` PublicLiveStrategySummary
      - `name` string, required
      - `version_label` string, nullable
      - `component_names` string[]
      - `graph_url` string, required
      - `fork_url` string, required
    - `creator` PublicCreatorSummary
      - `display_name` string, required
      - `avatar_url` string, nullable
      - `bio` string, nullable
      - `profile_url` string, required
    - `card` PublicLiveCardRef, required
      - `url` string, required
  - PublicPaperShareV1: ``GET /s/{share_id}`` for a ``share_type 'paper'`` link. The live payload's shape (``PublicLiveShareV1``) with ``share_type: "paper"``, the share's ``artifacts_status`` and the ``paper`` block. It has no money field by construction: no ``dollar_values`` and no ``creator``; the closed model refuses either. Two blocks are the link's choice (FDR-7, amending S05 §3.12's "no positions, no strategy"): ``positions`` (symbol, side and weight only, computed on read from the paper ledger) exactly when ``disclosure.show_positions``, and ``strategy`` (name, version, graph and fork URLs, never a component list) exactly when ``disclosure.include_strategy_source``. ``show_dollar_values`` and ``show_creator_profile`` are always False.
    - `schema_version` 1
    - `share_type` 'paper'
    - `share_id` string, required
    - `policy_revision` integer, required
    - `title` string, required
    - `about` PublicLiveAbout
      - `markdown` string, required
      - `updated_at` string, required
    - `lifecycle` PublicLiveLifecycle, required
      - `status` 'LIVE' | 'PAUSED' | 'STOPPED', required
      - `deployed_at` string, required
      - `stopped_at` string, nullable
    - `data` PublicLiveDataState, required
      - `as_of` string, nullable
      - `freshness` PublicMoneyFreshness
        - `state` 'COVERED' | 'SYNCING' | 'LEGACY' | 'UNMANAGED', required
        - `fresh_as_of` string, nullable
        - `synced_through` string, nullable
    - `stats` PublicLivePerformanceStats, required
      - `total_return_pct` number, nullable
      - `current_drawdown_pct` number, nullable
      - `max_drawdown_pct` number, nullable
      - `max_drawdown_duration_days` number, nullable
      - `sharpe` number, nullable
      - `sortino` number, nullable
      - `win_rate_pct` number, nullable
      - `profit_factor` number, nullable
      - `total_trades` integer, nullable
      - `winning_trades` integer, nullable
      - `losing_trades` integer, nullable
    - `disclosure` PublicLiveDisclosure, required
      - `show_dollar_values` boolean, required
      - `show_positions` boolean, required
      - `include_strategy_source` boolean, required
      - `show_creator_profile` boolean, required
      - `discoverability` 'unlisted' | 'public', required
      - `approximate_position_notionals_inferable` boolean, required
      - `summary` string[], required
    - `series` PublicLiveSeriesRef, required
      - `url` string, required
      - `ranges` string[]
      - `default_range` 'all'
    - `positions` PublicLivePositions
      - `state` 'current' | 'stale' | 'unavailable' | 'final', required
      - `as_of` string, nullable
      - `gross_exposure_pct` number, nullable
      - `long_exposure_pct` number, nullable
      - `short_exposure_pct` number, nullable
      - `items` PublicLivePositionItem[]
        - `symbol` string, required
        - `side` 'LONG' | 'SHORT', required
        - `weight_pct` number, required
    - `strategy` PublicLiveStrategySummary
      - `name` string, required
      - `version_label` string, nullable
      - `component_names` string[]
      - `graph_url` string, required
      - `fork_url` string, required
    - `card` PublicLiveCardRef, required
      - `url` string, required
    - `artifacts_status` 'pending' | 'ready' | 'failed', required
    - `paper` PublicPaperBlock, required: The ``paper`` block: S05 §3.12.1's fields and nothing else. ``parity`` is IC-03-2 from ``parity_block`` (its one owner; no ``components``); ``gaps`` is S04's derivation verbatim, IC-04-3's ``{from, to (null while ongoing), kind}`` (PT2-57).
      - `status` 'LIVE' | 'PAUSED' | 'STOPPED', required
      - `deployed_at` string, required
      - `record_age_days` integer, required
      - `simulated_capital` number, required
      - `parity` PublicParityBlock, required: The public paper share's parity subset: IC-03-2 as it stood before PT2-93. The public page parses this with a strict schema, so the share keeps its shape while a release rolls (an app pod on the old schema would refuse a new key); the run page's detail read carries the PT2-93 additions.
        - `residual_bps` number, nullable, required
        - `status` 'tracking' | 'drifting' | 'under_review', required
        - `window_start` string, date-time, nullable, required
        - `window_end` string, date-time, nullable, required
        - `as_of` string, date-time, nullable, required
        - `eval_count` integer, required
        - `meter_eligible` boolean, required
        - `day0_backtest_run_id` string, nullable, required
      - `equity` PublicPaperEquityRef, required: The paper record's series: the share's public series route (PT2-57).
        - `url` string, required
      - `gaps` EquityGapResponse[], required
        - `from` string, date-time, required
        - `to` string, date-time, nullable, required
        - `kind` 'missed' | 'failed' | 'stalled', required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/usekeel/apis/keel-api.md) · [All operations](https://skmtc.dev/usekeel/apis/keel-api/llms.txt) · [OpenAPI document](https://skmtc.dev/usekeel/apis/keel-api/revisions/3191ca10b0ab?raw)
