Skip to main content
Your pricer exposes exactly two endpoints under whatever base URL you register. Novig calls them; you respond. Both bodies are JSON, both carry an X-Novig-Signature header, and both have hard timing requirements.

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.

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.