المطوّرون
واجهة JSON البرمجية لـ Akıllı Futbol. يتبع التطبيق المحمول والتكاملات القواعد والصلاحيات نفسها التي يتبعها تطبيق الويب.
البدء
نقاط النهاية تحت https://akilli.futbol/api/v1؛ والطلبات والاستجابات بصيغة JSON.
المرجع كاملًا متوفر أيضًا كمستند OpenAPI 3.1 يمكنك تحميله في Postman أو Insomnia أو في مولّد عملاء.
ملخصات نقاط النهاية وملاحظاتها مأخوذة مباشرة من مستند OpenAPI، لذا فهي بالإنجليزية.
118 نقطة نهاية في 17 قسمًا.
المصادقة
أنشئ حسابًا أو سجّل الدخول: أرسل اسم المستخدم وكلمة المرور بصيغة JSON إلى
POST /api/auth/sign-up/usernameأوPOST /api/auth/sign-in/username.الطلب curl -i -X POST https://akilli.futbol/api/auth/sign-in/username \ -H "content-type: application/json" \ -d '{"username": "deniz", "password": "kale-direği-1905"}'احفظ الرمز المميّز الموقَّع من ترويسة الاستجابة
set-auth-tokenفي مكان آمن على الجهاز. لا يعمل رمزًا مميّزًا من نوع Bearer إلا هذا الرمز: أماtokenفي جسم الاستجابة فهو رمز الجلسة الخام ويُرفض.الاستجابة HTTP/1.1 200 OK set-auth-token: P4cTUK….9e7wV6…= content-type: application/json { "redirect": false, "token": "P4cTUK…", "user": { "id": "0193…", "username": "deniz", "name": "Deniz", … } }أرسل
Authorization: Bearer <token>مع كل طلب.الطلب curl https://akilli.futbol/api/v1/me \ -H "Authorization: Bearer P4cTUK….9e7wV6…="
في المتصفح تعمل ملفات تعريف ارتباط جلسة الويب أيضًا. كلمة المرور الخاطئة واسم المستخدم غير الموجود يحصلان على الخطأ نفسه (401)؛ والحسابات الموقوفة تحصل على 403 BANNED_USER. محاولات تسجيل الدخول محدودة لكل IP ولكل اسم مستخدم (429).
لتسجيل الخروج، أرسل POST /api/auth/sign-out؛ ولتسجيل الخروج من كل الأجهزة الأخرى، POST /api/auth/revoke-other-sessions. لا يحتاج أيٌّ منهما إلى جسم. لا تنتهي الجلسة إلا حين يردّ الطلب بـ 200، لذا تحقّق من رمز الحالة. تغيير كلمة المرور عبر POST /api/auth/change-password يُنهي كل الجلسات، بما فيها هذه الجلسة، ويردّ برمز مميّز جديد في set-auth-token: احفظه بدلًا من القديم.
غلاف الاستجابة
تحمل الاستجابات الناجحة النتيجة في data. وتحمل الأخطاء في error رمزًا ورسالة مقروءة، وعند الحاجة رموز أخطاء لكل حقل (fields).
{
"data": { … }
}{
"error": {
"code": "INVALID",
"message": "Some fields are invalid",
"fields": { "name": "tooShort" }
}
}رموز الأخطاء
UNAUTHENTICATEDلا توجد جلسة، أو الرمز المميّز غير صالح: سجّل الدخول مرة أخرى.FORBIDDENغير مسموح لك بفعل هذا.NOT_FOUNDغير موجود، أو لا يمكنك رؤيته.CONFLICTيتعارض الطلب مع الحالة الحالية؛ ويوضح fields السبب.INVALIDالجسم أو بعض الحقول غير صالحة؛ ويحتوي fields على رمز لكل حقل.RATE_LIMITEDطلبات كثيرة جدًا: انتظر قليلًا ثم حاول مرة أخرى.INTERNALحدث خطأ في الخادم: حاول مرة أخرى لاحقًا.
المسار غير المعروف تحت /api/v1 يردّ أيضًا بـ 404 NOT_FOUND بهذا الشكل؛ أما الطريقة التي لا يدعمها المسار فتحصل على 405 بجسم فارغ.
نقاط النهاية تحت /api/auth تابعة لـ Better Auth: تأتي استجاباتها بلا غلاف data، وتحمل أخطاؤها code وmessage.
الحسابات والجلسات
الوسم Auth، 9 نقاط نهايةWhether new accounts can be made
لا يحتاج إلى جلسة
The apps hide sign-up while this is false; the sign-up endpoints then answer 403 SIGN_UP_CLOSED.
اعرض الحقولأخفِ الحقول
data في الاستجابة
openbooleanإلزاميfalse during the private beta: only sign-in
Create an account and sign in
لا يحتاج إلى جلسة
The signed session token is in the
set-auth-tokenresponse header: keep it and send it asAuthorization: Bearer <token>. 403 SIGN_UP_CLOSED during the private beta (GET /api/v1/sign-up says whether sign-up is open). Rate-limited per IP: 20 per 10 minutes (429). 400 INVALID_SIGN_UP with an error code per field inerrors:displayName: displayName;username: username (3–20 characters of a–z, 0–9 and _);password: password (12–128 characters), passwordIsUsername or passwordCommon;adult,privacyNotice,terms: required;form: generic (positions or locale not valid). 400 USERNAME_IS_ALREADY_TAKEN witherrors.username= usernameTaken (reserved names count as taken). 400 VALIDATION_ERROR when a field is missing or has the wrong type. 403 for a sign-up a browser sends from another site.نقطة نهاية من Better Auth: تأتي الاستجابة بلا غلاف data.
اعرض الحقولأخفِ الحقول
جسم الطلب
displayNamestringإلزامي2–40 characters
usernamestringإلزامي3–20: a-z, 0-9, _ (stored lower-case)
passwordstringإلزامي12–128 characters; not a common password, not built from the username or name
positionsstring[]اختياريالقيم:
"goalkeeper","defender","midfielder","forward"adultbooleanإلزاميالقيم:
trueprivacyNoticebooleanإلزاميالقيم:
truetermsbooleanإلزاميالقيم:
truelocalestringإلزاميالقيم:
"tr","en","ru","ar"
جسم الاستجابة
userobjectإلزاميidstringإلزاميusernamestringإلزامي
Sign in
لا يحتاج إلى جلسة
The signed session token is in the
set-auth-tokenresponse header: keep it and send it asAuthorization: Bearer <token>. 401 INVALID_USERNAME_OR_PASSWORD for any wrong name or password; 403 BANNED_USER; 429 TOO_MANY_ATTEMPTS after repeated wrong passwords for the username, from any address, or 429 without a code past the per-IP limit (3 per 10 seconds).نقطة نهاية من Better Auth: تأتي الاستجابة بلا غلاف data.
اعرض الحقولأخفِ الحقول
جسم الطلب
usernamestringإلزاميpasswordstringإلزاميrememberMebooleanاختياري
جسم الاستجابة
redirectbooleanإلزاميAlways false
tokenstringإلزاميThe raw session token. It is refused as a bearer token: use the set-auth-token header. The signed session token is in the
set-auth-tokenresponse header: keep it and send it asAuthorization: Bearer <token>.userobjectإلزاميidstringإلزاميusernamestringإلزاميLower-case; the profile address, /p/{username}
displayUsernamestringإلزاميnamestringإلزاميThe display name
emailstringإلزاميNot an address: a random placeholder Better Auth needs (accounts have no email). Ignore it
emailVerifiedbooleanإلزاميimagestring | nullإلزاميrolestring | nullإلزامي"admin" or "user"
bannedboolean | nullإلزاميbanReasonstring | nullإلزاميbanExpiresstring | nullإلزاميcreatedAtstringإلزاميupdatedAtstringإلزامي
Sign in with Apple (and create the account on first use)
لا يحتاج إلى جلسة
The signed session token is in the
set-auth-tokenresponse header: keep it and send it asAuthorization: Bearer <token>. An Apple ID that already has an account signs in (403 BANNED_USER for a banned one). During the private beta a new Apple ID answers 403 SIGN_UP_CLOSED. Otherwise a new Apple ID answers 409 APPLE_SIGN_UP_REQUIRED withsuggestion: { username, displayName }(from the email Apple shares, or the name; the email is never stored and never signs anyone in) until the call comes back withusername,displayName, andadult,privacyNoticeandtermstrue: then the account is made like sign-up's, with no password. Field errors as sign-up's: 400 INVALID_SIGN_UP witherrors, 400 USERNAME_IS_ALREADY_TAKEN. 401 INVALID_APPLE_TOKEN when the token does not verify (signature, issuer, audience, expiry or nonce); 503 APPLE_UNAVAILABLE when Apple's keys cannot be fetched. Rate-limited per IP: 30 per 10 minutes.نقطة نهاية من Better Auth: تأتي الاستجابة بلا غلاف data.
اعرض الحقولأخفِ الحقول
جسم الطلب
identityTokenstringإلزاميThe identity token from Sign in with Apple on the device
noncestringإلزاميThe raw nonce the app made for this request; the token carries its SHA-256 hex
authorizationCodestringاختياريLets the server revoke Apple's tokens when the account is deleted
givenNamestringاختياريApple shares the name on the first authorization only: pass it on
familyNamestringاختياريusernamestringاختياريFor a new account: 3–20 a-z, 0-9, _ (start from suggestion.username)
displayNamestringاختياريFor a new account: 2–40 characters (start from suggestion.displayName)
positionsstring[]اختياريالقيم:
"goalkeeper","defender","midfielder","forward"adultbooleanاختياريFor a new account: true
privacyNoticebooleanاختياريFor a new account: true
termsbooleanاختياريFor a new account: true
localestringإلزاميالقيم:
"tr","en","ru","ar"
جسم الاستجابة
userobjectإلزاميidstringإلزاميusernamestringإلزامي
createdbooleanإلزاميtrue when this call made the account
Check whether a username is free
لا يحتاج إلى جلسة
What the sign-up form asks as you type. Reserved names (staff words, the brand, app routes such as destek or developers) and names in use answer
available: false, as sign-up would refuse them. 422 USERNAME_TOO_SHORT, USERNAME_TOO_LONG or INVALID_USERNAME (3–20 characters of a–z, 0–9 and _). Rate-limited per IP: 30 per minute (429).نقطة نهاية من Better Auth: تأتي الاستجابة بلا غلاف data.
اعرض الحقولأخفِ الحقول
جسم الطلب
usernamestringإلزاميAs typed: it is checked after the same normalising as sign-up (Turkish letters folded, lower-cased)
جسم الاستجابة
availablebooleanإلزامي
Sign out (ends this session)
يحتاج إلى جلسة
The session ends only when this answers 200
{ success: true }; after any other answer the token may still work. Forget the stored token either way.نقطة نهاية من Better Auth: تأتي الاستجابة بلا غلاف data.
اعرض الحقولأخفِ الحقول
جسم الطلب
لا توجد حقول.
جسم الاستجابة
successbooleanإلزامي
The current session and user
يحتاج إلى جلسة
Answers 200 with
null, not 401, when there is no valid session.نقطة نهاية من Better Auth: تأتي الاستجابة بلا غلاف data.
اعرض الحقولأخفِ الحقول
جسم الاستجابة
sessionobjectإلزاميidstringإلزاميuserIdstringإلزاميtokenstringإلزاميThe raw session token. It is refused as a bearer token: use the set-auth-token header. The signed session token is in the
set-auth-tokenresponse header: keep it and send it asAuthorization: Bearer <token>.expiresAtstringإلزاميISO 8601. A session lasts 7 days and is extended, at most once a day, while it is used
createdAtstringإلزاميupdatedAtstringإلزاميipAddressstring | nullإلزاميuserAgentstring | nullإلزاميimpersonatedBystring | nullإلزامي
userobjectإلزاميidstringإلزاميusernamestringإلزاميLower-case; the profile address, /p/{username}
displayUsernamestringإلزاميnamestringإلزاميThe display name
emailstringإلزاميNot an address: a random placeholder Better Auth needs (accounts have no email). Ignore it
emailVerifiedbooleanإلزاميimagestring | nullإلزاميrolestring | nullإلزامي"admin" or "user"
bannedboolean | nullإلزاميbanReasonstring | nullإلزاميbanExpiresstring | nullإلزاميcreatedAtstringإلزاميupdatedAtstringإلزامي
Change the password
يحتاج إلى جلسة
Signs every session out, this one included, and starts a new one: replace the stored token with the new
set-auth-tokenresponse header (a browser gets a new cookie). Every other device has to sign in again. ArevokeOtherSessionsfield is ignored. 400 INVALID_PASSWORD (the current password is wrong), PASSWORD_TOO_SHORT, PASSWORD_TOO_LONG, PASSWORD_IS_USERNAME or PASSWORD_TOO_COMMON (a common word or a password built from the username or name); 401 without a valid session.نقطة نهاية من Better Auth: تأتي الاستجابة بلا غلاف data.
اعرض الحقولأخفِ الحقول
جسم الطلب
currentPasswordstringإلزاميnewPasswordstringإلزامي12–128 characters; not the username, nothing common or built from the username or name
جسم الاستجابة
tokenstringإلزاميThe raw session token. It is refused as a bearer token: use the set-auth-token header. The signed session token is in the
set-auth-tokenresponse header: keep it and send it asAuthorization: Bearer <token>.userobjectإلزاميidstringإلزاميusernamestringإلزاميLower-case; the profile address, /p/{username}
displayUsernamestringإلزاميnamestringإلزاميThe display name
emailstringإلزاميNot an address: a random placeholder Better Auth needs (accounts have no email). Ignore it
emailVerifiedbooleanإلزاميimagestring | nullإلزاميrolestring | nullإلزامي"admin" or "user"
bannedboolean | nullإلزاميbanReasonstring | nullإلزاميbanExpiresstring | nullإلزاميcreatedAtstringإلزاميupdatedAtstringإلزامي
Sign out every other device
يحتاج إلى جلسة
This device stays signed in. The other sessions end only when this answers 200
{ status: true }; after any other answer they may still work, so try again.نقطة نهاية من Better Auth: تأتي الاستجابة بلا غلاف data.
اعرض الحقولأخفِ الحقول
جسم الطلب
لا توجد حقول.
جسم الاستجابة
statusbooleanإلزامي
حسابك
الوسم Me، 10 نقاط نهاية- GET
/api/ v1/ me Your profile settings
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
data في الاستجابة
idstringإلزاميThe player id
userIdstringإلزاميusernamestringإلزاميFixed: the profile address, /p/{username}
handlestringإلزاميdisplayNamestringإلزاميpositionsstring[]إلزاميالقيم:
"goalkeeper","defender","midfielder","forward"photoobject | nullإلزاميYour profile photo (PUT /api/v1/me/photo), or null
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
visibilitystringإلزاميWho sees your stats, teams and match history. public: everyone; teammates: people who share a team with you or a match you took part in; private: nobody else
القيم:
"public","teammates","private"rolestring | nullإلزامي"admin" or "user"
activeSessionsintegerإلزاميSigned-in devices, this one included
appleLinkedbooleanإلزاميSign in with Apple opens this account (POST/DELETE /api/v1/me/apple)
hasPasswordbooleanإلزاميThe account has a password; an account made with Sign in with Apple has none
- PATCH
/api/ v1/ me Change your display name, positions or visibility
يحتاج إلى جلسة
422 INVALID with
fields.displayName= required | tooShort | tooLong | invalid, orfields.username= immutable when a different username is sent (the username never changes). Change the password at /api/auth/change-password; sign out other devices at /api/auth/revoke-other-sessions.اعرض الحقولأخفِ الحقول
جسم الطلب
displayNamestringاختياري1 أحرف على الأقل
positionsstring[]اختياريالقيم:
"goalkeeper","defender","midfielder","forward"visibilitystringاختياريالقيم:
"public","teammates","private"
data في الاستجابة
idstringإلزاميThe player id
userIdstringإلزاميusernamestringإلزاميFixed: the profile address, /p/{username}
handlestringإلزاميdisplayNamestringإلزاميpositionsstring[]إلزاميالقيم:
"goalkeeper","defender","midfielder","forward"photoobject | nullإلزاميYour profile photo (PUT /api/v1/me/photo), or null
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
visibilitystringإلزاميWho sees your stats, teams and match history. public: everyone; teammates: people who share a team with you or a match you took part in; private: nobody else
القيم:
"public","teammates","private"rolestring | nullإلزامي"admin" or "user"
activeSessionsintegerإلزاميSigned-in devices, this one included
appleLinkedbooleanإلزاميSign in with Apple opens this account (POST/DELETE /api/v1/me/apple)
hasPasswordbooleanإلزاميThe account has a password; an account made with Sign in with Apple has none
- DELETE
/api/ v1/ me Delete your account
يحتاج إلى جلسة
Signs out everywhere and deletes the login (password, Sign in with Apple, whose tokens are revoked), push devices, the photo and team memberships; the username is free again. Matches you played keep their scores and stats under the name "Silinmiş oyuncu" (Deleted player), with no profile. A team you captain passes to a co-captain or the longest-standing member; a team left empty is archived. Answers to coming matches become "no" and pending booking requests are withdrawn. Forget the stored token afterwards. 422
fields.confirm= mismatch.اعرض الحقولأخفِ الحقول
جسم الطلب
confirmstringإلزاميYour username, as a confirmation (any case)
data في الاستجابة
deletedbooleanإلزاميالقيم:
true
- POST
/api/ v1/ me/ apple Link Sign in with Apple to your account
يحتاج إلى جلسة
From then on Sign in with Apple (POST /api/auth/sign-in/apple) opens this account. The email Apple may share is not stored. 401 UNAUTHENTICATED with
fields.identityToken= invalid for a token that does not verify; 409 CONFLICT withfields.form= appleTaken (the Apple ID belongs to another account) or appleLinked (another Apple ID is linked).اعرض الحقولأخفِ الحقول
جسم الطلب
identityTokenstringإلزاميThe identity token from Sign in with Apple on the device
noncestringإلزاميThe raw nonce the app made for this request; the token carries its SHA-256 hex
authorizationCodestringاختياريLets the server revoke Apple's tokens when the account is deleted
data في الاستجابة
linkedbooleanإلزاميالقيم:
true
- DELETE
/api/ v1/ me/ apple Unlink Sign in with Apple
يحتاج إلى جلسة
Apple's tokens are revoked. 409 CONFLICT with
fields.form= lastSignInMethod when the account has no password (Apple is its only way in).اعرض الحقولأخفِ الحقول
data في الاستجابة
linkedbooleanإلزاميالقيم:
false
Register this phone for pushes
يحتاج إلى جلسة
Send the APNs device token after sign-in and whenever iOS hands out a new one. The same token registered again refreshes it; signed in to another account on the phone, it moves to that account. Pushes so far: a match invitation (when you or one of your teams is invited), payload
{ "aps": { "alert": { "title", "body" }, "sound": "default", "category": "MATCH_INVITE", "thread-id": "match-<matchId>" }, "type": "matchInvite", "matchId", "teamName"? }, written inlocale. The app's MATCH_INVITE category carries the buttons RSVP_YES, RSVP_MAYBE and RSVP_NO; answer with POST /api/v1/matches/{id}/rsvp. A person keeps their 10 most recently seen devices. 422fields.token= invalid (not hex),fields.bundleId= unknown (not the Akıllı Futbol app). 429 after 30 registrations an hour.اعرض الحقولأخفِ الحقول
جسم الطلب
tokenstringإلزاميThe APNs device token as hex (64 characters today)
platformstringإلزاميالقيم:
"ios"environmentstringإلزاميsandbox for development builds (Xcode), production for TestFlight and the App Store
القيم:
"sandbox","production"bundleIdstringإلزاميThe app's bundle identifier
1–200 حرفًا
localestringإلزاميThe language pushes are written in
القيم:
"tr","en","ru","ar"
data في الاستجابة
idstringإلزاميThe device id
tokenstringإلزاميThe token as stored: lower-case hex
Stop pushes to one of your devices
يحتاج إلى جلسة
Call it at sign-out, before the session ends. Another person's token is left alone.
اعرض الحقولأخفِ الحقول
معاملات المسار
tokenstringإلزامي
data في الاستجابة
removedbooleanإلزاميFalse when the token was not registered to you
Your profile photo
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
data في الاستجابة
photoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
Upload or replace your profile photo
يحتاج إلى جلسة
Send the photo as the body (
Content-Type: image/jpeg,image/pngorimage/webp), or asmultipart/form-datawith the file in thephotofield. Up to 10 MB, at least 256 px on its shorter side. The server turns it upright by its EXIF orientation, cuts the largest centred square (crop it yourself first to choose), and stores WebP copies without any metadata: location, camera and time are dropped. The photo is seen by whoever may see your stats (your visibility), and never used to recognise anyone in match videos. 422 INVALID withfields.file= required | type | tooBig | dimensions.اعرض الحقولأخفِ الحقول
data في الاستجابة
photoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
- DELETE
/api/ v1/ me/ photo Remove your profile photo
يحتاج إلى جلسة
Your initials show again. Fine without a photo.
اعرض الحقولأخفِ الحقول
data في الاستجابة
photoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
الفرق
الوسم Teams، 9 نقاط نهايةTeams the caller plays for (archived teams left out)
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
data في الاستجابة
النوع:
object[]حقول كل عنصر:
idstring (uuid)إلزاميslugstringإلزاميURL slug, e.g. kartallar-7k2m
namestringإلزاميcitystring | nullإلزاميkitHomeHexstringإلزامي#rrggbb, lower-case
kitAwayHexstring | nullإلزامي#rrggbb, lower-case
crestobject | nullإلزاميCustom crest, or null to use the team name and kit colours
shapestringإلزاميالقيم:
"shield","round","rounded","diamond","hexagon","pennant","arched","oval","crest","octagon","ticket","star"primarystringإلزاميsecondarystringإلزاميletterstringإلزاميpatternstringاختياريالقيم:
"plain","split","stripes","sash","chevron","hoops"الافتراضي:"plain"detailstringاختياريالقيم:
"none","star","ball","crown","laurel","wings"الافتراضي:"none"
rolestringإلزاميThe caller's role in the team
القيم:
"captain","co_captain","member"memberCountintegerإلزامي
- POST
/api/ v1/ teams Start a team. The caller becomes captain and a 6-letter invite code is issued. Name and city are stored NFKC-normalised with single spaces. An optional crest has a shape, two distinct #rrggbb colours, one Unicode letter, a pattern (default plain) and a detail (default none). Field errors: name required/tooShort/tooLong/invalid (hidden or text-direction characters)/staffWord (reads as staff: “Akıllı Futbol”, “Admin”, “Destek”…), city tooLong/invalid, kitHomeHex required/invalid, kitAwayHex invalid/sameAsHome, crest.shape/primary/secondary/letter/pattern/detail invalid (equal colours: crest.secondary=differentColour).
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
جسم الطلب
namestringإلزامي2–40 حرفًا
citystring | nullاختياري60 حرفًا على الأكثر
kitHomeHexstringإلزاميkitAwayHexstring | nullاختياريcrestobject | nullاختياريshapestringإلزاميالقيم:
"shield","round","rounded","diamond","hexagon","pennant","arched","oval","crest","octagon","ticket","star"primarystringإلزاميsecondarystringإلزاميletterstringإلزاميpatternstringاختياريالقيم:
"plain","split","stripes","sash","chevron","hoops"الافتراضي:"plain"detailstringاختياريالقيم:
"none","star","ball","crown","laurel","wings"الافتراضي:"none"
data في الاستجابة
idstring (uuid)إلزاميslugstringإلزاميnamestringإلزاميcitystring | nullإلزاميkitHomeHexstringإلزامي#rrggbb, lower-case
kitAwayHexstring | nullإلزامي#rrggbb, lower-case
crestobject | nullإلزاميshapestringإلزاميالقيم:
"shield","round","rounded","diamond","hexagon","pennant","arched","oval","crest","octagon","ticket","star"primarystringإلزاميsecondarystringإلزاميletterstringإلزاميpatternstringاختياريالقيم:
"plain","split","stripes","sash","chevron","hoops"الافتراضي:"plain"detailstringاختياريالقيم:
"none","star","ball","crown","laurel","wings"الافتراضي:"none"
archivedAtstring (date-time) | nullإلزاميcreatedAtstring (date-time)إلزاميmemberCountintegerإلزاميviewerobjectإلزاميrolestring | nullإلزاميNull for an admin who is not a member
القيم:
"captain","co_captain","member"canEditbooleanإلزاميcanRotateCodebooleanإلزاميcanArchivebooleanإلزاميmustHandOverbooleanإلزاميThe caller is the last captain: leaving needs a new captain first
onlyMemberbooleanإلزاميLeaving would archive the team
codestring | nullإلزاميThe live 6-letter invite code; null once archived
inviteUrlstring (uri) | nullإلزاميThe link to share (a short /j/<code> link that opens the join page)
membersobject[]إلزاميCaptains first, then co-captains, then players
playerIdstring (uuid)إلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
kindstringإلزاميالقيم:
"registered","guest"positionsstring[]إلزاميFollows the member's visibility, as on their profile: empty when it is private, unless it is your own or you are an admin
القيم:
"goalkeeper","defender","midfielder","forward"photoobject | nullإلزاميFollows the member's visibility, like the positions
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
rolestringإلزاميالقيم:
"captain","co_captain","member"numberinteger | nullإلزاميjoinedAtstring (date-time)إلزاميisViewerbooleanإلزاميcanobjectإلزاميrolesstring[]إلزاميRoles the caller may give this member
القيم:
"captain","co_captain","member"removebooleanإلزامي
matchesobjectإلزاميUp to 5 each
upcomingobject[]إلزاميidstring (uuid)إلزاميstartsAtstring (date-time)إلزاميstatusstringإلزاميالقيم:
"planned","played","cancelled"titlestring | nullإلزاميvenueobject | nullإلزاميnamestringإلزاميverifiedbooleanإلزامي
sidesobject[]إلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsinteger | nullإلزاميoursbooleanإلزاميThis team plays on this side
recentobject[]إلزاميidstring (uuid)إلزاميstartsAtstring (date-time)إلزاميstatusstringإلزاميالقيم:
"planned","played","cancelled"titlestring | nullإلزاميvenueobject | nullإلزاميnamestringإلزاميverifiedbooleanإلزامي
sidesobject[]إلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsinteger | nullإلزاميoursbooleanإلزاميThis team plays on this side
A team: roster, the caller's permissions, the invite code and matches. 404 unless the caller is a member or an admin.
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
معاملات المسار
slugstringإلزامي
data في الاستجابة
idstring (uuid)إلزاميslugstringإلزاميnamestringإلزاميcitystring | nullإلزاميkitHomeHexstringإلزامي#rrggbb, lower-case
kitAwayHexstring | nullإلزامي#rrggbb, lower-case
crestobject | nullإلزاميshapestringإلزاميالقيم:
"shield","round","rounded","diamond","hexagon","pennant","arched","oval","crest","octagon","ticket","star"primarystringإلزاميsecondarystringإلزاميletterstringإلزاميpatternstringاختياريالقيم:
"plain","split","stripes","sash","chevron","hoops"الافتراضي:"plain"detailstringاختياريالقيم:
"none","star","ball","crown","laurel","wings"الافتراضي:"none"
archivedAtstring (date-time) | nullإلزاميcreatedAtstring (date-time)إلزاميmemberCountintegerإلزاميviewerobjectإلزاميrolestring | nullإلزاميNull for an admin who is not a member
القيم:
"captain","co_captain","member"canEditbooleanإلزاميcanRotateCodebooleanإلزاميcanArchivebooleanإلزاميmustHandOverbooleanإلزاميThe caller is the last captain: leaving needs a new captain first
onlyMemberbooleanإلزاميLeaving would archive the team
codestring | nullإلزاميThe live 6-letter invite code; null once archived
inviteUrlstring (uri) | nullإلزاميThe link to share (a short /j/<code> link that opens the join page)
membersobject[]إلزاميCaptains first, then co-captains, then players
playerIdstring (uuid)إلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
kindstringإلزاميالقيم:
"registered","guest"positionsstring[]إلزاميFollows the member's visibility, as on their profile: empty when it is private, unless it is your own or you are an admin
القيم:
"goalkeeper","defender","midfielder","forward"photoobject | nullإلزاميFollows the member's visibility, like the positions
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
rolestringإلزاميالقيم:
"captain","co_captain","member"numberinteger | nullإلزاميjoinedAtstring (date-time)إلزاميisViewerbooleanإلزاميcanobjectإلزاميrolesstring[]إلزاميRoles the caller may give this member
القيم:
"captain","co_captain","member"removebooleanإلزامي
matchesobjectإلزاميUp to 5 each
upcomingobject[]إلزاميidstring (uuid)إلزاميstartsAtstring (date-time)إلزاميstatusstringإلزاميالقيم:
"planned","played","cancelled"titlestring | nullإلزاميvenueobject | nullإلزاميnamestringإلزاميverifiedbooleanإلزامي
sidesobject[]إلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsinteger | nullإلزاميoursbooleanإلزاميThis team plays on this side
recentobject[]إلزاميidstring (uuid)إلزاميstartsAtstring (date-time)إلزاميstatusstringإلزاميالقيم:
"planned","played","cancelled"titlestring | nullإلزاميvenueobject | nullإلزاميnamestringإلزاميverifiedbooleanإلزامي
sidesobject[]إلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsinteger | nullإلزاميoursbooleanإلزاميThis team plays on this side
- PATCH
/api/ v1/ teams/ {slug} Edit name, city, kits and crest (captains and co-captains). Only the top-level fields sent change; send the whole crest to replace it. Null clears city, kitAwayHex or crest. A crest has a shape, two distinct #rrggbb colours, one Unicode letter, a pattern (default plain) and a detail (default none). Crest errors use crest.shape/primary/secondary/letter/pattern/detail; equal colours give crest.secondary=differentColour. The slug never changes.
يحتاج إلى جلسة
403 fields.form=managersOnly for members who are not captains or co-captains; 409 fields.form=archived once the team is archived.
اعرض الحقولأخفِ الحقول
معاملات المسار
slugstringإلزامي
جسم الطلب
namestringاختياري2–40 حرفًا
citystring | nullاختياري60 حرفًا على الأكثر
kitHomeHexstringاختياريkitAwayHexstring | nullاختياريcrestobject | nullاختياريshapestringإلزاميالقيم:
"shield","round","rounded","diamond","hexagon","pennant","arched","oval","crest","octagon","ticket","star"primarystringإلزاميsecondarystringإلزاميletterstringإلزاميpatternstringاختياريالقيم:
"plain","split","stripes","sash","chevron","hoops"الافتراضي:"plain"detailstringاختياريالقيم:
"none","star","ball","crown","laurel","wings"الافتراضي:"none"
data في الاستجابة
idstring (uuid)إلزاميslugstringإلزاميnamestringإلزاميcitystring | nullإلزاميkitHomeHexstringإلزامي#rrggbb, lower-case
kitAwayHexstring | nullإلزامي#rrggbb, lower-case
crestobject | nullإلزاميshapestringإلزاميالقيم:
"shield","round","rounded","diamond","hexagon","pennant","arched","oval","crest","octagon","ticket","star"primarystringإلزاميsecondarystringإلزاميletterstringإلزاميpatternstringاختياريالقيم:
"plain","split","stripes","sash","chevron","hoops"الافتراضي:"plain"detailstringاختياريالقيم:
"none","star","ball","crown","laurel","wings"الافتراضي:"none"
archivedAtstring (date-time) | nullإلزاميcreatedAtstring (date-time)إلزاميmemberCountintegerإلزاميviewerobjectإلزاميrolestring | nullإلزاميNull for an admin who is not a member
القيم:
"captain","co_captain","member"canEditbooleanإلزاميcanRotateCodebooleanإلزاميcanArchivebooleanإلزاميmustHandOverbooleanإلزاميThe caller is the last captain: leaving needs a new captain first
onlyMemberbooleanإلزاميLeaving would archive the team
codestring | nullإلزاميThe live 6-letter invite code; null once archived
inviteUrlstring (uri) | nullإلزاميThe link to share (a short /j/<code> link that opens the join page)
membersobject[]إلزاميCaptains first, then co-captains, then players
playerIdstring (uuid)إلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
kindstringإلزاميالقيم:
"registered","guest"positionsstring[]إلزاميFollows the member's visibility, as on their profile: empty when it is private, unless it is your own or you are an admin
القيم:
"goalkeeper","defender","midfielder","forward"photoobject | nullإلزاميFollows the member's visibility, like the positions
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
rolestringإلزاميالقيم:
"captain","co_captain","member"numberinteger | nullإلزاميjoinedAtstring (date-time)إلزاميisViewerbooleanإلزاميcanobjectإلزاميrolesstring[]إلزاميRoles the caller may give this member
القيم:
"captain","co_captain","member"removebooleanإلزامي
matchesobjectإلزاميUp to 5 each
upcomingobject[]إلزاميidstring (uuid)إلزاميstartsAtstring (date-time)إلزاميstatusstringإلزاميالقيم:
"planned","played","cancelled"titlestring | nullإلزاميvenueobject | nullإلزاميnamestringإلزاميverifiedbooleanإلزامي
sidesobject[]إلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsinteger | nullإلزاميoursbooleanإلزاميThis team plays on this side
recentobject[]إلزاميidstring (uuid)إلزاميstartsAtstring (date-time)إلزاميstatusstringإلزاميالقيم:
"planned","played","cancelled"titlestring | nullإلزاميvenueobject | nullإلزاميnamestringإلزاميverifiedbooleanإلزامي
sidesobject[]إلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsinteger | nullإلزاميoursbooleanإلزاميThis team plays on this side
Replace the invite code (captains and co-captains); the old code stops working at once
يحتاج إلى جلسة
403 fields.form=managersOnly for members who are not captains or co-captains; 409 fields.form=archived once the team is archived.
اعرض الحقولأخفِ الحقول
معاملات المسار
slugstringإلزامي
data في الاستجابة
codestringإلزاميinviteUrlstring (uri)إلزامي
Change a member's role. Captains and co-captains manage players and co-captains; only captains make or change captains (403 fields.form=captainOnly). The last captain cannot step down (409 fields.form=lastCaptain). A player who is not (or no longer) on the team: 404 fields.form=memberGone.
يحتاج إلى جلسة
403 fields.form=managersOnly for members who are not captains or co-captains; 409 fields.form=archived once the team is archived.
اعرض الحقولأخفِ الحقول
معاملات المسار
slugstringإلزاميplayerIdstringإلزامي
جسم الطلب
rolestringإلزاميالقيم:
"captain","co_captain","member"
data في الاستجابة
playerIdstring (uuid)إلزاميrolestringإلزاميالقيم:
"captain","co_captain","member"
Remove a member (same rules as roles; 404 fields.form=memberGone when they are not on the team). Removing yourself is leaving.
يحتاج إلى جلسة
403 fields.form=managersOnly for members who are not captains or co-captains; 409 fields.form=archived once the team is archived.
اعرض الحقولأخفِ الحقول
معاملات المسار
slugstringإلزاميplayerIdstringإلزامي
data في الاستجابة
archivedbooleanإلزامي
Leave the team. The last captain must make someone else captain first (409 fields.form=handOver); the last member leaving archives the team.
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
معاملات المسار
slugstringإلزامي
data في الاستجابة
archivedbooleanإلزاميThe team is archived after this
Archive the team (captains only): it leaves everyone's list and its code stops working; matches and stats stay
يحتاج إلى جلسة
403 fields.form=captainOnly for co-captains and players.
اعرض الحقولأخفِ الحقول
معاملات المسار
slugstringإلزامي
data في الاستجابة
archivedAtstring (date-time)إلزامي
رموز الدعوة
الوسم Invites، نقطتا نهايةWhat a six-letter code opens: a team or a match
لا يحتاج إلى جلسة
Codes are case-insensitive; dashes and spaces are ignored. Signed out, the preview has counts but no names. The code a match had when it was cancelled, and the code a team had when it was closed, keep opening the preview (
state: cancelled,archived: true) so the link explains itself; codes replaced before that arerevoked. 404 NOT_FOUND withfields.code:invalid(not six code letters),unknownorrevoked(replaced by a newer code). 429 RATE_LIMITED after 20 wrong codes in 15 minutes (per account; signed out, per address, or in one count shared by every caller whose address cannot be trusted); malformed codes are not counted.اعرض الحقولأخفِ الحقول
معاملات المسار
codestringإلزامي
data في الاستجابة
kindstringإلزاميالقيم:
"team","match"codestringإلزاميThe canonical code: six capital letters
teamobjectاختياريidstringإلزاميslugstringإلزاميnamestringإلزاميcitystring | nullإلزاميkitHomeHexstringإلزامي#rrggbb
kitAwayHexstring | nullإلزاميmemberCountintegerإلزاميcaptainobject | nullإلزاميNull when signed out
idstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميphotoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
archivedbooleanإلزاميClosed teams take no new members
viewerobjectإلزاميsignedInbooleanإلزاميmemberbooleanإلزاميrolestring | nullإلزاميالقيم:
"captain","co_captain","member"canJoinbooleanإلزامي
matchobjectاختياريidstringإلزاميkindstringإلزاميالقيم:
"fixture","pickup"statusstringإلزاميالقيم:
"planned","played","cancelled"statestringإلزاميAnswers are taken while open: not cancelled, not played and no score in yet. Kick-off does not close a match, so people can still join one they played.
القيم:
"open","cancelled","finished"titlestring | nullإلزاميstartsAtstringإلزاميISO 8601
durationMinintegerإلزاميvenueobject | nullإلزاميnamestringإلزاميcitystring | nullإلزاميdistrictstring | nullإلزاميaddressstring | nullإلزاميverifiedbooleanإلزامي
pitchobject | nullإلزاميnamestringإلزاميindoorbooleanإلزامي
sidesobject[]إلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsinteger | nullإلزاميteamobject | nullإلزاميslugstringإلزاميnamestringإلزامي
comingobjectإلزاميYes answers per side (none: no side yet) and the number of maybes
AintegerإلزاميBintegerإلزاميnoneintegerإلزاميtotalintegerإلزاميmaybeintegerإلزامي
playersobject[]إلزاميWho said yes or maybe; empty when signed out
idstringإلزاميdisplayNamestringإلزاميsidestring | nullإلزاميالقيم:
"A","B"rsvpstringإلزاميالقيم:
"yes","maybe"youbooleanإلزاميphotoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
organizerobject | nullإلزاميNull when signed out
displayNamestringإلزامي
Use a code: join the team, or answer the match invitation
يحتاج إلى جلسة
A team code makes you a member (again is a no-op:
alreadyMember); closed teams answer 409 withfields.team = archived. A match code records your answer and puts you on your team's side; cancelled matches and matches with a score answer 409 withfields.match = cancelled | finished. 404 NOT_FOUND withfields.code:invalid(not six code letters),unknownorrevoked(replaced by a newer code). 429 RATE_LIMITED after 20 wrong codes in 15 minutes (per account; signed out, per address, or in one count shared by every caller whose address cannot be trusted); malformed codes are not counted.اعرض الحقولأخفِ الحقول
معاملات المسار
codestringإلزامي
جسم الطلب
rsvpstringاختياريMatch codes only; defaults to yes. Ignored for team codes.
القيم:
"yes","maybe","no"
data في الاستجابة
kindstringإلزاميالقيم:
"team","match"teamobjectاختياريidstringإلزاميslugstringإلزاميnamestringإلزامي
rolestringاختياريالقيم:
"captain","co_captain","member"alreadyMemberbooleanاختياريmatchobjectاختياريidstringإلزامي
participantobjectاختياريrsvpstringإلزاميالقيم:
"invited","yes","maybe","no"sidestring | nullإلزاميThe side of the person's team, when they are in one
القيم:
"A","B"respondedAtstring | nullإلزامي
المباريات
الوسم Matches، 11 نقطة نهايةMy matches: upcoming (soonest first) and past (latest first)
يحتاج إلى جلسة
At most 60 upcoming matches and the 40 latest past ones, with no further pages yet.
اعرض الحقولأخفِ الحقول
data في الاستجابة
upcomingobject[]إلزاميidstringإلزاميtitlestring | nullإلزاميkindstringإلزاميالقيم:
"pickup","fixture"statusstringإلزاميالقيم:
"planned","played","cancelled"startsAtstringإلزاميISO 8601 (UTC)
durationMinnumberإلزاميscoreStatestringإلزاميالقيم:
"none","entered","confirmed"venueobject | nullإلزاميnamestringإلزاميdistrictstring | nullإلزاميcitystring | nullإلزاميaddressstring | nullإلزاميverifiedbooleanإلزاميlatitudenumber | nullإلزاميWGS84, when the venue set its location (for directions); null otherwise
longitudenumber | nullإلزاميWGS84, when the venue set its location (for directions); null otherwise
pitchobject | nullإلزاميnamestringإلزامي
sidesobjectإلزاميAobjectإلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsnumber | nullإلزاميNull until the score is entered
bibHexstring | nullإلزاميteamIdstring | nullإلزاميteamNamestring | nullإلزامي
Bobjectإلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsnumber | nullإلزاميNull until the score is entered
bibHexstring | nullإلزاميteamIdstring | nullإلزاميteamNamestring | nullإلزامي
comingnumberإلزاميHow many said "yes"
meobjectإلزاميrsvpstring | nullإلزاميالقيم:
"invited","yes","maybe","no"sidestring | nullإلزاميالقيم:
"A","B"isOrganizerbooleanإلزامي
canRespondbooleanإلزامي
pastobject[]إلزاميidstringإلزاميtitlestring | nullإلزاميkindstringإلزاميالقيم:
"pickup","fixture"statusstringإلزاميالقيم:
"planned","played","cancelled"startsAtstringإلزاميISO 8601 (UTC)
durationMinnumberإلزاميscoreStatestringإلزاميالقيم:
"none","entered","confirmed"venueobject | nullإلزاميnamestringإلزاميdistrictstring | nullإلزاميcitystring | nullإلزاميaddressstring | nullإلزاميverifiedbooleanإلزاميlatitudenumber | nullإلزاميWGS84, when the venue set its location (for directions); null otherwise
longitudenumber | nullإلزاميWGS84, when the venue set its location (for directions); null otherwise
pitchobject | nullإلزاميnamestringإلزامي
sidesobjectإلزاميAobjectإلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsnumber | nullإلزاميNull until the score is entered
bibHexstring | nullإلزاميteamIdstring | nullإلزاميteamNamestring | nullإلزامي
Bobjectإلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsnumber | nullإلزاميNull until the score is entered
bibHexstring | nullإلزاميteamIdstring | nullإلزاميteamNamestring | nullإلزامي
comingnumberإلزاميHow many said "yes"
meobjectإلزاميrsvpstring | nullإلزاميالقيم:
"invited","yes","maybe","no"sidestring | nullإلزاميالقيم:
"A","B"isOrganizerbooleanإلزامي
canRespondbooleanإلزامي
- POST
/api/ v1/ matches Create a match
يحتاج إلى جلسة
You come ("yes") on side A, or on B when you belong to side B's team only. Teams playing a side and invited teams get every member invited, on their team's side. Set
alreadyPlayed: trueto record a past match; it stays planned with no score or attendance until PUT /api/v1/matches/{id}/score saves them and changes its status to played. The squad can still be completed and invited players can answer before that. 422fieldscodes:required,invalid(also hidden or text-direction characters in the title, a side's label or the notes),staffWord(the title or a side's label reads as staff: “Akıllı Futbol”, “Admin”, “Destek”…),tooLong,notMember(a team you are not in),sameTeam,noOfficialCamera;dateorstartsAt=notEndedwhen an already-played match has not finished;reservationId=invalid(not your confirmed booking, or combined with alreadyPlayed),unavailable(it has a match, or its time passed) ormismatch(the venue, pitch, start or length you sent differ). 429fields.form = tooManyMatches: 20 new matches a day per person.اعرض الحقولأخفِ الحقول
جسم الطلب
titlestring | nullاختياريUp to 60 characters
kindstringاختياريpickup (default): sides picked among friends; fixture: two teams
القيم:
"pickup","fixture"datestringاختياريKick-off date on an Istanbul clock, YYYY-MM-DD (with
time)timestringاختياريKick-off on an Istanbul clock, HH:MM (with
date)startsAtstringاختياريInstead of date + time: an ISO 8601 instant with an offset
durationMinnumberاختياريDefault 60
القيم:
60,90,120venueIdstring | nullاختياريpitchIdstring | nullاختياريA pitch of the venue (sets the venue when venueId is left out)
recordingstringاختياريofficial only on a pitch with an official camera
القيم:
"upload","official"sidesobjectاختياريDefault labels "Turuncular" and "Maviler"
Aobjectإلزاميlabelstringإلزامي1–30 characters, e.g. "Turuncular"
teamIdstring | nullاختياريOne of your teams playing this side; its members are invited on this side
bibHexstring | nullاختياريThe bib colour as #rrggbb, or null for no bibs
Bobjectإلزاميlabelstringإلزامي1–30 characters, e.g. "Turuncular"
teamIdstring | nullاختياريOne of your teams playing this side; its members are invited on this side
bibHexstring | nullاختياريThe bib colour as #rrggbb, or null for no bibs
invitedTeamIdsstring[]اختياريYour teams whose members all get an invitation
notesstring | nullاختياريUp to 500 characters
alreadyPlayedbooleanاختياريDefault false. True requires kick-off plus duration to have passed. The match stays planned until score and attendance are saved separately. Cannot be combined with reservationId.
reservationIdstringاختياريOne of your confirmed bookings (GET /api/v1/reservations) that has no match yet: the match takes its venue, pitch, start and length and is linked to it (ADR-005)
data في الاستجابة
idstringإلزاميcodestringإلزاميinviteUrlstring (uri)إلزاميThe link to share for the code, as for teams: a short /j/<code> link that opens the join page.
A match with its sides, people, place and code
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
idstringإلزاميtitlestring | nullإلزاميkindstringإلزاميالقيم:
"pickup","fixture"statusstringإلزاميالقيم:
"planned","played","cancelled"startsAtstringإلزاميendsAtstringإلزاميdurationMinnumberإلزاميrecordingstringإلزاميالقيم:
"upload","official"scoreStatestringإلزاميالقيم:
"none","entered","confirmed"notesstring | nullإلزاميcancelledAtstring | nullإلزاميorganizerobjectإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزامي
venueobject | nullإلزاميidstringإلزاميnamestringإلزاميcitystring | nullإلزاميdistrictstring | nullإلزاميaddressstring | nullإلزاميverifiedbooleanإلزاميslugstring | nullإلزاميThe venue's public booking page is /venues/<slug> while its pitch admin login is on; null otherwise
latitudenumber | nullإلزاميWGS84, when the venue set its location (for directions); null otherwise
longitudenumber | nullإلزاميWGS84, when the venue set its location (for directions); null otherwise
pitchobject | nullإلزاميidstringإلزاميnamestringإلزاميindoorbooleanإلزاميofficialCamerabooleanإلزامي
cameraobject | nullإلزاميSet when the match waits for the pitch's official camera
idstringإلزاميlabelstringإلزاميofficialbooleanإلزامي
sidesobjectإلزاميAobjectإلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsnumber | nullإلزاميNull until the score is entered
bibHexstring | nullإلزاميteamIdstring | nullإلزاميteamNamestring | nullإلزامي
Bobjectإلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsnumber | nullإلزاميNull until the score is entered
bibHexstring | nullإلزاميteamIdstring | nullإلزاميteamNamestring | nullإلزامي
participantsobject[]إلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
kindstringإلزاميالقيم:
"registered","guest"sidestring | nullإلزاميالقيم:
"A","B"rsvpstringإلزاميالقيم:
"invited","yes","maybe","no"respondedAtstring | nullإلزاميattendedbooleanإلزاميisOrganizerbooleanإلزاميpositionsstring[]إلزاميWhere the person likes to play, as on their profile; empty when they gave none or their visibility hides it from you, and for guests
القيم:
"goalkeeper","defender","midfielder","forward"photoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
teamsobject[]إلزاميteamIdstringإلزاميnamestringإلزاميsidestring | nullإلزاميالقيم:
"A","B"membersnumberإلزامي
codestring | nullإلزاميThe live 6-letter join code; null once the match is cancelled
inviteUrlstring (uri) | nullإلزاميThe link to share for the code, as for teams: a short /j/<code> link that opens the join page. Null with the code
hasVideobooleanإلزاميkickedOffbooleanإلزاميendedbooleanإلزاميKick-off plus the duration has passed
viewerobjectإلزاميplayerIdstringإلزاميYour player id, to find yourself in participants
canManagebooleanإلزاميisOrganizerbooleanإلزاميisAdminbooleanإلزاميrsvpstring | nullإلزاميالقيم:
"invited","yes","maybe","no"sidestring | nullإلزاميالقيم:
"A","B"canRespondbooleanإلزامي
- PATCH
/api/ v1/ matches/ {id} Change a match (managers)
يحتاج إلى جلسة
Answers are kept. A team newly set on a side gets its members invited there, and a team moved to the other side takes its people along. Once the score is in, the details can still be corrected but a side's team cannot change (409
fields.form = scored). A match with a booking at its venue moves the booking with it: 409fields.form = bookingSlotTakenwhen the new time or pitch is not free on the venue's grid,bookingVenuewhen the match would leave the booking's venue (cancel the booking first). Errors: 401 signed out; 404 the match does not exist or you are not part of it; 403 you may see it but not change it (organiser, side captains and admins manage); 409fields.form = cancelledonce cancelled; 422 withfields.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
titlestring | nullاختياريUp to 60 characters
kindstringاختياريpickup (default): sides picked among friends; fixture: two teams
القيم:
"pickup","fixture"datestringاختياريKick-off date on an Istanbul clock, YYYY-MM-DD (with
time)timestringاختياريKick-off on an Istanbul clock, HH:MM (with
date)startsAtstringاختياريInstead of date + time: an ISO 8601 instant with an offset
durationMinnumberاختياريDefault 60
القيم:
60,90,120venueIdstring | nullاختياريpitchIdstring | nullاختياريA pitch of the venue (sets the venue when venueId is left out)
recordingstringاختياريofficial only on a pitch with an official camera
القيم:
"upload","official"notesstring | nullاختياريUp to 500 characters
sidesobjectاختياريOnly the fields you send change; a newly set team gets its members invited
Aobjectاختياريlabelstringاختياري1–30 characters, e.g. "Turuncular"
teamIdstring | nullاختياريOne of your teams playing this side; its members are invited on this side
bibHexstring | nullاختياريThe bib colour as #rrggbb, or null for no bibs
Bobjectاختياريlabelstringاختياري1–30 characters, e.g. "Turuncular"
teamIdstring | nullاختياريOne of your teams playing this side; its members are invited on this side
bibHexstring | nullاختياريThe bib colour as #rrggbb, or null for no bibs
data في الاستجابة
idstringإلزاميtitlestring | nullإلزاميkindstringإلزاميالقيم:
"pickup","fixture"statusstringإلزاميالقيم:
"planned","played","cancelled"startsAtstringإلزاميendsAtstringإلزاميdurationMinnumberإلزاميrecordingstringإلزاميالقيم:
"upload","official"scoreStatestringإلزاميالقيم:
"none","entered","confirmed"notesstring | nullإلزاميcancelledAtstring | nullإلزاميorganizerobjectإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزامي
venueobject | nullإلزاميidstringإلزاميnamestringإلزاميcitystring | nullإلزاميdistrictstring | nullإلزاميaddressstring | nullإلزاميverifiedbooleanإلزاميslugstring | nullإلزاميThe venue's public booking page is /venues/<slug> while its pitch admin login is on; null otherwise
latitudenumber | nullإلزاميWGS84, when the venue set its location (for directions); null otherwise
longitudenumber | nullإلزاميWGS84, when the venue set its location (for directions); null otherwise
pitchobject | nullإلزاميidstringإلزاميnamestringإلزاميindoorbooleanإلزاميofficialCamerabooleanإلزامي
cameraobject | nullإلزاميSet when the match waits for the pitch's official camera
idstringإلزاميlabelstringإلزاميofficialbooleanإلزامي
sidesobjectإلزاميAobjectإلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsnumber | nullإلزاميNull until the score is entered
bibHexstring | nullإلزاميteamIdstring | nullإلزاميteamNamestring | nullإلزامي
Bobjectإلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsnumber | nullإلزاميNull until the score is entered
bibHexstring | nullإلزاميteamIdstring | nullإلزاميteamNamestring | nullإلزامي
participantsobject[]إلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
kindstringإلزاميالقيم:
"registered","guest"sidestring | nullإلزاميالقيم:
"A","B"rsvpstringإلزاميالقيم:
"invited","yes","maybe","no"respondedAtstring | nullإلزاميattendedbooleanإلزاميisOrganizerbooleanإلزاميpositionsstring[]إلزاميWhere the person likes to play, as on their profile; empty when they gave none or their visibility hides it from you, and for guests
القيم:
"goalkeeper","defender","midfielder","forward"photoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
teamsobject[]إلزاميteamIdstringإلزاميnamestringإلزاميsidestring | nullإلزاميالقيم:
"A","B"membersnumberإلزامي
codestring | nullإلزاميThe live 6-letter join code; null once the match is cancelled
inviteUrlstring (uri) | nullإلزاميThe link to share for the code, as for teams: a short /j/<code> link that opens the join page. Null with the code
hasVideobooleanإلزاميkickedOffbooleanإلزاميendedbooleanإلزاميKick-off plus the duration has passed
viewerobjectإلزاميplayerIdstringإلزاميYour player id, to find yourself in participants
canManagebooleanإلزاميisOrganizerbooleanإلزاميisAdminbooleanإلزاميrsvpstring | nullإلزاميالقيم:
"invited","yes","maybe","no"sidestring | nullإلزاميالقيم:
"A","B"canRespondbooleanإلزامي
Cancel a match (managers)
يحتاج إلى جلسة
The code stops working, and the bookings linked to the match that have not started are cancelled with it (their answer reads
@matchCancelled). 409fields.form = scoredonce the score is in. Errors: 401 signed out; 404 the match does not exist or you are not part of it; 403 you may see it but not change it (organiser, side captains and admins manage); 409fields.form = cancelledonce cancelled; 422 withfields.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
idstringإلزاميstatusstringإلزاميالقيم:
"cancelled"
Renew the match's join code (managers)
يحتاج إلى جلسة
The old code stops working at once; share the new one again. Errors: 401 signed out; 404 the match does not exist or you are not part of it; 403 you may see it but not change it (organiser, side captains and admins manage); 409
fields.form = cancelledonce cancelled; 422 withfields.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
codestringإلزامي6 letters A–Z without I and O
inviteUrlstring (uri)إلزاميThe link to share for the code, as for teams: a short /j/<code> link that opens the join page.
Answer an invitation
يحتاج إلى جلسة
For invited people and members of invited teams (who join on their team's side). 409
fields.form=cancelledorscored. Errors: 401 signed out; 404 the match does not exist or you are not part of it; 403 you may see it but not change it (organiser, side captains and admins manage); 409fields.form = cancelledonce cancelled; 422 withfields.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
answerstringإلزاميالقيم:
"yes","maybe","no"
data في الاستجابة
rsvpstringإلزاميالقيم:
"invited","yes","maybe","no"sidestring | nullإلزاميالقيم:
"A","B"
Invite one of your teams (managers)
يحتاج إلى جلسة
Every member not yet in the match is invited. A team playing a side is invited on that side (422
fields.side = teamPlaysSidefor the other one); otherwise members without a side, or still on the team's earlier side, takeside. 422fields.teamId = notMemberfor a team you are not in. Once the score is in, who played and on which side is changed with the score: 409fields.form = scored. Errors: 401 signed out; 404 the match does not exist or you are not part of it; 403 you may see it but not change it (organiser, side captains and admins manage); 409fields.form = cancelledonce cancelled; 422 withfields.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
teamIdstringإلزاميsidestring | nullاختياريالقيم:
"A","B"
data في الاستجابة
invitednumberإلزاميmembersnumberإلزامي
Invite a person by username, or add a guest by name (managers)
يحتاج إلى جلسة
A guest is a player without an account, counted as coming; the name follows the same rules as a display name (422
fields.guestName=required,tooShort,tooLongorinvalid). 422fields.username = notFound; 409fields.username = already. Once the score is in, who played and on which side is changed with the score: 409fields.form = scored. Errors: 401 signed out; 404 the match does not exist or you are not part of it; 403 you may see it but not change it (organiser, side captains and admins manage); 409fields.form = cancelledonce cancelled; 422 withfields.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
usernamestringاختياريsidestring | nullاختياريالقيم:
"A","B"guestNamestringاختياري2–40 characters
data في الاستجابة
playerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
kindstringإلزاميالقيم:
"registered","guest"sidestring | nullإلزاميالقيم:
"A","B"rsvpstringإلزاميالقيم:
"invited","yes","maybe","no"respondedAtstring | nullإلزاميattendedbooleanإلزاميisOrganizerbooleanإلزاميpositionsstring[]إلزاميWhere the person likes to play, as on their profile; empty when they gave none or their visibility hides it from you, and for guests
القيم:
"goalkeeper","defender","midfielder","forward"photoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
Move a player to a side, or answer for a guest (managers)
يحتاج إلى جلسة
403 when
rsvpis sent for a registered player (people answer for themselves); 422fields.rsvp = invalidfor any other value. Once the score is in, who played and on which side is changed with the score: 409fields.form = scored. Errors: 401 signed out; 404 the match does not exist or you are not part of it; 403 you may see it but not change it (organiser, side captains and admins manage); 409fields.form = cancelledonce cancelled; 422 withfields.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميplayerIdstringإلزامي
جسم الطلب
sidestring | nullاختياريالقيم:
"A","B"rsvpstringاختياريGuests only
القيم:
"yes","maybe","no"
data في الاستجابة
playerIdstringإلزاميsidestring | nullإلزاميالقيم:
"A","B"rsvpstringإلزاميالقيم:
"invited","yes","maybe","no"
Take a player off the match (managers)
يحتاج إلى جلسة
409
fields.form=organizer(the organiser stays). Once the score is in, who played and on which side is changed with the score: 409fields.form = scored. Errors: 401 signed out; 404 the match does not exist or you are not part of it; 403 you may see it but not change it (organiser, side captains and admins manage); 409fields.form = cancelledonce cancelled; 422 withfields.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميplayerIdstringإلزامي
data في الاستجابة
playerIdstringإلزاميremovedbooleanإلزاميالقيم:
true
المنشآت
الوسم Venues، 6 نقاط نهايةSearch venues
يحتاج إلى جلسة
Verified venues first, then by name; at most 12. An empty
qlists venues the same way.اعرض الحقولأخفِ الحقول
معاملات الاستعلام
qstringاختياريWords that must all appear in the name, district or city; Turkish letters optional ("kadikoy" finds "Kadıköy")
data في الاستجابة
النوع:
object[]حقول كل عنصر:
idstringإلزاميnamestringإلزاميcitystring | nullإلزاميdistrictstring | nullإلزاميaddressstring | nullإلزاميverifiedbooleanإلزاميChecked by an admin (a partner venue); show the verified mark
pitchesobject[]إلزاميidstringإلزاميnamestringإلزاميe.g. "1. Saha"
indoorbooleanإلزاميofficialCamerabooleanإلزاميThe pitch has the venue's own recorder: a match here can wait for its recording
- POST
/api/ v1/ venues Add a venue
يحتاج إلى جلسة
New venues are unverified until an admin checks them. When a venue with the same name, city and district is already listed (ignoring case and Turkish letters), that venue comes back instead of a copy. 422 with
fields(required,tooShort,tooLong,invalidfor hidden characters,staffWordwhen the name reads as staff: “Akıllı Futbol”, “Resmi”…). 429 RATE_LIMITED after 20 new venues in 24 hours (admins are not limited).اعرض الحقولأخفِ الحقول
جسم الطلب
namestringإلزامي2–80 characters
citystringإلزامي2–40 characters
districtstring | nullاختياريUp to 40 characters
addressstring | nullاختياريUp to 160 characters
pitchNamestring | nullاختياريA first pitch, e.g. "1. Saha"
indoorbooleanاختياريWhether that first pitch is indoors
data في الاستجابة
idstringإلزاميnamestringإلزاميcitystring | nullإلزاميdistrictstring | nullإلزاميaddressstring | nullإلزاميverifiedbooleanإلزاميChecked by an admin (a partner venue); show the verified mark
pitchesobject[]إلزاميidstringإلزاميnamestringإلزاميe.g. "1. Saha"
indoorbooleanإلزاميofficialCamerabooleanإلزاميThe pitch has the venue's own recorder: a match here can wait for its recording
Venues of your latest matches, then venues you added (at most five)
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
data في الاستجابة
النوع:
object[]حقول كل عنصر:
idstringإلزاميnamestringإلزاميcitystring | nullإلزاميdistrictstring | nullإلزاميaddressstring | nullإلزاميverifiedbooleanإلزاميChecked by an admin (a partner venue); show the verified mark
pitchesobject[]إلزاميidstringإلزاميnamestringإلزاميe.g. "1. Saha"
indoorbooleanإلزاميofficialCamerabooleanإلزاميThe pitch has the venue's own recorder: a match here can wait for its recording
A venue with its pitches
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
idstringإلزاميnamestringإلزاميcitystring | nullإلزاميdistrictstring | nullإلزاميaddressstring | nullإلزاميverifiedbooleanإلزاميChecked by an admin (a partner venue); show the verified mark
pitchesobject[]إلزاميidstringإلزاميnamestringإلزاميe.g. "1. Saha"
indoorbooleanإلزاميofficialCamerabooleanإلزاميThe pitch has the venue's own recorder: a match here can wait for its recording
Add a pitch to a venue
يحتاج إلى جلسة
Admins, or the person who added the venue while it is unverified (403 otherwise). 409
fields.name = takenfor a duplicate name.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
namestringإلزامي1–40 characters, unique within the venue
indoorbooleanاختياري
data في الاستجابة
idstringإلزاميnamestringإلزاميcitystring | nullإلزاميdistrictstring | nullإلزاميaddressstring | nullإلزاميverifiedbooleanإلزاميChecked by an admin (a partner venue); show the verified mark
pitchesobject[]إلزاميidstringإلزاميnamestringإلزاميe.g. "1. Saha"
indoorbooleanإلزاميofficialCamerabooleanإلزاميThe pitch has the venue's own recorder: a match here can wait for its recording
A venue's logo
لا يحتاج إلى جلسة
Public, no sign-in. Take the path from the venue's
logofield rather than building it: the version names one picture for good, so the answer is cached for a year (Cache-Control: public, max-age=31536000, immutable). A replaced or removed logo's version answers 404 NOT_FOUND. A PNG, JPEG or WebP of at most 1024 pixels a side, its type read from the file's bytes when it was uploaded; sent withX-Content-Type-Options: nosniff,Content-Security-Policy: default-src 'none'andCross-Origin-Resource-Policy: same-site.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميversionstringإلزامي
الحجوزات
الوسم Bookings، 5 نقاط نهايةA venue's public page
لا يحتاج إلى جلسة
Works signed out. 404 unless the venue has a login that is switched on (only those venues have a page).
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
idstringإلزاميslugstringإلزاميThe page's address: /venues/<slug>
namestringإلزاميverifiedbooleanإلزاميChecked by an admin; show the verified mark
districtstring | nullإلزاميcitystring | nullإلزاميaddressstring | nullإلزاميdescriptionstring | nullإلزاميPlain text, line breaks kept
logostring | nullإلزاميA path to the logo (immutable, cache it), or null
directionsobjectإلزاميDriving directions: to the coordinates when known, else a search for the name and address
googlestring (uri)إلزاميapplestring (uri)إلزامي
whatsappobject | nullإلزاميOnly when the venue shows it
digitsstringإلزاميInternational, without +
linkstring (uri)إلزاميhttps://wa.me/<digits>
reservationsEnabledbooleanإلزاميThe venue takes requests in the app; otherwise point people to WhatsApp
autoConfirmbooleanإلزاميRequests from people who already had a booking confirmed here are confirmed at once, while they hold fewer than 2 coming bookings and requests here
slotMinutesnumberإلزاميStart times every 30 or 60 minutes from opening
القيم:
30,60openingHoursobjectإلزاميIstanbul clock; null: closed
monobject | nullإلزاميopenstringإلزامي"10:00"
closestringإلزامي"01:00"; at or before
openmeans after midnight
tueobject | nullإلزاميopenstringإلزامي"10:00"
closestringإلزامي"01:00"; at or before
openmeans after midnight
wedobject | nullإلزاميopenstringإلزامي"10:00"
closestringإلزامي"01:00"; at or before
openmeans after midnight
thuobject | nullإلزاميopenstringإلزامي"10:00"
closestringإلزامي"01:00"; at or before
openmeans after midnight
friobject | nullإلزاميopenstringإلزامي"10:00"
closestringإلزامي"01:00"; at or before
openmeans after midnight
satobject | nullإلزاميopenstringإلزامي"10:00"
closestringإلزامي"01:00"; at or before
openmeans after midnight
sunobject | nullإلزاميopenstringإلزامي"10:00"
closestringإلزامي"01:00"; at or before
openmeans after midnight
todaystringإلزاميThe venue day open now (YYYY-MM-DD): the first day to offer. A venue day is named by the date it opens: Friday 10:00–02:00 holds Saturday 01:00
pitchesobject[]إلزاميidstringإلزاميnamestringإلزاميindoorbooleanإلزامي
Free times on a venue day, per pitch
لا يحتاج إلى جلسة
States only, never who or why: confirmed bookings and blocked time make a time
taken; requests the venue has not answered make itrequested(still askable). With a bearer token the lead time is the person's own. 422fields.date = outOfRange.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
معاملات الاستعلام
datestringاختياريThe venue day, YYYY-MM-DD (default: the venue day open now); from yesterday up to 31 days ahead
durationMinstringاختياري60 (default), 90 or 120
data في الاستجابة
datestringإلزاميdurationMinnumberإلزاميslotMinutesnumberإلزاميhoursobject | nullإلزاميThat venue day's hours; null when closed
openstringإلزامي"10:00"
closestringإلزامي"01:00"; at or before
openmeans after midnight
leadMinutesnumberإلزاميHow long before its start a time can still be asked for: 150 minutes, or 30 for someone the venue confirms at once
pitchesobject[]إلزاميidstringإلزاميnamestringإلزاميslotsobject[]إلزاميtimestringإلزاميIstanbul wall clock, "21:00"
datestringإلزاميThe calendar date the time falls on (the next date after midnight)
startsAtstringإلزاميISO 8601 (UTC)
nextDaybooleanإلزاميAfter the venue day's midnight: show it as "Friday night 01:00 (Saturday 9 November)"
statestringإلزاميrequested: someone asked and the venue has not answered; it can still be asked for
القيم:
"free","requested","taken","soon","tooFar"
Ask a venue for a booking
يحتاج إلى جلسة
The booking waits for the venue (
pending) and lapses 2 hours before its start if not answered; it isconfirmedat once where the venue auto-confirms and you already had a booking confirmed there. 404 for a venue without a page (no login, or switched off). 409fields.form:bookingsOff(the venue takes no requests now; use its WhatsApp),alreadyAsked,tooManyOpen(2 requests already waiting at this venue);fields.time = taken. 422fields:pitchId.invalid,teamId.notMember,phone.invalid,matchId(invalid,booked,otherTime,otherPlace),time(closed,offGrid,soon,tooFar). 429 RATE_LIMITED after 6 requests in an hour (refused requests do not count).اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
pitchIdstringإلزاميdatestringإلزاميThe venue day, YYYY-MM-DD
timestringإلزاميOne of that day's start times (a slot's
time), HH:MMdurationMinnumberإلزاميالقيم:
60,90,120teamIdstring | nullاختياريOne of your teams: side A of the match made on confirmation
notestring | nullاختياريUp to 300 characters, for the venue
phonestring | nullاختياريShared with this venue only and erased 30 days after the start (or when the booking is declined, cancelled or lapses). "0532 123 45 67", "+90…"
wantsMatchbooleanاختياريDefault true: when the venue confirms, your match is made (this venue, pitch and time, your team on side A) and linked
matchIdstring | nullاختياريInstead: one of your own matches at exactly this time with no booking yet, to link
data في الاستجابة
idstringإلزاميvenueobjectإلزاميidstringإلزاميnamestringإلزاميverifiedbooleanإلزاميslugstring | nullإلزاميNull once the venue's page is gone
pitchobjectإلزاميidstringإلزاميnamestringإلزامي
startsAtstringإلزاميendsAtstringإلزاميdurationMinnumberإلزاميvenueDatestringإلزاميThe venue day it belongs to
nextDaybooleanإلزاميstatusstringإلزاميlapsed: the venue did not answer by 2 hours before the start
القيم:
"pending","confirmed","declined","cancelled","lapsed"answerstring | nullإلزاميThe venue's words, or the app's own answer: "@taken" (another booking got the time), "@blocked" (the venue closed it), "@loginOff" (the venue stopped taking bookings), "@matchCancelled" (the match it was made for was called off)
cancelledBystring | nullإلزاميالقيم:
"person","venue"teamobject | nullإلزاميidstringإلزاميnamestringإلزامي
matchobject | nullإلزاميThe match made from (or linked to) the booking, while it is not cancelled
idstringإلزامي
wantsMatchbooleanإلزاميcanCancelbooleanإلزاميcanMakeMatchbooleanإلزاميConfirmed, not started and without a match: POST /api/v1/matches with its time, place and
reservationId
Your bookings
يحتاج إلى جلسة
upcoming: coming bookings whatever their answer (until they start; a confirmed one until it ends), soonest first.past: those of the last 30 days, latest first.اعرض الحقولأخفِ الحقول
data في الاستجابة
upcomingobject[]إلزاميidstringإلزاميvenueobjectإلزاميidstringإلزاميnamestringإلزاميverifiedbooleanإلزاميslugstring | nullإلزاميNull once the venue's page is gone
pitchobjectإلزاميidstringإلزاميnamestringإلزامي
startsAtstringإلزاميendsAtstringإلزاميdurationMinnumberإلزاميvenueDatestringإلزاميThe venue day it belongs to
nextDaybooleanإلزاميstatusstringإلزاميlapsed: the venue did not answer by 2 hours before the start
القيم:
"pending","confirmed","declined","cancelled","lapsed"answerstring | nullإلزاميThe venue's words, or the app's own answer: "@taken" (another booking got the time), "@blocked" (the venue closed it), "@loginOff" (the venue stopped taking bookings), "@matchCancelled" (the match it was made for was called off)
cancelledBystring | nullإلزاميالقيم:
"person","venue"teamobject | nullإلزاميidstringإلزاميnamestringإلزامي
matchobject | nullإلزاميThe match made from (or linked to) the booking, while it is not cancelled
idstringإلزامي
wantsMatchbooleanإلزاميcanCancelbooleanإلزاميcanMakeMatchbooleanإلزاميConfirmed, not started and without a match: POST /api/v1/matches with its time, place and
reservationId
pastobject[]إلزاميidstringإلزاميvenueobjectإلزاميidstringإلزاميnamestringإلزاميverifiedbooleanإلزاميslugstring | nullإلزاميNull once the venue's page is gone
pitchobjectإلزاميidstringإلزاميnamestringإلزامي
startsAtstringإلزاميendsAtstringإلزاميdurationMinnumberإلزاميvenueDatestringإلزاميThe venue day it belongs to
nextDaybooleanإلزاميstatusstringإلزاميlapsed: the venue did not answer by 2 hours before the start
القيم:
"pending","confirmed","declined","cancelled","lapsed"answerstring | nullإلزاميThe venue's words, or the app's own answer: "@taken" (another booking got the time), "@blocked" (the venue closed it), "@loginOff" (the venue stopped taking bookings), "@matchCancelled" (the match it was made for was called off)
cancelledBystring | nullإلزاميالقيم:
"person","venue"teamobject | nullإلزاميidstringإلزاميnamestringإلزامي
matchobject | nullإلزاميThe match made from (or linked to) the booking, while it is not cancelled
idstringإلزامي
wantsMatchbooleanإلزاميcanCancelbooleanإلزاميcanMakeMatchbooleanإلزاميConfirmed, not started and without a match: POST /api/v1/matches with its time, place and
reservationId
Cancel one of your bookings
يحتاج إلى جلسة
Waiting or confirmed, before it starts; the time is free again. 404 for someone else's booking; 409
fields.form:notActive,started.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
idstringإلزاميvenueobjectإلزاميidstringإلزاميnamestringإلزاميverifiedbooleanإلزاميslugstring | nullإلزاميNull once the venue's page is gone
pitchobjectإلزاميidstringإلزاميnamestringإلزامي
startsAtstringإلزاميendsAtstringإلزاميdurationMinnumberإلزاميvenueDatestringإلزاميThe venue day it belongs to
nextDaybooleanإلزاميstatusstringإلزاميlapsed: the venue did not answer by 2 hours before the start
القيم:
"pending","confirmed","declined","cancelled","lapsed"answerstring | nullإلزاميThe venue's words, or the app's own answer: "@taken" (another booking got the time), "@blocked" (the venue closed it), "@loginOff" (the venue stopped taking bookings), "@matchCancelled" (the match it was made for was called off)
cancelledBystring | nullإلزاميالقيم:
"person","venue"teamobject | nullإلزاميidstringإلزاميnamestringإلزامي
matchobject | nullإلزاميThe match made from (or linked to) the booking, while it is not cancelled
idstringإلزامي
wantsMatchbooleanإلزاميcanCancelbooleanإلزاميcanMakeMatchbooleanإلزاميConfirmed, not started and without a match: POST /api/v1/matches with its time, place and
reservationId
النتيجة
الوسم Score، 5 نقاط نهايةThe score card: goals, who played and the reported scorers
يحتاج إلى جلسة
For everyone who can see the match. Errors: 401 signed out; 404 the match does not exist or you are not part of it.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
matchIdstringإلزاميstatusstringإلزاميالقيم:
"planned","played","cancelled"scoreStatestringإلزاميالقيم:
"none","entered","confirmed"recordingstringإلزاميofficial: the pitch's camera records the match; nobody needs to upload
القيم:
"upload","official"startsAtstringإلزاميISO 8601 (UTC)
kickedOffbooleanإلزاميsidesobjectإلزاميAobjectإلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsnumber | nullإلزاميNull until the score is entered
Bobjectإلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsnumber | nullإلزاميNull until the score is entered
ownGoalsobjectإلزاميPer side, how many of that side's goals the other side put into its own net. They count for nobody's goals (profiles and stats count reported scorers only). Null when not given, and until the score is entered
Anumber | nullإلزاميBnumber | nullإلزامي
peopleobject[]إلزاميEveryone in the match, by name
playerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
kindstringإلزاميالقيم:
"registered","guest"sidestring | nullإلزاميالقيم:
"A","B"rsvpstringإلزاميالقيم:
"invited","yes","maybe","no"attendedbooleanإلزاميPlayed in the match
goalsReportednumber | nullإلزاميSelf-reported goals; null when not reported
isOrganizerbooleanإلزاميmarkablebooleanإلزاميYou may mark them as played now: guests, people who said yes or maybe or played already, members of a team in the match, and people who share a team or a match with you (a public profile alone does not count). Always false when you cannot enter the score
photoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
scorersobjectإلزاميWhether each side's scorers were reported: a player of the side has a count, or its own goals were given
AbooleanإلزاميBbooleanإلزامي
hasVideobooleanإلزاميlastChangeobject | nullإلزاميatstringإلزاميbystring | nullإلزاميWho saved it; null for the Akıllı Futbol team
editedbooleanإلزاميA correction rather than the first entry
versionstring | nullإلزاميIdentifies the last save (null before the first); send it back as
basedOnwith PUTviewerobjectإلزاميplayerIdstringإلزاميisAdminbooleanإلزاميcanManagebooleanإلزاميOrganiser, side captains and admins
canEditbooleanإلزاميMay enter or correct the score now
blockedBystring | nullإلزاميWhy a manager cannot enter the score now
القيم:
"cancelled","beforeKickoff"attendedbooleanإلزاميcanUploadbooleanإلزاميMay upload the match video
Enter or correct the score and who played (managers)
يحتاج إلى جلسة
The organiser, the side captains and admins; from kick-off (admins at any time), never for a cancelled match. One transaction writes the goals and own goals, marks the match played, sets everyone's attendance and side (people not listed did not play) and adds new guests and players. The first save is audited as
score.set, corrections asscore.editwith before and after (goals, own goals and who played). Man-of-the-match votes from or for someone who no longer played are dropped. Reported goals are optional per side. When any player of a side has a count or the side'sownGoalsis given, the side's counts plus its own goals must add up to its goals (the players without a count are stored as 0). Example: 3–2 where one of A's goals was an own goal by B:ownGoals: { A: 1 }and A's players' counts add up to 2. Playing a match opens a teammates-only profile to the others who played, so only people withmarkabletrue (or a username GET …/score/lookup accepts) can be marked as played; anyone else answers yes themselves before the score is in, or comes as a guest. Each username counts against the same limit as the lookups (60 per 10 minutes). 403 for people who may see the match but not manage it. 409fields.form=cancelled,beforeKickofforchanged(someone saved since yourbasedOn). 422fields:scorers.A/scorers.B=mismatch(the side's counts plus own goals do not add up to its goals, own goals beyond its goals included);attendance.N=invalid(not exactly one of playerId, username, guestName);attendance.N.playerId=invalid(not an id),notInMatch,duplicateornotConnected;attendance.N.username=notFound,duplicateornotConnected;attendance.N.guestName=required,tooShort,tooLongorinvalid;goals.A,goals.B,ownGoals.A,ownGoals.B,attendance.N.goals=invalid(0–99);ownGoals=invalid(not an object);basedOn=invalid. 429 too many usernames. Errors: 401 signed out; 404 the match does not exist or you are not part of it.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
goalsobjectإلزاميAintegerإلزاميمن 0 إلى 99
Bintegerإلزاميمن 0 إلى 99
ownGoalsobject | nullاختياريPer side, how many of that side's goals the other side put into its own net. They count for nobody's goals (profiles and stats count reported scorers only). Leave a side out (or null) when not given; 0 is given and checks the side's scorers like a count does
Ainteger | nullاختياريمن 0 إلى 99
Binteger | nullاختياريمن 0 إلى 99
attendanceobject[]إلزاميEveryone who played, each with exactly one of playerId, username or guestName. Anyone in the match who is not listed did not play
playerIdstringاختياريSomeone already in the match (see
people)usernamestringاختياريA registered player by username; joins the match if not in it yet
guestNamestringاختياريSomeone without an account: a new guest player, 2–40 characters
sidestringإلزاميالقيم:
"A","B"goalsinteger | nullاختياريSelf-reported goals; leave out (or null) when not reported
من 0 إلى 99
basedOnstring | nullاختياريThe card's
versionyou started from (null for a new score). When sent, the save is refused with 409changedif someone saved the score since; leave it out to save regardless
data في الاستجابة
matchIdstringإلزاميstatusstringإلزاميالقيم:
"planned","played","cancelled"scoreStatestringإلزاميالقيم:
"none","entered","confirmed"recordingstringإلزاميofficial: the pitch's camera records the match; nobody needs to upload
القيم:
"upload","official"startsAtstringإلزاميISO 8601 (UTC)
kickedOffbooleanإلزاميsidesobjectإلزاميAobjectإلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsnumber | nullإلزاميNull until the score is entered
Bobjectإلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsnumber | nullإلزاميNull until the score is entered
ownGoalsobjectإلزاميPer side, how many of that side's goals the other side put into its own net. They count for nobody's goals (profiles and stats count reported scorers only). Null when not given, and until the score is entered
Anumber | nullإلزاميBnumber | nullإلزامي
peopleobject[]إلزاميEveryone in the match, by name
playerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
kindstringإلزاميالقيم:
"registered","guest"sidestring | nullإلزاميالقيم:
"A","B"rsvpstringإلزاميالقيم:
"invited","yes","maybe","no"attendedbooleanإلزاميPlayed in the match
goalsReportednumber | nullإلزاميSelf-reported goals; null when not reported
isOrganizerbooleanإلزاميmarkablebooleanإلزاميYou may mark them as played now: guests, people who said yes or maybe or played already, members of a team in the match, and people who share a team or a match with you (a public profile alone does not count). Always false when you cannot enter the score
photoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
scorersobjectإلزاميWhether each side's scorers were reported: a player of the side has a count, or its own goals were given
AbooleanإلزاميBbooleanإلزامي
hasVideobooleanإلزاميlastChangeobject | nullإلزاميatstringإلزاميbystring | nullإلزاميWho saved it; null for the Akıllı Futbol team
editedbooleanإلزاميA correction rather than the first entry
versionstring | nullإلزاميIdentifies the last save (null before the first); send it back as
basedOnwith PUTviewerobjectإلزاميplayerIdstringإلزاميisAdminbooleanإلزاميcanManagebooleanإلزاميOrganiser, side captains and admins
canEditbooleanإلزاميMay enter or correct the score now
blockedBystring | nullإلزاميWhy a manager cannot enter the score now
القيم:
"cancelled","beforeKickoff"attendedbooleanإلزاميcanUploadbooleanإلزاميMay upload the match video
Look up a registered player by username, before adding them to the score card (managers)
يحتاج إلى جلسة
What the score page asks before it lists someone as played: who the username belongs to, and whether they are in the match already and on which side. Managers only, while the score can be entered (from kick-off; admins at any time; never for a cancelled match). Each lookup counts against the limit of 60 per 10 minutes shared with the usernames sent with PUT. 403 for people who may see the match but not manage it. 409
fields.form=cancelledorbeforeKickoff. 422fields.username=required,tooLong,notFound(no registered player has it) ornotConnected(they have not said they are coming and you share no team or match: they answer yes themselves first, or come as a guest). 429 too many lookups. Errors: 401 signed out; 404 the match does not exist or you are not part of it.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
معاملات الاستعلام
usernamestringإلزاميAs typed: a leading @, surrounding spaces and letter case do not matter
data في الاستجابة
playerIdstringإلزاميdisplayNamestringإلزاميhandlestringإلزاميinMatchbooleanإلزاميAlready in the match (invited, answered or played): send their playerId or username with PUT
sidestring | nullإلزاميTheir side in the match, when they have one
القيم:
"A","B"
Man of the match: the tally, the leader and your vote
يحتاج إلى جلسة
Votes are anonymous: you see the counts and your own vote. Errors: 401 signed out; 404 the match does not exist or you are not part of it.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
matchIdstringإلزاميavailablebooleanإلزاميThe score is in and the match was not cancelled
openbooleanإلزاميVotes can be cast or changed now
closesAtstringإلزاميKick-off plus 7 days (ISO 8601)
totalVotesnumberإلزاميcandidatesobject[]إلزاميEveryone who played: most votes first, then by name
playerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميkindstringإلزاميالقيم:
"registered","guest"sidestring | nullإلزاميالقيم:
"A","B"votesnumberإلزاميphotoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
leadersobject[]إلزاميThe most voted; several on a tie, none before the first vote
playerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميkindstringإلزاميالقيم:
"registered","guest"sidestring | nullإلزاميالقيم:
"A","B"votesnumberإلزاميphotoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
viewerobjectإلزاميplayerIdstringإلزاميattendedbooleanإلزاميcanVotebooleanإلزاميvotestring | nullإلزاميThe playerId you voted for
Vote for the man of the match (people who played)
يحتاج إلى جلسة
One vote each; voting again changes it. Open once the score is in, until 7 days after kick-off. 403
fields.form = notAttendedwhen you did not play. 409fields.form=noScore,closedorcancelled. 422fields.playerId=selfornotAttended. Errors: 401 signed out; 404 the match does not exist or you are not part of it.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
playerIdstringإلزاميSomeone else who played
data في الاستجابة
matchIdstringإلزاميavailablebooleanإلزاميThe score is in and the match was not cancelled
openbooleanإلزاميVotes can be cast or changed now
closesAtstringإلزاميKick-off plus 7 days (ISO 8601)
totalVotesnumberإلزاميcandidatesobject[]إلزاميEveryone who played: most votes first, then by name
playerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميkindstringإلزاميالقيم:
"registered","guest"sidestring | nullإلزاميالقيم:
"A","B"votesnumberإلزاميphotoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
leadersobject[]إلزاميThe most voted; several on a tie, none before the first vote
playerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميkindstringإلزاميالقيم:
"registered","guest"sidestring | nullإلزاميالقيم:
"A","B"votesnumberإلزاميphotoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
viewerobjectإلزاميplayerIdstringإلزاميattendedbooleanإلزاميcanVotebooleanإلزاميvotestring | nullإلزاميThe playerId you voted for
الفيديو
الوسم Video، 13 نقطة نهايةStart or resume the match video upload
يحتاج إلى جلسة
The video goes straight to the bucket in parts; no bytes pass through this API. 1. POST here with the file's name, size, type and fingerprint (name:size:lastModified). 2. POST …/parts with the part numbers still missing (at most 100 per call) and PUT each 64 MiB slice of the file to its URL; keep the ETag response header. Each link is signed for its part's exact length (the last part holds the rest), so send exactly that slice. Retry failed parts; sign again when the links expire. 3. POST …/complete with every { partNumber, etag }. The analysis starts (status INGESTING). To resume after the app restarts, POST here again with the same fingerprint: the same upload comes back with
uploadedParts. Errors: 404 NOT_FOUND for people outside the match (as if it did not exist); 409 CONFLICT with fields.form scoreFirst (enter the score first), matchCancelled or venueDelivering (the venue is sending the recording); 403 FORBIDDEN with fields.form uploadNotAllowed (only people who played), officialRecording (the venue or an admin delivers the official recording) or replaceNotAllowed (the match has a video; only the organiser, side captains and admins replace it); 422 INVALID with fields.size tooLarge (over 8 GiB), fields.contentType notVideo, or fields.fileName notVideo (an extension other than a video container's, such as .m3u8).اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
fileNamestringإلزاميThe picked file's name, e.g. mac.mp4. An extension other than a video container's (such as .m3u8) is refused
1–255 حرفًا
sizeintegerإلزاميBytes; at most 8 GiB
contentTypestringإلزاميThe file's MIME type; must be video/*
fingerprintstringإلزاميname:size:lastModified of the file. Starting again with the same fingerprint resumes the unfinished upload
1–512 حرفًا
data في الاستجابة
uploadIdstringإلزاميkeystringإلزاميThe object key in the bucket
partSizenumberإلزاميBytes per part (64 MiB); the last part holds the rest
partCountnumberإلزاميuploadedPartsobject[]إلزاميParts the bucket already has (after a resume): upload only the others
partNumbernumberإلزاميetagstringإلزاميsizenumberإلزامي
resumedbooleanإلزاميTrue when this continues an unfinished upload of the same file
Cancel an unfinished upload
يحتاج إلى جلسة
Only the person who started it. Drops its parts from the bucket, or its file when a completion had finished it. 409 uploadCompleted once it is complete. 403 fields.form notYourUpload for anyone but the person who started the upload (and admins).
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميuploadIdstringإلزامي
data في الاستجابة
uploadIdstringإلزاميstatusstringإلزاميالقيم:
"aborted","failed"
Presigned URLs for upload parts
يحتاج إلى جلسة
Links are valid for an hour and accept exactly their part's bytes. 409 uploadClosed when the upload was cancelled or completed. The upload rules are checked again, so a cancelled match (409 matchCancelled) or someone else's video landing first (403 replaceNotAllowed) stops the upload: cancel it with DELETE. 403 fields.form notYourUpload for anyone but the person who started the upload (and admins).
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميuploadIdstringإلزامي
جسم الطلب
partNumbersinteger[]إلزامي1-based part numbers, at most 100 per call
data في الاستجابة
partsobject[]إلزاميpartNumbernumberإلزاميurlstringإلزاميPUT the part's bytes here, then read the ETag response header
expiresAtstringإلزاميISO time; sign again after it
Finish the upload and start the analysis
يحتاج إلى جلسة
Checks the parts and the stored size, then creates the video, the analysis and its first job in one step. Calling it again returns the same result. 409 with fields.form partsMissing, partMismatch or sizeMismatch: upload the missing parts (resume) and complete again. 403 replaceNotAllowed when someone else's video became the match's first: this upload is then closed and its file deleted. 403 fields.form notYourUpload for anyone but the person who started the upload (and admins).
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميuploadIdstringإلزامي
جسم الطلب
partsobject[]إلزاميpartNumberintegerإلزاميمن 1 إلى 10000
etagstringإلزاميThe ETag header of the part's PUT response
1–200 حرفًا
data في الاستجابة
uploadIdstringإلزاميvideoAssetIdstring | nullإلزاميanalysisIdstring | nullإلزاميstatusstring | nullإلزاميالقيم:
"INGESTING","NEEDS_PREP","TRACKING","NEEDS_LABELS","COMPUTING","PUBLISHED","FAILED"replacedbooleanإلزاميTrue when this video replaced the match's previous one and its analysis; the previous video's files are deleted, and links issued for it stop working
The match's video and analysis status
يحتاج إلى جلسة
For anyone involved in the match (404 for everyone else). Stages: INGESTING → NEEDS_PREP (managers mark the pitch) → TRACKING → NEEDS_LABELS (who is who) → COMPUTING → PUBLISHED, or FAILED. Poll every few seconds while the status is INGESTING, TRACKING or COMPUTING.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
معاملات الاستعلام
uploadedBytesbooleanاختياريtrue to fill pendingUpload.uploadedBytes (how much of your unfinished upload the bucket holds). It asks the bucket, so leave it out when polling the analysis
data في الاستجابة
matchIdstringإلزاميmatchStatusstringإلزاميالقيم:
"planned","played","cancelled"scoreStatestringإلزاميUploads open once the score is entered
القيم:
"none","entered","confirmed"recordingstringإلزاميofficial: the pitch's camera records the match and the venue (or an admin) delivers the video
القيم:
"upload","official"analysisobject | nullإلزاميidstringإلزاميstatusstringإلزاميالقيم:
"INGESTING","NEEDS_PREP","TRACKING","NEEDS_LABELS","COMPUTING","PUBLISHED","FAILED"progressnumberإلزامي0..1 within the current stage
errorstring | nullإلزاميfailedStagestring | nullإلزاميThe stage that failed, when status is FAILED
القيم:
"ingest","track","stats"updatedAtstringإلزامي
videoobject | nullإلزاميidstringإلزاميreadybooleanإلزاميThe playable copy exists: GET /video gives a link
fileNamestringإلزاميsizeBytesnumberإلزاميuploadedBystringإلزاميThe person who uploaded it, or the venue that delivered it (byVenue)
byVenuebooleanإلزاميThe venue delivered it from its pitch admin panel (ADR-005)
uploadedAtstring | nullإلزاميdurationSnumber | nullإلزاميwidthnumber | nullإلزاميheightnumber | nullإلزامي
pendingUploadobject | nullإلزاميThe caller's own unfinished upload; start again with the same fingerprint to resume it
uploadIdstringإلزاميfileNamestringإلزاميsizeBytesnumberإلزاميfingerprintstringإلزاميstartedAtstringإلزاميuploadedBytesnumber | nullإلزاميBytes the bucket holds; null unless asked with ?uploadedBytes=true (or when the bucket no longer knows the upload)
venueDeliveryobject | nullإلزاميThe venue's part in this match's recording, when it has a pitch admin panel
venueNamestringإلزاميstatestringإلزاميdelivering: the venue is uploading the recording now; possible: its official camera records this pitch and it can send the recording
القيم:
"delivering","possible"
canobjectإلزاميuploadbooleanإلزاميMay start the first upload now
replacebooleanإلزاميMay upload a new video over the existing one
managebooleanإلزاميOrganiser, side captains and admins: prep, labels, retry
watchbooleanإلزاميrejectbooleanإلزاميManagers may send back a recording the venue delivered ("Bu bizim maçımız değil") until labelling starts: POST …/video/reject
Retry the failed stage
يحتاج إلى جلسة
Organiser, side captains and admins (403 retryNotAllowed for other people in the match, 404 outside it). The job's payload is rebuilt from the analysis, never copied from the failed job. 409 notFailed unless the status is FAILED; 409 alreadyQueued.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
analysisIdstringإلزاميstatusstringإلزاميالقيم:
"INGESTING","NEEDS_PREP","TRACKING","NEEDS_LABELS","COMPUTING","PUBLISHED","FAILED"kindstringإلزاميالقيم:
"ingest","track","stats"
A link to watch the match video
يحتاج إلى جلسة
For people who attended and managers (403 watchNotAllowed for other people in the match, 404 outside it); 404 notReady until the playable copy exists. Every link issued is written to the audit log.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
urlstringإلزاميA presigned GET link to the 720p copy, valid for 2 hours; supports range requests
expiresAtstringإلزاميdurationSnumber | nullإلزاميwidthnumber | nullإلزاميheightnumber | nullإلزامي
Send back a recording the venue delivered
يحتاج إلى جلسة
"Bu bizim maçımız değil" (ADR-005): for the organiser, side captains and admins (403 rejectNotAllowed for other people in the match, 404 outside it), until labelling starts. The video, its analysis and files are deleted, and the match waits for the venue's recording again. Audited as video.reject. 409 with fields.form noVideo, notVenueDelivery (people uploaded it) or labellingStarted.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
matchIdstringإلزاميanalysisIdstringإلزاميuploadIdstringإلزامي
Who is who on the video, and the goals
يحتاج إلى جلسة
For people who attended and the organiser, side captains and admins (403 watchNotAllowed for others in the match, 404 for everyone else). Never cached: labels and goal decisions change it. A new processing run may reuse numeric track ids. Match this response's generation to the replay or camera metadata, and request files with ?generation=<generation>. A 409 replayChanged means reload both names and metadata before drawing new positions. Draw it with the layer files (GET /layer/index.json, then /layer/chunk_<n>.json, see the Kim kim? tag): each box
[trackId, x0, y0, x1, y1]is in the index's width × height pixels, so scale it to the displayed video (with its letterboxing). A foot marker goes at the box's bottom centre in the side's colour (orange for A, blue for B), withtracks[trackId].nameabove it once labelled; goalkeepers (keeper, or the index'skeepers) get a marker of their own. The ball is a frame'sb([x, y, 1 when estimated]);o(or the index's possessionspells) is who has it. The index'spassesgo from passer to receiver between theirstartandendframes (completedfalse: the ball was lost; null: not known, one of the two teams is unknown). The frame on screen is round(mediaTime × fps). Show each confirmed goal's banner for a few seconds from its frame.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
matchIdstringإلزاميanalysisIdstring | nullإلزاميgenerationstring | nullإلزاميCommitted tracking run; must match replay/camera metadata. Pass it as the generation query to layer files, and reload names plus metadata on 409 replayChanged
statusstring | nullإلزاميالقيم:
"INGESTING","NEEDS_PREP","TRACKING","NEEDS_LABELS","COMPUTING","PUBLISHED","FAILED"readybooleanإلزاميCommitted tracking exists (including the previous saved result during a rerun); false before the first result
fpsnumber | nullإلزاميThe video's frame rate: the frame on screen is round(mediaTime × fps)
durationSnumber | nullإلزاميkickoffSnumberإلزاميKick-off in seconds into the video; minutes count from it
endSnumber | nullإلزاميExclusive match end in source-video seconds, from the same committed generation as the names. Bound playback to kickoffS..endS; null before the match window is marked
sidesobjectإلزاميThe sides' labels
AstringإلزاميBstringإلزامي
finalScoreobjectإلزاميThe score entered after the match; null per side before it is entered
Anumber | nullإلزاميBnumber | nullإلزامي
canobjectإلزاميmanagebooleanإلزاميOrganiser, side captains and admins: they also get the candidates
tracksmap<string, object>إلزاميTrack id of the layer (the tracklet's ordinal) -> who it is. Tracks with nothing known are left out: draw them without a side
playersmap<string, object>إلزاميPlayer id -> full and short name and side in the match, for the players the tracks name
hiddennumber[]إلزاميTrack ids labelled not a player (referees, spectators): leave them out
goalsobject[]إلزاميConfirmed goals in video order: show a banner at each and mark them on the timeline
idstringإلزاميatSnumberإلزاميSeconds into the match video
framenumber | nullإلزاميThe proxy's frame: frame = round(mediaTime × fps)
minutenumberإلزاميMatch minute from kick-off: 0:00–0:59 is the 1st
sidestring | nullإلزاميThe side credited with the goal (an own goal counts for the side that did not put it in)
القيم:
"A","B"ownGoalbooleanإلزاميscorerobject | nullإلزاميWho scored; for an own goal the opponent who put it in; null when nobody was listed on that side
playerIdstringإلزاميnamestringإلزامي
assistobject | nullإلزاميplayerIdstringإلزاميnamestringإلزامي
scoreobjectإلزاميThe score right after this goal
AnumberإلزاميBnumberإلزامي
candidatesobject[]إلزاميFor managers: goals the analysis found that wait for "Bu gol mü?" (POST /goals/{goalId}); empty for everyone else
idstringإلزاميatSnumberإلزاميframenumber | nullإلزاميminutenumberإلزامي
Saved top-down replay and camera recordings
يحتاج إلى جلسة
For people who attended and match managers; 403 watchNotAllowed for other people in the match, 404 outside it. Playback reads saved results and never starts processing. index is null and ready false until the worker has committed a replay. Camera ids are recording ids within this analysis. Names are read separately from GET /overlay, which applies player visibility. Coordinates are pitch metres in the calibration's fixed orientation, never mirrored at half-time.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
matchIdstring (uuid)إلزاميanalysisIdstring (uuid) | nullإلزاميgenerationstring | nullإلزاميdemoAliasesbooleanإلزاميreadybooleanإلزاميindexobject | nullإلزاميversionnumberإلزاميالقيم:
1fpsnumberإلزاميstrideintegerإلزاميstart_frameintegerإلزامي0 على الأقل
end_frameintegerإلزامي0 على الأقل
chunk_framesintegerإلزاميchunksinteger[]إلزاميpitchobjectإلزاميlength_mnumberإلزاميwidth_mnumberإلزاميmeasuredbooleanإلزامي
camerasobject[]إلزاميgenerationstring | nullإلزاميidstring (uuid)إلزاميordinalintegerإلزاميlabelstringإلزاميoffsetSnumberإلزاميMaster time = camera video time + offsetS; camera layer frames use this camera's fps
fpsnumber | nullإلزاميdurationSnumber | nullإلزاميwidthnumber | nullإلزاميheightnumber | nullإلزاميreadybooleanإلزاميThe playable video exists
layerReadybooleanإلزاميThe camera's saved position layer exists
calibrationQualitystring | nullإلزاميالقيم:
"GOOD","WEAK"calibrationRmsPxnumber | nullإلزامي
A saved top-down replay file
يحتاج إلى جلسة
For people who attended and match managers; 403 watchNotAllowed for other people in the match, 404 outside it. Playback reads saved results and never starts processing. name is index.json or chunk_<n>.json from index.chunks. Master frames use index.fps; p entries are [globalTrackOrdinal,xMetres,yMetres], b is [xMetres,yMetres,interpolated0or1] when seen. Missing observations stay missing. Use /overlay for current names and hidden track ids. Private ETag revalidation; 404 notReady for missing files. A missing or stale generation returns 409 replayChanged: refresh metadata and identity mapping together.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميnamestringإلزامي
معاملات الاستعلام
generationstringإلزاميCommitted run from GET /replay; must match /overlay.generation before drawing names
Watch one synchronized camera recording
يحتاج إلى جلسة
For people who attended and match managers; 403 watchNotAllowed for other people in the match, 404 outside it. Playback reads saved results and never starts processing. Returns a two-hour presigned link and records its issue in the audit log. 404 when the camera is not part of this match's analysis.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميcameraIdstringإلزامي
data في الاستجابة
urlstring (uri)إلزاميexpiresAtstringإلزاميdurationSnumber | nullإلزاميwidthnumber | nullإلزاميheightnumber | nullإلزامي
One camera's saved position layer
يحتاج إلى جلسة
For people who attended and match managers; 403 watchNotAllowed for other people in the match, 404 outside it. Playback reads saved results and never starts processing. name is index.json or chunk_<n>.json. Uses the LayerIndex/LayerChunk format and camera-local frames, but track ids are the analysis's global ordinals, shared with /overlay and /replay. Private ETag revalidation.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميcameraIdstringإلزاميnamestringإلزامي
معاملات الاستعلام
generationstringإلزاميCommitted run from the camera metadata; stale/missing returns 409 replayChanged
تحديد خطوط الملعب
الوسم Prep، نقطتا نهايةWhat marking the pitch needs
يحتاج إلى جلسة
For the organiser, side captains and admins (403 FORBIDDEN with fields.form prepNotAllowed for other people in the match, 404 outside it). Every call issues new links and writes them to the audit log. Landmark ids: corner_0_0 (top-left on the frame), corner_L_0, corner_L_W, corner_0_W, halfway_0, halfway_W, centre_spot, goal_0_post_a/b, goal_L_post_a/b, and with a penalty area box_0_* and box_L_*. x = 0 is the left goal, y = 0 the far touchline. With
prefill.sourcecamera andprefill.qualityGOOD or WEAK, show the camera's lines over the new frame and ask whether they still fit: if so, POST the prefilled clicks and lambda as they are (one tap). Links are issued only while the pitch can be marked (can.saveorcan.redo); otherwiseimageandvideoare null.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
matchIdstringإلزاميmatchCancelledbooleanإلزاميanalysisobject | nullإلزاميidstringإلزاميstatusstringإلزاميالقيم:
"INGESTING","NEEDS_PREP","TRACKING","NEEDS_LABELS","COMPUTING","PUBLISHED","FAILED"updatedAtstringإلزامي
readybooleanإلزاميThe median frame exists, so the pitch can be marked
imageobject | nullإلزاميThe empty-pitch frame clicks are made on; click coordinates are its pixels
urlstringإلزاميA presigned GET link to median.jpg, valid for 2 hours
widthnumberإلزاميheightnumberإلزاميexpiresAtstringإلزامي
videoobject | nullإلزاميFor finding kick-off, half-time and the end
urlstringإلزاميA presigned GET link to the 720p copy (range requests work)
durationSnumber | nullإلزاميfpsnumber | nullإلزاميexpiresAtstringإلزامي
pitchobjectإلزاميlengthMnumberإلزاميwidthMnumberإلزاميgoalWidthMnumberإلزاميmeasuredbooleanإلزاميpenaltyAreaobject | nullإلزاميwidthMnumberإلزاميdepthMnumberإلزامي
sourcestringإلزاميWhere the sizes come from: this match's saved prep, the venue's pitch, the camera's last calibration, or 40 x 25 m defaults
القيم:
"analysis","pitch","camera","default"pitchNamestring | nullإلزامي
landmarksobject[]إلزاميidstringإلزاميالقيم:
"corner_0_0","corner_L_0","corner_L_W","corner_0_W","halfway_0","halfway_W","centre_spot","goal_0_post_a","goal_0_post_b","goal_L_post_a","goal_L_post_b","box_0_line_a","box_0_front_a","box_0_front_b","box_0_line_b","box_L_line_a","box_L_front_a","box_L_front_b","box_L_line_b"pitchany[]إلزاميMetres: x along the length from the left goal, y across from the far touchline
cameraobject | nullإلزاميThe camera a save writes to; null until a pitch without one gets its first
idstringإلزاميlabelstringإلزاميofficialbooleanإلزامي
prefillobject | nullإلزاميClicks to start from; none from a camera calibrated on a video of another shape
sourcestringإلزامي"analysis": this match was marked already; "camera": the camera's last calibration, so ask whether the lines still fit
القيم:
"analysis","camera"calibrationIdstringإلزاميclicksobject[]إلزاميidstringإلزاميالقيم:
"corner_0_0","corner_L_0","corner_L_W","corner_0_W","halfway_0","halfway_W","centre_spot","goal_0_post_a","goal_0_post_b","goal_L_post_a","goal_L_post_b","box_0_line_a","box_0_front_a","box_0_front_b","box_0_line_b","box_L_line_a","box_L_front_a","box_L_front_b","box_L_line_b"imageany[]إلزامي
lambdanumberإلزاميrmsPxnumber | nullإلزاميHow far off these clicks are on this frame with the pitch sizes above and the saved lens term; null when they give no fit
qualitystring | nullإلزاميThe same fit's gate: ask whether the lines still fit only for GOOD or WEAK; otherwise let the person mark the pitch, starting from these clicks
القيم:
"GOOD","WEAK","REJECT"savedAtstringإلزاميcameraLabelstring | nullإلزامي
windowobject | nullإلزاميThe saved match window, if any
kickoffSnumberإلزاميhalftimeSnumber | nullإلزاميendSnumberإلزاميaDefendsstringإلزاميالقيم:
"near","far"switchedEndsbooleanإلزامي
areasany[][][]إلزاميThe venue's areas to ignore on this frame (pixels of
image), from its camera set-up: draw them read-only. Saving carries them into the match's calibration; the worker drops people outside the lines and ball runs that stay inside themneedsScorebooleanإلزاميThe match has no score yet: marking the pitch waits for it (a venue may deliver the recording first).
can.saveandcan.redoare false until thencanobjectإلزاميsavebooleanإلزاميThe analysis waits for prep (NEEDS_PREP) and the score is in
redobooleanإلزاميTracking started already: saving again needs redo: true and starts tracking over
Save the pitch marking and start tracking
يحتاج إلى جلسة
The server fits the camera again (the same code as the web preview) and, in one transaction, stores the calibration on the match's camera (a pitch without one gets "Kamera 1"), makes it the camera's active calibration, stores the window, moves the analysis to TRACKING and queues tracking. 422 INVALID with fields.clicks: tooFew (fewer than 6 different landmarks), collinear, oneHalf (all in one half), noFit, rejected (more than 4 px off on average), unknownLandmark (box_* needs a penalty area), duplicate or outsideImage; fields like pitch.widthM (outOfRange, widerThanLong, goalTooWide, penaltyWidth, penaltyDepth) and window.endS (required, outOfVideo, beforeKickoff, outsideMatch). 409 CONFLICT with fields.form scoreFirst (enter the score first: labelling and stats need the roster and the goals), noVideo, notReady (still ingesting), matchCancelled, alreadyPrepared (tracking started; send redo: true to start over, which cancels the running stage) or alreadyQueued. For an official-camera match whose camera the venue set up, the venue's calibration is the one-tap prefill, and its areas to ignore move into this match's frame through both fits.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
clicksobject[]إلزاميAt least 6 different landmarks, in both halves of the pitch
idstringإلزاميThe landmark, e.g. corner_0_0 (x = 0 is the left goal on the frame, y = 0 the far touchline)
القيم:
"corner_0_0","corner_L_0","corner_L_W","corner_0_W","halfway_0","halfway_W","centre_spot","goal_0_post_a","goal_0_post_b","goal_L_post_a","goal_L_post_b","box_0_line_a","box_0_front_a","box_0_front_b","box_0_line_b","box_L_line_a","box_L_front_a","box_L_front_b","box_L_line_b"imageany[]إلزاميWhere it is on the median frame, in its pixels: [x, y] from the top-left corner
lambdanumber | nullاختياريThe lens term; leave it out to search the best one (the browser preview does the same)
من -0.6 إلى 0.6
pitchobjectإلزاميlengthMnumberإلزاميGoal line to goal line, 15-110 m
widthMnumberإلزاميTouchline to touchline, 10-75 m, not more than the length
goalWidthMnumberإلزاميBetween the posts, 1-7.32 m
measuredbooleanاختياريThe sizes were tape-measured
الافتراضي:
falsepenaltyAreaobject | nullاختياريOnly when the pitch has penalty areas marked; enables the box_* landmarks
الافتراضي:
nullwidthMnumberإلزاميAcross the pitch; wider than the goal
depthMnumberإلزاميFrom the goal line
windowobjectإلزاميkickoffSnumberإلزاميKick-off, in seconds of the video
halftimeSnumber | nullاختياريStart of the break; null when there was none
الافتراضي:
nullendSnumberإلزاميThe final whistle, in seconds of the video
aDefendsstringإلزاميThe goal side A defends in the first half: "near" is x = 0 (the left goal on the frame), "far" is x = length
القيم:
"near","far"switchedEndsbooleanاختياريThe sides switched ends at half-time (needs halftimeS)
الافتراضي:
false
redobooleanاختياريMark the pitch again after tracking started: cancels the running stage and tracks again
data في الاستجابة
analysisIdstringإلزاميstatusstringإلزاميTRACKING
القيم:
"INGESTING","NEEDS_PREP","TRACKING","NEEDS_LABELS","COMPUTING","PUBLISHED","FAILED"calibrationIdstringإلزاميcameraIdstring | nullإلزاميjobIdstringإلزاميrmsPxnumberإلزاميReprojection error in 1080p-equivalent pixels
qualitystringإلزاميGOOD up to 2 px; WEAK up to 4 px (heatmaps only)
القيم:
"GOOD","WEAK"lambdanumberإلزاميredobooleanإلزامي
من هو من
الوسم Kim kim?، 6 نقاط نهايةWho is who: the roster and the tracked people
يحتاج إلى جلسة
For people who attended and the organiser, side captains and admins (403 watchNotAllowed for others in the match, 404 for everyone else). Every tracklet is one person the tracker followed for a while. Draw them over the video with the layer files (GET /layer/index.json, then /layer/chunk_<n>.json): a box's track id is the tracklet's ordinal. A fast way to label: the roll call first (rollCall), then accept the safe suggestions, then review the rest one at a time, lowest margin first (the order the app's Kontrol step uses: margin, then p, then the longer tracklet, then the earlier one).
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
matchIdstringإلزاميanalysisIdstring | nullإلزاميstatusstring | nullإلزاميالقيم:
"INGESTING","NEEDS_PREP","TRACKING","NEEDS_LABELS","COMPUTING","PUBLISHED","FAILED"readybooleanإلزاميThe tracker's results are in; false before tracking finished (tracklets is empty)
sidesobjectإلزاميThe sides' labels
AstringإلزاميBstringإلزامي
videoobjectإلزاميfpsnumber | nullإلزاميframeCountnumber | nullإلزاميwidthnumber | nullإلزاميheightnumber | nullإلزاميdurationSnumber | nullإلزاميreadybooleanإلزاميGET /video gives a link to the proxy
canobjectإلزاميmanagebooleanإلزاميlabelbooleanإلزاميMay change labels now
versionnumberإلزاميThe number of decisions so far
changedSincePublishbooleanإلزاميLabels, or the score card (who played, on which side, the goals), changed after the stats were worked out: finish again to update them. A score save clears labels that name someone who no longer played
rosterFromRsvpbooleanإلزاميAttendance was not entered; the roster is the people who said yes
safeMarginnumberإلزاميThe margin accept-suggestions uses by default
rosterobject[]إلزاميThe players who attended: side A, side B, then without a side
playerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
kindstringإلزاميالقيم:
"registered","guest"sidestring | nullإلزاميالقيم:
"A","B"keeperbooleanإلزاميPlays in goal (positions include goalkeeper)
trackletsobject[]إلزاميidstringإلزاميordinalnumberإلزاميThe tracker's id: the track id in the video layer's boxes
startFramenumberإلزاميFrames of the proxy video: frame = round(mediaTime × video.fps)
endFramenumberإلزاميInclusive
sideGuessstring | nullإلزاميThe side its shirt colour matched
القيم:
"A","B"sideConfnumber | nullإلزاميkeeperGuessbooleanإلزاميinsideRationumberإلزاميShare of the time inside the pitch
labelstringإلزاميالقيم:
"unlabeled","player","not_player","mixed"playerIdstring | nullإلزاميsourcestring | nullإلزامي"user" or "suggestion" once labelled
suggestionobject | nullإلزاميFor people who may label, on unlabelled tracklets
playerIdstringإلزاميpnumberإلزاميThe player's probability, 0..1 (shown as "Ali? %82")
marginnumberإلزاميp minus the runner-up's probability (another player or nobody on the roster)
stripbooleanإلزاميA crop strip exists: GET /tracklets/{trackletId}/strip
matchWindowobject | nullإلزاميKick-off to the final whistle in frames (the span of the per-player timelines); null before tracking
startFramenumberإلزاميendFramenumberإلزاميhalftimeFramenumber | nullإلزامي
rollCallobject[]إلزاميRoll call (Yoklama), for people who may label: a frame soon after kick-off where the number of people on the pitch is closest to the number of players and they stand well apart (and one after half-time when the ends were switched). Label each box's tracklet with POST /labels; continuity then carries the labels on to the suggestions. Empty without a video layer
periodnumberإلزامي1 after kick-off; 2 after half-time, only when the sides switched ends
القيم:
1,2framenumberإلزاميShow this frame paused: seek to (frame + 0.5) / video.fps
widthnumberإلزاميheightnumberإلزاميpeopleobject[]إلزاميEvery box on the frame
numbernumberإلزاميThe box's number on the frame, 1… from left to right
trackletIdstringإلزاميordinalnumberإلزاميboxany[]إلزامي[x0, y0, x1, y1] in the layer's pixel space (width x height)
A tracklet's crop strip
يحتاج إلى جلسة
For people who attended and the organiser, side captains and admins (403 watchNotAllowed for others in the match, 404 for everyone else). A 240 x 64 WebP: five 48 x 64 crops of the person over the tracklet's life, oldest first, for telling people apart. Strips are pictures of people: the answer may be kept by the viewer's own client (private, one hour) but never by a shared cache, and other sites may not embed it (Cross-Origin-Resource-Policy: same-origin); send If-None-Match with the ETag to get 304 while unchanged. 404 noStrip when the tracker left none (tracklet.strip is false), 404 trackletNotFound for a tracklet of another match.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميtrackletIdstringإلزامي
معاملات الاستعلام
loadstringاختياريAny id (8-64 letters, digits, - or _) shared by every strip one screen shows: access is audited once per load (without it, once every two hours)
Label a tracklet
يحتاج إلى جلسة
For the organiser, side captains and admins (403 labelNotAllowed for others in the match, 404 for everyone else). Labels change while the analysis is NEEDS_LABELS or PUBLISHED (then finish again to update the stats), or FAILED in the stats stage (failedStage stats: fix labels, then finish again); 409 labelsLocked while the stats are worked out or after another stage failed, 409 notReady before tracking finished. label player needs playerId, a player who attended (422 notInRoster otherwise); not_player is a referee, coach or spectator; mixed is two people merged into one track; unlabeled clears the label. With unlabeled and a playerId (rejecting a suggestion) the tracklet is unlabelled afterwards, its label cleared if it had one, and that player is no longer suggested for it until its label changes. Every change appends a decision to the tracklet's history; the same label again changes nothing. The answer carries the suggestions that changed and the version it started from.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
trackletIdstring (uuid)إلزاميlabelstringإلزاميالقيم:
"player","not_player","mixed","unlabeled"playerIdstring (uuid) | nullاختياريThe player for label player; with label unlabeled, a player this tracklet is not (rejects that suggestion)
sourcestringاختياري"suggestion" when the person accepted the suggestion shown for this tracklet
القيم:
"user","suggestion"onlyIfUnlabeledbooleanاختياريRefuse a conflicting existing label instead of replacing it; an identical label is still a no-op
data في الاستجابة
trackletobjectإلزاميidstringإلزاميlabelstringإلزاميالقيم:
"unlabeled","player","not_player","mixed"playerIdstring | nullإلزاميsourcestring | nullإلزامي
previousVersionnumberإلزاميThe version this change started from; when it differs from yours, someone else labelled too: GET /tracklets again
versionnumberإلزاميsuggestionsobject[]إلزاميThe suggestions that changed, and always the labelled tracklet's own (null when it has none)
trackletIdstringإلزاميsuggestionobject | nullإلزاميNull where the suggestion went away
playerIdstringإلزاميpnumberإلزاميThe player's probability, 0..1 (shown as "Ali? %82")
marginnumberإلزاميp minus the runner-up's probability (another player or nobody on the roster)
Accept every safe suggestion
يحتاج إلى جلسة
For the organiser, side captains and admins (403 labelNotAllowed for others in the match, 404 for everyone else). Labels change while the analysis is NEEDS_LABELS or PUBLISHED (then finish again to update the stats), or FAILED in the stats stage (failedStage stats: fix labels, then finish again); 409 labelsLocked while the stats are worked out or after another stage failed, 409 notReady before tracking finished. Labels each tracklet whose suggestion has at least minMargin (default 0.5) as that player, one decision each, all in one step. The body may be left out.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
minMarginnumberاختياريAccept suggestions with at least this margin; default 0.5
من 0.3 إلى 1
data في الاستجابة
acceptednumberإلزاميtrackletsobject[]إلزاميidstringإلزاميlabelstringإلزاميالقيم:
"unlabeled","player","not_player","mixed"playerIdstring | nullإلزاميsourcestring | nullإلزامي
previousVersionnumberإلزاميversionnumberإلزاميsuggestionsobject[]إلزاميtrackletIdstringإلزاميsuggestionobject | nullإلزاميNull where the suggestion went away
playerIdstringإلزاميpnumberإلزاميThe player's probability, 0..1 (shown as "Ali? %82")
marginnumberإلزاميp minus the runner-up's probability (another player or nobody on the roster)
Finish labelling and work out the stats
يحتاج إلى جلسة
For the organiser, side captains and admins (403 labelNotAllowed for others in the match, 404 for everyone else). Labels change while the analysis is NEEDS_LABELS or PUBLISHED (then finish again to update the stats), or FAILED in the stats stage (failedStage stats: fix labels, then finish again); 409 labelsLocked while the stats are worked out or after another stage failed, 409 notReady before tracking finished. Moves the analysis to COMPUTING and queues the stats job in one step; poll GET /analysis until PUBLISHED. 409 nothingLabelled when no tracklet is a player yet; 409 playersMissing when attended players have no tracklet (the roster entries without one): send allowMissing true to go ahead. The body may be left out.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
allowMissingbooleanاختياريGo ahead although some attended players have no tracklet
data في الاستجابة
analysisIdstringإلزاميstatusstringإلزاميالقيم:
"COMPUTING"jobIdstringإلزاميlabelledPlayersnumberإلزاميmissingPlayersnumberإلزاميAttended players without a tracklet (allowed with allowMissing)
A video layer file
يحتاج إلى جلسة
For people who attended and the organiser, side captains and admins (403 watchNotAllowed for others in the match, 404 for everyone else). name is index.json or chunk_<n>.json; the format is LayerIndex and LayerChunk in packages/contracts/src/pipeline.ts: index.json gives fps, stride, width and height (the boxes' pixel space) and the chunk numbers; chunk n holds frames [n × chunk_frames, (n + 1) × chunk_frames) as { frames: { "<frame>": { p: [[trackId, x0, y0, x1, y1], …], b?: [x, y, interpolated], o?: trackId } } }. The JSON is returned as is (no { data } envelope). The files are rewritten when the pitch is marked again, so keep them with their ETag and send If-None-Match: 304 while unchanged. 404 notReady before tracking finished or for a chunk that does not exist.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميnamestringإلزامي
معاملات الاستعلام
generationstringاختياريOptional committed worker run from GET /replay. When supplied, reads the immutable layer for that run and returns 409 replayChanged if stale; use with an overlay bearing the same generation.
تقرير المباراة
الوسم Report، 5 نقاط نهايةThe match report
يحتاج إلى جلسة
Until the video analysis is published,
readyis false and the body says where the video stands (anyone involved in the match). Once published: highlights, confirmed goals, the man-of-the-match tally with the analysis's suggestion, heatmaps, passes and per-player numbers. For people who played (attended) and the match's managers. Others involved in the match get 403 FORBIDDEN with fields.form reportNotAllowed once the report is published; people outside the match get 404. Each player's numbers follow their visibility setting (visible) and their tier. Play the highlights with GET …/highlights.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
readybooleanإلزاميالقيم:
false,truematchIdstringإلزاميmatchStatusstringاختياريالقيم:
"planned","played","cancelled"scoreStatestringاختياريالقيم:
"none","entered","confirmed"recordingstringاختياريالقيم:
"upload","official"analysisobject | nullاختياريNull until a video came in
idstringإلزاميstatusstringإلزاميالقيم:
"INGESTING","NEEDS_PREP","TRACKING","NEEDS_LABELS","COMPUTING","PUBLISHED","FAILED"progressnumberإلزامي0..1 within the current stage
canobjectإلزاميmanagebooleanإلزاميuploadbooleanإلزاميMay upload the match video
analysisIdstringاختياريpublishedAtstring | nullاختياريkickoffSnumberاختياريKick-off in seconds into the video
pitchobjectاختياريMetres
lengthnumberإلزاميwidthnumberإلزامي
sidesobjectاختياريAobjectإلزاميlabelstringإلزاميgoalsnumber | nullإلزاميThe entered score; null until then
Bobjectإلزاميlabelstringإلزاميgoalsnumber | nullإلزامي
videoobjectاختياريreadybooleanإلزاميdurationSnumber | nullإلزاميwidthnumber | nullإلزاميheightnumber | nullإلزامي
highlightsobject[]اختياريidstringإلزاميkindstringإلزاميالقيم:
"goal","chance","save"startSnumberإلزاميPlay the match video from here …
endSnumberإلزامي… to here (seconds)
minutenumberإلزاميsidestring | nullإلزاميالقيم:
"A","B"goalobject | nullإلزاميGoal highlights: scorer and assist once a manager confirmed the goal; rejected candidates are left out
idstringإلزاميstatusstringإلزاميالقيم:
"candidate","confirmed"ownGoalbooleanإلزاميscorerobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
assistobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
goalsobject[]اختياريConfirmed goals in match order
idstringإلزاميstatusstringإلزاميالقيم:
"candidate","confirmed","rejected"sourcestringإلزاميauto: found in the video; user: added by hand
القيم:
"auto","user"sidestring | nullإلزاميThe side credited with the goal (an own goal counts for the side that did not put it in)
القيم:
"A","B"atSnumberإلزاميSeconds into the match video
minutenumberإلزاميMatch minute from kick-off: 0:00–0:59 is the 1st
clipobjectإلزاميThe stretch of video to play: 8 s before the goal to 4 s after
startSnumberإلزاميendSnumberإلزامي
ownGoalbooleanإلزاميscorerobject | nullإلزاميFor candidates the analysis's best guess; for decided goals who scored (null when nobody was listed on that side)
playerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
assistobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
confidencenumber | nullإلزاميThe analysis's confidence in a candidate, 0..1
optionsobjectإلزاميEveryone the analysis considered, best first
scorerobject[]إلزاميassistobject[]إلزامي
decidedByobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
decidedAtstring | nullإلزامي
reviewobjectاختياريcandidatesnumberإلزاميGoal candidates waiting for a manager's decision
tallyobjectإلزاميConfirmed goals per side
AnumberإلزاميBnumberإلزامي
mismatchbooleanإلزاميThe score is in and the confirmed goals do not add up to it
motmobjectاختياريtotalVotesnumberإلزاميvotesobject[]إلزاميplayerIdstringإلزاميdisplayNamestringإلزاميsidestring | nullإلزاميالقيم:
"A","B"votesnumberإلزامي
leadersobject[]إلزاميThe most voted; several on a tie
playerIdstringإلزاميdisplayNamestringإلزاميsidestring | nullإلزاميالقيم:
"A","B"votesnumberإلزامي
suggestedobject | nullإلزاميThe analysis's pick: the highest rating you may see
playerIdstringإلزاميdisplayNamestringإلزاميsidestring | nullإلزاميالقيم:
"A","B"ratingnumberإلزاميphotoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
myVotestring | nullإلزاميThe player you voted for, while that vote counts (votes are cast with POST /api/v1/matches/{id}/motm)
playersobject[]اختياريplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميsidestring | nullإلزاميالقيم:
"A","B"isMebooleanإلزاميvisiblebooleanإلزاميFalse when the player's visibility setting hides their numbers from you; then every number is null
photoobject | nullإلزاميTheir profile photo, under the same rule as the numbers
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
tierstring | nullإلزاميA: full numbers; B (partial): minutes and the heatmap; C (not enough data): nothing
القيم:
"A","B","C"minutesnumber | nullإلزاميdistanceMnumber | nullإلزاميEstimated, tier A at a believable pace (40–140 m/min) only
metersPerMinnumber | nullإلزاميratingnumber | nullإلزامي0–10, tier A
touchesnumber | nullإلزاميpassesnumber | nullإلزاميpassesCompletednumber | nullإلزاميcompletionnumber | nullإلزاميCompleted passes as a share of passes, 0..1
shotsnumber | nullإلزاميgoalsnumberإلزاميConfirmed goals; own goals count for nobody
assistsnumberإلزاميavgobject | nullإلزاميAverage position on a unit pitch, attacking left to right (tier A)
unumberإلزاميvnumberإلزامي
heatmapobject | nullإلزاميSeconds per cell, row-major: grid[row * cols + col]. Columns run along the length from the subject's own goal to the goal it attacks (the subject attacks left to right); rows run across, from the far touchline. The ball grid uses side A's direction. Blur with sigma ≈ 1.5 m when drawing.
colsnumberإلزاميrowsnumberإلزاميgridnumber[]إلزامي
heatmapsobjectاختياريsidesobjectإلزاميEach side's grid is the sum of its players' grids, over the players whose numbers you may see (
visible); null when there are noneAobject | nullإلزاميSeconds per cell, row-major: grid[row * cols + col]. Columns run along the length from the subject's own goal to the goal it attacks (the subject attacks left to right); rows run across, from the far touchline. The ball grid uses side A's direction. Blur with sigma ≈ 1.5 m when drawing.
colsnumberإلزاميrowsnumberإلزاميgridnumber[]إلزامي
Bobject | nullإلزاميSeconds per cell, row-major: grid[row * cols + col]. Columns run along the length from the subject's own goal to the goal it attacks (the subject attacks left to right); rows run across, from the far touchline. The ball grid uses side A's direction. Blur with sigma ≈ 1.5 m when drawing.
colsnumberإلزاميrowsnumberإلزاميgridnumber[]إلزامي
ballobject | nullإلزاميSeconds per cell, row-major: grid[row * cols + col]. Columns run along the length from the subject's own goal to the goal it attacks (the subject attacks left to right); rows run across, from the far touchline. The ball grid uses side A's direction. Blur with sigma ≈ 1.5 m when drawing.
colsnumberإلزاميrowsnumberإلزاميgridnumber[]إلزامي
totalsobjectاختياريAobjectإلزاميOver the side's players whose full numbers you see
playersnumberإلزاميpassesnumberإلزاميpassesCompletednumberإلزاميcompletionnumber | nullإلزاميtouchesnumberإلزاميshotsnumberإلزامي
BobjectإلزاميOver the side's players whose full numbers you see
playersnumberإلزاميpassesnumberإلزاميpassesCompletednumberإلزاميcompletionnumber | nullإلزاميtouchesnumberإلزاميshotsnumberإلزامي
Highlights and a link to play them
يحتاج إلى جلسة
Play each highlight from
startStoendSof the linked video, one after another. Empty until the analysis is published. For people who played and managers (403 watchNotAllowed for others in the match, 404 outside it). Every link issued is written to the audit log; links last 2 hours.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
highlightsobject[]إلزاميidstringإلزاميkindstringإلزاميالقيم:
"goal","chance","save"startSnumberإلزاميPlay the match video from here …
endSnumberإلزامي… to here (seconds)
minutenumberإلزاميsidestring | nullإلزاميالقيم:
"A","B"goalobject | nullإلزاميGoal highlights: scorer and assist once a manager confirmed the goal; rejected candidates are left out
idstringإلزاميstatusstringإلزاميالقيم:
"candidate","confirmed"ownGoalbooleanإلزاميscorerobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
assistobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
videoobject | nullإلزاميurlstringإلزاميA presigned GET link to the 720p match video, valid for 2 hours; supports range requests
expiresAtstringإلزاميdurationSnumber | nullإلزاميwidthnumber | nullإلزاميheightnumber | nullإلزامي
Goal candidates and goals
يحتاج إلى جلسة
The analysis leaves one candidate per goal of the score, with a best guess for the scorer and the assist. Managers confirm or reject them (POST …/goals/{goalId}) and add missed goals (POST here). Play a goal's
clipfrom the match video (GET /api/v1/matches/{id}/video). For people who played (attended) and the match's managers. Others involved in the match get 403 FORBIDDEN with fields.form goalsNotAllowed once the report is published; people outside the match get 404.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
readybooleanإلزاميالقيم:
false,truematchIdstringإلزاميmatchStatusstringاختياريالقيم:
"planned","played","cancelled"scoreStatestringاختياريالقيم:
"none","entered","confirmed"recordingstringاختياريالقيم:
"upload","official"analysisobject | nullاختياريNull until a video came in
idstringإلزاميstatusstringإلزاميالقيم:
"INGESTING","NEEDS_PREP","TRACKING","NEEDS_LABELS","COMPUTING","PUBLISHED","FAILED"progressnumberإلزامي0..1 within the current stage
canobjectإلزاميmanagebooleanإلزاميuploadbooleanإلزاميMay upload the match video
analysisIdstringاختياريsidesobjectاختياريAobjectإلزاميlabelstringإلزاميgoalsnumber | nullإلزاميThe entered score; null until then
Bobjectإلزاميlabelstringإلزاميgoalsnumber | nullإلزامي
kickoffSnumberاختياريvideoobjectاختياريreadybooleanإلزاميdurationSnumber | nullإلزاميwidthnumber | nullإلزاميheightnumber | nullإلزامي
candidatesobject[]اختياريidstringإلزاميstatusstringإلزاميالقيم:
"candidate","confirmed","rejected"sourcestringإلزاميauto: found in the video; user: added by hand
القيم:
"auto","user"sidestring | nullإلزاميThe side credited with the goal (an own goal counts for the side that did not put it in)
القيم:
"A","B"atSnumberإلزاميSeconds into the match video
minutenumberإلزاميMatch minute from kick-off: 0:00–0:59 is the 1st
clipobjectإلزاميThe stretch of video to play: 8 s before the goal to 4 s after
startSnumberإلزاميendSnumberإلزامي
ownGoalbooleanإلزاميscorerobject | nullإلزاميFor candidates the analysis's best guess; for decided goals who scored (null when nobody was listed on that side)
playerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
assistobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
confidencenumber | nullإلزاميThe analysis's confidence in a candidate, 0..1
optionsobjectإلزاميEveryone the analysis considered, best first
scorerobject[]إلزاميassistobject[]إلزامي
decidedByobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
decidedAtstring | nullإلزامي
confirmedobject[]اختياريidstringإلزاميstatusstringإلزاميالقيم:
"candidate","confirmed","rejected"sourcestringإلزاميauto: found in the video; user: added by hand
القيم:
"auto","user"sidestring | nullإلزاميThe side credited with the goal (an own goal counts for the side that did not put it in)
القيم:
"A","B"atSnumberإلزاميSeconds into the match video
minutenumberإلزاميMatch minute from kick-off: 0:00–0:59 is the 1st
clipobjectإلزاميThe stretch of video to play: 8 s before the goal to 4 s after
startSnumberإلزاميendSnumberإلزامي
ownGoalbooleanإلزاميscorerobject | nullإلزاميFor candidates the analysis's best guess; for decided goals who scored (null when nobody was listed on that side)
playerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
assistobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
confidencenumber | nullإلزاميThe analysis's confidence in a candidate, 0..1
optionsobjectإلزاميEveryone the analysis considered, best first
scorerobject[]إلزاميassistobject[]إلزامي
decidedByobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
decidedAtstring | nullإلزامي
rejectedobject[]اختياريidstringإلزاميstatusstringإلزاميالقيم:
"candidate","confirmed","rejected"sourcestringإلزاميauto: found in the video; user: added by hand
القيم:
"auto","user"sidestring | nullإلزاميThe side credited with the goal (an own goal counts for the side that did not put it in)
القيم:
"A","B"atSnumberإلزاميSeconds into the match video
minutenumberإلزاميMatch minute from kick-off: 0:00–0:59 is the 1st
clipobjectإلزاميThe stretch of video to play: 8 s before the goal to 4 s after
startSnumberإلزاميendSnumberإلزامي
ownGoalbooleanإلزاميscorerobject | nullإلزاميFor candidates the analysis's best guess; for decided goals who scored (null when nobody was listed on that side)
playerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
assistobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
confidencenumber | nullإلزاميThe analysis's confidence in a candidate, 0..1
optionsobjectإلزاميEveryone the analysis considered, best first
scorerobject[]إلزاميassistobject[]إلزامي
decidedByobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
decidedAtstring | nullإلزامي
rosterobjectاختياريWho can be credited on each side: people who played there and players the analysis identified there
Aobject[]إلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
sidestringإلزاميالقيم:
"A","B"
Bobject[]إلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
sidestringإلزاميالقيم:
"A","B"
tallyobjectاختياريAnumberإلزاميBnumberإلزامي
mismatchbooleanاختياري
Add a goal the video missed
يحتاج إلى جلسة
Organiser, side captains and admins (403 decideNotAllowed). The goal is confirmed at once (source user) and gets a highlight. 409 notPublished until the analysis is published. 422 INVALID with fields: at (required, invalid, afterEnd: past the end of the video), side (required), scorerId (required, notOnSide, notOpponent for own goals), assistId (notOnSide, sameAsScorer, ownGoal).
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
atnumber | stringإلزاميWhen the ball went in, in the match video: seconds as a number, or what people type: "mm:ss" ("23:15"), "h:mm:ss", or whole minutes ("23")
sidestringإلزاميThe side credited with the goal
القيم:
"A","B"scorerIdstring | nullاختياريMust have played for the credited side (for an own goal: for the other side; see
roster). Null only when nobody is listed on that side, e.g. an opponent team that is not on Akıllı Futbol: the goal then counts for the side and for nobodyassistIdstring | nullاختياريPlayed for that side; leave out or null for no assist
ownGoalbooleanاختياري
data في الاستجابة
idstringإلزاميstatusstringإلزاميالقيم:
"candidate","confirmed","rejected"sourcestringإلزاميauto: found in the video; user: added by hand
القيم:
"auto","user"sidestring | nullإلزاميThe side credited with the goal (an own goal counts for the side that did not put it in)
القيم:
"A","B"atSnumberإلزاميSeconds into the match video
minutenumberإلزاميMatch minute from kick-off: 0:00–0:59 is the 1st
clipobjectإلزاميThe stretch of video to play: 8 s before the goal to 4 s after
startSnumberإلزاميendSnumberإلزامي
ownGoalbooleanإلزاميscorerobject | nullإلزاميFor candidates the analysis's best guess; for decided goals who scored (null when nobody was listed on that side)
playerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
assistobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
confidencenumber | nullإلزاميThe analysis's confidence in a candidate, 0..1
optionsobjectإلزاميEveryone the analysis considered, best first
scorerobject[]إلزاميplayerIdstringإلزاميpnumberإلزامي
assistobject[]إلزاميplayerIdstringإلزاميpnumberإلزامي
decidedByobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
decidedAtstring | nullإلزامي
Answer “Bu gol mü?”
يحتاج إلى جلسة
Organiser, side captains and admins (403 decideNotAllowed). confirm credits the goal (left-out fields keep the analysis's guess), reject drops it; a decided goal can be decided again to correct it. Players' goals and assists are recounted at once. 404 with fields.form goalGone when a new analysis replaced the candidate. 422 INVALID with fields: side (required), scorerId (required, notOnSide, notOpponent), assistId (notOnSide, sameAsScorer, ownGoal).
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميgoalIdstringإلزامي
جسم الطلب
decisionstringإلزاميالقيم:
"confirm","reject"sidestringاختياريThe side credited with the goal; left out: the candidate's side
القيم:
"A","B"scorerIdstring | nullاختياريLeft out: the analysis's best guess. Must have played for the credited side (for an own goal: for the other side; see
roster). Null only when nobody is listed on that side, e.g. an opponent team that is not on Akıllı Futbol: the goal then counts for the side and for nobodyassistIdstring | nullاختياريLeft out: the analysis's best guess; null: no assist. Must have played for the credited side; none for own goals
ownGoalbooleanاختياري
data في الاستجابة
idstringإلزاميstatusstringإلزاميالقيم:
"candidate","confirmed","rejected"sourcestringإلزاميauto: found in the video; user: added by hand
القيم:
"auto","user"sidestring | nullإلزاميThe side credited with the goal (an own goal counts for the side that did not put it in)
القيم:
"A","B"atSnumberإلزاميSeconds into the match video
minutenumberإلزاميMatch minute from kick-off: 0:00–0:59 is the 1st
clipobjectإلزاميThe stretch of video to play: 8 s before the goal to 4 s after
startSnumberإلزاميendSnumberإلزامي
ownGoalbooleanإلزاميscorerobject | nullإلزاميFor candidates the analysis's best guess; for decided goals who scored (null when nobody was listed on that side)
playerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
assistobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
confidencenumber | nullإلزاميThe analysis's confidence in a candidate, 0..1
optionsobjectإلزاميEveryone the analysis considered, best first
scorerobject[]إلزاميplayerIdstringإلزاميpnumberإلزامي
assistobject[]إلزاميplayerIdstringإلزاميpnumberإلزامي
decidedByobject | nullإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزاميNull for guests
decidedAtstring | nullإلزامي
الملفات الشخصية
الوسم Profiles، 4 نقاط نهايةA player's profile
لا يحتاج إلى جلسة
Everyone sees the name and the handle. Positions, teams, career numbers, the heatmap and the match history follow the player's visibility: public to everyone; teammates to people who share a team with them, or a match they took part in (answered yes or maybe, or played); private to nobody else. When they are hidden the response is
{ visible: false, … }with the name and the handle only. 404 NOT_FOUND for an unknown handle; 429 RATE_LIMITED after 30 unknown handles in 15 minutes (per account; signed out, per address, or in one count shared by every caller whose address cannot be trusted), for known handles too until the window ends.اعرض الحقولأخفِ الحقول
معاملات المسار
handlestringإلزامي
data في الاستجابة
visiblebooleanإلزاميالقيم:
true,falseisMebooleanإلزاميالقيم:
falseplayerobjectإلزاميidstringإلزاميhandlestringإلزاميdisplayNamestringإلزاميpositionsstring[]إلزاميالقيم:
"goalkeeper","defender","midfielder","forward"visibilitystringإلزاميالقيم:
"public","teammates","private"photoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
teamsobject[]اختياريslugstringإلزاميnamestringإلزاميkitHexstring | nullإلزاميrolestringإلزاميالقيم:
"captain","co_captain","member"canOpenbooleanإلزاميWhether you may open the team (GET /api/v1/teams/{slug}): members and admins only
careerobjectاختياريmatchesintegerإلزاميMatches they played (attendance, or found in a published video analysis); cancelled ones do not count
winsintegerإلزاميdrawsintegerإلزاميlossesintegerإلزاميgoalsintegerإلزاميPer match: the confirmed goals once the match has any (own goals left out); until then the goals they reported with the score
assistsintegerإلزاميAssists on confirmed goals
motmintegerإلزاميMatches where nobody got more man-of-the-match votes
heatmapobject | nullاختياريThe sum of their match heatmaps
colsintegerإلزاميrowsintegerإلزاميgridnumber[]إلزاميSeconds per cell, row by row; cols run along the pitch's length and the player attacks left to right
matchesintegerإلزامي
attributesobject | nullاختياريNull before their first analysed match with full numbers (tier A)
matchesintegerإلزاميThe analysed matches (tier A) behind the scores: the latest 10 at most
scoresobjectإلزاميpaceinteger | nullإلزاميFrom their top speed per match (the median)
من 1 إلى 99
shootinginteger | nullإلزاميGoals per match (counted twice) and shots per ten minutes
من 1 إلى 99
passinginteger | nullإلزاميPass accuracy (counted twice) and passes per ten minutes
من 1 إلى 99
involvementinteger | nullإلزاميTouches per ten minutes
من 1 إلى 99
staminainteger | nullإلزاميMetres per minute, at a believable pace
من 1 إلى 99
basisobjectإلزاميgoalsPerMatchnumberإلزاميshotsPer10number | nullإلزاميpassAccuracynumber | nullإلزامي0–1
passesPer10number | nullإلزاميtouchesPer10number | nullإلزاميmetersPerMininteger | nullإلزاميEstimated
averagesobject | nullاختياريNull before their first analysed match with full numbers (tier A)
matchesintegerإلزاميEvery analysed match with full numbers (tier A)
ratingnumber | nullإلزاميAverage match rating, 0–10
bestRatingnumber | nullإلزاميminutesintegerإلزاميdistanceKmnumber | nullإلزاميEstimated, over matches at a believable pace
passesnumber | nullإلزاميpassAccuracynumber | nullإلزامي0–1
touchesnumber | nullإلزاميshotsnumber | nullإلزامي
historyobject[]اختياريThe latest 30 matches, newest first
matchIdstringإلزاميstartsAtstringإلزاميISO 8601
titlestring | nullإلزاميsidestring | nullإلزاميThe side they played on
القيم:
"A","B"sidesobject[]إلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsinteger | nullإلزامي
resultstring | nullإلزاميالقيم:
"win","draw","loss"goalsintegerإلزاميTheir goals: the confirmed ones once the match has any, until then the ones reported with the score
assistsintegerإلزاميTheir assists on confirmed goals
motmbooleanإلزاميMan of the match (most votes; shared tops count)
statobject | nullإلزاميtierstringإلزاميA: full stats; B: partial (minutes and heatmap); C: not enough data
القيم:
"A","B","C"minutesinteger | nullإلزاميdistanceMinteger | nullإلزاميEstimated; tier A at a believable pace only
ratingnumber | nullإلزاميThe analysis's match rating, 0–10 to one decimal; tier A only
touchesinteger | nullإلزاميTier A only
passesinteger | nullإلزاميTier A only
passesCompletedinteger | nullإلزاميTier A only
shotsinteger | nullإلزاميTier A only
heatmapobject | nullإلزاميA coarse 16×10 grid for small drawings
colsintegerإلزاميrowsintegerإلزاميgridnumber[]إلزاميSeconds per cell, row by row; cols run along the pitch's length and the player attacks left to right
canOpenbooleanإلزاميWhether you may open this match (GET its report); seeing a profile does not open its matches
A profile photo
لا يحتاج إلى جلسة
A square WebP copy. Use the paths a player's
photogives you; a new upload gets a new id. 404 NOT_FOUND for an unknown id and for a photo you may not see (the player's visibility), alike. 422 INVALID for another size.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
معاملات الاستعلام
sizestringاختياري
A player's card
لا يحتاج إلى جلسة
The numbers on the player card: the same visibility as the profile (403 FORBIDDEN when the profile is hidden from you). 404 NOT_FOUND and 429 RATE_LIMITED as for GET /api/v1/players/{handle}.
اعرض الحقولأخفِ الحقول
معاملات المسار
handlestringإلزامي
data في الاستجابة
handlestringإلزاميdisplayNamestringإلزاميpositionsstring[]إلزاميالقيم:
"goalkeeper","defender","midfielder","forward"photoobject | nullإلزاميSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
overallinteger | nullإلزامي1–99: ten times the average match rating (0–10, from the video analysis) of the latest 10 rated matches; null before the first
ratedMatchesintegerإلزاميHow many matches the overall averages
matchesintegerإلزاميgoalsintegerإلزاميassistsintegerإلزاميmotmintegerإلزاميMan of the match awards
winRatenumber | nullإلزاميWins as a share of matches with a result, 0–1
distanceKmnumber | nullإلزاميEstimated kilometres per analysed match (tier A, at a believable pace)
passAccuracynumber | nullإلزاميCompleted passes as a share of passes in analysed matches, 0–1
attributesobject | nullإلزاميThe profile's attributes (pace, shooting, passing, involvement, stamina), 1–99, worked out from the video; null before the first analysed match with full numbers. With them the card shows these five and the matches instead of the six career numbers
paceinteger | nullإلزاميمن 1 إلى 99
shootinginteger | nullإلزاميمن 1 إلى 99
passinginteger | nullإلزاميمن 1 إلى 99
involvementinteger | nullإلزاميمن 1 إلى 99
staminainteger | nullإلزاميمن 1 إلى 99
heatmapobject | nullإلزاميThe career heatmap: seconds per cell, cols along the length, attacking left to right
colsintegerإلزاميrowsintegerإلزاميgridnumber[]إلزامي
teamobject | nullإلزاميThe team on the card's badge: their first team by name
namestringإلزاميkitHexstring | nullإلزامي
A player's card as a PNG
لا يحتاج إلى جلسة
1080 × 1920 PNG, the size WhatsApp status and Instagram stories fill, with the card clear of the top and bottom 250 px. Same visibility as the profile (403 FORBIDDEN when hidden from you).
download=1answers withContent-Disposition: attachment. The answer carries an ETag; send it back in If-None-Match for a 304 while the card is unchanged. 429 RATE_LIMITED past 60 images in 10 minutes per person (signed out, per address).اعرض الحقولأخفِ الحقول
معاملات المسار
handlestringإلزامي
معاملات الاستعلام
localestringاختياريdownloadstringاختياري
الرئيسية
الوسم Feed، نقطة نهاية واحدة- GET
/api/ v1/ feed The home screen: invitations, the next match, to-dos, recent results and teams
يحتاج إلى جلسة
Everything the home screen shows, computed for the caller with the same rules as the match pages. Answer an invitation with POST /api/v1/matches/{id}/rsvp; each to-do names its match, and what to open follows from
kind. The lists are capped, with no further pages: at most 20 invitations, to-dos from your 30 latest matches with work left, the last 5 results (GET /api/v1/matches lists more). Errors: 401 signed out.اعرض الحقولأخفِ الحقول
data في الاستجابة
greetingobjectإلزاميperiodstringإلزاميThe part of the day in Istanbul: 05–12 morning, 12–18 afternoon, 18–24 evening, 00–05 night
القيم:
"morning","afternoon","evening","night"namestringإلزاميYour display name
isNewbooleanإلزاميNo teams and no matches yet: show a welcome with create a team, create a match and join with a code
invitationsobject[]إلزاميOpen matches waiting for your answer (POST /api/v1/matches/{id}/rsvp), soonest first; at most 20
idstring (uuid)إلزاميThe match id, for GET /api/v1/matches/{id}
titlestring | nullإلزاميNull when untitled: name it by its sides, "A – B"
startsAtstring (date-time)إلزاميISO 8601 (UTC)
sidesobjectإلزاميSide A wears orange in the apps, side B blue
Aobjectإلزاميlabelstringإلزامي
Bobjectإلزاميlabelstringإلزامي
venueobject | nullإلزاميnamestringإلزاميverifiedbooleanإلزاميChecked by an admin: show the verified badge
addressstring | nullإلزاميlatitudenumber | nullإلزاميWGS84 latitude, when the venue set its location (for directions); null otherwise
longitudenumber | nullإلزاميWGS84 longitude, when the venue set its location (for directions); null otherwise
pitchobject | nullإلزاميnamestringإلزامي
endsAtstring (date-time)إلزاميISO 8601 (UTC)
organizerobjectإلزاميdisplayNamestringإلزامي
teamobject | nullإلزاميYour team, when it was invited as a whole
namestringإلزامي
sidestring | nullإلزاميThe side you would play on, when known
القيم:
"A","B"comingintegerإلزاميHow many said "yes"
nextMatchobject | nullإلزاميThe soonest match you said "yes" or "maybe" to that is not over
idstring (uuid)إلزاميThe match id, for GET /api/v1/matches/{id}
titlestring | nullإلزاميNull when untitled: name it by its sides, "A – B"
startsAtstring (date-time)إلزاميISO 8601 (UTC)
sidesobjectإلزاميSide A wears orange in the apps, side B blue
Aobjectإلزاميlabelstringإلزامي
Bobjectإلزاميlabelstringإلزامي
venueobject | nullإلزاميnamestringإلزاميverifiedbooleanإلزاميChecked by an admin: show the verified badge
addressstring | nullإلزاميlatitudenumber | nullإلزاميWGS84 latitude, when the venue set its location (for directions); null otherwise
longitudenumber | nullإلزاميWGS84 longitude, when the venue set its location (for directions); null otherwise
pitchobject | nullإلزاميnamestringإلزامي
endsAtstring (date-time)إلزاميISO 8601 (UTC)
kickedOffbooleanإلزاميThe match is being played now
comingintegerإلزاميHow many said "yes"
maybeintegerإلزاميHow many said "maybe"
meobjectإلزاميrsvpstringإلزاميالقيم:
"yes","maybe"sidestring | nullإلزاميالقيم:
"A","B"
todosobject[]إلزاميOne per pending action: the latest match first, in pipeline order within a match; from your 30 latest matches with work left
kindstringإلزاميscore: enter the score (organiser, side captains, admins; after kick-off). upload: upload the video (people who may upload, once the score is in, until a video arrives, unless the pitch's official camera records it). prep: mark the pitch (managers; analysis NEEDS_PREP). labels: say who is who (managers; NEEDS_LABELS). goals: confirm goal candidates (managers; once the analysis is PUBLISHED). vote: vote for the man of the match (people who played, when someone else played too; until seven days after kick-off, see voteUntil)
القيم:
"score","upload","prep","labels","goals","vote"matchobjectإلزاميidstring (uuid)إلزاميThe match id, for GET /api/v1/matches/{id}
titlestring | nullإلزاميNull when untitled: name it by its sides, "A – B"
startsAtstring (date-time)إلزاميISO 8601 (UTC)
sidesobjectإلزاميSide A wears orange in the apps, side B blue
Aobjectإلزاميlabelstringإلزامي
Bobjectإلزاميlabelstringإلزامي
candidatesinteger | nullإلزاميgoals: how many candidates wait for a decision; null for other kinds
voteUntilstring (date-time) | nullإلزاميvote: when voting closes (kick-off plus seven days); null for other kinds
recentobject[]إلزاميThe last 5 matches you played that have a score, newest first
idstring (uuid)إلزاميtitlestring | nullإلزاميstartsAtstring (date-time)إلزاميISO 8601 (UTC)
sidesobjectإلزاميAobjectإلزاميlabelstringإلزاميgoalsintegerإلزامي
Bobjectإلزاميlabelstringإلزاميgoalsintegerإلزامي
sidestring | nullإلزاميThe side you played on, when known
القيم:
"A","B"resultstring | nullإلزاميFor your side; null when your side is unknown
القيم:
"win","draw","loss"ratingnumber | nullإلزامي0–10 with one decimal, from the published video analysis; null without one
teamsobject[]إلزاميYour active teams, alphabetical
idstring (uuid)إلزاميslugstringإلزاميFor GET /api/v1/teams/{slug}
namestringإلزاميcitystring | nullإلزاميkitHomeHexstringإلزامي#rrggbb, lower-case
kitAwayHexstring | nullإلزامي#rrggbb, lower-case
crestobject | nullإلزاميshapestringإلزاميالقيم:
"shield","round","rounded","diamond","hexagon","pennant","arched","oval","crest","octagon","ticket","star"primarystringإلزاميsecondarystringإلزاميletterstringإلزاميpatternstringاختياريالقيم:
"plain","split","stripes","sash","chevron","hoops"الافتراضي:"plain"detailstringاختياريالقيم:
"none","star","ball","crown","laurel","wings"الافتراضي:"none"
rolestringإلزاميYour role in the team
القيم:
"captain","co_captain","member"memberCountintegerإلزامي
Reports
نقطة نهاية واحدة- POST
/api/ v1/ reports Report a profile or a team
يحتاج إلى جلسة
For a name, a photo, harassment, spam or someone pretending to be another person. Admins see it at /admin/reports and act with the usual tools. One open report per person and target: sending it again answers the open one's id. 404 NOT_FOUND for an unknown handle or slug; 422
fields.targetId= self (yourself); 429 after 10 reports an hour.اعرض الحقولأخفِ الحقول
جسم الطلب
targetTypestringإلزاميالقيم:
"player","team"targetIdstringإلزاميThe player's username (handle) or the team's slug
1–80 حرفًا
reasonstringإلزاميالقيم:
"name","photo","harassment","spam","impersonation","other"notestringاختياري500 حرفًا على الأكثر
data في الاستجابة
idstringإلزاميThe report's id
الإدارة
الوسم Admin، 25 نقطة نهايةReports: open ones first, oldest first, then the answered ones
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
معاملات الاستعلام
statusstringاختياريOnly open, dismissed or actioned reports
limitintegerاختياريAt most 200; 100 by default
data في الاستجابة
النوع:
object[]حقول كل عنصر:
idstringإلزاميstatusstringإلزاميالقيم:
"open","dismissed","actioned"reasonstringإلزاميالقيم:
"name","photo","harassment","spam","impersonation","other"notestring | nullإلزاميcreatedAtstringإلزاميreporterobjectإلزاميplayerIdstringإلزاميdisplayNamestringإلزاميhandlestring | nullإلزامي
targetobjectإلزاميtypestringإلزاميالقيم:
"player","team"playerIdstringاختياريdisplayNamestringاختياريhandlestring | nullاختياريnull once the account was deleted
photoobject | nullاختياريSquare WebP copies of the player's profile photo: paths on this host (GET /api/v1/photos/{id}). Present only when you may see the player (their visibility, as for their stats); null shows their initials instead
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
userIdstring | nullاختياريbannedbooleanاختياريdeletedbooleanاختياريteamIdstringاختياريnamestringاختياريslugstringاختياريarchivedbooleanاختياري
openAboutTargetintegerإلزاميOther open reports about the same profile or team
resolvedAtstring | nullإلزاميresolutionNotestring | nullإلزامي
Answer a report
يحتاج إلى جلسة
Audited. 409 CONFLICT with fields.form = resolved when it was already answered.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
actionstringإلزاميdismiss: nothing to do; actioned: an admin acted on it (a photo removed, a ban)
القيم:
"dismiss","actioned"notestringاختياري500 حرفًا على الأكثر
data في الاستجابة
idstringإلزاميstatusstringإلزاميالقيم:
"dismissed","actioned"
Headline numbers: people, teams, this week's matches, analyses by status
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
data في الاستجابة
peopleintegerإلزاميadminsintegerإلزاميbannedintegerإلزاميteamsintegerإلزاميNot archived
matchesThisWeekintegerإلزاميMonday to Sunday in Turkish time, cancelled matches left out
weekobjectإلزاميstartstring (date-time)إلزاميendstring (date-time)إلزامي
venuesintegerإلزاميunverifiedVenuesintegerإلزاميanalysesmap<string, integer>إلزاميawaitingRecordingsintegerإلزاميMatches waiting for the pitch's official recording (see GET /api/v1/admin/official-recordings)
recentAuditobject[]إلزاميidstring (uuid)إلزاميactionstringإلزاميe.g. admin.ban, admin.venue.verify
targetTypestringإلزاميtargetIdstring | nullإلزاميtargetobject | nullإلزاميThe person, team, match or venue the entry is about, if it still exists
kindstringإلزاميالقيم:
"person","team","match","venue"namestringإلزاميusernamestring | nullاختياريuserIdstring (uuid) | nullاختياريslugstringاختياريsidesstring[]اختياري
dataanyإلزاميDetails of the change; never secrets
createdAtstring (date-time)إلزاميactorIdstring (uuid) | nullإلزاميNull for the system
actorobject | nullإلزاميidstring (uuid)إلزاميusernamestring | nullإلزاميnamestringإلزاميuserIdstring (uuid) | nullإلزامي
Find people by username or name
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
معاملات الاستعلام
qstringاختياريPart of a username (a leading @ is ignored; Turkish letters match their plain forms) or a name; empty lists the newest accounts. An exact username comes first.
filterstringاختياريadmins or banned
limitintegerاختياري1–100, default 30
data في الاستجابة
النوع:
object[]حقول كل عنصر:
idstring (uuid)إلزاميusernamestring | nullإلزاميnamestringإلزاميThe player's display name
rolestringإلزاميالقيم:
"admin","user"bannedbooleanإلزاميbanReasonstring | nullإلزاميcreatedAtstring (date-time)إلزاميplayerIdstring (uuid) | nullإلزاميphotoobject | nullإلزاميTheir profile photo; admins see every photo
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
One person with their activity and recent audit entries
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
idstring (uuid)إلزاميusernamestring | nullإلزاميnamestringإلزاميThe player's display name
rolestringإلزاميالقيم:
"admin","user"bannedbooleanإلزاميbanReasonstring | nullإلزاميcreatedAtstring (date-time)إلزاميplayerIdstring (uuid) | nullإلزاميphotoobject | nullإلزاميTheir profile photo; admins see every photo
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
sessionsintegerإلزاميOpen sessions
teamsintegerإلزاميmatchesintegerإلزاميauditobject[]إلزاميThe 20 newest entries by or about the person
idstring (uuid)إلزاميactionstringإلزاميe.g. admin.ban, admin.venue.verify
targetTypestringإلزاميtargetIdstring | nullإلزاميtargetobject | nullإلزاميThe person, team, match or venue the entry is about, if it still exists
kindstringإلزاميالقيم:
"person","team","match","venue"namestringإلزاميusernamestring | nullاختياريuserIdstring (uuid) | nullاختياريslugstringاختياريsidesstring[]اختياري
dataanyإلزاميDetails of the change; never secrets
createdAtstring (date-time)إلزاميactorIdstring (uuid) | nullإلزاميNull for the system
actorobject | nullإلزاميidstring (uuid)إلزاميusernamestring | nullإلزاميnamestringإلزاميuserIdstring (uuid) | nullإلزامي
Make someone an admin or take it away
يحتاج إلى جلسة
409 CONFLICT with fields.form = "self" on your own account.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
rolestringإلزامي"admin" gives full access; "user" takes it away
القيم:
"admin","user"
data في الاستجابة
idstring (uuid)إلزاميusernamestring | nullإلزاميnamestringإلزاميThe player's display name
rolestringإلزاميالقيم:
"admin","user"bannedbooleanإلزاميbanReasonstring | nullإلزاميcreatedAtstring (date-time)إلزاميplayerIdstring (uuid) | nullإلزاميphotoobject | nullإلزاميTheir profile photo; admins see every photo
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
Ban someone and end all their sessions
يحتاج إلى جلسة
Sign-in then answers 403 BANNED_USER. 409 CONFLICT with fields.form = "self" on your own account.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
reasonstringإلزاميShown to admins; 3–300 characters
3–300 حرفًا
data في الاستجابة
idstring (uuid)إلزاميusernamestring | nullإلزاميnamestringإلزاميThe player's display name
rolestringإلزاميالقيم:
"admin","user"bannedbooleanإلزاميbanReasonstring | nullإلزاميcreatedAtstring (date-time)إلزاميplayerIdstring (uuid) | nullإلزاميphotoobject | nullإلزاميTheir profile photo; admins see every photo
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
Lift a ban
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
idstring (uuid)إلزاميusernamestring | nullإلزاميnamestringإلزاميThe player's display name
rolestringإلزاميالقيم:
"admin","user"bannedbooleanإلزاميbanReasonstring | nullإلزاميcreatedAtstring (date-time)إلزاميplayerIdstring (uuid) | nullإلزاميphotoobject | nullإلزاميTheir profile photo; admins see every photo
smallstringإلزامي128 px
mediumstringإلزامي512 px
largestringإلزامي1024 px
Set a temporary password and end all their sessions
يحتاج إلى جلسة
Pass the password on to the person; they can change it after signing in. 409 CONFLICT with fields.form = "self" on your own account.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
passwordstringإلزاميShown once, e.g. kavo-tesu-ribe-mena; only its hash is stored
Venues, verified first
يحتاج إلى جلسة
Verified venues first, then by name; at most 200, with no further pages: narrow the list with
q.اعرض الحقولأخفِ الحقول
معاملات الاستعلام
qstringاختياريPart of a name, city or district
data في الاستجابة
النوع:
object[]حقول كل عنصر:
idstring (uuid)إلزاميnamestringإلزاميcitystring | nullإلزاميdistrictstring | nullإلزاميaddressstring | nullإلزاميverifiedbooleanإلزاميcreatedAtstring (date-time)إلزاميmatchesintegerإلزاميpitchesintegerإلزاميcamerasintegerإلزاميofficialCamerasintegerإلزامي
Add a venue
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
جسم الطلب
namestringإلزامي2–80 حرفًا
citystring | nullاختياري60 حرفًا على الأكثر
districtstring | nullاختياري60 حرفًا على الأكثر
addressstring | nullاختياري200 حرفًا على الأكثر
verifiedbooleanاختياريالافتراضي:
false
data في الاستجابة
idstring (uuid)إلزاميnamestringإلزاميcitystring | nullإلزاميdistrictstring | nullإلزاميaddressstring | nullإلزاميverifiedbooleanإلزاميcreatedAtstring (date-time)إلزاميmatchesintegerإلزاميcreatedByobject | nullإلزاميidstring (uuid)إلزاميdisplayNamestringإلزاميhandlestring | nullإلزامي
pitchesobject[]إلزاميidstring (uuid)إلزاميnamestringإلزاميindoorbooleanإلزاميlengthMnumberإلزاميwidthMnumberإلزاميgoalWidthMnumberإلزاميgoalHeightMnumberإلزاميmeasuredbooleanإلزاميFalse while the sizes are defaults
createdAtstring (date-time)إلزاميmatchesintegerإلزاميcamerasobject[]إلزاميidstring (uuid)إلزاميlabelstringإلزاميofficialbooleanإلزاميThe venue's own recorder; at most one per pitch
activeCalibrationIdstring (uuid) | nullإلزاميcreatedAtstring (date-time)إلزامي
One venue with its pitches and cameras
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
idstring (uuid)إلزاميnamestringإلزاميcitystring | nullإلزاميdistrictstring | nullإلزاميaddressstring | nullإلزاميverifiedbooleanإلزاميcreatedAtstring (date-time)إلزاميmatchesintegerإلزاميcreatedByobject | nullإلزاميidstring (uuid)إلزاميdisplayNamestringإلزاميhandlestring | nullإلزامي
pitchesobject[]إلزاميidstring (uuid)إلزاميnamestringإلزاميindoorbooleanإلزاميlengthMnumberإلزاميwidthMnumberإلزاميgoalWidthMnumberإلزاميgoalHeightMnumberإلزاميmeasuredbooleanإلزاميFalse while the sizes are defaults
createdAtstring (date-time)إلزاميmatchesintegerإلزاميcamerasobject[]إلزاميidstring (uuid)إلزاميlabelstringإلزاميofficialbooleanإلزاميThe venue's own recorder; at most one per pitch
activeCalibrationIdstring (uuid) | nullإلزاميcreatedAtstring (date-time)إلزامي
Edit a venue, verify it or take the verification away
يحتاج إلى جلسة
Send only the fields to change; an empty string or null clears city, district or address.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
namestringاختياري2–80 حرفًا
citystring | nullاختياري60 حرفًا على الأكثر
districtstring | nullاختياري60 حرفًا على الأكثر
addressstring | nullاختياري200 حرفًا على الأكثر
verifiedbooleanاختياري
data في الاستجابة
idstring (uuid)إلزاميnamestringإلزاميcitystring | nullإلزاميdistrictstring | nullإلزاميaddressstring | nullإلزاميverifiedbooleanإلزاميcreatedAtstring (date-time)إلزاميmatchesintegerإلزاميcreatedByobject | nullإلزاميidstring (uuid)إلزاميdisplayNamestringإلزاميhandlestring | nullإلزامي
pitchesobject[]إلزاميidstring (uuid)إلزاميnamestringإلزاميindoorbooleanإلزاميlengthMnumberإلزاميwidthMnumberإلزاميgoalWidthMnumberإلزاميgoalHeightMnumberإلزاميmeasuredbooleanإلزاميFalse while the sizes are defaults
createdAtstring (date-time)إلزاميmatchesintegerإلزاميcamerasobject[]إلزاميidstring (uuid)إلزاميlabelstringإلزاميofficialbooleanإلزاميThe venue's own recorder; at most one per pitch
activeCalibrationIdstring (uuid) | nullإلزاميcreatedAtstring (date-time)إلزامي
Add a pitch to a venue
يحتاج إلى جلسة
Sizes are in metres. 409 CONFLICT with fields.name = "taken" when the venue has a pitch with that name; 422 with fields.widthM = "widerThanLong".
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
namestringإلزامي1–40 حرفًا
indoorbooleanاختياريالافتراضي:
falselengthMnumberاختياريمن 15 إلى 110الافتراضي:
40widthMnumberاختياريمن 10 إلى 75الافتراضي:
25goalWidthMnumberاختياريمن 1 إلى 7.32الافتراضي:
3goalHeightMnumberاختياريمن 1 إلى 2.44الافتراضي:
2measuredbooleanاختياريالافتراضي:
false
data في الاستجابة
idstring (uuid)إلزاميnamestringإلزاميindoorbooleanإلزاميlengthMnumberإلزاميwidthMnumberإلزاميgoalWidthMnumberإلزاميgoalHeightMnumberإلزاميmeasuredbooleanإلزاميFalse while the sizes are defaults
createdAtstring (date-time)إلزاميvenueIdstring (uuid)إلزامي
The venue's pitch admin login, set-up checklist, booking health and recent changes
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
loginobject | nullإلزاميusernamestringإلزاميThe pitch ID ("Saha ID"), e.g. saha_k7m3qp
enabledbooleanإلزاميFalse while switched off: sign-in is refused
readybooleanإلزاميThe venue set its own password and accepted the venue terms at its first sign-in
createdAtstring (date-time)إلزاميlastSignInAtstring (date-time) | nullإلزاميThe newest open session's start
publicPathstring | nullإلزاميThe venue's public page (/venues/<slug>) while its login is on
checklistobject[]إلزاميPitches added, an official camera on every pitch, location and opening hours set, the login on and its first sign-in done
itemstringإلزاميالقيم:
"pitches","officialCameras","location","hours","login"donebooleanإلزامي
healthobjectإلزاميreservationsEnabledbooleanإلزاميopenRequestsintegerإلزاميBooking requests waiting for an answer that have not lapsed (a request lapses two hours before its start)
oldestPendingAtstring (date-time) | nullإلزاميWhen the longest-waiting of them was asked
lastSignInAtstring (date-time) | nullإلزامي
auditobject[]إلزاميThe newest entries about the venue or by its login
idstring (uuid)إلزاميactionstringإلزاميe.g. admin.ban, admin.venue.verify
targetTypestringإلزاميtargetIdstring | nullإلزاميtargetobject | nullإلزاميThe person, team, match or venue the entry is about, if it still exists
kindstringإلزاميالقيم:
"person","team","match","venue"namestringإلزاميusernamestring | nullاختياريuserIdstring (uuid) | nullاختياريslugstringاختياريsidesstring[]اختياري
dataanyإلزاميDetails of the change; never secrets
createdAtstring (date-time)إلزاميactorIdstring (uuid) | nullإلزاميNull for the system
actorobject | nullإلزاميidstring (uuid)إلزاميusernamestring | nullإلزاميnamestringإلزاميuserIdstring (uuid) | nullإلزامي
Make the venue's pitch admin login
يحتاج إلى جلسة
Generates the pitch ID and a password, returned once (
Cache-Control: no-store); pass them on to the venue with the panel's address. The venue gets its public address now if it has none. 409 CONFLICT with fields.form = "loginExists": a venue has one login.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
usernamestringإلزاميThe pitch ID
passwordstringإلزاميShown once, e.g. kavo-tesu-ribe-mena; only its hash is stored. It works for the first sign-in, where the venue sets its own
panelUrlstringإلزاميThe panel's address, where the venue signs in
publicUrlstring | nullإلزاميThe venue's public page
Switch the venue's login off or on
يحتاج إلى جلسة
Off is a ban: sign-in is refused and every session ends; the venue's bookings are switched off and its open requests declined with the answer "@loginOff". On again leaves bookings off until the venue switches them on. 404 when the venue has no login.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
enabledbooleanإلزامي
data في الاستجابة
usernamestringإلزاميThe pitch ID ("Saha ID"), e.g. saha_k7m3qp
enabledbooleanإلزاميFalse while switched off: sign-in is refused
readybooleanإلزاميThe venue set its own password and accepted the venue terms at its first sign-in
createdAtstring (date-time)إلزاميlastSignInAtstring (date-time) | nullإلزاميThe newest open session's start
Give the venue's login a new password
يحتاج إلى جلسة
Returned once (
Cache-Control: no-store). Every session of the login ends, and the venue sets its own password again at its next sign-in. 404 when the venue has no login.اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
usernamestringإلزاميThe pitch ID
passwordstringإلزاميShown once, e.g. kavo-tesu-ribe-mena; only its hash is stored. It works for the first sign-in, where the venue sets its own
panelUrlstringإلزاميThe panel's address, where the venue signs in
publicUrlstring | nullإلزاميThe venue's public page
Edit a pitch
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
namestringاختياري1–40 حرفًا
indoorbooleanاختياريlengthMnumberاختياريمن 15 إلى 110
widthMnumberاختياريمن 10 إلى 75
goalWidthMnumberاختياريمن 1 إلى 7.32
goalHeightMnumberاختياريمن 1 إلى 2.44
measuredbooleanاختياري
data في الاستجابة
idstring (uuid)إلزاميnamestringإلزاميindoorbooleanإلزاميlengthMnumberإلزاميwidthMnumberإلزاميgoalWidthMnumberإلزاميgoalHeightMnumberإلزاميmeasuredbooleanإلزاميFalse while the sizes are defaults
createdAtstring (date-time)إلزاميvenueIdstring (uuid)إلزامي
Add a camera to a pitch
يحتاج إلى جلسة
Marking a camera official unmarks the pitch's previous official camera. 409 CONFLICT with fields.label = "taken".
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
labelstringإلزامي1–40 حرفًا
officialbooleanاختياريالافتراضي:
false
data في الاستجابة
idstring (uuid)إلزاميlabelstringإلزاميofficialbooleanإلزاميThe venue's own recorder; at most one per pitch
activeCalibrationIdstring (uuid) | nullإلزاميcreatedAtstring (date-time)إلزاميpitchIdstring (uuid)إلزامي
Rename a camera or mark it official
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
labelstringاختياري1–40 حرفًا
officialbooleanاختياري
data في الاستجابة
idstring (uuid)إلزاميlabelstringإلزاميofficialbooleanإلزاميThe venue's own recorder; at most one per pitch
activeCalibrationIdstring (uuid) | nullإلزاميcreatedAtstring (date-time)إلزاميpitchIdstring (uuid)إلزامي
Analyses with their match, error and jobs, most recently changed first
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
معاملات الاستعلام
statusstringاختياريINGESTING, NEEDS_PREP, TRACKING, NEEDS_LABELS, COMPUTING, PUBLISHED, FAILED
limitintegerاختياري1–100, default 50
data في الاستجابة
analysesobject[]إلزاميidstring (uuid)إلزاميstatusstringإلزاميالقيم:
"INGESTING","NEEDS_PREP","TRACKING","NEEDS_LABELS","COMPUTING","PUBLISHED","FAILED"progressnumberإلزامي0–1 within the current stage
errorstring | nullإلزاميcreatedAtstring (date-time)إلزاميupdatedAtstring (date-time)إلزاميpublishedAtstring (date-time) | nullإلزاميmatchobjectإلزاميidstring (uuid)إلزاميtitlestring | nullإلزاميstartsAtstring (date-time)إلزاميstatusstringإلزاميالقيم:
"planned","played","cancelled"sidesobject[]إلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsinteger | nullإلزامي
jobsobject[]إلزاميNewest first
idstring (uuid)إلزاميkindstringإلزاميالقيم:
"ingest","track","stats"statusstringإلزاميالقيم:
"queued","running","succeeded","failed"attemptsintegerإلزاميmaxAttemptsintegerإلزاميprogressnumberإلزاميerrorstring | nullإلزاميcreatedAtstring (date-time)إلزاميfinishedAtstring (date-time) | nullإلزامي
retryKindstring | nullإلزاميWhat POST …/retry would queue; null when there is nothing to retry
القيم:
"ingest","track","stats"
countsmap<string, integer>إلزامي
Matches waiting for the pitch's official recording
يحتاج إلى جلسة
Kick-off has passed, the match is not cancelled and no video has arrived. Admins deliver these recordings with the upload endpoints under Video, once the score is in.
اعرض الحقولأخفِ الحقول
data في الاستجابة
matchesobject[]إلزاميOldest kick-off first, at most 50
idstring (uuid)إلزاميtitlestring | nullإلزاميstartsAtstring (date-time)إلزاميdurationMinintegerإلزاميscoreStatestringإلزاميThe video can be uploaded once the score is in
القيم:
"none","entered","confirmed"sidesobject[]إلزاميsidestringإلزاميالقيم:
"A","B"labelstringإلزاميgoalsinteger | nullإلزامي
venueobject | nullإلزاميidstring (uuid)إلزاميnamestringإلزاميverifiedbooleanإلزامي
pitchobject | nullإلزاميidstring (uuid)إلزاميnamestringإلزامي
cameraobject | nullإلزاميThe pitch's official camera that records the match
idstring (uuid)إلزاميlabelstringإلزامي
totalintegerإلزامي
Queue the failed stage again
يحتاج إلى جلسة
Queues a new job of the newest job's kind with the same payload and moves the analysis back to that stage. 409 CONFLICT with fields.form = "nothingToRetry" when the newest job has not failed, and with fields.form = "badPayload" when the failed job's payload no longer matches the worker's job contract or names another analysis or video (POST /api/v1/matches/{id}/analysis/retry builds a fresh one).
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
data في الاستجابة
jobIdstring (uuid)إلزاميkindstringإلزاميالقيم:
"ingest","track","stats"
The newest audit log entries
يحتاج إلى جلسة
اعرض الحقولأخفِ الحقول
معاملات الاستعلام
actionstringاختياريOnly this action, e.g. admin.ban
beforestring (uuid)اختياريThe nextBefore of the previous page
limitintegerاختياري1–200, default 50
data في الاستجابة
entriesobject[]إلزاميidstring (uuid)إلزاميactionstringإلزاميe.g. admin.ban, admin.venue.verify
targetTypestringإلزاميtargetIdstring | nullإلزاميtargetobject | nullإلزاميThe person, team, match or venue the entry is about, if it still exists
kindstringإلزاميالقيم:
"person","team","match","venue"namestringإلزاميusernamestring | nullاختياريuserIdstring (uuid) | nullاختياريslugstringاختياريsidesstring[]اختياري
dataanyإلزاميDetails of the change; never secrets
createdAtstring (date-time)إلزاميactorIdstring (uuid) | nullإلزاميNull for the system
actorobject | nullإلزاميidstring (uuid)إلزاميusernamestring | nullإلزاميnamestringإلزاميuserIdstring (uuid) | nullإلزامي
nextBeforestring (uuid) | nullإلزاميactionsstring[]إلزاميEvery action in the log, for filtering
لوحة المنشأة
الوسم Pitch admin، 4 نقاط نهايةStart or resume delivering a match's recording
يحتاج إلى جلسة
The venue's recording goes straight to the bucket in parts, as people's uploads do (POST /api/v1/matches/{id}/uploads). 1. POST here with the file's name, size, type and fingerprint (name:size:lastModified). The match becomes an official-camera match on its pitch's official camera, audited as venue.video.start. 2. POST …/parts with the part numbers still missing and PUT each 64 MiB slice to its URL; keep the ETag response header. 3. POST …/complete with every { partNumber, etag }: the analysis starts (INGESTING), audited as video.upload by the venue's login. Starting again with the same fingerprint resumes the venue's unfinished upload. Once a venue's upload has started, people's new uploads to the match are refused (409 venueDelivering). 404 NOT_FOUND for a match that is not at the venue. 409 CONFLICT with fields.form matchCancelled, videoExists (the match has its video), uploadInProgress (someone else is uploading it), beforeKickoff (the recording is sent after kick-off) or noOfficialCamera (the match's pitch has no official camera). The score does not have to be in. 422 INVALID with fields.size tooLarge (over 8 GiB), fields.contentType notVideo or fields.fileName notVideo. Web only: signed in with the pitch admin panel's own session cookie (the akillifutbol-venue cookies set by /api/venue-auth/sign-in/username). Bearer tokens and people's sessions are not accepted (401). A login that has not finished its first sign-in's steps gets 403 with fields.form setup.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزامي
جسم الطلب
fileNamestringإلزاميThe picked file's name, e.g. mac.mp4. An extension other than a video container's (such as .m3u8) is refused
1–255 حرفًا
sizeintegerإلزاميBytes; at most 8 GiB
contentTypestringإلزاميThe file's MIME type; must be video/*
fingerprintstringإلزاميname:size:lastModified of the file. Starting again with the same fingerprint resumes the unfinished upload
1–512 حرفًا
data في الاستجابة
uploadIdstringإلزاميkeystringإلزاميThe object key in the bucket
partSizenumberإلزاميBytes per part (64 MiB); the last part holds the rest
partCountnumberإلزاميuploadedPartsobject[]إلزاميParts the bucket already has (after a resume): upload only the others
partNumbernumberإلزاميetagstringإلزاميsizenumberإلزامي
resumedbooleanإلزاميTrue when this continues the venue's unfinished upload of the same file
Cancel the venue's unfinished delivery
يحتاج إلى جلسة
Drops its parts from the bucket. 409 uploadCompleted once it is complete (withdraw it from the panel instead, until labelling starts). Only the venue's own upload: anyone else's is not found (404). Web only: signed in with the pitch admin panel's own session cookie (the akillifutbol-venue cookies set by /api/venue-auth/sign-in/username). Bearer tokens and people's sessions are not accepted (401). A login that has not finished its first sign-in's steps gets 403 with fields.form setup.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميuploadIdstringإلزامي
data في الاستجابة
uploadIdstringإلزاميstatusstringإلزاميالقيم:
"aborted","failed"
Presigned URLs for parts of the venue's delivery
يحتاج إلى جلسة
Links are valid for an hour and accept exactly their part's bytes. 409 uploadClosed when the upload was cancelled or completed. The rules are checked again: 404 NOT_FOUND for a match that is not at the venue. 409 CONFLICT with fields.form matchCancelled, videoExists (the match has its video), uploadInProgress (someone else is uploading it), beforeKickoff (the recording is sent after kick-off) or noOfficialCamera (the match's pitch has no official camera). The score does not have to be in. Only the venue's own upload: anyone else's is not found (404). Web only: signed in with the pitch admin panel's own session cookie (the akillifutbol-venue cookies set by /api/venue-auth/sign-in/username). Bearer tokens and people's sessions are not accepted (401). A login that has not finished its first sign-in's steps gets 403 with fields.form setup.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميuploadIdstringإلزامي
جسم الطلب
partNumbersinteger[]إلزامي1-based part numbers, at most 100 per call
data في الاستجابة
partsobject[]إلزاميpartNumbernumberإلزاميurlstringإلزاميPUT the part's bytes here, then read the ETag response header
expiresAtstringإلزاميISO time; sign again after it
Finish the venue's delivery and start the analysis
يحتاج إلى جلسة
Checks the parts and the stored size, then creates the video, the analysis and its first job in one step; calling it again returns the same result. 409 partsMissing, partMismatch or sizeMismatch: upload the missing parts and complete again. 409 videoExists when another video became the match's first: this upload is then closed and its file deleted. Only the venue's own upload: anyone else's is not found (404). Web only: signed in with the pitch admin panel's own session cookie (the akillifutbol-venue cookies set by /api/venue-auth/sign-in/username). Bearer tokens and people's sessions are not accepted (401). A login that has not finished its first sign-in's steps gets 403 with fields.form setup.
اعرض الحقولأخفِ الحقول
معاملات المسار
idstringإلزاميuploadIdstringإلزامي
جسم الطلب
partsobject[]إلزاميpartNumberintegerإلزاميمن 1 إلى 10000
etagstringإلزاميThe ETag header of the part's PUT response
1–200 حرفًا
data في الاستجابة
uploadIdstringإلزاميvideoAssetIdstring | nullإلزاميanalysisIdstring | nullإلزاميstatusstring | nullإلزاميالقيم:
"INGESTING","NEEDS_PREP","TRACKING","NEEDS_LABELS","COMPUTING","PUBLISHED","FAILED"replacedbooleanإلزاميAlways false: a venue never replaces a match's video