Integrate

Going live & ads.txt

Going live means real brands can buy Bonus Rounds in your game and you start earning 70% of net ad revenue. It takes a few minutes of setup.

Checklist

  1. Your game is detected and learned

    The game's status should be ready: the SDK has pinged from your domain and our play agent has finished learning the game. If the game needs an account to play, give the agent a test login (Game → Settings → Agent login). It's stored encrypted and typed by the agent through a secret tool, so the model never sees it.

  2. Your domains are registered

    Ads are only served to pages on your game's domains. The domain of the URL you registered is included automatically, along with its subdomains (play.mygame.com counts for mygame.com). Add other hosts (an itch.io page, the CDN host that serves your game iframe) in Settings, or via the API with PATCH /api/games/:id { "domains": ["mygame.com", "mygame.itch.io"] }. localhost always works for development.

  3. Say whether your game is made for kids

    Game → Settings → Is this game made for kids? Answer Yes, Mixed audience or No. You can't go live until you've answered. See Games for kids below for what each answer changes.

  4. Add the ads.txt lines

    ads.txt (IAB Tech Lab, version 1.1) is the industry standard that tells brands which ad networks are allowed to sell your inventory. Add these lines to https://yourdomain.com/ads.txt (create the file if you don't have one; it lives at the root of your domain):

    # Bonus Round (bonusround.io)
    bonusround.io, pub_XXXXXXXX, DIRECT
    OWNERDOMAIN=yourdomain.com
    • DIRECT means you sell through your own Bonus Round account.
    • OWNERDOMAIN is your own business domain. It appears once per file: if your file already has an OWNERDOMAIN line, keep yours and skip ours.
    • Don't add a MANAGERDOMAIN line for us. We're the ad system, not your manager; MANAGERDOMAIN is only for a company that runs your whole ad stack for you.

    Your exact lines are on your game's Integration tab, and at GET https://bonusround.io/v1/ads.txt?pub=pub_XXXXXXXX (the record line alone is game.snippet.adsTxt in the API). We fetch your /ads.txt about once a day (user agent BonusRoundAdsTxtBot/1.0) and show on the Integration tab whether we found the line; Check now re-checks on demand. Games on shared hosts such as itch.io or GitHub Pages can't host the file at the domain root; that's fine.

  5. Turn test mode off

    Dashboard → your game → Settings → Test mode off. Or PATCH /api/games/:id { "testMode": false }. From now on requests go to the auction instead of the Fizzpop test ad. break('test') still plays Fizzpop whenever you want.

  6. Check your settings

    Formats and triggers, the hourly frequency cap, floors and blocked categories. The defaults are sensible: every format on, interval every 5 minutes, 4 takeovers per player per hour, floors of $2.00 CPM (takeover) and $0.50 CPM (ambient).

sellers.json

We publish https://bonusround.io/sellers.json (IAB Tech Lab sellers.json 1.0), the public list of everyone we sell inventory for, so brands can check your ads.txt line against it. Your seller ID is your publisher ID (pub_…) and your seller type is PUBLISHER. Games appear once they're live.

Individuals are listed as confidential by default: just the seller ID, no name or domain. Businesses can choose to be named (legal name and business domain, which should match your OWNERDOMAIN). Change it on your game's Integration tab under sellers.json listing.

Games for kids

COPPA (US), GDPR-K (EU) and the UK Children's Code protect players under 13. Bonus Round serves those games contextual ads only, and so does any game where kids may be playing:

Your gameAds
Made for kids: YesContextual only, and restricted brands (alcohol, gambling, energy drinks and the rest) are blocked
Mixed audience (kids are one of your audiences)Contextual only, restricted brands blocked
Not answered yetContextual only
No, but rated Everyone / Everyone 10+, not rated yet, or our agent sees kid-directed signalsContextual only
No, and rated Teen or aboveStandard: an anonymous player id for frequency caps, where the browser allows storage

Contextual only means: no player IDs, cookies or local storage; no behavioural targeting or cross-game profiles; frequency caps per play session only (the "support for internal operations" COPPA allows); IP addresses never stored. Details in Events & measurement → Privacy. Set it in Game → Settings, or PATCH /api/games/:id { "settings": { "madeForKids": "yes" | "mixed" | "no" } } (the older directedToChildren: true still means Yes).

Portals (Poki, CrazyGames, GameDistribution, Y8)

These portals don't allow third-party ads in the games they host. If your game also runs on one of them, you don't need a separate build: the SDK notices (from the page's hostname, the embedding page's origin or the referrer) and switches itself off there. That's portal mode:

Covered: Poki (including its game CDN), CrazyGames, GameDistribution and Y8, and their subdomains. The list lives in one place in the SDK and we keep it up to date; tell us if you see a portal we missed.

When do real ads start?

Bonus Rounds are generated per game. When your game is ready, it becomes a match for brands whose audience, safety settings and style fit it. Each brand that picks your game has its agents generate a round specifically for it and reviews it in your game before it can run. Expect fill to start low and rise as brands find your game.

Until then, break() resolves immediately with filled: false and reason: 'no_eligible_campaigns', and your game carries on as usual.

Floors and the auction