---
title: "Semantic search across the pre-computed strategy catalog."
method: GET
path: "/api/v1/catalog/query"
tags: ["Catalog Search"]
---

# Semantic search across the pre-computed strategy catalog.

`GET /api/v1/catalog/query`

## Request

- Base URL: `https://crashtestyourstrategy.com` (the document declares no server; this is the origin it was published from)
- URL: `https://crashtestyourstrategy.com/api/v1/catalog/query`
- Auth: none declared

Filter the 13 pre-computed strategy reports by indicator, asset, failure-mode coverage, regime class, or robustness class. All filters are AND-combined. Used by agents to discover relevant prior reports without having to enumerate /s/{slug} manually. Schema family `ctys-agent`, current version `ctys-catalog-v1`.

## Query parameters

- `indicator` string, nullable: Indicator name (e.g. RSI, MACD, SMA, EMA, BB).
- `asset` string, nullable: Asset symbol (SPY/BTC/GOLD/...).
- `failure_mode` string, nullable: FM-bucket key (e.g. SHARP_CRASH, TREND_UP).
- `regime_class` string, nullable: Regime class (trend_regimes / volatility_regimes / mean_reverting_regimes / tail_event_regimes).
- `robustness_class` 'fragile' | 'moderate' | 'robust', nullable: fragile | moderate | robust.
- `min_score` number, nullable: Minimum robustness score.
- `max_score` number, nullable: Maximum robustness score.
- `sort_by_bucket` string, nullable: Sort by per-FM-bucket score instead of overall robustness score. Value: FM termCode (e.g. LIQUIDITY_STRESS, SHARP_CRASH, TREND_UP). When set, each match's `bucket_scores` field is populated with the relevant bucket score. Useful for answering 'which strategies fail hardest in X regime?' — use direction=asc.
- `sort_direction` string: Sort direction: 'desc' (best first, default) or 'asc' (worst first).

## Response `200`

Matching catalog strategies sorted by score desc.

- CatalogQueryResponse
  - `matches` CatalogMatch[], required: Strategies passing all AND-combined filters; sorted by score desc, slug asc.
    - `slug` string, required
    - `name` string, required: Human-readable strategy name.
    - `robustness_score` number, nullable: V2 composite robustness score (0..100). Null if no cached result.
    - `robustness_class` 'fragile' | 'moderate' | 'robust', nullable: Monotonic class: fragile (<50) | moderate (50–70) | robust (≥70).
    - `fragility_grade` string, nullable: Legacy fragility curve grade. Not directly comparable to robustness_class — see /interop.
    - `asset` string, required: Asset symbol the strategy is scored on.
    - `indicators` string[], required: Indicator family names extracted from entry/exit conditions.
    - `failure_modes_covered` string[]: FM termCodes where this strategy was scored (subset of the 10-axis taxonomy).
    - `bucket_scores` object, nullable: Per-FM-bucket score (0..100). Only populated when sort_by_bucket is used; null otherwise to keep responses lean.
    - `report_url` string, required: Human-readable strategy report URL (/s/{slug}).
    - `api_url` string, required: Machine-readable strategy report URL (full cached JSON).
    - `description` string, nullable: Short marketing-free description of the strategy.
  - `total` integer, required: Number of matches.
  - `query_echo` object, required: Echo of the parsed filter parameters (after normalisation).
  - `schema_family` string: Schema family — stable across versions.
  - `schema_version` string: Schema version — bump for breaking changes.

## Other responses

- `422`: Validation Error

---

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