Endpoints · Signals
Create a custom signal
POST
/v2/signalsPersists a named boolean (or numeric) expression in the existing predicate grammar. Once saved, the name is referenceable from any SQL context — rule `q`, strategy `entry`, exit `signal_off`/`signal_on`, leg `what.scan` — and the predicate compiler inlines its body before SQL emit. The expression is compiled at create time against the live signal column whitelist; references to other custom signals you own are inlined first (recursion is detected). Names are scoped per-user: `(user_id, name)` is the key. Names cannot collide with built-in column names — those return 409 `name_collision`.
Plan access
Included on every plan, Hobby through Enterprise.
Rate limit
Hobby 60/min · Pro 2,000/min · Scale 10,000/min.
Universe
All ~12,000 tracked tickers on every plan.
Status codes
201{ as_of, signal: { name, kind: "expression", description, expr, created_at, updated_at } }.400compile_failed (with errors array) when the expression doesn't parse / references unknown columns. bad_request for shape failures.409already_exists (slug taken on this account) or name_collision (slug matches a built-in column).