— Public API v1.0

Base URL:

Authentication

All endpoints except fn=info require a Bearer token sent in the HTTP Authorization header. Your token is visible in My Account → API Token.

Authorization: Bearer your_token_here
GET Public

fn=info

Returns API metadata and available endpoints. No authentication required.

…/client/api/v1/index.php?fn=info

No parameters required.

Response

{
  "success": true,
  "platform": "Sport Flow",
  "version": "1.0",
  "datetime": "2026-04-28 14:30 UTC",
  "docs": "…/api-docs/",
  "note": "Match times are returned in your account timezone. Features marked as coming soon require a paid tier.",
  "endpoints": [ … ]
}
GET Tier1+

fn=getPicks

Returns picks from a Production app for a given day (and optionally previous days). This is the main consumption endpoint for mobile/web apps.

Production only. Testing apps are excluded. Demo accounts have no Production apps.
…/client/api/v1/index.php?fn=getPicks&app_code=XXXXXX_P01&day=2026-04-27

Parameters

ParamRequiredDefaultDescription
app_code✓—Your Production app code, e.g. AB3X7K_P01
sportallSport ID filter: 1=Football, 2=Tennis, 3=Basketball, etc. Omit for all sports.
daytodayTarget date in YYYY-MM-DD format. Defaults to today in your account timezone.
history0Number of past days to include in addition to day. Maximum 7.

Response

{
  "success": true,
  "picks": [
    {
      "id": 42,
      "app_code": "AB3X7K_P01",
      "sport": "1",
      "league": "England: Premier League",
      "title": "Arsenal vs Chelsea",
      "prediction": "1",
      "odd": "1.85",
      "score": "?",
      "win": "?",
      "ref_match_id": 1234567,
      "match_date": "2026-04-27",
      "match_time": "17:00",
      "match_datetime": "2026-04-27 17:00"
    }
  ],
  "date": { "min": "2026-04-27", "max": "2026-04-27" },
  "timezone": "Europe/Bucharest"
}

Field notes

idPrimary key of the pick row.
ref_match_idMatch ID from the global pool. May be null for manually added picks.
match_dateRaw date stored in the database. Use match_datetime when precision matters across timezone boundaries.
match_timeMatch start time as HH:mm in your account timezone.
match_datetimeFull match start as YYYY-MM-DD HH:mm in your account timezone. Use this for display and grouping.
score / win? until the result is entered. win values: 1=won, 0=lost, 2=unknown, ?=pending.
timezoneThe IANA timezone applied to all time fields — taken from your account settings.
GET Tier1+

fn=getLeagues

Returns the user's league list with their personal settings (isFavorite, isExpanded, star).

Production only. Demo accounts cannot access this endpoint.
…/client/api/v1/index.php?fn=getLeagues&order=fav

Parameters

ParamRequiredDefaultDescription
sportallSport ID filter. Omit for all sports.
orderfavSort order: fav = favorites first, then stars; stars = by star rating; asc = alphabetical.

Response

{
  "success": true,
  "leagues": [
    {
      "sport": "1",
      "league_id": 17,
      "league_name": "Premier League",
      "country_name": "England",
      "isFavorite": 1,
      "isExpanded": 1,
      "star": "5"
    }
  ]
}

Field notes

league_idGlobal league ID — matches ref_match_id league context in picks.
isFavorite1 if the user has marked this league as a favorite.
isExpanded1 if the league is expanded in the user's view.
starStar rating string (e.g. "5", "3"). Empty string if not rated.
country_nameMay be null for non-football sports.
GET Coming Soon

fn=getMatchPool

Returns the global match pool for a given date range, filtered by the user's league settings.

Params (reserved): start, end (YYYY-MM-DD), sport, timezone

Returns HTTP 403 with a descriptive message until this feature is released. Requires a paid tier.

HTTP Error Codes

CodeMeaning
400Bad request — missing or invalid parameter
401Unauthorized — missing, invalid, or inactive Bearer token
403Forbidden — tier restriction, wrong app type, or inactive app
429Rate limit exceeded — maximum 100 requests per minute per account. Check the Retry-After response header for seconds remaining.

All error responses include "success": false and a human-readable "message" field.