Iframe Parameters
All widget configuration is passed via query parameters on the iframe src URL. Parameters fall into these categories: theme, language, odds & currency, geolocation, live scores, filters (chips and pass-through), entity scoping, date filters, hit-rate / probability thresholds, betting-market identifiers, operator filters, and display toggles.
Most non-theme parameters are forwarded to the backend /v1/trends/mixed-flows endpoint to pre-filter the feed before the first paint. See the API reference for the corresponding request body fields.
Basic Embed
<iframe
src="https://widget.example.com/?preset=brand_dark_v2"
width="100%"
height="480"
frameborder="0"
style="border: none;"
></iframe>Theme Parameters
Control the visual appearance of the widget.
| Parameter | Type | Description |
|---|---|---|
preset | string | Name of the preset JSON file to load (without .json). The widget fetches it from your configured preset hosting location. |
bg | string | Page background color - hex value without # (e.g., bg=1e293b). Defaults to 0a0a1a. If the loaded preset also contains a pageBgHex field, the preset value takes precedence. |
colorMode | string | dark or light. Forces the color mode, overriding the preset's stored colorMode. |
layoutMode | string | carousel or feed. Forces the layout, overriding the preset's stored layoutMode. |
When both colorMode and layoutMode are present alongside preset, the widget first tries a mode-specific preset file named {preset}_{layoutMode}_{colorMode}.json (e.g. brand_feed_dark.json) and falls back to the bare {preset}.json if it doesn't exist. See Presets for details.
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&bg=1e293b"
width="100%"
height="480"
frameborder="0"
style="border: none;"
></iframe>
TipSetting
backgroundColoron the<iframe>element itself does not affect content inside the frame. Use thebgquery parameter instead.
Language
| Parameter | Type | Default | Description |
|---|---|---|---|
lang | string | en-US | UI language for filter labels, button text, etc. |
Supported values:
| Code | Language |
|---|---|
en-US | English |
es-ES | Spanish |
it-IT | Italian |
pt-BR | Portuguese (Brazil) |
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&lang=it-IT"
...
></iframe>Priority: ?lang= query param overrides the default language configured for your deployment. Falls back to en-US.
Locale matching is tolerant: values are normalized (pt_br → pt-BR), and granular regional variants resolve to the closest supported language (es-419, es-MX → Spanish). Any other value falls back to English.
InfoThe
langparameter localizes the full experience - the widget UI (filter names, button text, countdown labels, date formatting) and the trend narrative content, which the widget requests from the API in the same language (via theX-Languageheader). See Localization for how narrative translation works. Additional languages are added over time - ask your Odditt contact about upcoming coverage.
Odds & Currency Parameters
Override the odds format and currency set by the preset. These take precedence over preset values.
| Parameter | Type | Default | Description |
|---|---|---|---|
oddsFormat | string | american | Odds display format |
currency | string | USD | Currency code for betslip amounts |
Supported oddsFormat values:
| Value | Display | Example | Typical product mode |
|---|---|---|---|
american | American odds (default) | +150, -200 | sportsbook (US) |
decimal | Decimal odds | 2.50, 1.50 | sportsbook (intl) |
fractional | Fractional odds | 3/2, 1/2 | sportsbook (UK/IE) |
multiplier | Decimal with x suffix | 2.0x, 2.5x | dfs |
probability | Implied probability % | 40.0%, 66.7% | prediction market |
The probability format computes implied probability from decimal odds: (1 / decimalOdds) × 100. This is useful for prediction market integrations.
The multiplier format is identical to decimal odds with an x suffix appended; it is the default for DFS product mode. The format is purely presentational — the underlying value in the payload is always the raw decimal number.
Product Mode
| Parameter | Type | Default | Description |
|---|---|---|---|
productMode | string | sportsbook | Controls odds format defaults, market filtering, and stat-line rendering. |
Supported values: sportsbook, dfs, prediction_market.
The product mode is independent of the widget mode (operator / affiliate / clean). It controls what the card looks like, not what happens on tap. See the Product Modes guide for the full breakdown.
When productMode=dfs, the API automatically scopes the feed to player over/under props (betting_market_entity_type=player, position IDs [4, 5]), defaults the odds format to multiplier, and returns stat lines with the direction prefix stripped and the odds replaced by a MORE / LESS label.
<!-- DFS product mode: multiplier odds, player overs/unders only -->
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&productMode=dfs"
width="100%"
height="480"
frameborder="0"
style="border: none;"
></iframe><!-- Prediction market style: probability odds in euros -->
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&oddsFormat=probability¤cy=EUR"
width="100%"
height="480"
frameborder="0"
style="border: none;"
></iframe>Priority: defaults → preset → iframe params. If the preset sets oddsType: "decimal" but the iframe URL has ?oddsFormat=probability, probability wins.
TipThe
oddsFormatandcurrencyparameters are applied after the preset loads, so they always override preset values regardless of timing.
Geolocation
Tell the widget where the end user is located. This drives operator offer eligibility (affiliate mode) and market availability.
| Parameter | Type | Default | Description |
|---|---|---|---|
country | string | - | Two-letter country code (e.g. US). |
region | string | - | State / subnational region code (e.g. NJ). Valid codes per country: GET /v1/references/subnational-regions. |
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&country=US®ion=NJ"
...
></iframe>Live Scores & Realtime
Realtime streaming and live scores are enabled per deployment and may not be available on your plan - check with your Odditt contact. On deployments without it, these parameters have no effect and the widget renders with its initially fetched data.
| Parameter | Type | Default | Description |
|---|---|---|---|
showLiveScores | boolean | preset value | When true, in-play events show a LIVE pill with period, clock, and score. When false, live game-state display is disabled. When omitted, the preset's showLiveScores setting applies. |
realtime | boolean | true | Set realtime=false to disable all realtime streaming for this embed (live odds, parlay pricing, and live scores). Only relevant on deployments where realtime streaming is enabled. |
See the Live Scores & Realtime guide for what updates in realtime and how the live game-state display works.
PostMessage Target
| Parameter | Type | Default | Description |
|---|---|---|---|
parentOrigin | string | * | Target origin used by the widget when calling postMessage() on the parent window. |
Restrict widget events to your domain so other pages embedding your iframe cannot receive them:
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&parentOrigin=https://mysite.com"
...
></iframe>See Widget Events for the full event reference and rationale.
Filter Parameters
Pre-set the widget's initial filter state. These control which flows are fetched from the API.
| Parameter | UI Filter | Valid Values |
|---|---|---|
flowType | Context | fact, fun, plain |
betType | Wager Type | singles, parlay, same_game_parlay |
bettingMarketEntityType | Market Type | player, team, event |
likelihoodType | Probability | likely, possible, longshot |
splitType | Bet Type | overs, unders |
factFlowType | Fact Flow Display | base, expanded |
<!-- Show only fact flows with singles bets, overs only -->
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&flowType=fact&betType=singles&splitType=overs"
width="100%"
height="480"
frameborder="0"
style="border: none;"
></iframe>How Filters Work
- Server-side rendering - filter params are parsed from the URL and included in the initial API call, so the first page load already returns filtered data.
- Client hydration - the filter UI reflects the iframe params immediately after hydration.
- Subsequent fetches - pagination and user-initiated filter changes use the current filter state (seeded from iframe params).
Filter Locking
When the preset includes allowOverrideIframeFilters: false, filter categories set via iframe params are locked in the UI - they show locked chip styling and their options are disabled. Filters not set via iframe remain editable.
When allowOverrideIframeFilters: true (default), users can freely change all filters, including those initially set via iframe params.
Interaction with Presets
- Iframe filter params always take precedence over preset values.
- Presets never contain filter state - filter state is controlled exclusively by iframe params and user interaction.
- Exception:
factFlowTypeis stored in presets but can also be set via iframe params. The iframe param wins during initial state seeding.
Entity Parameters
Narrow the widget feed to a specific event, league, sport, player, or team. All are optional and can be combined.
| Parameter | Type | API Field | Description |
|---|---|---|---|
eventIds | number[] | event_ids | Filter by one or more event IDs (comma-separated) |
leagueIds | number[] | league_ids | Filter by one or more league IDs |
leagueKey | string | league_key | Filter by league key (e.g. nba, united-states.nba) |
sportIds | number[] | sport_ids | Filter by one or more sport IDs |
sportKey | string | sport_key | Filter by sport key (e.g. american-football) |
playerIds | number[] | player_ids | Filter by one or more player IDs |
playerKey | string | player_key | Filter by player key (e.g. nikola-vucevic, nba.boston-celtics.nikola-vucevic) |
teamIds | number[] | team_ids | Filter by one or more team IDs |
teamKey | string | team_key | Filter by team key (e.g. new-england-patriots, nfl.new-england-patriots) |
<!-- NFL only, scoped to a specific team -->
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&leagueKey=nfl&teamKey=chiefs"
width="100%"
height="480"
frameborder="0"
style="border: none;"
></iframe>Entity parameters are forwarded to the backend on every API call (both SSR and client-side). Only parameters present in the URL are included - omitted parameters have no effect. Integer parameters that cannot be parsed are silently ignored. When both an ID and a key are supplied for the same entity (e.g. leagueId and leagueKey), the ID takes precedence.
Date Filters
Restrict the feed to events starting within a date window.
| Parameter | Type | API Field | Description |
|---|---|---|---|
eventStartDateFrom | string | event_start_date_from | Filter events starting on or after this value. Accepts a date (2026-04-19) or a full ISO 8601 timestamp (2026-04-19T00:00:00Z). |
eventStartDateTo | string | event_start_date_to | Filter events starting on or before this value. Accepts a date (2026-04-26) or a full ISO 8601 timestamp (2026-04-26T23:59:59Z). |
<!-- Only events between April 19 and April 26, 2026 -->
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&eventStartDateFrom=2026-04-19&eventStartDateTo=2026-04-26"
...
></iframe>Hit Rate & Probability Thresholds
Filter flows by historical hit rate or implied probability of the underlying bet.
| Parameter | Type | API Field | Description |
|---|---|---|---|
minHitRateThreshold | number | min_hit_rate_threshold | Minimum hit rate (integer 0–100). |
maxHitRateThreshold | number | max_hit_rate_threshold | Maximum hit rate (integer 0–100). |
minImpliedProbabilityThreshold | number | min_implied_probability_threshold | Minimum implied probability (decimal, e.g. 0.5 for 50%). |
maxImpliedProbabilityThreshold | number | max_implied_probability_threshold | Maximum implied probability (decimal). |
<!-- Only flows that have hit at least 70% of the time -->
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&minHitRateThreshold=70"
...
></iframe>Betting Market Identifiers
Scope the feed to specific betting-market categories, positions, or markets. IDs come from the corresponding reference endpoints.
| Parameter | Type | API Field | Description |
|---|---|---|---|
bettingMarketCategoryIds | number[] | betting_market_category_ids | Filter by one or more betting market category IDs. See /v1/references/betting-market-categories. |
bettingMarketPositionIds | number[] | betting_market_position_ids | Filter by one or more betting market position IDs. See /v1/references/betting-market-positions. |
bettingMarketIds | number[] | betting_market_ids | Comma-separated list of betting market IDs. See /v1/references/betting-markets. |
focusEntityTypeId | number | focus_entity_type_id | Filter by focus entity type ID. |
<!-- Limit to a specific category, e.g. player props -->
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&bettingMarketCategoryId=12&bettingMarketIds=101,102,103"
...
></iframe>Operator Filters
Restrict odds (and deeplinks) to specific sportsbook operators.
| Parameter | Type | API Field | Description |
|---|---|---|---|
operatorIds | number[] | operator_ids | Comma-separated list of operator IDs. |
operatorKeys | string[] | operator_keys | Comma-separated list of operator external keys (e.g. draftkings). Resolved IDs are merged with operatorIds. |
<!-- Odds from DraftKings and FanDuel only -->
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&operatorKeys=draftkings,fanduel"
...
></iframe>See /v1/references/operators for the full operator catalog.
Display Toggles
Boolean flags that change which flows are returned or what extra fields are included.
| Parameter | API Field | Description |
|---|---|---|
startingSoon | starting_soon | When true, only return flows for events starting within the next hour. For a custom window, use eventStartDateFrom / eventStartDateTo instead. |
fullHitRate | full_hit_rate | When true, only return fact flows whose trends have hit 100% of the time. |
includeAltLines | include_alt_lines | When false, exclude alt lines. Defaults to true. |
includeDeeplinks | include_deeplinks | When true, returns operator-specific odds and deeplink URLs (bet_ios_deep_link_url, bet_android_deep_link_url, bet_web_deep_link_url) for each flow. Requires exactly one operator ID in operatorIds. |
includeOnlyBasicTrends | include_only_basic_trends | When true, return only basic trends (omit fact flows with conditions). |
includeStarSignContent | include_star_sign_content | When true, permits star-sign / horoscope content in the feed. To specifically surface horoscope content, also pass the corresponding tag types. |
useCartoonImages | use_cartoon_images | When true, logo fields on flows and parlay legs are replaced with cartoon-jersey image URLs derived from the relevant team, player, or league. Defaults to false. |
<!-- Feed shows only starting-soon events, with deeplinks to DraftKings -->
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&startingSoon=true&operatorIds=10&includeDeeplinks=true"
...
></iframe>Tag Filters
Segment the feed by content or metadata tags. Resolve tag type IDs from the tag registry first - see the Segmentation & Tags guide.
| Parameter | Type | API Field | Description |
|---|---|---|---|
contentTagTypeIds | number[] | content_tag_type_ids | Filter by what the flow is about (narrative angle). OR mode by default. |
contentTagRequireAll | boolean | content_tag_require_all | When true, a flow must match all content tags (AND). |
metadataTagTypeIds | number[] | metadata_tag_type_ids | Filter by structural attributes (league, position, etc.). OR mode by default. |
metadataTagRequireAll | boolean | metadata_tag_require_all | When true, a flow must match all metadata tags (AND). |
<!-- Only flows tagged with content types 15 or 42 -->
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&contentTagTypeIds=15,42"
...
></iframe>Misc
| Parameter | Type | API Field | Description |
|---|---|---|---|
teamSplit | string | team_split | home or away - filter to trends computed over a team's home or away games only. |
pageSize | number | page_size | Number of flows fetched per page (initial load and each infinite-scroll page). Defaults to 20. |
widgetMode | string | widget_mode | operator, affiliate, or clean. Normally fixed in your deployment's preset (a preset widgetMode value takes precedence over this param). See Widget Modes. |
device_type | string | auto-detected | ios, android, or desktop. Overrides user-agent detection when choosing app vs. web deep links in the affiliate cart. |
URL Encoding Rules
| Type | URL form | Parsed value |
|---|---|---|
string | ?key=value | Non-empty string. Empty values are dropped. |
int | ?key=42 | parseInt(v, 10). NaN is dropped. |
float | ?key=0.75 | parseFloat(v). NaN is dropped. |
boolean | ?key=true / ?key=1 / ?key=false / ?key=0 | true / false. Case-insensitive. Anything else is dropped. |
intArray | ?ids=1,2,3 | [1, 2, 3]. NaN entries dropped; empty list dropped. |
stringArray | ?keys=a,b,c | ["a", "b", "c"]. Whitespace trimmed; empty list dropped. |
Repeated keys (?ids=1&ids=2&ids=3) are also accepted for array types if your embedder prefers HTML-form-style encoding.
Complete Example
Combining several parameter categories in a single embed:
<iframe
src="https://widget.example.com/?preset=brand_dark_v2&bg=1e293b&lang=it-IT&oddsFormat=probability¤cy=EUR&flowType=fact&betType=singles&splitType=overs&leagueKey=nfl&bettingMarketEntityType=player&eventStartDateFrom=2026-01-01&minHitRateThreshold=70&operatorIds=10,20,30"
width="100%"
height="480"
frameborder="0"
style="border: none;"
></iframe>This embed:
- Loads the
brand_dark_v2theme preset - Sets the page background to
#1e293b - Displays UI labels in Italian
- Shows odds as implied probability percentages
- Uses EUR currency for betslip amounts
- Shows only fact flows with singles bets and overs
- Scopes to NFL content and the player market type
- Restricts events to those starting on or after Jan 1 2026
- Hides any flow that hasn't hit at least 70% of the time
- Limits odds to operators 10, 20, and 30
API Parameter Mapping
For reference, here is how iframe parameters map to the backend /v1/trends/mixed-flows request body:
| Iframe Parameter | API Parameter (snake_case) |
|---|---|
flowType | flow_type |
betType | bet_type |
bettingMarketEntityType | betting_market_entity_type |
likelihoodType | likelihood_type |
splitType | split_type |
factFlowType | fact_flow_type |
eventIds | event_ids |
leagueIds | league_ids |
leagueKey | league_key |
sportIds | sport_ids |
sportKey | sport_key |
playerIds | player_ids |
playerKey | player_key |
teamIds | team_ids |
teamKey | team_key |
eventStartDateFrom | event_start_date_from |
eventStartDateTo | event_start_date_to |
minHitRateThreshold | min_hit_rate_threshold |
maxHitRateThreshold | max_hit_rate_threshold |
minImpliedProbabilityThreshold | min_implied_probability_threshold |
maxImpliedProbabilityThreshold | max_implied_probability_threshold |
bettingMarketCategoryIds | betting_market_category_ids |
bettingMarketPositionIds | betting_market_position_ids |
bettingMarketIds | betting_market_ids |
focusEntityTypeId | focus_entity_type_id |
operatorIds | operator_ids |
operatorKeys | operator_keys |
startingSoon | starting_soon |
fullHitRate | full_hit_rate |
includeAltLines | include_alt_lines |
includeDeeplinks | include_deeplinks |
includeOnlyBasicTrends | include_only_basic_trends |
includeStarSignContent | include_star_sign_content |
useCartoonImages | use_cartoon_images |
pageSize | page_size |
productMode | product_mode |
widgetMode | widget_mode |
contentTagTypeIds | content_tag_type_ids |
contentTagRequireAll | content_tag_require_all |
metadataTagTypeIds | metadata_tag_type_ids |
metadataTagRequireAll | metadata_tag_require_all |
teamSplit | team_split |
Next Steps
- Integration Recipes - how to wire these parameters up in production (theme sync, geo, empty/error handling)
- Widget Overview - introduction and flow types
- Playground - design your theme
- Presets - preset structure and deployment
- Widget Events - handle postMessage events from the widget
Updated about 15 hours ago

