Skip to documentation
Weavers Docs

Pages and endpoints

Tab to navigate · Enter to openEsc to close

Strategies API

Discover published strategies, inspect their evidence, and trace their ancestry.

GET/api/strategies

List published strategies

Discover publicly published strategies for your research tools. Use a returned strategyId to request its published detail or lineage.

Parameters

limitinteger · query · optional
Send a positive whole number. Values are clamped to 1–5000. Omitting this parameter on the strategy list currently applies no default cap; always specify it.

Behaviour and limits

  • An empty strategies array is a successful response when no public strategies are available.
  • No cursor or page parameter is supported. The limit bounds the returned collection; it is not pagination.

Error responses

500
failed_to_fetch_strategies

Validation may also return a general request error. See error handling and rate limits.

List published strategies · cURL
curl --fail-with-body 'https://api.weavers.app/api/strategies?limit=5'
200 · Illustrative response
{
  "strategies": [
    {
      "strategyKey": "example-momentum",
      "strategyVariant": "daily",
      "strategyName": "Example momentum strategy",
      "strategyId": "example-strategy",
      "tradingStatus": "paper"
    }
  ]
}

Example data is illustrative. Additional response fields may be present. Empty lists are valid responses.

Response fields

Core response fields. Nested evidence payloads may include additional fields.
FieldTypeMeaning
strategiesobject[]See the nested fields below.
strategies[].strategyKeystringStrategy family key; not the public detail identifier.
strategies[].strategyVariantstringVariant within the strategy family.
strategies[].strategyNamestringDisplay name.
strategies[].strategyIdstring | nullPublic detail identifier. Only request detail when this is non-null.
strategies[].aliasstring | nullPublished alias.
strategies[].latestCreatedAtstringISO 8601 creation timestamp.
strategies[].strategyStartDatestring | nullCalendar date in YYYY-MM-DD format.
strategies[].isLivebooleanWhether an active deployment exists.
strategies[].tradingStatusstring | nullPublication lifecycle.
strategies[].liveScopeCountintegerNumber of active deployment scopes.
strategies[].latestActiveArtifactIdinteger | nullActive artifact identifier.
strategies[].strategyRegistryIdinteger | nullRegistry identifier.
strategies[].pnlnumber | nullRecorded P&L, when available. Do not assume a currency without the underlying context.
strategies[].pnlPercentnumber | nullRecorded P&L percentage.
strategies[].sharpenumber | nullRecorded Sharpe ratio.
strategies[].winRatenumber | nullClosed trades with positive realized P&L divided by all closed trades, multiplied by 100 (percentage points).
strategies[].drawdownnumber | nullRecorded maximum drawdown ratio multiplied by 100 (percentage points).
strategies[].closedTradesinteger | nullNumber of closed trades.
strategies[].runDurationMsnumber | nullExecution duration in milliseconds.
strategies[].lastExecutionResultstring | nullLatest execution summary.
GET/api/strategies/{strategyId}

Read a published strategy

Inspect the published artifact, deployment snapshot and available validation evidence for one strategy. Private working drafts are not exposed by this route.

Parameters

strategyIdstring · path · required
Use a non-null strategyId returned by the list. Lowercase letters, digits, hyphens and underscores; at most 190 characters, starting and ending with a letter or digit.

Behaviour and limits

  • Replace example-strategy with an identifier from the list; the example identifier is illustrative and may return 404.
  • A missing or unpublished strategy returns 404. Nullable evidence must not be interpreted as zero or as a passed gate.
  • Nested audit, template and lifecycle objects are extensible. The field reference describes their purpose rather than a fixed set of chart-specific fields.

Error responses

400
invalid_strategy_id
404
strategy_not_found
500
failed_to_fetch_strategy_detail

Validation may also return a general request error. See error handling and rate limits.

Read a published strategy · cURL
curl --fail-with-body 'https://api.weavers.app/api/strategies/example-strategy'
200 · Illustrative response
{
  "strategy": {
    "headline": {
      "strategyId": "example-strategy",
      "title": "Example published strategy",
      "alias": "Example",
      "identityLabel": "Example",
      "publishedAt": "2026-01-15T00:00:00.000Z",
      "updatedAt": "2026-01-15T00:00:00.000Z"
    },
    "links": {
      "canvasHref": "/canvas",
      "strategyLabHref": "/strategy/example-strategy"
    },
    "template": null,
    "snapshot": {
      "artifact": {
        "version": "1",
        "createdAt": "2026-01-15T00:00:00.000Z",
        "publishedAt": "2026-01-15T00:00:00.000Z"
      },
      "deployments": {
        "totalActive": 0,
        "exchanges": []
      },
      "latestSignal": null
    },
    "audit": null
  }
}

Example data is illustrative. Additional response fields may be present. Empty lists are valid responses.

Response fields

Core response fields. Nested evidence payloads may include additional fields.
FieldTypeMeaning
strategyobjectSee the nested fields below.
strategy.headlineobjectSee the nested fields below.
strategy.headline.strategyIdstringPublic identifier.
strategy.headline.titlestringDisplay title.
strategy.headline.aliasstringPublished alias.
strategy.headline.identityLabelstringIdentity label.
strategy.headline.publishedAtstring | nullISO 8601 timestamp.
strategy.headline.updatedAtstring | nullISO 8601 timestamp.
strategy.linksobjectSee the nested fields below.
strategy.links.canvasHrefstringApplication canvas path.
strategy.links.strategyLabHrefstringApplication strategy path. Application links may require sign-in.
strategy.templateobject | nullNullable template with renderedMarkdown, updatedAt, requiredParams and chartTheme. Treat embedded content as untrusted when rendering it.
strategy.snapshotobjectSee the nested fields below.
strategy.snapshot.artifactobjectSee the nested fields below.
strategy.snapshot.artifact.versionstringArtifact version.
strategy.snapshot.artifact.createdAtstring | nullISO 8601 timestamp.
strategy.snapshot.artifact.publishedAtstring | nullISO 8601 timestamp.
strategy.snapshot.deploymentsobjectSee the nested fields below.
strategy.snapshot.deployments.totalActiveintegerActive deployment count.
strategy.snapshot.deployments.exchangesobject[]See the nested fields below.
strategy.snapshot.latestSignalobject | nullLatest published signal or null. Includes symbol, exchange, tradingDay, entryDay and recorded prediction context.
strategy.lineageobject | nullOptional parent strategy and fork-depth snapshot.
strategy.nicheobject | nullOptional niche membership snapshot.
strategy.certificationLifecycleobject | nullOptional lifecycle and validation evidence.
strategy.auditobject | nullNullable published audit dashboard with evidence charts and publish gates. Nested chart payloads are extensible.
strategy.paperRuntimeobject | nullOptional paper-execution status snapshot; not an execution command.
GET/api/strategies/{strategyId}/lineage

Trace a strategy's lineage

Follow the published ancestry of a strategy to understand which earlier research it came from. Pending private forks are excluded.

Parameters

strategyIdstring · path · required
Use a non-null strategyId returned by the list. Lowercase letters, digits, hyphens and underscores; at most 190 characters, starting and ending with a letter or digit.
depthinteger · query · optional
Maximum ancestry depth, from 0 to 8; defaults to 4.

Behaviour and limits

  • Replace example-strategy with a real public identifier.
  • Check truncated before treating the returned ancestry as complete.

Error responses

400
invalid_strategy_id or invalid_lineage_depth
404
strategy_not_found
500
failed_to_fetch_strategy_lineage

Validation may also return a general request error. See error handling and rate limits.

Trace a strategy's lineage · cURL
curl --fail-with-body 'https://api.weavers.app/api/strategies/example-strategy/lineage?depth=4'
200 · Illustrative response
{
  "lineage": {
    "focusStrategyId": "example-strategy",
    "rootStrategyId": "example-strategy",
    "nodes": [
      {
        "strategyRegistryId": 1,
        "strategyId": "example-strategy",
        "alias": "Example",
        "displayName": "Example published strategy",
        "parentStrategyId": null,
        "forkDepth": 0,
        "state": "published",
        "lifecycleStatus": null,
        "linkedRunId": null,
        "linkedRunStatus": null,
        "createdAt": "2026-01-15T00:00:00.000Z"
      }
    ],
    "truncated": false,
    "depthLimit": 4
  }
}

Example data is illustrative. Additional response fields may be present. Empty lists are valid responses.

Response fields

Core response fields. Nested evidence payloads may include additional fields.
FieldTypeMeaning
lineageobjectSee the nested fields below.
lineage.focusStrategyIdstringRequested strategy.
lineage.rootStrategyIdstringRoot of the returned lineage.
lineage.depthLimitintegerApplied depth limit.
lineage.truncatedbooleanTrue when the depth limit cuts off ancestry.
lineage.nodesobject[]See the nested fields below.
lineage.nodes[].strategyRegistryIdintegerRegistry identifier.
lineage.nodes[].strategyIdstringPublic strategy identifier.
lineage.nodes[].aliasstringAlias.
lineage.nodes[].displayNamestringDisplay name.
lineage.nodes[].parentStrategyIdstring | nullParent, or null at the root.
lineage.nodes[].forkDepthintegerRecorded fork depth.
lineage.nodes[].statestringPublic nodes are published.
lineage.nodes[].lifecycleStatusstring | nullLifecycle status.
lineage.nodes[].linkedRunIdstring | nullAssociated run identifier.
lineage.nodes[].linkedRunStatusstring | nullAssociated run status.
lineage.nodes[].createdAtstringISO 8601 creation timestamp.
GET/api/strategies/niches

Find strategies by niche

Retrieve public niche-to-strategy associations. This discovery view differs from the evidence-ordered certified set returned by niche detail.

Parameters

limitinteger · query · optional
Maximum number of niches. Defaults to 100; clamped to 1–5000. Does not limit strategies inside each niche.
strategyIdstring · query · optional
Optionally filter by a public strategy identifier.

Behaviour and limits

  • Associated strategies are ordered by publication recency, not by quality or expected return.
  • No cursor pagination is available.

Error responses

400
invalid_strategy_id
500
failed_to_fetch_strategy_niches

Validation may also return a general request error. See error handling and rate limits.

Find strategies by niche · cURL
curl --fail-with-body 'https://api.weavers.app/api/strategies/niches?limit=5'
200 · Illustrative response
{
  "niches": []
}

Example data is illustrative. Additional response fields may be present. Empty lists are valid responses.

Response fields

Core response fields. Nested evidence payloads may include additional fields.
FieldTypeMeaning
nichesobject[]See the nested fields below.
niches[].nicheIdintegerNiche identifier.
niches[].nicheKeystring | nullPublic niche key.
niches[].displayNamestringName.
niches[].sourcestringDefinition origin.
niches[].visibilitystringValues: public.
niches[].strategyKeystring | nullStrategy family filter.
niches[].universeFilterKeystring | nullUniverse filter key.
niches[].targetRegimestring | nullTarget regime.
niches[].assetTypestring | nullAsset class.
niches[].countryCodestring | nullCountry.
niches[].exchangestring | nullExchange.
niches[].themeTagsstring[]See the nested fields below.
niches[].metadataFilterobjectUniverse membership filters.
niches[].membershipKindstringValues: static, channel_episode.
niches[].descriptionstring | nullDescription.
niches[].createdAtstring | nullISO 8601 timestamp.
niches[].assetCountinteger | nullNumber of assets.
niches[].profiledAssetCountinteger | nullAssets with profiles.
niches[].assetCoverageStatusstring | nullready, empty or incomplete_profiles; null when unavailable.
niches[].strategyCountintegerAssociated public strategy count.
niches[].strategiesobject[]See the nested fields below.