BetTune API

BetTune API

Interactive documentation for BetTune external API: discover matches, read prediction filters, and manage prediction odds.

Download OpenAPI schema
Public API base URL
https://ovaccess.com/bet-tune-api/v1
API token

Create or regenerate your API token on the BetTune Settings page.

Open BetTune Settings
PRO subscription only

The BetTune API is available only for users with an active PRO subscription.

Authentication

Authorization: Bearer your_bettune_api_token

Endpoints

Open an endpoint to see parameters, request body, responses, examples, and schemas.

get/sports

List available sports

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/matches

List matches for one UTC date

Matches

Parameters

NameInRequiredTypeDescription
datequeryYesstring:dateUTC date in `YYYY-MM-DD` format.
sportqueryYesintegerSport id. Currently only football is exposed by `/sports`.

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/prediction-filters

List prediction filters

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/search

Search existing predictions

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
example: "2.150000"
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}/prediction

Create or update prediction odds

Predictions

Parameters

NameInRequiredTypeDescription
filterIdpathYesinteger-
matchIdpathYesinteger-

Request body

object
oddsrequired
string | number
example: "2.15"
{
  "odds": "2.15"
}

Responses

200 Created or updated prediction.
object
idrequired
integer
example: 10
filterIdrequired
integer
example: 11583
matchIdrequired
integer
example: 1611243
oddsrequired
string
example: "2.150000"
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}/prediction

Delete prediction

Predictions

Parameters

NameInRequiredTypeDescription
filterIdpathYesinteger-
matchIdpathYesinteger-

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
Score
object
homerequired
integer
example: null
awayrequired
integer
example: null
IdName
object
idrequired
integer
namerequired
string
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"
PredictionsResponse
object
countrequired
integer
itemsrequired
array<object>
object
idrequired
integer
example: 10
filterIdrequired
integer
example: 11583
matchIdrequired
integer
example: 1611243
oddsrequired
string
example: "2.150000"
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
example: "2.150000"
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"