Documentation

Embed Arena3D

Show broadcast-quality 3D football on your site with a single <iframe>. Copy, paste, done.

Quick start

  1. Subscribe to the 3€/month plan.
  2. In your dashboard, create an embed key, add your website's domain, and copy the token.
  3. Find a match ID (see Finding matches) and paste the iframe:
<iframe
  src="https://arena.bzzoiro.com/embed/replay/8385/?key=YOUR_TOKEN"
  width="800" height="500" frameborder="0"
  allowfullscreen></iframe>

Get your token & register domains

Every embed is protected by a token tied to a domain allowlist you control. This is what stops your token from being copied and reused on other sites.

  • Create a key in the dashboard and give it a label (e.g. My blog).
  • Add the domains allowed to display the widget, one per line — e.g. example.com. Subdomains like www.example.com or blog.example.com are allowed automatically.
  • Up to 3 domains per token.
If the widget is loaded on a domain that isn't on the list, it shows an “unlicensed” message instead of the match. Add the domain in your dashboard to fix it.

Finding matches — the free BSD Sports API

Arena3D covers matches that have 3D pitch tracking. To discover which matches are available and get their event_id, use the free BSD Sports API.

  1. Register for a free API token at sports.bzzoiro.com/register.
  2. List live or upcoming events:
curl -H "Authorization: Token YOUR_BSD_TOKEN" \
  "https://sports.bzzoiro.com/api/v2/events/live/"

Each event has a websocket_plus field. When it is true, the match has 3D tracking coverage and works in Arena3D. Use that event's id as the <event_id> in your embed URL.

{
  "id": 8385,
  "home_team": "Norway",
  "away_team": "England",
  "websocket_plus": true      // ← has 3D tracking → embeddable in Arena3D
}
Tip: /api/v2/events/live/ returns matches happening now (best for live embeds). Use /api/v2/events/ to browse past matches for replay embeds.

Embed a replay

A full 3D replay of a finished (or in-progress) match, driven by the real event stream:

<iframe
  src="https://arena.bzzoiro.com/embed/replay/<event_id>/?key=YOUR_TOKEN"
  width="800" height="500" frameborder="0" allowfullscreen>
</iframe>

Recommended aspect ratio is 16:10. For a responsive full-width embed, wrap it:

<div style="position:relative;width:100%;aspect-ratio:16/10">
  <iframe src="https://arena.bzzoiro.com/embed/replay/<event_id>/?key=YOUR_TOKEN"
    style="position:absolute;inset:0;width:100%;height:100%;border:0"
    allowfullscreen></iframe>
</div>

Embed a live match

Same as replay, but the pitch updates in real time as events happen (recent history is replayed on load, then it streams live):

<iframe
  src="https://arena.bzzoiro.com/embed/live/<event_id>/?key=YOUR_TOKEN"
  width="800" height="500" frameborder="0" allowfullscreen>
</iframe>
Live requires the match to be in progress and have 3D tracking coverage (websocket_plus: true). Before kickoff or after full-time, use the replay embed instead.

Limits & notes

  • Up to 3 domains per token; create multiple tokens for separate projects.
  • The widget is a self-contained iframe — it won't interfere with your page's CSS or JS.
  • Team and player imagery loads automatically when available.

Troubleshooting

  • “Unlicensed” message — the current domain isn't registered on the token. Add it in your dashboard.
  • Empty / no movement — that match has no tracking data. Check websocket_plus is true via the BSD API.
  • Live won't connect — the match isn't live or isn't covered by 3D tracking. Use the replay embed.
  • Subscription inactive — the token owner's plan lapsed. Renew from the dashboard.

Billing

3€/month, auto-renewing, handled by DodoPayments. Cancel anytime from your dashboard — you keep access until the end of the period.

Questions? Join our Discord.