demo

Current setups on a demo symbol, no key needed

Returns the current setups on one demo symbol, exactly as the keyed patterns route would, plus demo: true and a next sentence on getting a key. Only the demo symbols answer; any other symbol is 404 not_a_demo_symbol with the demo set in details.demo_symbols. No key is needed; keyless calls are limited per IP. The demo MCP tool is the same call with the first setup's chart attached as an image.

get/demo/{symbol}

Request

  • Base URL: https://api.tradingpal.io/api/v1
  • URL: https://api.tradingpal.io/api/v1/demo/{symbol}
  • Auth: one of:
    • none
    • HTTP bearer
    • OAuth 2 (authorization code, authorization URL https://api.tradingpal.io/oauth/authorize, token URL https://api.tradingpal.io/oauth/token, scopes: patterns)

Path parameters

symbolstring required

Exchange symbol, upper case (BRK.B, not BRK-B). Lower case is accepted and upper-cased.

Response

OK

api_version'v1' required

The contract version, always v1. Field names in v1 do not change, and v1 stays available at least 12 months after a v2 ships.

as_of_sessionstring date nullable required

The last trading session the data describes, as an ISO date. Setups change nightly, so say it when presenting data and do not cache setups across days. Null on routes that do not read a dated artifact (account, tickers, history, families, universe and the demo index).

data_versionstring nullable

Identifier of the stored artifact the answer came from: the candidate-book generation for patterns, the sealed manifest for family records. Null when the route reads no versioned artifact.

disclaimer'Educational breakout-pattern analysis from TradingPal, not investment advice. Past results do not guarantee future outcomes.' required

The educational-use disclaimer, constant on every response. Repeat it when presenting a setup as something the user might act on.

symbolstring required

The symbol asked for, upper-cased.

availableboolean required

True when the nightly has a current candidate book for the symbol. False when the symbol is excluded from pattern analysis or no current book exists; setups is then empty.

reasonstring nullable

Why available is false, when the reason is known: not_covered means the symbol is excluded from pattern analysis. Absent when available is true, and when the nightly simply has no current book for the symbol.

demoboolean

True on the demo routes. Absent on the keyed route.

nextstring nullable

On the demo routes, a sentence saying where to get a key for other tickers. Absent on the keyed route.

Example response

{
  "api_version": "v1",
  "as_of_session": "2026-09-25",
  "symbol": "NVDA",
  "available": true,
  "setups": [
    {
      "setup_id": "NVDA:D:falling_wedge:1",
      "lineage_id": "lineage-1",
      "page_url": "https://www.tradingpal.io/screener/falling-wedge?interval=D&focus=NVDA&p=aB3",
      "symbol": "NVDA",
      "interval": "D",
      "family": "falling_wedge",
      "family_label": "Falling wedge",
      "pattern_type": "falling_wedge",
      "direction": "bullish",
      "status": "forming",
      "pattern_start": "2026-08-08",
      "pattern_end": "2026-09-07",
      "as_of_session": "2026-09-25",
      "last_close": 101.5,
      "price_scale": "log",
      "lines": {
        "upper": {
          "start": {
            "date": "2026-08-08",
            "price": 110
          },
          "end": {
            "date": "2026-09-07",
            "price": 104
          },
          "touch_count": 3,
          "touches": [
            {
              "date": "2026-08-08",
              "price": 111.2
            }
          ]
        },
        "lower": {
          "start": {
            "date": "2026-08-08",
            "price": 90
          },
          "end": {
            "date": "2026-09-07",
            "price": 98
          },
          "touch_count": 2,
          "touches": []
        }
      },
      "trigger_rule": "A daily close above the upper line; the trigger price moves with the line.",
      "plans": [
        {
          "direction": "bullish",
          "trigger_price": 105.25,
          "stop_price": 96,
          "target_price": 120
        }
      ],
      "track_record": {
        "family": {
          "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%."
        },
        "ticker": null
      }
    }
  ],
  "stock_facts": {
    "as_of": "Facts as of the Sep 25 close.",
    "sections": [
      {
        "title": "Price",
        "rows": [
          {
            "label": "Last",
            "value": "$101.50",
            "change": "+0.40%",
            "change_tone": "up"
          },
          {
            "label": "Below 52-week high",
            "value": "6.5%"
          }
        ]
      },
      {
        "title": "Performance",
        "rows": [
          {
            "label": "1W",
            "value": "+6.2%",
            "tone": "up"
          },
          {
            "label": "1M",
            "value": "-3.5%",
            "tone": "down"
          }
        ]
      },
      {
        "title": "Momentum",
        "rows": [
          {
            "label": "vs EMA8",
            "value": "+1.2%"
          },
          {
            "label": "EMA8 vs EMA21",
            "value": "+2.5%"
          },
          {
            "label": "RSI (14)",
            "value": "59"
          }
        ]
      },
      {
        "title": "Volume and volatility",
        "rows": [
          {
            "label": "Relative volume",
            "value": "72nd percentile · last 3 months"
          },
          {
            "label": "Avg volume (20d)",
            "value": "2.5M · $381M/day"
          }
        ]
      },
      {
        "title": "Company",
        "rows": [
          {
            "label": "Market cap",
            "value": "$3.2T"
          },
          {
            "label": "Exchange · Country",
            "value": "Nasdaq · US"
          },
          {
            "label": "Type",
            "value": "Stock"
          }
        ]
      }
    ]
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.