انتقل إلى المحتوى
Akıllı Futbol

المطوّرون

واجهة JSON البرمجية لـ Akıllı Futbol. يتبع التطبيق المحمول والتكاملات القواعد والصلاحيات نفسها التي يتبعها تطبيق الويب.

البدء

نقاط النهاية تحت https://akilli.futbol/api/v1؛ والطلبات والاستجابات بصيغة JSON.

المرجع كاملًا متوفر أيضًا كمستند OpenAPI 3.1 يمكنك تحميله في Postman أو Insomnia أو في مولّد عملاء.

ملخصات نقاط النهاية وملاحظاتها مأخوذة مباشرة من مستند OpenAPI، لذا فهي بالإنجليزية.

118 نقطة نهاية في 17 قسمًا.

المصادقة

  1. أنشئ حسابًا أو سجّل الدخول: أرسل اسم المستخدم وكلمة المرور بصيغة 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"}'
  2. احفظ الرمز المميّز الموقَّع من ترويسة الاستجابة 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", … }
    }
  3. أرسل 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" }
  }
}

رموز الأخطاء

  • 401UNAUTHENTICATEDلا توجد جلسة، أو الرمز المميّز غير صالح: سجّل الدخول مرة أخرى.
  • 403FORBIDDENغير مسموح لك بفعل هذا.
  • 404NOT_FOUNDغير موجود، أو لا يمكنك رؤيته.
  • 409CONFLICTيتعارض الطلب مع الحالة الحالية؛ ويوضح fields السبب.
  • 422INVALIDالجسم أو بعض الحقول غير صالحة؛ ويحتوي fields على رمز لكل حقل.
  • 429RATE_LIMITEDطلبات كثيرة جدًا: انتظر قليلًا ثم حاول مرة أخرى.
  • 500INTERNALحدث خطأ في الخادم: حاول مرة أخرى لاحقًا.

المسار غير المعروف تحت /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-token response header: keep it and send it as Authorization: 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 in errors: 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 with errors.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إلزامي

      القيم: true

    • privacyNoticebooleanإلزامي

      القيم: true

    • termsbooleanإلزامي

      القيم: true

    • localestringإلزامي

      القيم: "tr", "en", "ru", "ar"

    جسم الاستجابة

    • userobjectإلزامي
      • idstringإلزامي
      • usernamestringإلزامي
  • Sign in

    لا يحتاج إلى جلسة

    The signed session token is in the set-auth-token response header: keep it and send it as Authorization: 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-token response header: keep it and send it as Authorization: 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-token response header: keep it and send it as Authorization: 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 with suggestion: { 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 with username, displayName, and adult, privacyNotice and terms true: then the account is made like sign-up's, with no password. Field errors as sign-up's: 400 INVALID_SIGN_UP with errors, 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-token response header: keep it and send it as Authorization: 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-token response header (a browser gets a new cookie). Every other device has to sign in again. A revokeOtherSessions field 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-token response header: keep it and send it as Authorization: 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 نقاط نهاية
  • 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

  • Change your display name, positions or visibility

    يحتاج إلى جلسة

    422 INVALID with fields.displayName = required | tooShort | tooLong | invalid, or fields.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 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

  • 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 with fields.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

  • 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 in locale. 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. 422 fields.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/png or image/webp), or as multipart/form-data with the file in the photo field. 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 with fields.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

  • 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إلزامي
  • 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

  • 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 are revoked. 404 NOT_FOUND with fields.code: invalid (not six code letters), unknown or revoked (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 with fields.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 with fields.match = cancelled | finished. 404 NOT_FOUND with fields.code: invalid (not six code letters), unknown or revoked (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إلزامي
  • 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: true to 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. 422 fields codes: 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; date or startsAt = notEnded when 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) or mismatch (the venue, pitch, start or length you sent differ). 429 fields.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, 120

    • venueIdstring | 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إلزامي
  • 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: 409 fields.form = bookingSlotTaken when the new time or pitch is not free on the venue's grid, bookingVenue when 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); 409 fields.form = cancelled once cancelled; 422 with fields.

    اعرض الحقول

    معاملات المسار

    • 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, 120

    • venueIdstring | 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). 409 fields.form = scored once 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); 409 fields.form = cancelled once cancelled; 422 with fields.

    اعرض الحقول

    معاملات المسار

    • 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 = cancelled once cancelled; 422 with fields.

    اعرض الحقول

    معاملات المسار

    • 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 = cancelled or 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); 409 fields.form = cancelled once cancelled; 422 with fields.

    اعرض الحقول

    معاملات المسار

    • 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 = teamPlaysSide for the other one); otherwise members without a side, or still on the team's earlier side, take side. 422 fields.teamId = notMember for a team you are not in. Once the score is in, who played and on which side is changed with the score: 409 fields.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); 409 fields.form = cancelled once cancelled; 422 with fields.

    اعرض الحقول

    معاملات المسار

    • 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, tooLong or invalid). 422 fields.username = notFound; 409 fields.username = already. Once the score is in, who played and on which side is changed with the score: 409 fields.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); 409 fields.form = cancelled once cancelled; 422 with fields.

    اعرض الحقول

    معاملات المسار

    • 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 rsvp is sent for a registered player (people answer for themselves); 422 fields.rsvp = invalid for any other value. Once the score is in, who played and on which side is changed with the score: 409 fields.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); 409 fields.form = cancelled once cancelled; 422 with fields.

    اعرض الحقول

    معاملات المسار

    • 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: 409 fields.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); 409 fields.form = cancelled once cancelled; 422 with fields.

    اعرض الحقول

    معاملات المسار

    • idstringإلزامي
    • playerIdstringإلزامي

    data في الاستجابة

    • playerIdstringإلزامي
    • removedbooleanإلزامي

      القيم: true

المنشآت

الوسم Venues، 6 نقاط نهاية
  • Search venues

    يحتاج إلى جلسة

    Verified venues first, then by name; at most 12. An empty q lists 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

  • 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, invalid for hidden characters, staffWord when 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 = taken for 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 logo field 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 with X-Content-Type-Options: nosniff, Content-Security-Policy: default-src 'none' and Cross-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, 60

    • openingHoursobjectإلزامي

      Istanbul clock; null: closed

      • monobject | nullإلزامي
        • openstringإلزامي

          "10:00"

        • closestringإلزامي

          "01:00"; at or before open means after midnight

      • tueobject | nullإلزامي
        • openstringإلزامي

          "10:00"

        • closestringإلزامي

          "01:00"; at or before open means after midnight

      • wedobject | nullإلزامي
        • openstringإلزامي

          "10:00"

        • closestringإلزامي

          "01:00"; at or before open means after midnight

      • thuobject | nullإلزامي
        • openstringإلزامي

          "10:00"

        • closestringإلزامي

          "01:00"; at or before open means after midnight

      • friobject | nullإلزامي
        • openstringإلزامي

          "10:00"

        • closestringإلزامي

          "01:00"; at or before open means after midnight

      • satobject | nullإلزامي
        • openstringإلزامي

          "10:00"

        • closestringإلزامي

          "01:00"; at or before open means after midnight

      • sunobject | nullإلزامي
        • openstringإلزامي

          "10:00"

        • closestringإلزامي

          "01:00"; at or before open means 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 it requested (still askable). With a bearer token the lead time is the person's own. 422 fields.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 open means 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 is confirmed at 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). 409 fields.form: bookingsOff (the venue takes no requests now; use its WhatsApp), alreadyAsked, tooManyOpen (2 requests already waiting at this venue); fields.time = taken. 422 fields: 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:MM

    • durationMinnumberإلزامي

      القيم: 60, 90, 120

    • teamIdstring | 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 basedOn with PUT

    • viewerobjectإلزامي
      • 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 as score.edit with 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's ownGoals is 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 with markable true (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. 409 fields.form = cancelled, beforeKickoff or changed (someone saved since your basedOn). 422 fields: 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, duplicate or notConnected; attendance.N.username = notFound, duplicate or notConnected; attendance.N.guestName = required, tooShort, tooLong or invalid; 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 version you started from (null for a new score). When sent, the save is refused with 409 changed if 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 basedOn with PUT

    • viewerobjectإلزامي
      • 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 = cancelled or beforeKickoff. 422 fields.username = required, tooLong, notFound (no registered player has it) or notConnected (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 = notAttended when you did not play. 409 fields.form = noScore, closed or cancelled. 422 fields.playerId = self or notAttended. 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), with tracks[trackId].name above it once labelled; goalkeepers (keeper, or the index's keepers) get a marker of their own. The ball is a frame's b ([x, y, 1 when estimated]); o (or the index's possession spells) is who has it. The index's passes go from passer to receiver between their start and end frames (completed false: 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إلزامي

        القيم: 1

      • fpsnumberإلزامي
      • 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.source camera and prefill.quality GOOD 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.save or can.redo); otherwise image and video are 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 them

    • needsScorebooleanإلزامي

      The match has no score yet: marking the pitch waits for it (a venue may deliver the recording first). can.save and can.redo are false until then

    • canobjectإلزامي
      • 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

        الافتراضي: false

      • penaltyAreaobject | nullاختياري

        Only when the pitch has penalty areas marked; enables the box_* landmarks

        الافتراضي: null

        • widthMnumberإلزامي

          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

        الافتراضي: null

      • endSnumberإلزامي

        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, 2

      • framenumberإلزامي

        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, ready is 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, true

    • matchIdstringإلزامي
    • 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 none

        • Aobject | 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 startS to endS of 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 clip from 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, true

    • matchIdstringإلزامي
    • 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 nobody

    • assistIdstring | 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 nobody

    • assistIdstring | 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, false

    • isMebooleanإلزامي

      القيم: false

    • playerobjectإلزامي
      • 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 photo gives 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=1 answers with Content-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، نقطة نهاية واحدة
  • 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

نقطة نهاية واحدة
  • 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اختياري

      الافتراضي: false

    • lengthMnumberاختياري

      من 15 إلى 110الافتراضي: 40

    • widthMnumberاختياري

      من 10 إلى 75الافتراضي: 25

    • goalWidthMnumberاختياري

      من 1 إلى 7.32الافتراضي: 3

    • goalHeightMnumberاختياري

      من 1 إلى 2.44الافتراضي: 2

    • measuredbooleanاختياري

      الافتراضي: 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