Get a key
- Subscribe at Pricing (trial cannot create keys).
- Open Account settings → API keys.
- Name the key, tick scopes, create. Copy the raw key once.
Send it as Authorization: Bearer siwai_… to https://siwai.app/api/v1.
Limits
Per-key, UTC day. 429 when exceeded.
| Plan | Requests / day | MIA / day |
|---|
| Starter | 200 | 5 |
| Pro | 1,000 | 20 |
| Premium | 5,000 | 50 |
Errors
401 — missing, invalid, or revoked key403 — missing scope, or not on an active paid plan404 — unknown path or resource429 — daily cap (or MIA cap) exceeded500 — 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.