View as markdown
Endpoints

All endpoints

Eight buckets, one schema, one SQL grammar. Tickers, signals, scan, universes, rules, strategies, webhooks, news. Every response carries a top-level as_of and list responses paginate via opaque cursors (next_cursor on the response, ?cursor= on the request).

Tickers

Current state, historical state, and the discrete event log for any ticker.

MethodPathSummary
GET/v2/tickersList active tickers, paginated.
GET/v2/tickers/{ticker}Get the full current state of one ticker.
GET/v2/tickers/{ticker}/historyGet the full ticker row as of a past date.
GET/v2/tickers/{ticker}/eventsDiscrete event log for one ticker.

Tickers reference →

Signals

Which tickers match this signal right now, and the time series of one signal for one ticker.

MethodPathSummary
GET/v2/signals/{signal}Find tickers that match a signal right now.
GET/v2/signals/{signal}/{ticker}/history/{interval}Time series of one signal for one ticker.

Signals reference →

Scan

Synchronous SQL across the live or historical universe.

MethodPathSummary
GET/v2/scanLive SQL scan against the universe.
GET/v2/scan?asof=YYYY-MM-DDSame grammar against the historical row on a past date.

POST /v2/scan takes the same parameters as JSON body — useful when your WHERE clause is too long for a query string. Documented on the same live scan page. Scan reference →

Universes

Named ticker lists you reference from any query endpoint with ?universe=<slug>.

MethodPathSummary
POST/v2/universesCreate a universe.
GET/v2/universes/{id}Fetch a single universe.
PATCH/v2/universes/{id}Update a universe.
DELETE/v2/universes/{id}Delete a universe.
GET/v2/universesList your universes.
GET/v2/universes/systemList system universes (top_10, top_100).

Universes reference →

Rules

Saved {q, universe, order, dir, fields} bundles. Run by name from /scan?rule= or subscribe via a webhook.

MethodPathSummary
POST/v2/rulesCreate a saved rule.
GET/v2/rules/{id}Fetch a saved rule.
PATCH/v2/rules/{id}Update a saved rule.
DELETE/v2/rules/{id}Delete a saved rule.
GET/v2/rulesList your saved rules.

Rules reference →

Strategies

Saved boolean conditions over the schema. Resolve to {t, v} bars (history), match windows (events), and equity curves (backtest).

MethodPathSummary
POST/v2/strategiesCreate a multi-leg strategy.
GET/v2/strategies/{name}Fetch a saved strategy.
PATCH/v2/strategies/{name}Partial update — change any subset of fields, including status.
DELETE/v2/strategies/{name}Soft-delete a strategy; optionally force-close open positions.
GET/v2/strategiesList your strategies, newest first.
GET/v2/strategies/{name}/backtestWalk historical bars and return trades + equity curve + summary.

Strategies reference →

Webhooks

Subscribe to a SQL condition. Get a signed POST when a new ticker matches.

MethodPathSummary
POST/v2/webhooksCreate a webhook subscription.
GET/v2/webhooks/{id}Fetch one webhook subscription.
DELETE/v2/webhooks/{id}Delete a webhook subscription.
GET/v2/webhooksList webhook subscriptions on this API key.
GET/v2/webhooks/{id}/deliveriesInspect recent deliveries for a webhook.
POST/v2/webhooks/{id}/enableRe-enable a disabled or pending webhook.

Same SQL grammar as /scan. We evaluate on the cadence configured for your plan and POST your target URL each time a new ticker enters the match set. Deliveries carry an HMAC-SHA256 signature; retries follow a 30s / 2m / 10m / 1h / 6h schedule. Webhooks reference →

News

Article-level news + per-ticker sentiment, indexed back to 2015 and refreshed every 15 minutes.

MethodPathSummary
GET/v2/news/scanSQL-style scan of the news_article archive — article rows or aggregate rollups.

One SQL-style endpoint, two shapes: article rows when no group_by is supplied, aggregate rollups when one is. Filter the archive with a WHERE-clause grammar identical to /v2/scan; auto-joins UNNEST(tickers) AS tk whenever any clause references the tk alias, so per-ticker rollups don’t need an explicit unnest. There is no separate asof parameter — historical queries are just WHERE filters on time_published. The 24-hour rolling summary lives on the ticker object as news_volume + news_volume_weighted_sentiment and remains queryable through /v2/scan on every paid plan. News reference →

Before you write code

A few links worth bookmarking.