config object lets you control how ads are served per request — pacing, contextual serving, creative constraints, and analytics tags. All fields are optional and fall back to defaults set on your publisher in the platform dashboard.
Ad Pacing
Controls when and how often ads appear in a conversation. Two checks run before any auction logic:- Ad Offset (
ad_offset) — minimum turns before the first ad in a conversation - Max Frequency (
max_frequency) — minimum number of requests between consecutive ads
200 OK with "bid": null and a message indicating the reason — same as a no-bid. Continue without an ad.
Example
Contextual Serving
Controls how an ad is matched to the conversation. Independent of pacing — these settings affect whether a relevant ad is found, not when it can appear.Contextuality
contextuality sets how closely an ad must match the conversation before it can be served, on a 1–8 scale (default 2).
Higher contextuality requires a stronger match, so fewer requests return an ad (lower fill rate) but each ad is more on-topic. Lower contextuality is more permissive and returns ads more often. Tune it to trade relevance against fill.
Retargeting
retargeting_enabled (default true) lets a relevant ad reach a user again based on their recent activity. When enabled, if a product was contextually relevant to a user in a conversation within the last 7 days, it can be shown to that user again — even if the current conversation isn’t relevant to that product. Set it to false to serve only ads relevant to the current conversation.
Example
Creative Constraints
Control what the ad creative looks like to fit your UI.Headline Limit
Whenmax_headline_chars is set, the system guarantees no headline exceeds the limit. If no creative fits, no ad is returned.
Image Control
Whenimage_enabled is false, the response is forced into text mode: placement is "text", the image_url field is omitted entirely, and an advertiser logo is returned in logo_url instead. Render the logo on your card. Use this when your UI doesn’t support product imagery, or when you want a more compact card.
See Ad Formats & Rendering — Sponsored Message for the full text-mode vs image-mode response shapes.
Experimental render directives
Experimental and bespoke — we roll these out with specific publishers we’re piloting with. They can be
true or false depending on what you send. If your integration doesn’t accommodate them, you can safely ignore the fields.restricted_click_area(cards) — whentrue, only specific elements (logo, advertiser name, CTA button) should be clickable rather than the whole card. The value you send is returned on the card bid. Defaults tofalse.redirect_after_vote(polls) — whentrue, send the user to the advertiser (cta_url) after they vote; whenfalse, stay inline and show the results bar. The value you send is returned on the poll bid. Defaults tofalse.
Experiments
Beta — available to all publishers.
experiment_tag to run A/B tests on your integration. Tag each request with a label (max 30 characters) and the tag is recorded on every impression. Compare performance metrics across variants in your dashboard.
Example
Test whether showing ads after turn 3 vs turn 5 performs better:offset_3 vs offset_5 in your dashboard analytics.
Maximising Fill Rate
Fill rate is the percentage of bid requests that return an ad. Several factors affect it: conversation relevance, geo targeting, campaign budgets, and pacing settings. Here’s a recommended approach: Ad quality is the lever, not a bypass. Fill comes from richer conversation context and sensible pacing, not from asking the server to serve regardless of match. Monitor your fill rate — if you’re seeing a fill rate below your target, consider these steps in order:- Lower
ad_offset— reduce the number of turns before the first ad.ad_offset: 0allows ads from the first exchange. - Lower
max_frequency— allow ads more frequently within a conversation. - Remove
max_headline_chars— headline constraints filter out some ads. Removing the limit increases the pool of eligible creatives. - Send richer conversation context — fill follows contextual match quality. More of the exchange, with PII stripped, gives the auction more to match against.
