Skip to main content
Your pricer exposes three endpoints under whatever base URL you register. Novig calls them; you respond. Every body is JSON and carries an X-Novig-Signature header. /quote and /confirm sit on the trade path and have hard timing requirements; /ping is an on-demand connectivity check (not on the trade path) but is still subject to a request timeout (currently 3 seconds).

POST {webhook_url}/quote

Novig calls /quote for every parlay RFQ that names outcomes you might quote. You return a price and a maximum wager you’re willing to back at that price.

Request body

Header: X-Novig-Signature: BLAKE3(shared_secret, body).hex() — see Signing.

Response body

There is no expiry field. Quote validity is platform-owned: Novig anchors a TTL when the auction closes (currently 30 seconds pregame, 10 seconds for live markets) — your quote simply lapses when it expires.

Hard rules

Novig’s total budget for /quote fanout is 3 seconds. A response that arrives later is silently dropped. The taker sees only the quotes that landed inside the window.
  • Non-2xx responses are dropped.
  • max_wager <= 0 is dropped.
  • Malformed/unparseable JSON is dropped.
  • A bad signature is dropped.
In every drop case the taker simply doesn’t see your quote — there is no penalty beyond losing the trade.

Declining to quote

If you don’t want to quote a particular RFQ, the simplest way is to return HTTP 204 No Content. Anything non-2xx works.

POST {webhook_url}/confirm

If your quote is selected as the winner, Novig calls /confirm with the actual taker wager (which may be ≤ your max_wager) immediately before writing the trade. This is your last chance to back out.
You have 1 second to answer. The confirm window is a fixed 1-second last look: a pricer that hasn’t responded by the bell is rejected (the trade does not execute). The window never closes early either — an early answer is held to the bell — so there is no advantage to racing, but a hard penalty for being slow.

Request body

Header: same X-Novig-Signature scheme as /quote.

Response body

A missing confirmed field is a hard error — it aborts the trade just like false. Always include it.

POST {webhook_url}/ping

A connectivity check you trigger yourself via POST /rfq/pricer/ping. Novig sends a signed POST to <webhook_url>/ping and reports back how you answered — use it to confirm reachability and signature handling before any live quote flow. This endpoint is not on the trade path: it carries no quote content and has no latency budget.

Request body

Header: same X-Novig-Signature scheme as /quote and /confirm — verify it exactly as you would on the trade path.

Response

Return any 2xx status. There is no required body; Novig only reports whether the call reached you and what status you returned (as ok/status in the ping result). A non-2xx, a bad signature you rejected, or an unreachable host all surface as a failed ping so you can fix the wiring before going live.

Type & encoding notes

  • Decimal numbers (max_wager, wager, price on /confirm) are JSON strings, not numbers.
  • price on /quote response is a JSON number in (0, 1) decimal probability.
  • UUIDs are lowercase strings with hyphens.