---
title: "Bet Share"
canonical_url: "https://apidocs.sportradar.com/resources/virtual-stadium/docs/web/adapter/hosted/features/betShare"
markdown_url: "https://apidocs.sportradar.com/resources/virtual-stadium/docs/web/adapter/hosted/features/betShare.md"
last_updated: "2026-09-14T11:55:40Z"
---

# Bet Share

Enable bet sharing on top of the hosted adapter, allowing users to share their bets with other Virtual Stadium users.

Because the hosted adapter has no knowledge of the bets placed on your platform, Bet Share is implemented as an adapter extension: you provide the `tickets` endpoint that retrieves the user's bets from your system.

## Overview

To integrate bet sharing with Virtual Stadium:

1. **Step 1**

   Register your adapter with the [global SIR function](https://apidocs.sportradar.com/resources/widgets/docs/tutorials/SIR.md), ensuring only one adapter is registered per page load.

2. **Step 2**

   Implement the [`tickets` endpoint](https://apidocs.sportradar.com/resources/widgets/docs/adapter/Types.md#tickets-function) to fetch and return [`TicketResponseV2`](https://apidocs.sportradar.com/resources/widgets/docs/adapter/Types.md#ticketresponsev2) via `callback`.

3. **Step 3**

   Choose a delivery method — non-paginated (full list) or paginated (`ticketsFetchMore`). See [Implementation options](#implementation-options) below.

4. **Step 4**

   Return tickets by calling `callback(undefined, data)` from your adapter. For paginated integrations, also handle `onAction` `ticketsFetchMore` on the embed page.

The widget stack calls your `tickets` endpoint when users open the bet-share picker. The same adapter contract also powers **Central Hub** share-betslip screens.

> **Who calls callback?**
>
> The widget invokes `tickets(args, callback)` once. **You** call `callback` to deliver data — including subsequent pagination pages via the stored callback reference. The widget never calls `callback`.

## Implementation options

New integrations must return [`TicketResponseV2`](https://apidocs.sportradar.com/resources/widgets/docs/adapter/Types.md#ticketresponsev2) — not the deprecated `BetShareResponse` format.

|                       | **Option A — Non-paginated**                           | **Option B — Paginated**                                                                                            |
| --------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------- |
| **When to use**       | Small ticket lists                                     | Large ticket histories                                                                                              |
| **First callback**    | `{ tickets: Ticket[] }` — complete list                | `{ tickets, pageSize, hasMore, nextCursor }` — first batch                                                          |
| **Further callbacks** | Usually none — single `{ tickets }` emission is tested | **You** call the stored `callback` with `{ newTickets, hasMore?, nextCursor? }` after `onAction` `ticketsFetchMore` |
| **Pagination**        | N/A                                                    | Widget fires `onAction` `ticketsFetchMore` when the next page is needed                                             |

Flow diagrams, field tables, and code examples: [Tickets Function reference](https://apidocs.sportradar.com/resources/widgets/docs/adapter/Types.md#tickets-function).

Step-by-step tutorials:

- [Track A — Non-paginated](https://apidocs.sportradar.com/resources/widgets/docs/tutorials/examples/adapter-tickets-endpoint-example.md#track-a--non-paginated-recommended-for-getting-started)
- [Track B — Paginated](https://apidocs.sportradar.com/resources/widgets/docs/tutorials/examples/adapter-tickets-endpoint-example.md#track-b--paginated-large-ticket-histories)

> **Warning**
>
> Paginated integrations require an `onAction` handler on the embed page. Page 2+ is **not** fetched by calling `tickets()` again — store the `callback` from the initial `tickets()` call and invoke it with `{ newTickets, ... }`.

## Implementation

**Backend**: Implement the `tickets` endpoint handler as an extension of the hosted adapter.

For a full walkthrough with copy-pasteable examples, see the [Adapter Tickets Endpoint Example](https://apidocs.sportradar.com/resources/widgets/docs/tutorials/examples/adapter-tickets-endpoint-example.md).

**Frontend**: Enable the Copy Bet Button widget

To allow users to interact with and copy bets in the UI, see the [Copy Bet Button documentation](https://apidocs.sportradar.com/resources/virtual-stadium/docs/web/widgets/virtualStadium/features/copyBetButton.md).

For paginated ticket loading, see the [Bet Share widget documentation](https://apidocs.sportradar.com/resources/virtual-stadium/docs/web/widgets/virtualStadium/features/betShare.md) (`ticketsFetchMore` onAction).
