Two API hosts
Markets host vs tournaments host — when to use baseUrl and tournamentsBaseUrl.
Bento runs on two HTTP services. The SDK routes each namespace to the correct host.
Markets host (baseUrl)
Default: https://mainnet-server.bento.fun
| Clients | Prefix | Products |
|---|---|---|
sdk.public | /bento/... | Duels, packs, analytics, auth |
sdk.user | /bento/... | Bets, create market, withdraw |
sdk.realtime | WebSocket on same host | Market list, duel activity |
OpenAPI snapshot: packages/documentation/contracts/bento.docs-json.snapshot.json (pinned from /bento/docs-json).
Tournaments host (tournamentsBaseUrl)
Set via PARLAY_TOURNMENT_URL (frontend: NEXT_PUBLIC_PARLAY_BACKEND_URL).
| Client | Prefixes | Products |
|---|---|---|
sdk.tournaments | /api/parlay, /api/tournaments, /bento/* | Parlay, bracket, F1, fantasy, social |
OpenAPI snapshot: packages/documentation/contracts/tournaments.docs-json.snapshot.json (exported from Nest locally).
Configuration
const sdk = createBentoSdk({
baseUrl: process.env.BENTO_URL!,
tournamentsBaseUrl: process.env.PARLAY_TOURNMENT_URL, // optional
auth: walletAuthProvider(/* … */),
tournamentsAuth: jwtAuthProvider({ getAccessToken: () => token }),
});If tournamentsBaseUrl is omitted, sdk.tournaments and sdk.onchain are undefined.
Auth per host
- Markets: wallet signature headers or JWT from
public.auth.eoaLogin - Tournaments: often JWT via
tournaments.auth.login; some reads use wallet headers
You can pass different providers: auth for markets, tournamentsAuth for tournaments.
Standalone tournaments client
import { createTournamentsSdk } from '@bento.fun/sdk';
const tournaments = createTournamentsSdk({
baseUrl: process.env.PARLAY_TOURNMENT_URL!,
auth: jwtAuthProvider({ getAccessToken: () => token }),
});