Endpoints · Signals

Create a custom signal

POST/v2/signals

Persists 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.

201
{ as_of, signal: { name, kind: "expression", description, expr, created_at, updated_at } }.
400
compile_failed (with errors array) when the expression doesn't parse / references unknown columns. bad_request for shape failures.
409
already_exists (slug taken on this account) or name_collision (slug matches a built-in column).