API reference
Family track record
GET
/families/{family}/statsNo key neededOne family's track record
Returns one family's 20-year backtest record, the same block GET /families lists for it. An unknown family answers 404 unknown_family with the valid names in fix. No key is needed; keyless calls are limited per IP.
Authentication
No key needed. Without one the call is limited to 30 requests a minute per IP; with a key it counts against the key's limits instead.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
family | path | string (enum) | yes | One of the five family identifiers: rising_wedge, falling_wedge, bullish_pennant, bearish_pennant, triangle. Anything else answers 404 unknown_family. One of rising_wedge, falling_wedge, bullish_pennant, bearish_pennant, triangle. |
Request
curl "https://api.tradingpal.io/api/v1/families/falling_wedge/stats"Response
JSON. The fields this route adds are below; every response also carries the envelope fields (api_version, as_of_session, data_version, source, disclaimer).
| Field | Type | Description |
|---|---|---|
family | string (enum) | Family identifier. One of rising_wedge, falling_wedge, bullish_pennant, bearish_pennant, triangle. |
label | string | Human-readable family name. |
track_record | Track record | The family's 20-year record. Null when no record is sealed in the active manifest. |
Example response
{
"api_version": "v1",
"family": "falling_wedge",
"label": "Falling wedge",
"track_record": {
"scope": "family",
"family": "falling_wedge",
"symbol": null,
"win_rate_pct": 54,
"sample_size": 1287,
"wins": 695,
"losses": 592,
"avg_win_pct": 8.1,
"avg_loss_pct": -4.2,
"median_win_pct": 6.3,
"avg_trade_pct": 2.4,
"avg_r": 0.41,
"expected_r": 0.41,
"profit_factor": 1.61,
"avg_hold_bars": 11.2,
"backtest_range": [
"2006-09-25",
"2026-09-25"
],
"measured": "Every detector-confirmed breakout … open trades are excluded.",
"summary": "Falling wedge: 1,287 resolved trades from 2006-09-25 to 2026-09-25; 54% reached the target, average win +8.1%, average loss -4.2%, median win +6.3%."
}
}Errors
Errors are JSON with the Error shape; the fix field says what to do.
| Status | Code | Meaning | Fix |
|---|---|---|---|
| 429 | rate_limited | The key passed 60 requests in a minute or 10,000 in a day, or a keyless caller passed 30 a minute from one IP. | Wait details.retry_after_seconds, then retry. Cache the nightly answers; they do not change until the next session. |
| 404 | unknown_family | The {family} in the path is not one of the pattern families. | Use one of rising_wedge, falling_wedge, bullish_pennant, bearish_pennant, triangle. |