SIWAI API

JSON API and remote MCP server so paid accounts and AI agents can use SIWAI programmatically. Trading stays in the app; broker credentials never leave your device.

Get a key

  1. Subscribe at Pricing (trial cannot create keys).
  2. Open Account settings → API keys.
  3. Name the key, tick scopes, create. Copy the raw key once.

Send it as Authorization: Bearer siwai_… to https://siwai.app/api/v1.

Scopes

  • market — setups, confluence, outcomes, screener, funds, financials, news, calendars, profile updates. On by default.
  • accounts — the key owner’s IBKR / Hyperliquid snapshots (stats, positions, recent trades). Off by default.
  • mia — ask MIA. Off by default. Separate, lower daily cap.
  • workspace — watchlist, feed filters, chart prefs. Off by default.

Limits

Per-key, UTC day. 429 when exceeded.

PlanRequests / dayMIA / day
Starter2005
Pro1,00020
Premium5,00050

Errors

  • 401 — missing, invalid, or revoked key
  • 403 — missing scope, or not on an active paid plan
  • 404 — unknown path or resource
  • 429 — daily cap (or MIA cap) exceeded
  • 500 — server error

Every JSON body includes disclaimer: “Not financial advice. For informational purposes only.”

Responses are SIWAI analysis and aggregated data. Raw OHLC / candle feeds from data providers are never returned.

Endpoints

Base URL: https://siwai.app/api/v1

GET /setups/today

Latest daily scan. Query: market, pattern (including confluence types), timeframe, since, include_confluence, limit, offset.

curl -H "Authorization: Bearer siwai_…" \
  "https://siwai.app/api/v1/setups/today?market=stocks&pattern=Breakout"
{
  "as_of": "2026-10-01",
  "setups": [{ "ticker": "AAPL", "pattern": "Breakout", "confidence": 82, "target": 278.4, "stop_loss": 251.1 }],
  "disclaimer": "Not financial advice. For informational purposes only."
}

GET /setups?ticker=AAPL

Setups for one ticker. Optional timeframe, since.

GET /setups/confluence

Combined patterns (Breakout + Impulse, RSI Divergence + Engulfing, …) from the latest scan. Same filters as today. Or pass include_confluence=true on /setups/today.

GET /setups/outcomes

Hit/fail summaries for SIWAI patterns. Query: types, category, minConfidence. Events only — no candle series.

GET /setups/stats

Public Breakout and Breakout + Impulse hit-rate summaries.

GET /patterns

Pattern catalog with groups and timeframes.

GET /screener/filters

Every filter with type and allowed values (including live countries, sectors, industries).

POST /screener/run

Any combination of filters. Paginated with limit / offset.

curl -X POST https://siwai.app/api/v1/screener/run \
  -H "Authorization: Bearer siwai_…" \
  -H "Content-Type: application/json" \
  -d '{"type":"stock","roe_min":15,"pe_max":25,"pattern_types":["Breakout"],"limit":20}'

GET /funds?query=

Search funds by name, manager, or holding ticker. Holdings use change_type: new_buy (brand-new position), sold_out (fully exited), increase / decrease (partial % change), unchanged (change = 0). null change_type means unknown or no prior filing. Missing tickers are null with a full company name — never "-". Share classes stay distinct (GOOGL vs GOOG, LEN vs LEN.B).

GET /funds/{id}/holdings

Current holdings for that fund filing. Same change_type / change as activity for the filing quarter. value_unit is USD_millions. Query: limit (default 100, max 1000), offset. Response includes total and has_more.

GET /funds/{id}/activity

Vs prior quarter. Each row: ticker (nullable), name, change_type, change, share_change (signed; negative for decrease/sold_out), portfolio_impact. Query: limit (default 100, max 1000), offset. Response includes total and has_more.

GET /tickers/{ticker}

SIWAI fundamentals, valuation, and current setups. No OHLC series.

GET /tickers/{ticker}/financials

Derived statement summaries (income, balance, cash flow).

GET /tickers/{ticker}/funds

Tracked funds that hold or recently changed the ticker.

GET /news

Query: ticker, from / since, to (ISO dates).

GET /calendar/economic

Query: from, to, country, impact (high|medium|low).

GET /calendar/earnings

Query: from, to, ticker. Rescheduled events for the same ticker in the same quarter (~45 days) keep the latest date. forecast_eps is a per-share Yahoo estimate when stored (never 0 or a revenue figure); it is usually null. forecast_revenue is USD.

GET /calendar/dividends

Query: from, to, ticker.

GET /profile/updates

Same changelog as Profile → Updates in the app. Newest first. Each item: date (ISO), title, bullets (string[]), optional link. Query: since (ISO date), limit (default 20, max 100). total is the matching changelog size; has_more follows limit. Invalid since returns 400. Scope market. MCP: get_profile_updates.

GET /accounts

Scope accounts. Owner-only snapshots with updated_at and stale (true if older than 15 minutes). The SIWAI app syncs while you are logged in (~60s). Credentials never leave the browser. Agents cannot place trades.

GET /accounts/{id}/stats

id is IBKR or HYPERLIQUID. Includes performance stats, open positions, and recent trades. Not cached across users.

GET/PUT /workspace/watchlist

Scope workspace. GET returns only watchlist (MCP get_watchlist uses this path). PUT body: { "watchlist": [{ "ticker": "AAPL", "assetType": "stock" }] }.

GET/PATCH /workspace/prefs

Feed filters and chart prefs. PATCH body: feed_filters and/or chart_prefs.

POST /mia/ask

Scope mia. Body: { "question": "…" }. Successful responses include rate_limit (request quota) and mia_rate_limit (MIA daily cap).

curl -X POST https://siwai.app/api/v1/mia/ask \
  -H "Authorization: Bearer siwai_…" \
  -H "Content-Type: application/json" \
  -d '{"question":"What breakouts look interesting today?"}'

OpenAPI

Machine-readable spec (no key required): https://siwai.app/api/v1/openapi.json. MCP also exposes it as resource siwai://openapi.json.

MCP

Remote Streamable HTTP at https://siwai.app/api/mcp. Authenticate with a SIWAI API key, or let the client complete OAuth (Claude / ChatGPT connectors). Dynamic client registration: POST https://siwai.app/api/oauth/register. Authorize at https://siwai.app/oauth/authorize.

Tools cover setups (including confluence), outcomes, screener, funds, ticker snapshots, financials, news, calendars, profile updates, account snapshots, watchlist, and MIA.

Cursor

Settings → MCP → add a remote server, or .cursor/mcp.json:

{
  "mcpServers": {
    "siwai": {
      "url": "https://siwai.app/api/mcp",
      "headers": {
        "Authorization": "Bearer siwai_YOUR_KEY"
      }
    }
  }
}

Claude Desktop

In Claude Desktop settings, add a custom connector with URL https://siwai.app/api/mcp and header Authorization: Bearer siwai_YOUR_KEY. Older builds can use mcp-remote:

{
  "mcpServers": {
    "siwai": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://siwai.app/api/mcp",
        "--header",
        "Authorization: Bearer siwai_YOUR_KEY"
      ]
    }
  }
}

ChatGPT and other agents

Use a remote MCP connector (developer mode / custom GPT) pointing at the same URL and Bearer token. Any MCP client that speaks Streamable HTTP works the same way.