Playbox Organizer API
წაიკითხე მონაცემები შენი თამაშების, ლიგებისა და მატჩების შესახებ შენი სკრიპტიდან ან სერვერიდან: ვინ ითამაშა და როგორ გადაიხადა, ცხრილები, საუკეთესო ბომბარდირები, გოლები, ბარათები და ნათელი მომენტები. მხოლოდ წასაკითხია და მხოლოდ შენს მონაცემებს აბრუნებს.
საბაზისო URL: https://app.play-box.xyz/api/organizer/v1/
პირველი მოთხოვნა 5 წუთში
- მიიღე გასაღები. Playbox აპლიკაციაში გახსენი პარამეტრები → ორგანიზატორის ხელსაწყოები → API გასაღებები → გასაღების შექმნა. მიეცი გასაღებს სახელი და მონიშნე „ვეთანხმები API-ის პირობებს“. გასაღები ასე გამოიყურება:
pbo_xxxxxxxx.long-secretდა მხოლოდ ერთხელ ჩანს. შეინახე ის შენი სერვერის გარემოს ცვლადებში. - შეამოწმე კავშირი.
curl -H "X-Api-Key: $PLAYBOX_KEY" https://app.play-box.xyz/api/organizer/v1/me/
200 პასუხი აბრუნებს შენს მომხმარებლის სახელს, გასაღების სახელს და თარიღს, რომლამდეც გასაღები მოქმედებს.
- მიიღე შენი თამაშები.
curl -H "X-Api-Key: $PLAYBOX_KEY" "https://app.play-box.xyz/api/organizer/v1/events/?from=2026-09-01&status=FINISHED"
გასაღები
- გასაღები პირადია: შენი სახელით მოქმედებს და მხოლოდ შენს მონაცემებს ხედავს.
- გასაღები 365 დღე მოქმედებს. ვადის ამოწურვამდე 14 და 3 დღით ადრე შეხსენებას მიიღებ (push, Telegram, ელ. ფოსტა). ამის შემდეგ API
key_expiredშეცდომით პასუხობს: შექმენი ახალი გასაღები და ძველი შენს სერვერზე ახლით ჩაანაცვლე. - შეგიძლია გქონდეს 5-მდე აქტიური გასაღები. გამოუყენებელი ან გაჟონილი გასაღები ნებისმიერ დროს გააუქმე, ის მაშინვე წყვეტს მუშაობას.
- გასაღები გაგზავნე
X-Api-Key: pbo_...ჰედერში (ანAuthorization: Api-Key pbo_...). URL-ში გასაღები არ მიიღება, რადგან ის ლოგებში მოხვდებოდა. - მხოლოდ სერვერიდან. ბრაუზერიდან მოსული მოთხოვნა (
Originჰედერით)403 browser_not_allowedპასუხს იღებს: ვებგვერდში ჩასმული გასაღები ყველა სტუმარს უჩანს. - გასაღები აპლიკაციას არ ხსნის და აპლიკაციის სესია ამ API-ს არ ხსნის.
რა ითვლება შენს მონაცემებად
- თამაშები, რომლებსაც აწყობ, შექმენი, რომლებისთვისაც ფულს იღებ ან რომლებსაც მართავ;
- ლიგები, რომლებიც შექმენი ან რომლებსაც ადმინისტრატორად მართავ, და მათი ყველა თამაში;
- თამაშები, რომლებიც მიბმულია საზოგადოებაზე, რომელიც შენ გეკუთვნის ან რომლის ადმინისტრატორიც ხარ (თანაორგანიზატორის შექმნილი თამაშების ჩათვლით).
სხვისი თამაში ან ლიგა 404-ს აბრუნებს, ისევე როგორც ის, რომელიც არ არსებობს. მოთამაშეების კონტაქტები და ფოტოები არასდროს ბრუნდება.
ლიმიტები
წუთში 60 მოთხოვნა თითო გასაღებზე. მოთხოვნა არის ნებისმიერ API URL-ზე ერთი მიმართვა სწორი გასაღებით, 404 და 400 პასუხების ჩათვლით. ფანჯარა ყოველი წუთის დასაწყისში ნულდება.
| პასუხის ჰედერი | მნიშვნელობა |
|---|---|
X-RateLimit-Limit | ლიმიტი წუთში |
X-RateLimit-Remaining | მიმდინარე წუთში დარჩენილი მოთხოვნები |
X-RateLimit-Reset | წამები ფანჯრის განულებამდე |
Retry-After | მხოლოდ 429-ზე: რამდენი წამი უნდა დაელოდო ხელახლა ცდამდე |
შეინახე მონაცემები შენს მხარეს და მოითხოვე მხოლოდ ახალი: ბოლო თამაშები from-ით და დასრულებული თამაშების მატჩები. თუ მთელ ისტორიას ყოველ ჯერზე ხელახლა ჩამოტვირთავ, როცა შენი საიტი იხსნება, ლიმიტს წამებში ამოწურავ.
შეცდომები
ყველა შეცდომას ერთი და იგივე ფორმა აქვს. ლოგიკა code-ზე ააგე, message კი ლოგში ჩაწერე.
{"error": {"code": "invalid_parameter", "message": "from: Use YYYY-MM-DD.", "fields": {"from": "Use YYYY-MM-DD."}}}
| HTTP | code | რა უნდა გააკეთო |
|---|---|---|
| 401 | not_authenticated | გასაღების ჰედერი აკლია |
| 401 | invalid_key | გასაღები არასწორია ან გაუქმებულია, შექმენი ახალი |
| 401 | key_expired | გასაღებს ვადა გაუვიდა, შექმენი ახალი |
| 403 | browser_not_allowed | მოთხოვნა ბრაუზერიდან მოვიდა, API-ს შენი სერვერიდან მიმართე |
| 404 | not_found | ობიექტი არ არსებობს ან შენი არ არის |
| 400 | invalid_parameter | პარამეტრი არასწორია, დეტალები fields-შია |
| 405 | method_not_allowed | API მხოლოდ წასაკითხია, გამოიყენე GET |
| 429 | rate_limited | დაელოდე retry_after წამი |
მონაცემების ფორმატი
- დრო ყოველთვის UTC-შია, ISO 8601 ფორმატით. თანხა წყვილად მოდის:
{"amount": 800.0, "currency": "RSD"}. - სიები (
leagues/,events/) გვერდებად იყოფა:?limit=50&offset=0,limit100-მდე. პასუხი არის{"count", "limit", "offset", "next_offset", "results"}, ხოლოnext_offset: nullნიშნავს ბოლო გვერდს. - მოთამაშე:
{"id", "username", "is_guest", "url"}.is_guest: trueარის საერთო სტუმრის ანგარიში, რომელიც პროფილის არმქონე მოთამაშეების გოლებისთვის გამოიყენება: ისინი მატჩის ანგარიშში ითვლება, პირად სტატისტიკაში კი არა. - ბმულები. თამაშებს, მატჩებს, ლიგებსა და მოთამაშეებს აქვთ
urlმათ Playbox გვერდზე. გამოიყენე ის, როცა მონაცემებს შენს საიტზე აჩვენებ: გვერდზე სრული სტატისტიკა და ვიდეოა.
ენდპოინტები
GET /me/
ვისია ეს გასაღები: მომხმარებელი, გასაღების სახელი, ვადის გასვლის თარიღი, პირობების ვერსია, ლიმიტები.
GET /leagues/
შენი ლიგები: id, slug, name, status (active, finished, archived), format, city, date_start, date_end, teams_count, price, game_price, url.
GET /leagues/{id}/
ლიგა და მისი წესები: ტექნიკური წაგება, დისციპლინა (ყვითელი ბარათების ლიმიტი, დისკვალიფიკაციები), შემადგენლობის ზომა.
GET /leagues/{id}/table/
ტურნირის ცხრილი იმავე თანმიმდევრობით, როგორც აპლიკაციაში: position, team, played, wins, draws, losses, goals_for, goals_against, goal_difference, points.
GET /leagues/{id}/players/
მოთამაშეების ცხრილი: player, team, position, games, goals, assists, yellow_cards, red_cards, suspension_games_left. დალაგებულია გოლებით, შემდეგ ასისტებით.
GET /leagues/{id}/rosters/
გუნდების შემადგენლობები: თითოეული გუნდი თავისი მოთამაშეებით და მათი დამატების თარიღით.
GET /events/
შენი თამაშები, ჯერ უახლესი. ფილტრები: from, to (YYYY-MM-DD დაწყების თარიღით, UTC), status (NOT_STARTED, STARTED, FINISHED, CANCELLED), league (id), format (მოთამაშეები გუნდში, მაგალითად 8). ველები: id, league_id, starts_at, ends_at, status, results_status, format, venue, is_paid, price, price_per_player, capacity, players_count, teams_count, is_ranked, is_private, url.
GET /events/{id}/
მთელი თამაში: გუნდები (ფერი, მოგებები, ფრეები, წაგებები, შემადგენლობა), მატჩები ანგარიშით და url-ით, mvp_player_id, YouTube ჩანაწერები, პირდაპირი ეთერები.
GET /events/{id}/participants/
ვინ ჩაეწერა და როგორ გადაიხადა: player, status (In game, Late, Did not come, Invited), team_id, joined_at, payment_method (CASH, WALLET, CARD, STRIPE, APPLE_PAY, GOOGLE_PAY, TELEGRAM), paid, payment_confirmed, paid_by, amount, is_early_bird. ეს მონაცემები მხოლოდ შენთვისაა: ნუ გამოაქვეყნებ.
GET /events/{id}/player-stats/
თითოეული მოთამაშის შედეგი თამაშში: wins, draws, losses, goals, assists, goals_conceded, yellow_cards, red_cards, rating, rating_change, is_confirmed. ხელმისაწვდომია თამაშის დასრულების შემდეგ.
GET /matches/{id}/
მთელი მატჩი: event_id, league_id, number, tour, starts_at, ends_at, state, teams, score, technical_defeat, referee, video_url, url, timeline (ქრონოლოგია), penalty_shootout (პენალტების სერია), lineups (ვინ დაიწყო, წამები მოედანზე) და highlights (ნათელი მომენტები YouTube ბმულებად).
"timeline": [
{"type": "period", "half": 1, "is_extra_time": false, "started_at": "...", "ended_at": "...", "duration_seconds": 1200},
{"type": "goal", "game_time_seconds": 305, "team_id": 1, "player": {}, "assistant": {}, "is_own_goal": false, "youtube_url": "..."},
{"type": "card", "game_time_seconds": 700, "team_id": 2, "player": {}, "card": "YELLOW", "reason": "Dissent"},
{"type": "substitution", "game_time_seconds": 900, "team_id": 2, "player_out": {}, "player_in": {}, "until_end": true}
]
- მოვლენების ტიპები:
period,goal,card,substitution,player_added,player_removed. მე-3 და მე-4 ტაიმები დამატებითი დროა. - ავტოგოლი (
is_own_goal: true) იმ გუნდის ქვეშ ინახება, რომელსაც ეთვლება. - ტექნიკური წაგებისას
scoreმინიჭებული ანგარიშია, მიზეზი და ანგარიში კიtechnical_defeat-შია.
მაგალითები
Python
import os, requests
API = "https://app.play-box.xyz/api/organizer/v1"
session = requests.Session()
session.headers["X-Api-Key"] = os.environ["PLAYBOX_KEY"]
def fetch_all(path, **params):
offset = 0
while offset is not None:
page = session.get(f"{API}/{path}", params={**params, "offset": offset, "limit": 100}).json()
yield from page["results"]
offset = page["next_offset"]
for event in fetch_all("events/", status="FINISHED", **{"from": "2026-09-01"}):
detail = session.get(f"{API}/events/{event['id']}/").json()
for match in detail["matches"]:
print(event["starts_at"], match["score"], match["url"])
JavaScript (Node 18+, სერვერის მხარე)
const API = "https://app.play-box.xyz/api/organizer/v1";
const headers = { "X-Api-Key": process.env.PLAYBOX_KEY };
const res = await fetch(`${API}/leagues/8/players/`, { headers });
if (!res.ok) {
const { error } = await res.json();
throw new Error(`${error.code}: ${error.message}`);
}
const { results } = await res.json();
console.log(results.slice(0, 10).map(r => `${r.player.username}: ${r.goals}`));
გამოყენების პირობები (ვერსია 2026-10-01)
- API-ის მონაცემები მხოლოდ შენი თამაშების, ლიგებისა და საზოგადოების ჩასატარებლად გამოიყენე.
- ნუ გამოაქვეყნებ გადახდებს, თანხებს, გადახდის მეთოდებს, დასწრების სტატუსებს ან მოთამაშეების ფოტოებს. სპორტული სტატისტიკის (ანგარიშები, გოლები, ასისტები, ცხრილები) საჯაროდ ჩვენება შეიძლება.
- ნუ გააზიარებ და ნუ მიჰყიდი მონაცემებს მესამე მხარეს.
- ნუ მიიღებ დაჯავშნებს ან გადახდებს თამაშებისთვის Playbox პლატფორმის გარეთ.
- როცა მონაცემებს საჯაროდ აჩვენებ, მიუთითე წყარო „Data by Playbox“ Playbox-ის ბმულით.
- გასაღები შენს სერვერზე შეინახე და არასდროს გააზიარო. თუ გაჟონა, მაშინვე გააუქმე.
- თუ ამ პირობებს დაარღვევ, გასაღები გაუქმდება. გაუქმების შემდეგ წაშალე მოთამაშეების ყველა პირადი მონაცემი, რომელიც შეინახე.
ვერსიები
ვერსია URL-შია (v1). პასუხებში ახალი ველები შეიძლება ვერსიის შეცვლის გარეშე გამოჩნდეს, ამიტომ უცნობ ველებზე შეცდომას ნუ ისვრი. ველის წაშლა ან გადარქმევა მხოლოდ v2-ში მოხდება, v1 კი მუშაობას გააგრძელებს.
- 2026-10-02, v1. პირველი გამოშვება: ლიგები, თამაშები, მონაწილეები, მატჩები, ბმულები Playbox-ზე, გასაღების ვადა, პირობები, ლიმიტის ჰედერები, შეცდომების ერთიანი ფორმატი.