Set up
Create a management key on Profile → Settings → Novig API, on paper.novig.com. If you have no Paper account yet, set one up first. Get a key walks you through it. Then point the samples at Paper and at your key:pip install requests cryptography.
The Node samples need Node 18 or later and no packages.
Save the signer
Save this helper asnovig.py or novig.mjs.
Its call function signs a request, sends it, and returns the parsed reply.
The signature covers NOVIG-V3, the timestamp, the method, the path, the query, and a hash of the body.
Sign a request explains each rule.
- Pass
queryin canonical form: parameters sorted by name and percent-encoded. - With a P-256 key, the Node signer works as is. In Python, sign with
private.sign(text.encode(), ECDSA(SHA256())). - For Rust, use the complete signer on Sign a request.
1. Test your signature
Send a body toPOST /v3/echo:
200 means your host, key, clock, and signature are all correct.
A 401 means one of them is wrong. Troubleshooting maps each error message to a fix.
2. Open a subaccount
Each subaccount trades with its own key. Generate a keypair for it:brew install openssl.
Then send the public key to open the subaccount:
keyId in the response identifies both the new trading key and the subaccount.
3. Fund the subaccount
Move $10 from your account into the subaccount:202 means we accepted the transfer, not that the money moved.
Before you place an order, check that its status is Applied.
4. Find a market
From here on, use the trading key. List five NFL markets and take the first outcome:trading or trading::read key.
Catalog lists every filter.
5. Place an order
Bid on that outcome:0.050, which costs $0.005.
A 201 means we accepted the order, not that it’s on the book.
The order rests when the open event arrives on the private stream.

