GuidesBuild schemas by venue
Novig
Step zero — from nothing to your first trade
Section titled “Step zero — from nothing to your first trade”Novig uses a venue-custodied USD account, not a crypto wallet. Its production API is also restricted to US egress.
- Create the account. Sign up at novig.us. Novig is a CFTC-regulated US exchange, so expect identity checks and government-ID KYC.
- Confirm credentials. The integration requires a Novig client ID and client secret for OAuth 2.0 token minting. Personal-account API credential issuance is still being confirmed with the venue; do not assume these credentials appear in self-service API settings. Confirm access with Novig before planning an API trade.
- Fund it. Deposit USD through Novig’s regulated banking rails; no chain or crypto asset applies. In CASH denomination, 100 Minimum Currency Units make one contract. Start with enough for at least one contract plus fees; the repo sources establish no deposit minimum.
- Allow time. Setup is about 10 minutes after approval; KYC may take a day, and API credential issuance may add time.
- Check access. Production endpoints are geo-fenced to US egress, so verify that requirement before funding.
What you need first
Section titled “What you need first”- Production status: Market data reads, order books, and hosted build, submit, and cancel are live.
- Venue account: Yes, for authenticated reads and trading on Novig.
- Credentials:
NOVIG_CLIENT_IDandNOVIG_CLIENT_SECRETfor OAuth 2.0 Client Credentials token minting (POST /nbx/v1/auth/emm-token). - Funding: On-venue USD (
fiat_custodied). Novig custodies funds; deposits and withdrawals happen on the venue via regulated banking rails.
Reads authentication & access
Section titled “Reads authentication & access”Novig is a CFTC-regulated US sports prediction exchange operating the NBX v2 EMM API. All read operations against api.novig.us require a Bearer access token obtained via OAuth 2.0 Client Credentials:
POST /nbx/v1/auth/emm-tokenContent-Type: application/json
{ "grant_type": "client_credentials", "client_id": "YOUR_CLIENT_ID", "client_secret": "YOUR_CLIENT_SECRET"}Tokens are minted lazily and cached in-process. Production endpoints (https://api.novig.us) are geo-fenced to US egress IP addresses, while the QA environment (https://api-qa.novig.us) is open.
Data model & sidedness
Section titled “Data model & sidedness”Novig’s sports markets follow a 3-tier hierarchy:
- Event: A sports game or match (e.g. NFL, NBA, EPL) carrying a
scheduledStarttimestamp and teams/competitors. Cross-venue joins utilizeopticOddsIdwhen present. - Market: A betting market within an event (e.g., moneyline, spread, total).
- Outcomes: Binary pairs of outcomes per market. Sidedness is defined strictly by the outcome
index:index = 0: Home / Over / Yesindex = 1: Away / Under / No
Never rely on array position for sidedness.
Outcome IDs carry no derivable mathematical relation to market UUIDs, so Predictefy uses the composite format ${marketId}:${outcomeId} to route outcome-level verbs.
Prices, tick table, and order books
Section titled “Prices, tick table, and order books”- Odds as probabilities: Prices represent decimal probabilities in $[0.001, 0.999]$.
- Non-uniform tick table: Novig enforces a non-uniform tick grid (finer resolution near 0.01 and 0.99, standard 0.005/0.01 in the middle). The valid ticks are queried from
GET /nbx/v2/emm/ticksand never hardcoded. - Bids-only ladder & complement: Novig order books (
GET /nbx/v2/emm/book/{marketId}) publish bids only. The offer (ask) side is derived as the exact binary complement ($1 - p$) with quantities mirrored across the paired outcome. - Quantity units: Quantities are denominated in Minimum Currency Units. For CASH denomination, 1 unit = $0.01 (1 cent), and 100 units = 1 contract.
Execution status
Section titled “Execution status”- Server execution lane: Armed for hosted build, submit, and cancel since 2026-08-22. Build stores an authless REST artifact; no order-body signature is required.
Hosted build accepts only the fields below. Unknown fields are rejected before an execution is persisted, and every order requires an idempotency key.
| Field | Required | Contract |
|---|---|---|
intent | no | If present, must be "order". |
marketId | yes | Must match the catalog market’s native Novig market UUID. |
outcomeId | yes | Catalog composite {marketId}:{outcomeId} for the selected outcome. |
type | yes | Must be "limit"; cash-sized market orders are not supported. |
amount | yes | Positive number of contracts. |
price | yes | Number in (0, 1) that matches the live Novig tick table exactly. |
currency | no | If present, must be "CASH"; the COIN balance is not executable. |
tif | no; default "GTC" | One of "GTC", "GTT", "IOC", or "FOK". |
ttl | for "GTT" | Positive whole milliseconds; rejected for every other time in force. |
Predictefy’s platform NOVIG_CLIENT_ID and NOVIG_CLIENT_SECRET are used only for build-time
reads such as the live tick table. They cannot move caller funds. Submit accepts only
executionId and the caller’s own callerAccessToken; refresh accepts only
callerAccessToken. The token is used for that one venue request and is never persisted.
Cancel build takes no caller fields and derives a bodyless DELETE from the stored venue order id.
Submit that cancel with callerAccessToken. Novig acknowledges cancellation asynchronously, so
refresh with the same kind of per-request token until venue status confirms the order is canceled.