Dokumentacja ArbiScan API

v1 · base URL https://api.arbiscan.pl · wszystkie odpowiedzi w formacie application/json; charset=utf-8

Jak zacząć

  1. Złóż wniosek o dostęp — podaj e-mail, hasło i opis planowanego użycia.
  2. Poczekaj na zatwierdzenie konta przez administratora (otrzymasz wiadomość e-mail).
  3. Zaloguj się do panelu klienta i wygeneruj klucz API.
  4. Dodaj nagłówek X-API-Key do zapytań HTTPS.

Uwierzytelnianie

Wszystkie endpointy danych wymagają klucza API w nagłówku X-API-Key (poza /v1/health):

curl -H "X-API-Key: ods_xxxxxxxxxxxx" \
  "https://api.arbiscan.pl/v1/odds?league=Premier%20League"

Klucze API są niezależne od kont na arbiscan.pl. Pojedyncze konto może mieć do 5 kluczy (np. produkcja / test / staging).

Limity i kwoty

Domyślne limity klucza:

Limity per-klucz konfigurujesz w panelu przy tworzeniu lub edycji klucza. Aktualne zużycie raportują endpointy /v1/usage oraz pole quota w odpowiedzi /v1/odds.

W trakcie bety dostęp jest bezpłatny. Plany płatne (z wyższymi limitami i SLA) pojawią się po wyjściu z bety.

Dostępność danych

Kursy są aktualizowane przez lokalny backend co ~60 sekund. Jeśli backend jest offline, ostatni snapshot pozostaje dostępny — pole last_update przestaje wzrastać. Zawsze sprawdzaj last_update zanim zaufasz kursowi.

Wspierane bukmacherzy: większość legalnych polskich bukmacherów (STS, Fortuna, Superbet, Betclic, LvBet, Betfan, Etoto, Iforbet, Fuksiarz i inne) oraz kasyna krypto (Polymarket, 500.casino, Gamdom). Możliwa integracja niestandardowych źródeł kursowych na zamówienie — napisz na kontakt@arbiscan.pl.

Typowe opóźnienia w pełnym cyklu skanowania to ~60 s; pojedyncze zapytania per-event idą praktycznie natychmiast. Dokładne czasy zależą od bukmachera (informacje SLA na życzenie).

Endpointy publiczne

GET/v1/health — bez uwierzytelniania.

{ "ok": true, "events_known": 312, "last_ingest": "2026-05-04T11:48:00Z" }

GET/v1/sports — lista dostępnych dyscyplin.

{ "sports": ["Football"] }

GET/v1/leagues — lista dostępnych rozgrywek.

Parametr opcjonalny: sport (filtr po dyscyplinie).

{ "leagues": ["Premier League", "La Liga", "Serie A", "Bundesliga", "MLS", ...] }

GET/v1/bookmakers — lista bukmacherów aktywnych w danych.

{ "bookmakers": ["Betclic", "Betfan", "Etoto", "Fortuna", "Fuksiarz", "Iforbet", "LvBet", "Polymarket", "Sts", "Superbet", ...] }

Domyślnie aktywne są wszystkie zintegrowane źródła. Niestandardowe bukmacherzy / kasyna krypto dodajemy na zamówienie — kontakt@arbiscan.pl.

GET/v1/odds — lista wydarzeń z aktualnymi kursami.

ParametrTypOpis
leaguestringKanoniczna nazwa ligi (case-insensitive). Np. Premier League.
sportstringNp. Football.
bookmakerscsvFiltr per-bukmacher, np. STS,Fortuna,Superbet.
commence_fromISO 8601Dolna granica commence_time.
commence_toISO 8601Górna granica commence_time.
limitintMax liczba wydarzeń (domyślnie 200, max 500).

Przykład:

curl -H "X-API-Key: $KEY" \
  "https://api.arbiscan.pl/v1/odds?league=Premier%20League&bookmakers=STS,Fortuna,Superbet,Betclic,LvBet"

Odpowiedź (skrócona):

{
  "count": 8,
  "events": [
    {
      "id": "a1b2c3d4e5f60718",
      "sport": "Football",
      "league": "Premier League",
      "home_team": "Manchester City",
      "away_team": "Arsenal",
      "commence_time": "2026-05-10T21:00:00+00:00",
      "bookmakers": [
        {
          "key": "Sts",
          "last_update": "2026-05-04T11:48:00+00:00",
          "markets": [
            { "key": "h2h", "outcomes": [
              { "name": "Manchester City", "price": 1.85 },
              { "name": "Draw",            "price": 3.75 },
              { "name": "Arsenal",         "price": 4.10 }
            ] }
          ]
        }
      ]
    }
  ],
  "quota": { "used": 12, "limit": 10000 }
}

GET/v1/events/{event_id} — pojedyncze wydarzenie ze wszystkimi kursami.

Zwraca tę samą strukturę co jeden element events[] z /v1/odds.

GET/v1/events/{event_id}/history — oś czasu zmian kursu.

ParametrTypOpis
marketstringKlucz rynku (domyślnie h2h).
bookmakerstringFiltr po bukmacherze.
since / untilISO 8601Zakres czasowy.
limitintDomyślnie 1 000, max 5 000.

Kurs zamknięcia (closing odds) = ostatni wpis history dla danego bukmachera/wyniku przed commence_time.

{
  "event_id": "a1b2c3d4e5f60718",
  "market": "h2h",
  "history": [
    { "bookmaker": "Sts", "outcome": "Manchester City", "price": 1.90, "timestamp": "2026-05-04T08:12:45+00:00" },
    { "bookmaker": "Sts", "outcome": "Manchester City", "price": 1.88, "timestamp": "2026-05-04T09:20:11+00:00" },
    { "bookmaker": "Sts", "outcome": "Manchester City", "price": 1.85, "timestamp": "2026-05-04T11:48:00+00:00" }
  ]
}

GET/v1/usage — Twoje zużycie dzienne + 30-dniowa historia.

{
  "owner": "twoja-nazwa",
  "today": { "used": 124, "limit": 10000 },
  "history": [
    { "date": "2026-05-04", "requests": 124 },
    { "date": "2026-05-03", "requests": 8431 }
  ]
}

Rejestracja i logowanie

POST/v1/auth/register — utwórz wniosek o konto (status pending).

{
  "email": "ty@firma.pl",
  "password": "min. 8 znaków",
  "application": "własny model predykcyjny",
  "planned_use": "Codzienne pobieranie kursów PL/LL/SerieA, ~5000 zapytań/dzień, brak redystrybucji.",
  "requested_daily_limit": 5000
}

Wymaga zatwierdzenia przez administratora. Otrzymasz wiadomość e-mail z decyzją.

POST/v1/auth/login — zaloguj się.

{ "email": "ty@firma.pl", "password": "..." }
→
{ "token": "eyJhbGc...", "user": { "id": 12, "email": "ty@firma.pl", "is_admin": false }, "expires_in": 604800 }

Zarządzanie kluczami

Wszystkie endpointy /v1/me/* wymagają nagłówka Authorization: Bearer <token> z logowania.

GET/v1/me/keys — lista Twoich kluczy.

POST/v1/me/keys — utwórz nowy klucz. Body: {label, daily_limit, per_minute_limit}.

PATCH/v1/me/keys/{key} — zmień etykietę / aktywność / limity.

DELETE/v1/me/keys/{key} — usuń klucz.

Kody błędów

StatusBodyPrzyczyna
400{"error":"Nieprawidłowy adres e-mail"}Brakujące lub nieprawidłowe dane wejściowe.
401{"error":"Wymagane logowanie"}Brak/nieprawidłowy token JWT lub klucz API.
403{"error":"Konto czeka na zatwierdzenie..."}Konto pending lub rejected.
404{"error":"Event not found"}Nieznany event_id.
409{"error":"Konto z tym e-mailem już istnieje"}E-mail w użyciu.
429Limit minutowy lub dzienna kwota przekroczone.
5xxTymczasowy problem infrastruktury. Ponów z exponential backoff.

Schemat odpowiedzi

Wspierany zakres i rozszerzalność

API jest zaprojektowane pod elastyczne dostosowanie do potrzeb klienta:

Indywidualne wyceny i integracje: kontakt@arbiscan.pl.