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 betPOST /v1/affiliates/event-position
Build a multi-leg parlay cartPOST /v1/affiliates/parlay
List your active offers for a geographyPOST /v1/affiliates/offers
Render a deals carousel / pagePOST /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_code and subnational_region_code are 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 from GET /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.

EndpointReturns
GET /v1/affiliates/lookups/operatorsOperators you can build links for (supports search, pagination)
GET /v1/affiliates/lookups/operator-jurisdictionsWhich jurisdictions an operator is live in (country_code, optional operator_id)
GET /v1/affiliates/lookups/offer-categoriesValid offer_category_id values
GET /v1/affiliates/lookups/affiliate-networksSupported 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


Did this page help you?