Com APIbetrelay.com.ng ↗
Access BetRelay.com.ng via API: convert football booking codes between bookmakers, merge codes, list supported bookmakers, and read live conversions.
What is the Com API?
The BetRelay API exposes 4 endpoints that cover the full surface of betrelay.com.ng: converting a booking code from one bookmaker to another, merging up to 50 codes from the same bookmaker into one, listing every supported bookmaker/country combination, and reading the site's public live conversions feed. The convert_code endpoint returns the resolved selections, a deep-link to the generated slip, and a per-selection breakdown of what was skipped.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/3b97301d-eda6-412a-bcde-bbecf834cfa3/list_bookmakers' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace betrelay-com-ng-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: BetRelay SDK — convert and merge bet codes across bookmakers."""
from parse_apis.betrelay_com_ng_api import BetRelay, InputNotFound
client = BetRelay()
# Browse available bookmakers — each row is a bookmaker/country pair.
for bk in client.bookmakers.list(limit=5):
print(bk.display_name, bk.country, "source" if bk.can_be_source else "", "target" if bk.can_be_target else "")
# Grab a recent conversion from the live feed to get a real, valid code.
recent = client.recent_conversions.list(limit=1).first()
if recent is not None:
print(f"Recent: {recent.source_bookmaker} {recent.source_code} -> {recent.target_bookmaker} {recent.target_code} ({recent.selection_count} picks, {recent.converted_ago})")
# Convert that same source code to a different target bookmaker.
try:
result = client.conversions.convert(
code=recent.source_code,
source_bookmaker=recent.source_bookmaker,
target_bookmaker="sportybet",
)
except InputNotFound as e:
print("Code or bookmaker not found:", e.message)
else:
if result.success:
print(f"Converted to {result.target_bookmaker}: {result.target_code}")
print(f" URL: {result.target_url}")
for sel in result.selections:
print(f" {sel.event.home_team} vs {sel.event.away_team} — {sel.selection.market} {sel.selection.name} @ {sel.selection.odds}")
else:
print("Conversion failed:", result.error)
print(f"Quota: {result.quota.remaining}/{result.quota.limit} ({result.quota.plan})")
# Merge two codes from the same bookmaker into one slip.
merged = client.merges.merge(codes="DR8UHQ,KK1UES", bookmaker="sportybet")
if merged.success:
print(f"Merged {merged.codes_used} codes into {merged.merged_code}")
for sel in merged.selections[:3]:
print(f" {sel.home_team} vs {sel.away_team} — {sel.market} {sel.pick} @ {sel.odds}")
if merged.duplicates:
print(" Duplicates removed:", ", ".join(merged.duplicates))
else:
print("Merge failed:", merged.error)
print("exercised: bookmakers.list / recent_conversions.list / conversions.convert / merges.merge")
Lists every bookmaker/country combination the site's converter currently offers, read live from its converter page. One row per site bookmaker entry: bookmaker_id (the site's numeric id, as a string), name (lower-case slug such as sportybet, bet9ja, 1xbet, 22bet, betking, msport, football, bangbet, nairabet, paripesa, stake), display_name, country, and whether the entry may be used as a conversion source and/or target (Stake is source-only). The same name may appear several times with different countries (e.g. 1xbet has many country entries). Values of name and country are what convert_code and merge_codes accept. Cheap: one page fetch, no quota consumed.
No input parameters required.
{
"type": "object",
"fields": {
"total": "number of entries returned",
"bookmakers": "array of bookmaker entries {bookmaker_id, name, display_name, country, can_be_source, can_be_target}"
},
"sample": {
"data": {
"total": 32,
"bookmakers": [
{
"name": "1xbet",
"country": "Nigeria",
"bookmaker_id": "25",
"display_name": "1xBet",
"can_be_source": true,
"can_be_target": true
},
{
"name": "sportybet",
"country": "Nigeria",
"bookmaker_id": "1",
"display_name": "Sportybet",
"can_be_source": true,
"can_be_target": true
},
{
"name": "stake",
"country": "Global",
"bookmaker_id": "32",
"display_name": "Stake",
"can_be_source": true,
"can_be_target": false
}
]
},
"status": "success"
}
}About the Com API
Bookmaker Discovery
The list_bookmakers endpoint returns every bookmaker entry the site currently supports, with no inputs required. Each entry includes a bookmaker_id (the site's numeric identifier), a lower-case name slug (e.g. sportybet, bet9ja, 1xbet, betking, msport), a display_name, country, and two booleans — can_be_source and can_be_target — that tell you exactly which bookmakers can appear on each side of a conversion. Use this endpoint to keep your bookmaker list fresh before calling convert_code or merge_codes.
Code Conversion
convert_code takes a code, a source_bookmaker slug, and a target_bookmaker slug (both must match values from list_bookmakers). Optional source_country and target_country params resolve ambiguity when the same bookmaker slug exists in multiple countries. On success, target_code carries the generated booking code and target_url is a direct deep-link to open the slip on the target site. The selections array returns each event with event, source, selection, and target fields — odds are returned as strings exactly as the site reports them. The skipped array lists any selections the site could not map, and error is null on a clean conversion.
Code Merging
merge_codes accepts a comma-separated codes string (2–50 codes) and a bookmaker slug where can_be_target is true. It returns a single merged_code, a merged_url deep-link, a selections array with home_team, away_team, market, pick, and odds fields per leg, a duplicates array of removed duplicate selections, and a codes_used count. An optional country param handles multi-country bookmakers.
Live Conversions Feed
list_recent_conversions returns the site's public feed of the latest 10 conversions. Each row contains source_bookmaker, target_bookmaker, source_code, target_code, selection_count, and converted_ago (a relative timestamp string). This endpoint requires no inputs and can serve as a quick health check or a sample data source for testing.
The Com API is a managed, monitored endpoint for betrelay.com.ng — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when betrelay.com.ng changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official betrelay.com.ng API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Automatically port a shared bet slip from Sportybet to Bet9ja using convert_code without manual re-entry
- Build a multi-bookmaker slip aggregator that merges codes from the same bookmaker using merge_codes
- Display a real-time ticker of popular bet conversions by polling list_recent_conversions
- Validate which bookmakers support conversions on a given day by calling list_bookmakers before each batch job
- Flag uncovertible selections in advance by inspecting the skipped array returned by convert_code
- Generate direct deep-links (target_url, merged_url) to pre-filled bet slips inside a Telegram bot or web app
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.