روح للمحتوى على طول
إزاز للمطورين

مرجع الـ API

كل عمليات API الشركاء 1.3.0، متولّدة وقت البناء من نفس العقد اللي الـ API شغال بيه.

وصف العمليات والخانات جاي من العقد، وهو بالإنجليزي.

Court booking, court details, reviews and safety reports for partner apps. OAuth 2.0 client credentials. Webhooks (reservation.created, reservation.cancelled, reservation.no_show, reservation.completed, reservation.checked_in, review.replied, safety_report.resolved; ignore types you don't know) are signed with HMAC-SHA256: Ezaz-Signature: t=<unix>,v1=<hex of HMAC(secret, t + '.' + body)>; reject anything older than 5 minutes and dedupe on the event id. Errors are RFC 9457 problem details with a stable code.

الدخول

post/partner/oauth/token

Client credentials: a 10-minute access token for the partner API

Authenticate with HTTP Basic (client_secret_basic, preferred) or with client_id and client_secret in the form (client_secret_post). The token lasts 10 minutes (expires_in); ask for a new one when it ends, there is no refresh token. Answers are never cached. Who: any partner app Ezaz registered and hasn't suspended. Errors: 400 invalid_request, unsupported_grant_type or invalid_scope; 401 invalid_client: unknown client, wrong secret or suspended.

الـ Scope
مفيش: دي اللي بتاخد بيها التوكن
operationId
partnerToken

الـ Parameters

الـ parameters بتاعة partnerToken
الاسممكانهاالنوعإجباريالوصف
Authorizationheaderstringلأ
Basic base64(client_id:client_secret), for client_secret_basic

جسم الطلب

نوع المحتوى: application/x-www-form-urlencoded

خانات partnerToken
الاسمالنوعإجباريالوصف
client_idstringلأ
Your client id (kp_…), with client_secret_post only
client_secretstringلأ
Your client secret (ks_…), with client_secret_post only
grant_type"client_credentials"أيوه
Always client_credentials
scopestringلأ
Scopes to ask for, separated by spaces; omit for all you were granted
مثال
client_id=kp_your_client_id&client_secret=ks_your_client_secret&grant_type=client_credentials&scope=venues%3Aread%20availability%3Aread

الردود

200 The token · application/json · PartnerToken

مثال
{
  "access_token": "eyJhbGciOiJIUzI1NiJ9…",
  "expires_in": 600,
  "scope": "venues:read availability:read",
  "token_type": "Bearer"
}

الأخطاء

أخطاء partnerToken
الحالةالوصفنوع المحتوى
400
invalid_request, unsupported_grant_type or invalid_scope
application/jsonPartnerTokenError
401
invalid_client: unknown client, wrong secret or suspended
application/jsonPartnerTokenError

الأماكن والملاعب

get/partner/v1/venues

List the venues that let you sell their courts

Active venues that granted you, with their address, area, contact phone, cancellation cutoff and active courts. Page with after (the previous page's nextCursor) until nextCursor is null; a page can be shorter than limit without being the last. Scopes: venues:read (the token needs every one). Errors: 400 VALIDATION_FAILED; 401 UNAUTHENTICATED; 403 FORBIDDEN; 429 PARTNER_RATE_LIMITED.

الـ Scope
venues:read
operationId
partnerListVenues

الـ Parameters

الـ parameters بتاعة partnerListVenues
الاسممكانهاالنوعإجباريالوصف
afterquerystring (uuid)لأ
The nextCursor of the previous page; omit for the first
limitqueryinteger (int32)لأ
Page sizemin 1 · max 100 · default 50

الردود

200 OK · application/json · PartnerVenuePage

مثال
{
  "items": [
    {
      "address": {
        "ar": "string",
        "en": "string"
      },
      "area": {
        "code": "new-cairo",
        "name": {
          "ar": "string",
          "en": "string"
        }
      },
      "cancellationHours": 24,
      "contactPhone": "+201001234567",
      "courts": [
        {
          "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
          "environment": "string",
          "kind": "string",
          "name": {
            "ar": "string",
            "en": "string"
          }
        }
      ],
      "latitude": 30.0074,
      "longitude": 31.4913,
      "name": {
        "ar": "string",
        "en": "string"
      },
      "photoUrls": [
        "string"
      ],
      "venueId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
    }
  ],
  "nextCursor": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
}

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerListVenues
الحالةالوصفنوع المحتوى
400
The request is invalid: VALIDATION_FAILED (with errors per field)
application/problem+jsonProblem
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

get/partner/v1/venues/{venueId}/availability

Get free slots and prices on a Cairo date

Every active court's free slots of the given length (60, 90 or 120 minutes) starting on the half hour on that Cairo date, inside the venue's opening hours, with the list price of each. Slots are UTC instants; daylight saving is handled (a skipped hour has no slots). Scopes: availability:read (the token needs every one). Errors: 400 VALIDATION_FAILED; 401 UNAUTHENTICATED; 403 FORBIDDEN; 404 VENUE_NOT_FOUND; 429 PARTNER_RATE_LIMITED.

الـ Scope
availability:read
operationId
partnerAvailability

الـ Parameters

الـ parameters بتاعة partnerAvailability
الاسممكانهاالنوعإجباريالوصف
venueIdpathstring (uuid)أيوه
The venue
datequerystring (date)أيوه
A Cairo date (YYYY-MM-DD)
minutesqueryinteger (int32)لأ
Session length: 60, 90 or 120default 60

الردود

200 OK · application/json · array of CourtSlots

مثال
[
  {
    "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
    "slots": [
      {
        "end": "2026-10-10T17:00:00Z",
        "price": {
          "amount": 120000,
          "currency": "EGP"
        },
        "start": "2026-10-10T17:00:00Z"
      }
    ]
  }
]

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerAvailability
الحالةالوصفنوع المحتوى
400
The request is invalid: VALIDATION_FAILED (with errors per field)
application/problem+jsonProblem
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
404
Not found, or not yours to see (the same answer): VENUE_NOT_FOUND
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

get/partner/v1/venues/{venueId}/courts

List a venue's courts with their facts

The venue's active courts: facts (surface, walls, lighting, size, dates), public photos, the rating from published reviews (from 3 reviews) and the safety summary (open issues only, never the reports). Scopes: venues:read (the token needs every one). Errors: 401 UNAUTHENTICATED; 403 FORBIDDEN; 404 VENUE_NOT_FOUND; 429 PARTNER_RATE_LIMITED.

الـ Scope
venues:read
operationId
partnerListCourts

الـ Parameters

الـ parameters بتاعة partnerListCourts
الاسممكانهاالنوعإجباريالوصف
venueIdpathstring (uuid)أيوه
The venue

الردود

200 OK · application/json · array of CourtDetail

مثال
[
  {
    "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
    "environment": "string",
    "kind": "string",
    "lastRenovatedOn": "2026-10-10",
    "latestReviews": [
      {
        "authorName": "Omar H.",
        "cleanliness": 1,
        "comment": "Great glass and new turf.",
        "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
        "createdAt": "2026-10-10T17:00:00Z",
        "id": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
        "lighting": 1,
        "overall": 1,
        "repliedAt": "2026-10-10T17:00:00Z",
        "reply": "Thanks, see you again!",
        "surface": 1
      }
    ],
    "lighting": "string",
    "name": {
      "ar": "string",
      "en": "string"
    },
    "openedOn": "2026-10-10",
    "photoUrls": [
      "string"
    ],
    "rating": {
      "average": 4.5,
      "cleanliness": 1.5,
      "count": 12,
      "lighting": 1.5,
      "surface": 1.5
    },
    "renovationNote": "string",
    "safety": {
      "lastResolvedOn": "2026-10-10",
      "openIssues": 1
    },
    "size": "string",
    "surface": "string",
    "turfBrand": "string",
    "venueId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
    "walls": "string"
  }
]

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerListCourts
الحالةالوصفنوع المحتوى
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
404
Not found, or not yours to see (the same answer): VENUE_NOT_FOUND
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

get/partner/v1/venues/{venueId}/courts/{courtId}

Get one court with its newest reviews

One active court as in the list, plus its newest published reviews. Scopes: venues:read (the token needs every one). Errors: 401 UNAUTHENTICATED; 403 FORBIDDEN; 404 VENUE_NOT_FOUND, COURT_NOT_FOUND; 429 PARTNER_RATE_LIMITED.

الـ Scope
venues:read
operationId
partnerGetCourt

الـ Parameters

الـ parameters بتاعة partnerGetCourt
الاسممكانهاالنوعإجباريالوصف
venueIdpathstring (uuid)أيوه
The venue
courtIdpathstring (uuid)أيوه
The court

الردود

200 OK · application/json · CourtDetail

مثال
{
  "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "environment": "string",
  "kind": "string",
  "lastRenovatedOn": "2026-10-10",
  "latestReviews": [
    {
      "authorName": "Omar H.",
      "cleanliness": 1,
      "comment": "Great glass and new turf.",
      "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
      "createdAt": "2026-10-10T17:00:00Z",
      "id": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
      "lighting": 1,
      "overall": 1,
      "repliedAt": "2026-10-10T17:00:00Z",
      "reply": "Thanks, see you again!",
      "surface": 1
    }
  ],
  "lighting": "string",
  "name": {
    "ar": "string",
    "en": "string"
  },
  "openedOn": "2026-10-10",
  "photoUrls": [
    "string"
  ],
  "rating": {
    "average": 4.5,
    "cleanliness": 1.5,
    "count": 12,
    "lighting": 1.5,
    "surface": 1.5
  },
  "renovationNote": "string",
  "safety": {
    "lastResolvedOn": "2026-10-10",
    "openIssues": 1
  },
  "size": "string",
  "surface": "string",
  "turfBrand": "string",
  "venueId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "walls": "string"
}

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerGetCourt
الحالةالوصفنوع المحتوى
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
404
Not found, or not yours to see (the same answer): VENUE_NOT_FOUND, COURT_NOT_FOUND
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

get/partner/v1/venues/{venueId}/courts/{courtId}/reviews

List a court's published reviews

Published reviews of the court, newest first. Continue with before and beforeId set from the last item's createdAt and id. Hidden reviews never show. Scopes: venues:read (the token needs every one). Errors: 400 VALIDATION_FAILED; 401 UNAUTHENTICATED; 403 FORBIDDEN; 404 VENUE_NOT_FOUND, COURT_NOT_FOUND; 429 PARTNER_RATE_LIMITED.

الـ Scope
venues:read
operationId
partnerListCourtReviews

الـ Parameters

الـ parameters بتاعة partnerListCourtReviews
الاسممكانهاالنوعإجباريالوصف
venueIdpathstring (uuid)أيوه
The venue
courtIdpathstring (uuid)أيوه
The court
beforequerystring (date-time)لأ
Continue after the item created at this instant (from the previous page)
beforeIdquerystring (uuid)لأ
And with this id (ties)
limitqueryinteger (int32)لأ
Page sizemin 1 · max 50 · default 20

الردود

200 OK · application/json · array of Review

مثال
[
  {
    "authorName": "Omar H.",
    "cleanliness": 1,
    "comment": "Great glass and new turf.",
    "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
    "createdAt": "2026-10-10T17:00:00Z",
    "id": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
    "lighting": 1,
    "overall": 1,
    "repliedAt": "2026-10-10T17:00:00Z",
    "reply": "Thanks, see you again!",
    "surface": 1
  }
]

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerListCourtReviews
الحالةالوصفنوع المحتوى
400
The request is invalid: VALIDATION_FAILED (with errors per field)
application/problem+jsonProblem
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
404
Not found, or not yours to see (the same answer): VENUE_NOT_FOUND, COURT_NOT_FOUND
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

post/partner/v1/venues/{venueId}/player-passes

Get a player's packages and memberships at a venue

The packages (minutes left, expiry) and memberships (discount) the player holds at the venue, found by the phone you verified, sent in the body so it never lands in a URL or a log. Lookups are capped per partner app: 60 a minute and 3,000 a day. Scopes: passes:read (the token needs every one). Errors: 400 VALIDATION_FAILED, PHONE_INVALID; 401 UNAUTHENTICATED; 403 FORBIDDEN; 404 VENUE_NOT_FOUND; 429 PARTNER_RATE_LIMITED, PARTNER_PASS_LOOKUPS_LIMITED.

الـ Scope
passes:read
operationId
partnerPlayerPasses

الـ Parameters

الـ parameters بتاعة partnerPlayerPasses
الاسممكانهاالنوعإجباريالوصف
venueIdpathstring (uuid)أيوه
The venue

جسم الطلب

نوع المحتوى: application/json · PlayerLookupRequest

مثال
{
  "phone": "+201001234567"
}

الردود

200 OK · application/json · PlayerPasses

مثال
{
  "memberships": [
    {
      "discountBps": 1000,
      "endsAt": "2026-10-10T17:00:00Z",
      "id": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
      "name": {
        "ar": "string",
        "en": "string"
      },
      "startsAt": "2026-10-10T17:00:00Z"
    }
  ],
  "packages": [
    {
      "expiresAt": "2026-10-10T17:00:00Z",
      "id": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
      "minutesLeft": 1,
      "minutesTotal": 1,
      "name": {
        "ar": "string",
        "en": "string"
      }
    }
  ]
}

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerPlayerPasses
الحالةالوصفنوع المحتوى
400
The request is invalid: VALIDATION_FAILED, PHONE_INVALID (with errors per field)
application/problem+jsonProblem
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
404
Not found, or not yours to see (the same answer): VENUE_NOT_FOUND
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budget; or PARTNER_PASS_LOOKUPS_LIMITED (60 a minute and 3,000 a day per partner app)Retry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

post/partner/v1/venues/{venueId}/quote

Quote a slot for your player

What the slot costs your player: the list price and, when their phone holds a membership at the venue, the member price, which is what they pay however it is paid, prepaid to you or at the venue (ADR 0015). Quote right before booking with PREPAID_BY_PARTNER so you collect the right amount. The phone goes in the body, never the URL. Scopes: availability:read, passes:read (the token needs every one). Errors: 400 VALIDATION_FAILED, PHONE_INVALID, COURT_SLOT_NOT_BOOKABLE; 401 UNAUTHENTICATED; 403 FORBIDDEN; 404 VENUE_NOT_FOUND, COURT_NOT_FOUND; 429 PARTNER_RATE_LIMITED.

الـ Scopes (التوكن لازم يكون فيه كلهم)
availability:readpasses:read
operationId
partnerQuote

الـ Parameters

الـ parameters بتاعة partnerQuote
الاسممكانهاالنوعإجباريالوصف
venueIdpathstring (uuid)أيوه
The venue

جسم الطلب

نوع المحتوى: application/json · QuoteRequest

مثال
{
  "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "minutes": 90,
  "phone": "+201001234567",
  "start": "2026-10-10T17:00:00Z"
}

الردود

200 OK · application/json · Quote

مثال
{
  "charge": {
    "amount": 120000,
    "currency": "EGP"
  },
  "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "discountBps": 1000,
  "end": "2026-10-10T17:00:00Z",
  "price": {
    "amount": 120000,
    "currency": "EGP"
  },
  "start": "2026-10-10T17:00:00Z"
}

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerQuote
الحالةالوصفنوع المحتوى
400
The request is invalid: VALIDATION_FAILED, PHONE_INVALID, COURT_SLOT_NOT_BOOKABLE (with errors per field)
application/problem+jsonProblem
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
404
Not found, or not yours to see (the same answer): VENUE_NOT_FOUND, COURT_NOT_FOUND
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

الحجوزات

get/partner/v1/reservations

List your reservations in a period

Your reservations overlapping [from, to), at most 31 days and 500 reservations, by start; other partners' and the desk's never show. Scopes: reservations:read (the token needs every one). Errors: 400 VALIDATION_FAILED; 401 UNAUTHENTICATED; 403 FORBIDDEN; 429 PARTNER_RATE_LIMITED.

الـ Scope
reservations:read
operationId
partnerListReservations

الـ Parameters

الـ parameters بتاعة partnerListReservations
الاسممكانهاالنوعإجباريالوصف
fromquerystring (date-time)أيوه
Start of the period, an instant in UTC; reservations overlapping [from, to)
toquerystring (date-time)أيوه
End of the period, at most 31 days after from

الردود

200 OK · application/json · array of Reservation

مثال
[
  {
    "cancelReason": "string",
    "cancelledAt": "2026-10-10T17:00:00Z",
    "charge": {
      "amount": 120000,
      "currency": "EGP"
    },
    "checkedInAt": "2026-10-10T17:00:00Z",
    "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
    "createdAt": "2026-10-10T17:00:00Z",
    "customer": {
      "name": "Omar Hassan",
      "phone": "+201001234567"
    },
    "end": "2026-10-10T17:00:00Z",
    "externalRef": "kb_8f2c41",
    "id": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
    "payment": {
      "collected": {
        "amount": 120000,
        "currency": "EGP"
      },
      "method": "PAY_AT_VENUE",
      "packageCreditId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
    },
    "price": {
      "amount": 120000,
      "currency": "EGP"
    },
    "start": "2026-10-10T17:00:00Z",
    "status": "CONFIRMED",
    "venueId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
  }
]

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerListReservations
الحالةالوصفنوع المحتوى
400
The request is invalid: VALIDATION_FAILED (with errors per field)
application/problem+jsonProblem
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

post/partner/v1/reservations

Book a court for your player

Confirmed at once, or COURT_TAKEN when the court is booked then (the database refuses double bookings). Pay at the venue (the desk collects the charge), prepaid by you (you collected; you owe the venue the charge on your statement) or with the player's package (customer.phoneVerified must be true; its minutes are taken now and come back on cancellation). The venue's desk sees the player's name and phone. Sessions are 60, 90 or 120 minutes from a half hour, inside opening hours, up to 30 days ahead. Scopes: reservations:write (the token needs every one). Idempotent: send a unique Idempotency-Key (yours alone, up to 80 characters); a retry with the same key returns the first result instead of creating another. Errors: 400 VALIDATION_FAILED, PHONE_INVALID, COURT_INVALID, COURT_SLOT_NOT_BOOKABLE, COURT_PAYMENT_INVALID, PARTNER_PHONE_NOT_VERIFIED; 401 UNAUTHENTICATED; 403 FORBIDDEN; 404 VENUE_NOT_FOUND, COURT_NOT_FOUND; 409 COURT_TAKEN, EXTERNAL_REF_IN_USE, VENUE_NOT_TAKING_BOOKINGS, COURT_PASS_NOT_USABLE, COURT_RESERVATION_STATE_INVALID; 429 PARTNER_RATE_LIMITED.

الـ Scope
reservations:write
operationId
partnerBook

محتاجة هيدر Idempotency-Key

الـ Parameters

الـ parameters بتاعة partnerBook
الاسممكانهاالنوعإجباريالوصف
Idempotency-Keyheaderstringأيوه
Your unique key for this create (up to 80 characters); a retry with the same key returns the first result

جسم الطلب

نوع المحتوى: application/json · PartnerBookingRequest

مثال
{
  "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "customer": {
    "name": "Omar Hassan",
    "phone": "+201001234567",
    "phoneVerified": true
  },
  "externalRef": "kb_8f2c41",
  "minutes": 90,
  "payment": {
    "collected": {
      "amount": 120000,
      "currency": "EGP"
    },
    "method": "PAY_AT_VENUE",
    "packageCreditId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
  },
  "start": "2026-10-10T17:00:00Z",
  "venueId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
}

الردود

201 Created · application/json · Reservation

مثال
{
  "cancelReason": "string",
  "cancelledAt": "2026-10-10T17:00:00Z",
  "charge": {
    "amount": 120000,
    "currency": "EGP"
  },
  "checkedInAt": "2026-10-10T17:00:00Z",
  "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "createdAt": "2026-10-10T17:00:00Z",
  "customer": {
    "name": "Omar Hassan",
    "phone": "+201001234567"
  },
  "end": "2026-10-10T17:00:00Z",
  "externalRef": "kb_8f2c41",
  "id": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "payment": {
    "collected": {
      "amount": 120000,
      "currency": "EGP"
    },
    "method": "PAY_AT_VENUE",
    "packageCreditId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
  },
  "price": {
    "amount": 120000,
    "currency": "EGP"
  },
  "start": "2026-10-10T17:00:00Z",
  "status": "CONFIRMED",
  "venueId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
}

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerBook
الحالةالوصفنوع المحتوى
400
The request is invalid: VALIDATION_FAILED, PHONE_INVALID, COURT_INVALID, COURT_SLOT_NOT_BOOKABLE, COURT_PAYMENT_INVALID, PARTNER_PHONE_NOT_VERIFIED (a package payment without customer.phoneVerified true) (with errors per field)
application/problem+jsonProblem
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
404
Not found, or not yours to see (the same answer): VENUE_NOT_FOUND, COURT_NOT_FOUND
application/problem+jsonProblem
409application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

get/partner/v1/reservations/{reservationId}

Get one of your reservations

One reservation you made, with its status, price, charge and payment; another partner's is a 404. Scopes: reservations:read (the token needs every one). Errors: 401 UNAUTHENTICATED; 403 FORBIDDEN; 404 COURT_RESERVATION_NOT_FOUND; 429 PARTNER_RATE_LIMITED.

الـ Scope
reservations:read
operationId
partnerGetReservation

الـ Parameters

الـ parameters بتاعة partnerGetReservation
الاسممكانهاالنوعإجباريالوصف
reservationIdpathstring (uuid)أيوه
The reservation

الردود

200 OK · application/json · Reservation

مثال
{
  "cancelReason": "string",
  "cancelledAt": "2026-10-10T17:00:00Z",
  "charge": {
    "amount": 120000,
    "currency": "EGP"
  },
  "checkedInAt": "2026-10-10T17:00:00Z",
  "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "createdAt": "2026-10-10T17:00:00Z",
  "customer": {
    "name": "Omar Hassan",
    "phone": "+201001234567"
  },
  "end": "2026-10-10T17:00:00Z",
  "externalRef": "kb_8f2c41",
  "id": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "payment": {
    "collected": {
      "amount": 120000,
      "currency": "EGP"
    },
    "method": "PAY_AT_VENUE",
    "packageCreditId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
  },
  "price": {
    "amount": 120000,
    "currency": "EGP"
  },
  "start": "2026-10-10T17:00:00Z",
  "status": "CONFIRMED",
  "venueId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
}

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerGetReservation
الحالةالوصفنوع المحتوى
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
404
Not found, or not yours to see (the same answer): COURT_RESERVATION_NOT_FOUND
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

post/partner/v1/reservations/{reservationId}/cancel

Cancel one of your reservations

Free of charge until the venue's cancellation cutoff (Venue.cancellationHours before the start) and before the player checks in; after that only the venue can cancel. Package minutes come back, and the venue's owner is told. A reservation that is no longer confirmed can't be cancelled again. Scopes: reservations:write (the token needs every one). Errors: 401 UNAUTHENTICATED; 403 FORBIDDEN; 404 COURT_RESERVATION_NOT_FOUND; 409 COURT_RESERVATION_NOT_CANCELLABLE; 429 PARTNER_RATE_LIMITED.

الـ Scope
reservations:write
operationId
partnerCancelReservation

الـ Parameters

الـ parameters بتاعة partnerCancelReservation
الاسممكانهاالنوعإجباريالوصف
reservationIdpathstring (uuid)أيوه
The reservation

الردود

200 OK · application/json · Reservation

مثال
{
  "cancelReason": "string",
  "cancelledAt": "2026-10-10T17:00:00Z",
  "charge": {
    "amount": 120000,
    "currency": "EGP"
  },
  "checkedInAt": "2026-10-10T17:00:00Z",
  "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "createdAt": "2026-10-10T17:00:00Z",
  "customer": {
    "name": "Omar Hassan",
    "phone": "+201001234567"
  },
  "end": "2026-10-10T17:00:00Z",
  "externalRef": "kb_8f2c41",
  "id": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "payment": {
    "collected": {
      "amount": 120000,
      "currency": "EGP"
    },
    "method": "PAY_AT_VENUE",
    "packageCreditId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
  },
  "price": {
    "amount": 120000,
    "currency": "EGP"
  },
  "start": "2026-10-10T17:00:00Z",
  "status": "CONFIRMED",
  "venueId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
}

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerCancelReservation
الحالةالوصفنوع المحتوى
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
404
Not found, or not yours to see (the same answer): COURT_RESERVATION_NOT_FOUND
application/problem+jsonProblem
409application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

التقييمات

get/partner/v1/reservations/{reservationId}/review

Get the review of your reservation

The review your player wrote for a reservation you made, with the venue owner's reply when there is one. Scopes: reservations:read (the token needs every one). Errors: 401 UNAUTHENTICATED; 403 FORBIDDEN; 404 COURT_RESERVATION_NOT_FOUND, COURT_REVIEW_NOT_FOUND; 429 PARTNER_RATE_LIMITED.

الـ Scope
reservations:read
operationId
partnerGetReservationReview

الـ Parameters

الـ parameters بتاعة partnerGetReservationReview
الاسممكانهاالنوعإجباريالوصف
reservationIdpathstring (uuid)أيوه
The reservation

الردود

200 OK · application/json · PartnerReview

مثال
{
  "authorName": "Omar H.",
  "comment": "Great glass and new turf.",
  "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "createdAt": "2026-10-10T17:00:00Z",
  "id": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "repliedAt": "2026-10-10T17:00:00Z",
  "reply": "Thanks, see you again!",
  "reservationId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "scores": {
    "cleanliness": 1,
    "lighting": 1,
    "overall": 1,
    "surface": 1
  },
  "status": "string",
  "venueId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
}

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerGetReservationReview
الحالةالوصفنوع المحتوى
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
404
Not found, or not yours to see (the same answer): COURT_RESERVATION_NOT_FOUND, COURT_REVIEW_NOT_FOUND
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

post/partner/v1/reservations/{reservationId}/review

Review a reservation for your player

Your player's stars and words about the court of a reservation you made, once it was played (completed, or confirmed past its end), within 14 days of its end, once. Published at once; sending the same review again returns it, a different one is COURT_REVIEW_EXISTS. You get review.replied when the owner answers. Scopes: reviews:write (the token needs every one). Errors: 400 VALIDATION_FAILED, COURT_REVIEW_INVALID; 401 UNAUTHENTICATED; 403 FORBIDDEN; 404 COURT_RESERVATION_NOT_FOUND; 409 COURT_REVIEW_NOT_ALLOWED, COURT_REVIEW_EXISTS; 429 PARTNER_RATE_LIMITED.

الـ Scope
reviews:write
operationId
partnerReviewReservation

الـ Parameters

الـ parameters بتاعة partnerReviewReservation
الاسممكانهاالنوعإجباريالوصف
reservationIdpathstring (uuid)أيوه
The reservation

جسم الطلب

نوع المحتوى: application/json · PartnerReviewRequest

مثال
{
  "cleanliness": 1,
  "comment": "Great glass and new turf.",
  "lighting": 1,
  "overall": 1,
  "surface": 1
}

الردود

201 Created · application/json · PartnerReview

مثال
{
  "authorName": "Omar H.",
  "comment": "Great glass and new turf.",
  "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "createdAt": "2026-10-10T17:00:00Z",
  "id": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "repliedAt": "2026-10-10T17:00:00Z",
  "reply": "Thanks, see you again!",
  "reservationId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "scores": {
    "cleanliness": 1,
    "lighting": 1,
    "overall": 1,
    "surface": 1
  },
  "status": "string",
  "venueId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
}

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerReviewReservation
الحالةالوصفنوع المحتوى
400
The request is invalid: VALIDATION_FAILED, COURT_REVIEW_INVALID (with errors per field)
application/problem+jsonProblem
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
404
Not found, or not yours to see (the same answer): COURT_RESERVATION_NOT_FOUND
application/problem+jsonProblem
409application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

بلاغات الأمان

post/partner/v1/player-safety-reports

List a player's safety reports through you

The reports your player filed through you, newest first, found by the phone you verified (in the body, never the URL). Continue with before and beforeId from the last item. Scopes: safety_reports:read (the token needs every one). Errors: 400 VALIDATION_FAILED, PHONE_INVALID; 401 UNAUTHENTICATED; 403 FORBIDDEN; 429 PARTNER_RATE_LIMITED.

الـ Scope
safety_reports:read
operationId
partnerPlayerSafetyReports

جسم الطلب

نوع المحتوى: application/json · PlayerReportsRequest

مثال
{
  "before": "2026-10-10T17:00:00Z",
  "beforeId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "limit": 1,
  "phone": "+201001234567"
}

الردود

200 OK · application/json · array of PartnerSafetyReport

مثال
[
  {
    "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
    "courtName": {
      "ar": "string",
      "en": "string"
    },
    "createdAt": "2026-10-10T17:00:00Z",
    "description": "A glass panel by the door is loose.",
    "id": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
    "occurredAt": "2026-10-10T17:00:00Z",
    "photoUrls": [
      "string"
    ],
    "resolutionNote": "string",
    "resolvedAt": "2026-10-10T17:00:00Z",
    "status": "string",
    "type": "string",
    "venueId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
    "venueName": {
      "ar": "string",
      "en": "string"
    }
  }
]

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerPlayerSafetyReports
الحالةالوصفنوع المحتوى
400
The request is invalid: VALIDATION_FAILED, PHONE_INVALID (with errors per field)
application/problem+jsonProblem
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

post/partner/v1/safety-reports

File a safety report for your player

Your player reports a safety problem on a court (a slippery surface, broken glass, an injury); the venue is told at once and never learns who reported. No medical details or names of the injured. At most 5 a day per player through you. You get safety_report.resolved when the venue fixes it. Scopes: safety_reports:write (the token needs every one). Idempotent: send a unique Idempotency-Key (yours alone, up to 80 characters); a retry with the same key returns the first result instead of creating another. Errors: 400 VALIDATION_FAILED, PHONE_INVALID, SAFETY_REPORT_INVALID; 401 UNAUTHENTICATED; 403 FORBIDDEN; 404 VENUE_NOT_FOUND, COURT_NOT_FOUND; 429 PARTNER_RATE_LIMITED, TOO_MANY_SAFETY_REPORTS.

الـ Scope
safety_reports:write
operationId
partnerFileSafetyReport

محتاجة هيدر Idempotency-Key

الـ Parameters

الـ parameters بتاعة partnerFileSafetyReport
الاسممكانهاالنوعإجباريالوصف
Idempotency-Keyheaderstringأيوه
Your unique key for this create (up to 80 characters); a retry with the same key returns the first result

جسم الطلب

نوع المحتوى: application/json · PartnerSafetyReportRequest

مثال
{
  "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "description": "A glass panel by the door is loose.",
  "occurredAt": "2026-10-10T17:00:00Z",
  "phone": "+201001234567",
  "type": "INJURY",
  "venueId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31"
}

الردود

201 Created · application/json · PartnerSafetyReport

مثال
{
  "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "courtName": {
    "ar": "string",
    "en": "string"
  },
  "createdAt": "2026-10-10T17:00:00Z",
  "description": "A glass panel by the door is loose.",
  "id": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "occurredAt": "2026-10-10T17:00:00Z",
  "photoUrls": [
    "string"
  ],
  "resolutionNote": "string",
  "resolvedAt": "2026-10-10T17:00:00Z",
  "status": "string",
  "type": "string",
  "venueId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "venueName": {
    "ar": "string",
    "en": "string"
  }
}

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerFileSafetyReport
الحالةالوصفنوع المحتوى
400
The request is invalid: VALIDATION_FAILED, PHONE_INVALID, SAFETY_REPORT_INVALID (with errors per field)
application/problem+jsonProblem
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
404
Not found, or not yours to see (the same answer): VENUE_NOT_FOUND, COURT_NOT_FOUND
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budget; or TOO_MANY_SAFETY_REPORTS (5 a day per player)Retry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

post/partner/v1/safety-reports/{reportId}/photos

Add a photo to a safety report

A photo of the problem while the report is open: JPEG, PNG or WebP up to 5 MB, at most 3 per report. Stored in the private bucket without its metadata (location, camera) and shown only through links that expire. Scopes: safety_reports:write (the token needs every one). Errors: 400 FILE_REJECTED; 401 UNAUTHENTICATED; 403 FORBIDDEN; 404 SAFETY_REPORT_NOT_FOUND; 409 SAFETY_REPORT_STATE_INVALID; 429 PARTNER_RATE_LIMITED.

الـ Scope
safety_reports:write
operationId
partnerAddSafetyReportPhoto

الـ Parameters

الـ parameters بتاعة partnerAddSafetyReportPhoto
الاسممكانهاالنوعإجباريالوصف
reportIdpathstring (uuid)أيوه
The safety report

جسم الطلب

نوع المحتوى: multipart/form-data

خانات partnerAddSafetyReportPhoto
الاسمالنوعإجباريالوصف
filestring (binary)أيوه
مثال
--boundary
Content-Disposition: form-data; name="file"; filename="court.jpg"
Content-Type: image/jpeg

<file bytes>

الردود

200 OK · application/json · PartnerSafetyReport

مثال
{
  "courtId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "courtName": {
    "ar": "string",
    "en": "string"
  },
  "createdAt": "2026-10-10T17:00:00Z",
  "description": "A glass panel by the door is loose.",
  "id": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "occurredAt": "2026-10-10T17:00:00Z",
  "photoUrls": [
    "string"
  ],
  "resolutionNote": "string",
  "resolvedAt": "2026-10-10T17:00:00Z",
  "status": "string",
  "type": "string",
  "venueId": "3f6c1a52-8d4e-4b7a-9c2f-5e1d0a9b7c31",
  "venueName": {
    "ar": "string",
    "en": "string"
  }
}

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerAddSafetyReportPhoto
الحالةالوصفنوع المحتوى
400
The request is invalid: FILE_REJECTED
application/problem+jsonProblem
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
404
Not found, or not yours to see (the same answer): SAFETY_REPORT_NOT_FOUND
application/problem+jsonProblem
409
Conflict: SAFETY_REPORT_STATE_INVALID (resolved, or 3 photos already)
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

بيانات اللاعب

post/partner/v1/players/erasure

Forward a player's erasure request

For a player who asked you to delete their data (PDPL, ADR 0014): your reservations lose their name and phone, your reviews lose their words (the stars stay), your safety reports are unlinked from them. Only what came through you; amounts stay for the statements. Idempotent: zeros once done. Refused while one of your bookings for them is still to come. Scopes: players:erase (the token needs every one). Errors: 400 VALIDATION_FAILED, PHONE_INVALID; 401 UNAUTHENTICATED; 403 FORBIDDEN; 409 CUSTOMER_HAS_OPEN_COMMITMENTS; 429 PARTNER_RATE_LIMITED.

الـ Scope
players:erase
operationId
partnerErasePlayer

جسم الطلب

نوع المحتوى: application/json · PlayerErasureRequest

مثال
{
  "phone": "+201001234567"
}

الردود

200 OK · application/json · PlayerErasureResponse

مثال
{
  "reservations": 1,
  "reviews": 1,
  "safetyReports": 1
}

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerErasePlayer
الحالةالوصفنوع المحتوى
400
The request is invalid: VALIDATION_FAILED, PHONE_INVALID (with errors per field)
application/problem+jsonProblem
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
409
Conflict: CUSTOMER_HAS_OPEN_COMMITMENTS (one of your bookings for the player is still to come)
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

الـ Webhook

إزاز بيبعت الأحداث دي على اللينك اللي بتحدده هنا. صفحة ابدأ بتشرح كل حدث، وشكل الرسالة، وإزاي تتأكد من توقيعها:

  • reservation.created
  • reservation.checked_in
  • reservation.cancelled
  • reservation.no_show
  • reservation.completed
  • review.replied
  • safety_report.resolved

تجاهل أي نوع حدث متعرفهوش، بس رد عليه برضه بـ 2xx علشان ميتبعتش تاني: الأنواع الجديدة بتيجي في إصدارات صغيرة، زي ما reservation.checked_in جه في 1.2.0.

get/partner/v1/webhook

Get your webhook

Where your events are posted; the secret is not shown again (set the webhook to get a new one). Scopes: webhooks:manage (the token needs every one). Errors: 401 UNAUTHENTICATED; 403 FORBIDDEN; 429 PARTNER_RATE_LIMITED.

الـ Scope
webhooks:manage
operationId
partnerGetWebhook

الردود

200 OK · application/json · PartnerWebhookResponse

مثال
{
  "secret": "whsec_…",
  "url": "https://partner.example/ezaz/webhooks"
}

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerGetWebhook
الحالةالوصفنوع المحتوى
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

put/partner/v1/webhook

Set or remove your webhook

Events (reservation changes, review replies, resolved safety reports) are posted to this public https URL, signed with HMAC-SHA256 in Ezaz-Signature, and retried for a day. Setting it returns a new signing secret; null removes it. Scopes: webhooks:manage (the token needs every one). Errors: 400 VALIDATION_FAILED, PARTNER_WEBHOOK_URL_INVALID; 401 UNAUTHENTICATED; 403 FORBIDDEN; 429 PARTNER_RATE_LIMITED.

الـ Scope
webhooks:manage
operationId
partnerSetWebhook

جسم الطلب

نوع المحتوى: application/json · PartnerWebhookRequest

مثال
{
  "url": "https://partner.example/ezaz/webhooks"
}

الردود

200 OK · application/json · PartnerWebhookResponse

مثال
{
  "secret": "whsec_…",
  "url": "https://partner.example/ezaz/webhooks"
}

الأخطاء

Problem details (application/problem+json) ومعاها code ثابت. كل كود متشرح في الأخطاء، بالعربي والإنجليزي.

أخطاء partnerSetWebhook
الحالةالوصفنوع المحتوى
400
The request is invalid: VALIDATION_FAILED, PARTNER_WEBHOOK_URL_INVALID (with errors per field)
application/problem+jsonProblem
401
UNAUTHENTICATED: no token, an expired or invalid one, or a suspended partner
application/problem+jsonProblem
403
FORBIDDEN: the token lacks a scope this operation needs
application/problem+jsonProblem
429
PARTNER_RATE_LIMITED: over your per-minute budgetRetry-After (integer (int32)): Seconds until the budget resets
application/problem+jsonProblem

الـ Schemas

Area

An Egyptian area

خانات Area
الاسمالنوعإجباريالوصف
codestringلأ
Stable area code, e.g. NEW_CAIRO
nameLocalizedTextلأ
The area's name

Court

A court in a venue list

خانات Court
الاسمالنوعإجباريالوصف
courtIdstring (uuid)لأ
The court
environmentstringلأ
INDOOR, OUTDOOR or COVERED (outdoor under a roof)
kindstringلأ
INDOOR or OUTDOOR
nameLocalizedTextلأ
Name in Arabic and English (either may be missing)

CourtDetail

A court as players see it; facts are null when the venue hasn't said

خانات CourtDetail
الاسمالنوعإجباريالوصف
courtIdstring (uuid)لأ
The court
environmentstringلأ
INDOOR, OUTDOOR or COVERED (outdoor under a roof)
kindstringلأ
INDOOR or OUTDOOR
lastRenovatedOnstring (date)لأ
When it was last renovated (Cairo date)
latestReviewsarray of Reviewلأ
Newest published reviews, on a single court only; null in lists
lightingstringلأ
LED, HALOGEN or NONE; null when not said
nameLocalizedTextلأ
Name in Arabic and English (either may be missing)
openedOnstring (date)لأ
When the court opened (Cairo date)
photoUrlsarray of stringلأ
Public photo URLs, oldest first
ratingRatingلأ
The average of published reviews, from 3 reviews
renovationNotestringلأ
What the renovation was
safetySafetyلأ
Open safety issues and when the venue last resolved one; never the reports
sizestringلأ
STANDARD_DOUBLES or SINGLES; null when not said
surfacestringلأ
ARTIFICIAL_GRASS_SAND_FILLED, ARTIFICIAL_GRASS_NON_SAND, TEXTILE, CONCRETE_ACRYLIC or OTHER; null when not said
turfBrandstringلأ
The grass or turf brand or model
venueIdstring (uuid)لأ
The venue
wallsstringلأ
GLASS_PANORAMIC, GLASS_STANDARD, MESH_ONLY or CONCRETE_WALLS; null when not said

CourtSlots

One court's free slots

خانات CourtSlots
الاسمالنوعإجباريالوصف
courtIdstring (uuid)لأ
The court
slotsarray of Slotلأ
Free slots of the requested length, by start

Customer

Your player on a reservation

خانات Customer
الاسمالنوعإجباريالوصف
namestringلأ
The player's name as you sent it
phonestringلأ
The player's phone as you verified it (E.164)

LocalizedText

Text in Arabic and English

خانات LocalizedText
الاسمالنوعإجباريالوصف
arstringلأ
Arabic text
enstringلأ
English text

Money

An amount in integer piasters

خانات Money
الاسمالنوعإجباريالوصف
amountinteger (int64)لأ
Integer piasters (1 EGP = 100 piasters); never a fraction
currency"EGP"لأ
Always EGP

PartnerBookingRequest

A booking for your player

خانات PartnerBookingRequest
الاسمالنوعإجباريالوصف
courtIdstring (uuid)أيوه
The court
customerPartnerCustomerRequestأيوه
Your player: name and verified phone; the venue's desk sees both
externalRefstringلأ
Your own reference (e.g. your booking id), echoed back and in webhooks; at most one live reservation per referencemaxLength 80
minutesinteger (int32)أيوه
Session length: 60, 90 or 120
paymentPartnerPaymentRequestأيوه
Who collects the charge
startstring (date-time)أيوه
Start, an instant in UTC (ISO-8601)
venueIdstring (uuid)أيوه
The venue

PartnerCustomerRequest

Your player: name and the phone you verified

خانات PartnerCustomerRequest
الاسمالنوعإجباريالوصف
namestringأيوه
The player's name, shown to the venue's deskmaxLength 120
phonestringأيوه
The player's mobile as you verified it, E.164 or any common Egyptian format; it goes in bodies only, never in URLsmaxLength 20
phoneVerifiedbooleanلأ
Your attestation that the player proved this phone to you (for example with a one-time code). Required true to pay with a package (PACKAGE); recorded with the booking

PartnerPaymentRequest

How the booking is paid

خانات PartnerPaymentRequest
الاسمالنوعإجباريالوصف
collectedMoneyلأ
What you collected from the player (PREPAID_BY_PARTNER only); informational
method"PAY_AT_VENUE" | "PREPAID_BY_PARTNER" | "PACKAGE"أيوه
PAY_AT_VENUE (the desk collects), PREPAID_BY_PARTNER (you collected and owe the venue the charge) or PACKAGE (the player's package minutes pay)
packageCreditIdstring (uuid)لأ
The player's package at the venue that pays (PACKAGE only), from player-passes

PartnerReview

A review of a reservation you made

خانات PartnerReview
الاسمالنوعإجباريالوصف
authorNamestringلأ
First name and last initial ("Mona A."), never the full name or phone
commentstringلأ
The player's words, up to 500 characters
courtIdstring (uuid)لأ
The court
createdAtstring (date-time)لأ
When it was created (UTC)
idstring (uuid)لأ
Stable identifier
repliedAtstring (date-time)لأ
When the venue replied (UTC)
replystringلأ
The venue owner's one public reply
reservationIdstring (uuid)لأ
The reservation
scoresScoresلأ
The stars given
statusstringلأ
PUBLISHED or HIDDEN (by Ezaz support)
venueIdstring (uuid)لأ
The venue

PartnerReviewRequest

Your player's stars and words

خانات PartnerReviewRequest
الاسمالنوعإجباريالوصف
cleanlinessinteger (int32)لأ
Stars for the cleanliness, 1 to 5; null when not ratedmin 1 · max 5
commentstringلأ
Optional, up to 500 charactersmaxLength 500
lightinginteger (int32)لأ
Stars for the lighting, 1 to 5; null when not ratedmin 1 · max 5
overallinteger (int32)أيوه
Overall stars, 1 to 5min 1 · max 5
surfaceinteger (int32)لأ
Stars for the surface, 1 to 5; null when not ratedmin 1 · max 5

PartnerSafetyReport

A safety report your player filed

خانات PartnerSafetyReport
الاسمالنوعإجباريالوصف
courtIdstring (uuid)لأ
The court
courtNameLocalizedTextلأ
The court's name
createdAtstring (date-time)لأ
When it was created (UTC)
descriptionstringلأ
What is wrong with the court, as the player wrote it
idstring (uuid)لأ
Stable identifier
occurredAtstring (date-time)لأ
When it happened (UTC)
photoUrlsarray of stringلأ
Signed photo links, valid for 10 minutes
resolutionNotestringلأ
How the venue fixed it
resolvedAtstring (date-time)لأ
When the venue resolved it (UTC)
statusstringلأ
OPEN, or RESOLVED by the venue
typestringلأ
INJURY, SLIPPERY_SURFACE, BROKEN_GLASS_OR_NET, LIGHTING or OTHER
venueIdstring (uuid)لأ
The venue
venueNameLocalizedTextلأ
The venue's name

PartnerSafetyReportRequest

A safety problem on a court, without medical details or names

خانات PartnerSafetyReportRequest
الاسمالنوعإجباريالوصف
courtIdstring (uuid)أيوه
The court
descriptionstringأيوه
What is wrong with the court, in up to 500 characters. Don't include medical details, diagnoses or names of anyone injured.maxLength 500
occurredAtstring (date-time)أيوه
When it happened, within the last 30 days (UTC)
phonestringأيوه
The player's mobile as you verified it; the venue never learns who reportedmaxLength 20
type"INJURY" | "SLIPPERY_SURFACE" | "BROKEN_GLASS_OR_NET" | "LIGHTING" | "OTHER"أيوه
INJURY, SLIPPERY_SURFACE, BROKEN_GLASS_OR_NET, LIGHTING or OTHER
venueIdstring (uuid)أيوه
The venue

PartnerToken

An access token (RFC 6749 §5.1)

خانات PartnerToken
الاسمالنوعإجباريالوصف
access_tokenstringأيوه
Send as Authorization: Bearer <token>
expires_ininteger (int32)أيوه
Seconds it stays valid (600)
scopestringأيوه
The scopes it carries, separated by spaces
token_type"Bearer"أيوه
Always Bearer

PartnerTokenError

A token error (RFC 6749 §5.2)

خانات PartnerTokenError
الاسمالنوعإجباريالوصف
error"invalid_request" | "unsupported_grant_type" | "invalid_scope" | "invalid_client"أيوه
What went wrong

PartnerVenuePage

A page of venues that granted you

خانات PartnerVenuePage
الاسمالنوعإجباريالوصف
itemsarray of Venueلأ
This page
nextCursorstring (uuid)لأ
Pass as `after` for the next page; null on the last page

PartnerWebhookRequest

Where to post your events

خانات PartnerWebhookRequest
الاسمالنوعإجباريالوصف
urlstringلأ
A public https URL; null removes the webhookmaxLength 500

PartnerWebhookResponse

Your webhook

خانات PartnerWebhookResponse
الاسمالنوعإجباريالوصف
secretstringلأ
The signing secret (whsec_…), shown when the URL is set; check Ezaz-Signature with it
urlstringلأ
Where events are posted; null when none

Payment

How a reservation is paid

خانات Payment
الاسمالنوعإجباريالوصف
collectedMoneyلأ
What you collected from the player (PREPAID_BY_PARTNER only); informational
method"PAY_AT_VENUE" | "PREPAID_BY_PARTNER" | "PACKAGE"لأ
PAY_AT_VENUE (the desk collects), PREPAID_BY_PARTNER (you collected and owe the venue the charge) or PACKAGE (the player's package minutes pay)
packageCreditIdstring (uuid)لأ
The player's package at the venue that pays (PACKAGE only), from player-passes

PlayerErasureRequest

The player whose data to erase

خانات PlayerErasureRequest
الاسمالنوعإجباريالوصف
phonestringأيوه
The player's mobile as you verified it, E.164 or any common Egyptian format; it goes in bodies only, never in URLsmaxLength 32

PlayerErasureResponse

What lost the player's data this time; zeros when already done

خانات PlayerErasureResponse
الاسمالنوعإجباريالوصف
reservationsinteger (int32)لأ
Your reservations that lost the player's name and phone
reviewsinteger (int32)لأ
Your reviews that lost the player's words (stars stay)
safetyReportsinteger (int32)لأ
Your safety reports unlinked from the player

PlayerLookupRequest

The player, by the phone you verified

خانات PlayerLookupRequest
الاسمالنوعإجباريالوصف
phonestringأيوه
The player's mobile as you verified it, E.164 or any common Egyptian format; it goes in bodies only, never in URLsmaxLength 20

PlayerMembership

A membership the player holds at the venue

خانات PlayerMembership
الاسمالنوعإجباريالوصف
discountBpsinteger (int32)لأ
The discount on court prices, in basis points (2000 = 20 %)
endsAtstring (date-time)لأ
When it ends (UTC)
idstring (uuid)لأ
The membership
nameLocalizedTextلأ
Name in Arabic and English (either may be missing)
startsAtstring (date-time)لأ
When it starts (UTC)

PlayerPackage

A package of court minutes the player holds at the venue

خانات PlayerPackage
الاسمالنوعإجباريالوصف
expiresAtstring (date-time)لأ
When it expires (UTC); a session must start before
idstring (uuid)لأ
Pass as packageCreditId to pay a reservation with it
minutesLeftinteger (int32)لأ
Court minutes left
minutesTotalinteger (int32)لأ
Court minutes bought
nameLocalizedTextلأ
Name in Arabic and English (either may be missing)

PlayerPasses

A player's packages and memberships at a venue

خانات PlayerPasses
الاسمالنوعإجباريالوصف
membershipsarray of PlayerMembershipلأ
The player's memberships at the venue, newest first
packagesarray of PlayerPackageلأ
The player's packages at the venue, newest first

PlayerReportsRequest

The player, and where the page continues

خانات PlayerReportsRequest
الاسمالنوعإجباريالوصف
beforestring (date-time)لأ
Continue after the item created at this instant (from the previous page)
beforeIdstring (uuid)لأ
And with this id (ties)
limitinteger (int32)لأ
Page size, 1 to 50 (default 20)min 1 · max 50
phonestringأيوه
The player's mobile as you verified it, E.164 or any common Egyptian format; it goes in bodies only, never in URLsmaxLength 20

Problem

RFC 9457 problem details. Branch on code, which is stable; show detail, which is localized and may change

خانات Problem
الاسمالنوعإجباريالوصف
codestringأيوه
Stable error code to branch on
detailstringلأ
What happened, in the Accept-Language (ar or en), for people
errorsarray of objectلأ
Per field, for VALIDATION_FAILED only
errors[].fieldstringلأ
The field, as named in the request
errors[].messagestringلأ
What is wrong with it, in the Accept-Language (ar or en)
instancestringلأ
The request path
statusinteger (int32)أيوه
The HTTP status
titlestringلأ
The HTTP status's reason phrase
typestringلأ
A URI naming the problem: urn:ezaz:problem: and the code

Quote

What a slot costs your player

خانات Quote
الاسمالنوعإجباريالوصف
chargeMoneyلأ
What the player pays, prepaid or at the venue: the member price, or the price
courtIdstring (uuid)لأ
The court
discountBpsinteger (int32)لأ
The player's membership discount in basis points; 0 without one
endstring (date-time)لأ
End, an instant in UTC (ISO-8601)
priceMoneyلأ
The venue's list price for the session
startstring (date-time)لأ
Start, an instant in UTC (ISO-8601)

QuoteRequest

A slot and your player's phone

خانات QuoteRequest
الاسمالنوعإجباريالوصف
courtIdstring (uuid)أيوه
The court
minutesinteger (int32)أيوه
Session length: 60, 90 or 120min 30 · max 1440
phonestringأيوه
The player's mobile as you verified it, E.164 or any common Egyptian format; it goes in bodies only, never in URLsmaxLength 32
startstring (date-time)أيوه
Start, an instant in UTC (ISO-8601)

Rating

A court's rating from published reviews

خانات Rating
الاسمالنوعإجباريالوصف
averagenumber (double)لأ
Overall stars to one decimal; null until there are 3 reviews
cleanlinessnumber (double)لأ
Average cleanliness stars; null until 3 reviews rated it
countinteger (int32)لأ
Published reviews
lightingnumber (double)لأ
Average lighting stars; null until 3 reviews rated it
surfacenumber (double)لأ
Average surface stars; null until 3 reviews rated it

Reservation

A court reservation you made

خانات Reservation
الاسمالنوعإجباريالوصف
cancelReasonstringلأ
PARTNER when you cancelled, otherwise the venue's reason
cancelledAtstring (date-time)لأ
When it was cancelled (UTC)
chargeMoneyلأ
What the venue is owed: the list price less the player's membership discount at the venue (whoever collects it), zero when a package pays
checkedInAtstring (date-time)لأ
When the venue's desk checked the player in (UTC); null until they arrive
courtIdstring (uuid)لأ
The court
createdAtstring (date-time)لأ
When it was created (UTC)
customerCustomerلأ
Your player; null once their data was erased
endstring (date-time)لأ
End, an instant in UTC (ISO-8601)
externalRefstringلأ
Your own reference (e.g. your booking id), echoed back and in webhooks; at most one live reservation per reference
idstring (uuid)لأ
Stable identifier
paymentPaymentلأ
Who collects the charge
priceMoneyلأ
The venue's list price for the session
startstring (date-time)لأ
Start, an instant in UTC (ISO-8601)
status"CONFIRMED" | "CANCELLED" | "COMPLETED" | "NO_SHOW"لأ
CONFIRMED, CANCELLED, COMPLETED or NO_SHOW
venueIdstring (uuid)لأ
The venue

Review

A published review

خانات Review
الاسمالنوعإجباريالوصف
authorNamestringلأ
First name and last initial ("Mona A."), never the full name or phone
cleanlinessinteger (int32)لأ
Stars for the cleanliness, 1 to 5; null when not rated
commentstringلأ
The player's words, up to 500 characters
courtIdstring (uuid)لأ
The court
createdAtstring (date-time)لأ
When it was created (UTC)
idstring (uuid)لأ
Stable identifier
lightinginteger (int32)لأ
Stars for the lighting, 1 to 5; null when not rated
overallinteger (int32)لأ
Overall stars, 1 to 5
repliedAtstring (date-time)لأ
When the venue replied (UTC)
replystringلأ
The venue owner's one public reply
surfaceinteger (int32)لأ
Stars for the surface, 1 to 5; null when not rated

Safety

A court's safety summary; never the reports

خانات Safety
الاسمالنوعإجباريالوصف
lastResolvedOnstring (date)لأ
The Cairo date the venue last resolved one; null if never
openIssuesinteger (int32)لأ
Safety reports on the court the venue hasn't resolved yet

Scores

The stars of a review

خانات Scores
الاسمالنوعإجباريالوصف
cleanlinessinteger (int32)لأ
Stars for the cleanliness, 1 to 5; null when not rated
lightinginteger (int32)لأ
Stars for the lighting, 1 to 5; null when not rated
overallinteger (int32)لأ
Overall stars, 1 to 5
surfaceinteger (int32)لأ
Stars for the surface, 1 to 5; null when not rated

Slot

A free slot and its price

خانات Slot
الاسمالنوعإجباريالوصف
endstring (date-time)لأ
End, an instant in UTC (ISO-8601)
priceMoneyلأ
The venue's list price for the session
startstring (date-time)لأ
Start, an instant in UTC (ISO-8601)

Venue

A venue that lets you sell its courts

خانات Venue
الاسمالنوعإجباريالوصف
addressLocalizedTextلأ
Street address in Arabic and English
areaAreaلأ
The area the venue is in
cancellationHoursinteger (int32)لأ
Players cancel free of charge until this many hours before the start
contactPhonestringلأ
The venue's public number (E.164)
courtsarray of Courtلأ
The venue's active courts
latitudenumber (double)لأ
Map location; null when not pinned
longitudenumber (double)لأ
Map location; null when not pinned
nameLocalizedTextلأ
Name in Arabic and English (either may be missing)
photoUrlsarray of stringلأ
Public photo URLs, oldest first
venueIdstring (uuid)لأ
The venue