Affiliate
The Affiliate API powers the widget's affiliate mode and any custom clicks-out
integration: surfacing the best sportsbook offer per market, building a
comparison cart, managing your tracked link inventory, and reporting on clicks.
All endpoints are prefixed with /v1/affiliates/ and authenticate with the same
X-API-Key header as the rest of the API. Responses are scoped to your client,
so the offers and links you get back are always your own inventory.
When to use it
| You want to... | Use |
|---|---|
| Show the best offer for a single bet | POST /v1/affiliates/event-position |
| Build a multi-leg parlay cart | POST /v1/affiliates/parlay |
| List your active offers for a geography | POST /v1/affiliates/offers |
| Render a deals carousel / page | POST /v1/affiliates/deals |
| Manage your tracked links | /v1/affiliates/links* |
| Report on click performance | /v1/affiliates/links/clicks |
| Discover operators, categories, networks | /v1/affiliates/lookups/* |
The cart flow
Affiliate mode is a two-click flow: the user taps "Bet Now" on a card, the widget
opens a cart showing a comparison of which sportsbooks offer that bet (overlaid
with your best affiliate offer per operator), and the second click opens your
tracked URL for the chosen book in a new tab.
The cart is built from two endpoints.
Single position
Returns one event betting market position with live odds from all operators,
overlaid with your best affiliate offer per operator. operator_ids gates which
operators appear in the cart (e.g. only FanDuel and DraftKings).
curl -X POST https://api.odditt.com/v1/affiliates/event-position \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"event_betting_market_position_id": 194238696,
"country_code": "US",
"subnational_region_code": "NJ",
"operator_ids": [1, 2]
}'Parlay (multi-leg)
The multi-leg version of the cart. Same geography and operator gating, but takes
an array of position IDs — one per leg.
curl -X POST https://api.odditt.com/v1/affiliates/parlay \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"event_betting_market_position_ids": [351558937, 351558940],
"country_code": "US",
"subnational_region_code": "NJ",
"operator_ids": [1, 2]
}'
Geography matters
country_codeandsubnational_region_codeare passed through to the offer
engine so only operators legal in that region are returned. Pass the same
geography the widget was instantiated with. Valid region codes per country
come fromGET /v1/references/subnational-regions.
Offers & deals
Offers
Returns your active offers for a geography, optionally scoped to a campaign.
Useful for overlaying your own deals onto any content surface.
curl -X POST https://api.odditt.com/v1/affiliates/offers \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"country_code": "US",
"subnational_region_code": "NJ",
"offer_campaign": "email_ste1"
}'Deals
A presentation-oriented feed of deals for rendering a carousel, list, featured
block, or detail view. Supports pagination and an optional with_reviews flag.
curl -X POST https://api.odditt.com/v1/affiliates/deals \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mode": "carousel",
"country_code": "US",
"subnational_region_code": "NJ",
"page_number": 1,
"page_size": 20,
"with_reviews": false
}'Link inventory management
Your affiliate links are the tracked URLs the cart hands off to. Manage them
individually or in bulk.
Create a single link
curl -X POST https://api.odditt.com/v1/affiliates/links \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"operator_name": "fanduel",
"country_code": "US",
"subnational_region_code": "NJ",
"offer_category_id": 1,
"offer_campaign": "email_ste",
"web_deep_link_url": "https://fanduel.com/promo?ref=<STATE>&user=ste",
"offer_tagline": "Bet $5, get $150",
"offer_display_bullets": ["No sweat first bet", "Instant payouts"],
"offer_ev_usd": 120.50,
"is_active": true
}'Bulk upsert
Send an array of links. Supports ?dry_run=true to validate the payload and
preview what would change without writing anything — always dry-run first when
wiring up a new pipeline.
curl -X POST "https://api.odditt.com/v1/affiliates/links/bulk?dry_run=true" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '[
{
"operator_name": "fanduel",
"country_code": "US",
"subnational_region_codes": "NJ,PA,MI",
"offer_category_id": 1,
"offer_campaign": "email_ste1",
"web_deep_link_url": "https://fanduel.com/promo?ref=NJ&user=ste1",
"offer_ev_usd": 120.50
},
{
"operator_name": "draftkings",
"country_code": "US",
"offer_category_id": 1,
"web_deep_link_url": "https://draftkings.com/promo"
}
]'Bulk patch
Apply a single set of field changes to every link matching a filter.
curl -X PATCH https://api.odditt.com/v1/affiliates/links/bulk \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filter": { "operator_id": 1, "subnational_region_code": "NJ" },
"patch": { "web_deep_link_url": "https://fanduel.com/new-domain?ref=<STATE>" }
}'Bulk deactivate
Deactivate every link matching a filter (soft-delete; links stop being served).
curl -X POST https://api.odditt.com/v1/affiliates/links/bulk-deactivate \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "filter": { "subnational_region_code": "NJ" } }'Async bulk jobs
Large bulk operations run asynchronously. Poll the jobs endpoints to track
progress and results.
# List your recent jobs
curl https://api.odditt.com/v1/affiliates/links/jobs \
-H "X-API-Key: YOUR_API_KEY"
# Check the status of a single job
curl https://api.odditt.com/v1/affiliates/links/jobs/35aaa368-c5a4-4426-9de5-edfde4cb6b8b \
-H "X-API-Key: YOUR_API_KEY"Reporting
Clicks
A click report over a date window, optionally filtered by operator or campaign.
curl "https://api.odditt.com/v1/affiliates/links/clicks?start_date=2026-06-01&end_date=2026-06-30" \
-H "X-API-Key: YOUR_API_KEY"Inventory summary
A roll-up of your current link inventory. Group by a dimension such as
operator to see coverage at a glance.
curl "https://api.odditt.com/v1/affiliates/links/inventory-summary?group_by=operator" \
-H "X-API-Key: YOUR_API_KEY"Lookups
Dimension lookups for building link inventory. These are public (not
client-scoped) reference data.
| Endpoint | Returns |
|---|---|
GET /v1/affiliates/lookups/operators | Operators you can build links for (supports search, pagination) |
GET /v1/affiliates/lookups/operator-jurisdictions | Which jurisdictions an operator is live in (country_code, optional operator_id) |
GET /v1/affiliates/lookups/offer-categories | Valid offer_category_id values |
GET /v1/affiliates/lookups/affiliate-networks | Supported affiliate networks |
curl "https://api.odditt.com/v1/affiliates/lookups/operators?page=1&page_size=20&search=bet" \
-H "X-API-Key: YOUR_API_KEY"Next Steps
- Widget Overview - how affiliate mode fits into the widget
- Filtering & Query Parameters - shared query conventions
- Browse the API Reference for full request/response schemas
Updated about 15 hours ago

