API de BetTune
BetTune API
Documentación interactiva de la API externa de BetTune: descubrir partidos, revisar tus apuestas, leer filtros de predicción y gestionar cuotas y importes personalizados de predicción.
Descargar esquema OpenAPIURL base de la API pública
https://ovaccess.com/bet-tune-api/v1Token API
Puedes crear o regenerar tu token API en la página Settings de BetTune.
Abrir Settings de BetTuneSolo suscripción PRO
La API de BetTune está disponible solo para usuarios con una suscripción PRO activa.
Authentication
Authorization: Bearer your_bettune_api_tokenEndpoints
Open an endpoint to see parameters, request body, responses, examples, and schemas.
get/sportsList available sports
Sports
get
/sportsList available sports
Responses
200 Available sports.
object
countrequired
integer
itemsrequired
array<object>
object
idrequired
integer
example: 1
namerequired
string
example: "football"
{
"count": 1,
"items": [
{
"id": 1,
"name": "football"
}
]
}401 Missing or invalid API token.
object
coderequired
string
messagerequired
string
{
"code": "missing_token",
"message": "No token provided"
}429 Rate limit exceeded.
object
coderequired
string
messagerequired
string
{
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded"
}Headers: Retry-After, X-RateLimit-Limit, X-RateLimit-Window
get/matchesList matches for one UTC date
Matches
get
/matchesList matches for one UTC date
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| date | query | Yes | string:date | UTC date in `YYYY-MM-DD` format. |
| sport | query | Yes | integer | Sport id. |
Responses
200 Matches for the requested UTC date.
object
daterequired
string:date
example: "2026-06-06"
countrequired
integer
itemsrequired
array<object>
object
idrequired
integer
example: 1611243
daterequired
string:date-time
example: "2026-06-06T18:00:00+00:00"
finishedrequired
boolean
example: false
scorerequired
object
countryrequired
object
tournamentrequired
object
seasonrequired
object
homerequired
object
awayrequired
object
400 Invalid query parameters.
object
coderequired
string
messagerequired
string
{
"code": "date_invalid",
"message": "Invalid or missing date. Expected format: YYYY-MM-DD"
}401 Missing or invalid API token.
object
coderequired
string
messagerequired
string
{
"code": "missing_token",
"message": "No token provided"
}429 Rate limit exceeded.
object
coderequired
string
messagerequired
string
{
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded"
}Headers: Retry-After, X-RateLimit-Limit, X-RateLimit-Window
get/betsList user bets
Bets
get
/betsList user bets
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| page | query | No | integer | Page number. Pages are 1-based. Each page returns up to 100 bets. |
Responses
200 Authenticated user's bets sorted by bet date, newest first.
object
pagerequired
integer
example: 1
perPagerequired
integer
example: 100
hasNextPagerequired
boolean
True when one more page exists.
example: true
countrequired
integer
Number of returned bets on this page.
example: 100
itemsrequired
array<object>
object
idrequired
integer
example: 12345
createdAtrequired
string:date-time
Bet placement date.
example: "2026-06-09T12:30:00+00:00"
statusrequired
string
example: "pending"
enum: pending, won, lost, push, canceled, refunded
approvedrequired
boolean
True when the bet result has been approved.
example: false
sportrequired
object
matchrequired
object
filterrequired
object
betTyperequired
string
example: "Home"
oddsrequired
string
example: "2.15"
amountrequired
string
example: "10"
profitrequired
string | null
example: null
{
"page": 1,
"perPage": 100,
"hasNextPage": true,
"count": 100,
"items": [
{
"id": 12345,
"createdAt": "2026-06-09T12:30:00+00:00",
"status": "pending",
"approved": false,
"sport": {
"id": 1,
"name": "football"
},
"match": {
"id": 1611243,
"date": "2026-06-06T18:00:00+00:00",
"finished": true,
"score": {
"home": 2,
"away": 1
},
"home": {
"id": 10,
"name": "Team A"
},
"away": {
"id": 20,
"name": "Team B"
}
},
"filter": {
"id": 11583,
"name": "Manual football"
},
"betType": "Home",
"odds": "2.15",
"amount": "10",
"profit": null
}
]
}400 Invalid query parameters.
object
coderequired
string
messagerequired
string
{
"code": "page_invalid",
"message": "Page must be a positive integer"
}401 Missing or invalid API token.
object
coderequired
string
messagerequired
string
{
"code": "missing_token",
"message": "No token provided"
}429 Rate limit exceeded.
object
coderequired
string
messagerequired
string
{
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded"
}Headers: Retry-After, X-RateLimit-Limit, X-RateLimit-Window
get/prediction-filtersList prediction filters
Prediction Filters
get
/prediction-filtersList prediction filters
Responses
200 Prediction-based filters for the current API token user.
object
countrequired
integer
itemsrequired
array<object>
object
idrequired
integer
example: 11583
namerequired
string
example: "Manual football"
sportrequired
object
betTyperequired
string
example: "Home"
statusrequired
string
example: "approved"
enum: disabled, approved
401 Missing or invalid API token.
object
coderequired
string
messagerequired
string
{
"code": "missing_token",
"message": "No token provided"
}429 Rate limit exceeded.
object
coderequired
string
messagerequired
string
{
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded"
}Headers: Retry-After, X-RateLimit-Limit, X-RateLimit-Window
post/predictions/searchSearch existing predictions
Predictions
post
/predictions/searchSearch existing predictions
Request body
object
filterIdrequired
integer
example: 11583
matchIdsrequired
array<integer>
example: [1611243,1611244]
{
"filterId": 11583,
"matchIds": [
1611243,
1611244
]
}Responses
200 Existing predictions for requested matches.
object
countrequired
integer
itemsrequired
array<object>
object
idrequired
integer
example: 10
filterIdrequired
integer
example: 11583
matchIdrequired
integer
example: 1611243
oddsrequired
string | null
example: "2.150000"
amountrequired
string | null
Custom bet amount for this match. Null means the default filter amount is used.
example: "25.000000"
sourcerequired
string
example: "api"
enum: api, ui
createdAtrequired
string:date-time
example: "2026-06-06T12:00:00+00:00"
updatedAtrequired
string:date-time
example: "2026-06-06T12:05:00+00:00"
400 Validation error.
object
coderequired
string
messagerequired
string
{
"code": "invalid_json_body",
"message": "Invalid JSON body"
}401 Missing or invalid API token.
object
coderequired
string
messagerequired
string
{
"code": "missing_token",
"message": "No token provided"
}403 The current user cannot access this resource.
object
coderequired
string
messagerequired
string
{
"code": "pro_subscription_required",
"message": "Prediction-based filters are available only for PRO subscription"
}404 Filter or match not found.
object
coderequired
string
messagerequired
string
{
"code": "filter_not_found",
"message": "Filter not found"
}429 Rate limit exceeded.
object
coderequired
string
messagerequired
string
{
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded"
}Headers: Retry-After, X-RateLimit-Limit, X-RateLimit-Window
put/prediction-filters/{filterId}/matches/{matchId}/predictionCreate or update prediction odds
Predictions
put
/prediction-filters/{filterId}/matches/{matchId}/predictionCreate or update prediction odds
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| filterId | path | Yes | integer | - |
| matchId | path | Yes | integer | - |
Request body
object
oddsrequired
string | number
example: "2.15"
amount
string | number
Optional custom bet amount for this match. Empty or null means the default filter amount will be used.
example: "25"
{
"odds": "2.15",
"amount": "25"
}Responses
200 Created or updated prediction.
object
idrequired
integer
example: 10
filterIdrequired
integer
example: 11583
matchIdrequired
integer
example: 1611243
oddsrequired
string | null
example: "2.150000"
amountrequired
string | null
Custom bet amount for this match. Null means the default filter amount is used.
example: "25.000000"
sourcerequired
string
example: "api"
enum: api, ui
createdAtrequired
string:date-time
example: "2026-06-06T12:00:00+00:00"
updatedAtrequired
string:date-time
example: "2026-06-06T12:05:00+00:00"
400 Validation error.
object
coderequired
string
messagerequired
string
{
"code": "invalid_json_body",
"message": "Invalid JSON body"
}401 Missing or invalid API token.
object
coderequired
string
messagerequired
string
{
"code": "missing_token",
"message": "No token provided"
}403 The current user cannot access this resource.
object
coderequired
string
messagerequired
string
{
"code": "pro_subscription_required",
"message": "Prediction-based filters are available only for PRO subscription"
}404 Filter or match not found.
object
coderequired
string
messagerequired
string
{
"code": "filter_not_found",
"message": "Filter not found"
}429 Rate limit exceeded.
object
coderequired
string
messagerequired
string
{
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded"
}Headers: Retry-After, X-RateLimit-Limit, X-RateLimit-Window
delete/prediction-filters/{filterId}/matches/{matchId}/predictionDelete prediction
Predictions
delete
/prediction-filters/{filterId}/matches/{matchId}/predictionDelete prediction
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
| filterId | path | Yes | integer | - |
| matchId | path | Yes | integer | - |
Responses
204 Prediction deleted. The endpoint is idempotent.
400 Validation error.
object
coderequired
string
messagerequired
string
{
"code": "invalid_json_body",
"message": "Invalid JSON body"
}401 Missing or invalid API token.
object
coderequired
string
messagerequired
string
{
"code": "missing_token",
"message": "No token provided"
}403 The current user cannot access this resource.
object
coderequired
string
messagerequired
string
{
"code": "pro_subscription_required",
"message": "Prediction-based filters are available only for PRO subscription"
}404 Filter or match not found.
object
coderequired
string
messagerequired
string
{
"code": "filter_not_found",
"message": "Filter not found"
}429 Rate limit exceeded.
object
coderequired
string
messagerequired
string
{
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded"
}Headers: Retry-After, X-RateLimit-Limit, X-RateLimit-Window
Schemas
ErrorResponse
object
coderequired
string
messagerequired
string
SportsResponse
object
countrequired
integer
itemsrequired
array<object>
object
idrequired
integer
example: 1
namerequired
string
example: "football"
Sport
object
idrequired
integer
example: 1
namerequired
string
example: "football"
MatchesResponse
object
daterequired
string:date
example: "2026-06-06"
countrequired
integer
itemsrequired
array<object>
object
idrequired
integer
example: 1611243
daterequired
string:date-time
example: "2026-06-06T18:00:00+00:00"
finishedrequired
boolean
example: false
scorerequired
object
countryrequired
object
tournamentrequired
object
seasonrequired
object
homerequired
object
awayrequired
object
Match
object
idrequired
integer
example: 1611243
daterequired
string:date-time
example: "2026-06-06T18:00:00+00:00"
finishedrequired
boolean
example: false
scorerequired
object
countryrequired
object
tournamentrequired
object
seasonrequired
object
homerequired
object
awayrequired
object
BetsResponse
object
pagerequired
integer
example: 1
perPagerequired
integer
example: 100
hasNextPagerequired
boolean
True when one more page exists.
example: true
countrequired
integer
Number of returned bets on this page.
example: 100
itemsrequired
array<object>
object
idrequired
integer
example: 12345
createdAtrequired
string:date-time
Bet placement date.
example: "2026-06-09T12:30:00+00:00"
statusrequired
string
example: "pending"
enum: pending, won, lost, push, canceled, refunded
approvedrequired
boolean
True when the bet result has been approved.
example: false
sportrequired
object
matchrequired
object
filterrequired
object
betTyperequired
string
example: "Home"
oddsrequired
string
example: "2.15"
amountrequired
string
example: "10"
profitrequired
string | null
example: null
Bet
object
idrequired
integer
example: 12345
createdAtrequired
string:date-time
Bet placement date.
example: "2026-06-09T12:30:00+00:00"
statusrequired
string
example: "pending"
enum: pending, won, lost, push, canceled, refunded
approvedrequired
boolean
True when the bet result has been approved.
example: false
sportrequired
object
matchrequired
object
filterrequired
object
betTyperequired
string
example: "Home"
oddsrequired
string
example: "2.15"
amountrequired
string
example: "10"
profitrequired
string | null
example: null
BetMatch
object
idrequired
integer
example: 1611243
daterequired
string:date-time | null
example: "2026-06-06T18:00:00+00:00"
finishedrequired
boolean
example: true
scorerequired
object
homerequired
object
awayrequired
object
Score
object
homerequired
integer | null
example: null
awayrequired
integer | null
example: null
IdName
object
idrequired
integer
namerequired
string
NullableIdName
object
idrequired
integer | null
namerequired
string | null
PredictionFiltersResponse
object
countrequired
integer
itemsrequired
array<object>
object
idrequired
integer
example: 11583
namerequired
string
example: "Manual football"
sportrequired
object
betTyperequired
string
example: "Home"
statusrequired
string
example: "approved"
enum: disabled, approved
PredictionFilter
object
idrequired
integer
example: 11583
namerequired
string
example: "Manual football"
sportrequired
object
betTyperequired
string
example: "Home"
statusrequired
string
example: "approved"
enum: disabled, approved
SearchPredictionsRequest
object
filterIdrequired
integer
example: 11583
matchIdsrequired
array<integer>
example: [1611243,1611244]
PutPredictionRequest
object
oddsrequired
string | number
example: "2.15"
amount
string | number
Optional custom bet amount for this match. Empty or null means the default filter amount will be used.
example: "25"
PredictionsResponse
object
countrequired
integer
itemsrequired
array<object>
object
idrequired
integer
example: 10
filterIdrequired
integer
example: 11583
matchIdrequired
integer
example: 1611243
oddsrequired
string | null
example: "2.150000"
amountrequired
string | null
Custom bet amount for this match. Null means the default filter amount is used.
example: "25.000000"
sourcerequired
string
example: "api"
enum: api, ui
createdAtrequired
string:date-time
example: "2026-06-06T12:00:00+00:00"
updatedAtrequired
string:date-time
example: "2026-06-06T12:05:00+00:00"
Prediction
object
idrequired
integer
example: 10
filterIdrequired
integer
example: 11583
matchIdrequired
integer
example: 1611243
oddsrequired
string | null
example: "2.150000"
amountrequired
string | null
Custom bet amount for this match. Null means the default filter amount is used.
example: "25.000000"
sourcerequired
string
example: "api"
enum: api, ui
createdAtrequired
string:date-time
example: "2026-06-06T12:00:00+00:00"
updatedAtrequired
string:date-time
example: "2026-06-06T12:05:00+00:00"