Guides
5-Minute Quickstart
Place your first bet with the WinNova API in under 5 minutes
Prerequisites
- An API key with scopes:
markets:read,orders:write,orders:read - Your API secret for request signing
All requests go to:
https://api.winnova.pro/api/ext/v1Every request must be signed. See the Authentication and Request Signing docs for full details.
Step 1: List Open Events
curl -X GET "https://api.winnova.pro/api/ext/v1/events?status=active&limit=5" \
-H "X-API-KEY: your_api_key" \
-H "X-API-TIMESTAMP: 1743760000000" \
-H "X-API-NONCE: abc123" \
-H "X-API-SIGNATURE: <hmac_sha256_signature>"import requests, time, hmac, hashlib, uuid
BASE_URL = "https://api.winnova.pro/api/ext/v1"
API_KEY = "your_api_key"
API_SECRET = "your_api_secret"
def sign(method, path, body=""):
timestamp = str(int(time.time() * 1000)) # milliseconds
nonce = uuid.uuid4().hex
body_hash = hashlib.sha256(body.encode()).hexdigest()
payload = f"{method}\n{path}\n{timestamp}\n{nonce}\n{body_hash}"
sig = hmac.new(API_SECRET.encode(), payload.encode(), hashlib.sha256).hexdigest()
return {"X-API-KEY": API_KEY, "X-API-TIMESTAMP": timestamp,
"X-API-NONCE": nonce, "X-API-SIGNATURE": sig}
resp = requests.get(f"{BASE_URL}/events", params={"status": "active", "limit": 5},
headers=sign("GET", "/api/ext/v1/events"))
events = resp.json()["data"]
print(events[0]["id"], events[0]["title"])// Using the makeRequest helper from the Authentication guide
const { data: events } = await makeRequest('GET', '/api/ext/v1/events', null, { status: 'active', limit: 5 });
console.log(events[0].id, events[0].title);Sample response:
{
"success": true,
"data": [
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"title": "NBA: Lakers vs Celtics",
"status": "active",
"sport": "basketball",
"league": "NBA",
"game_start_time": "2026-04-05T00:30:00Z"
}
]
}Step 2: Get Markets for an Event
curl "https://api.winnova.pro/api/ext/v1/events/7c9e6679-7425-40de-944b-e07fc1f90ae7/markets" \
-H "X-API-KEY: ..." \
-H "X-API-TIMESTAMP: ..." \
-H "X-API-NONCE: ..." \
-H "X-API-SIGNATURE: ..."event_id = "7c9e6679-7425-40de-944b-e07fc1f90ae7"
path = f"/api/ext/v1/events/{event_id}/markets"
resp = requests.get(f"{BASE_URL}/events/{event_id}/markets", headers=sign("GET", path))
markets = resp.json()["data"]
market = markets[0]
print(market["id"], market["type"], market["outcomes"])Sample response:
{
"success": true,
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": "moneyline",
"question": "Who will win?",
"status": "active",
"outcomes": [
{ "id": "out_a", "name": "Lakers", "token_id": "0xabc...", "price": 0.55 },
{ "id": "out_b", "name": "Celtics", "token_id": "0xdef...", "price": 0.45 }
],
"volume": 125000.50
}
]
}Step 3: Place a Market Order (FOK)
A FOK (Fill or Kill) order executes immediately at the best available price.
curl -X POST "https://api.winnova.pro/api/ext/v1/orders" \
-H "Content-Type: application/json" \
-H "X-API-KEY: ..." \
-H "X-API-TIMESTAMP: ..." \
-H "X-API-NONCE: ..." \
-H "X-API-SIGNATURE: ..." \
-d '{"market_id":"550e8400-e29b-41d4-a716-446655440000","outcome":"a","amount":50}'import json
body = json.dumps({
"market_id": "550e8400-e29b-41d4-a716-446655440000",
"outcome": "a",
"amount": 50
})
resp = requests.post(f"{BASE_URL}/orders", data=body,
headers={**sign("POST", "/api/ext/v1/orders", body),
"Content-Type": "application/json"})
print(resp.json())const order = await makeRequest('POST', '/api/ext/v1/orders', {
market_id: '550e8400-e29b-41d4-a716-446655440000',
outcome: 'a',
amount: 50
});
console.log('Order ID:', order.data.order_id);Response:
{
"success": true,
"data": {
"order_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"notification_id": "notif_xyz"
}
}Step 4: Check Order Status
order_id = "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
path = f"/api/ext/v1/orders/{order_id}"
resp = requests.get(f"{BASE_URL}/orders/{order_id}", headers=sign("GET", path))
print(resp.json()["data"]["status"]) # "matched"Order status progresses: pending → signing → submitted → live → matched → won / lost
Next Steps
- Full Betting Flow — end-to-end walkthrough with portfolio tracking
- Limit Orders — place GTC/GTD orders and manage your orderbook positions
- WebSocket Topics — stream real-time price and order updates