List players
const url = 'https://api.krkplaystennis.example/v1/players?limit=20&cursor=bWF0XzJ2YjZucDRrdGY&min_rating=1300&max_rating=1500&venue_id=ven_7hk2p9wq4m';const options = {method: 'GET', headers: {'X-API-Key': '<X-API-Key>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.krkplaystennis.example/v1/players?limit=20&cursor=bWF0XzJ2YjZucDRrdGY&min_rating=1300&max_rating=1500&venue_id=ven_7hk2p9wq4m' \ --header 'X-API-Key: <X-API-Key>'Returns players ordered by display name. Filter by rating range or by preferred venue.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Maximum number of items to return.
The next_cursor value from the previous page. Omit it to get the first page.
Example
bWF0XzJ2YjZucDRrdGYReturns only players with a rating greater than or equal to this value.
Example
1300Returns only players with a rating less than or equal to this value.
Example
1500A venue ID. Starts with ven_.
Returns only players who list this venue as a preferred venue.
Responses
Section titled “Responses”A page of players.
object
object
A player ID. Starts with plr_.
The player’s first name and last initial.
The player’s self-assessed level on the NTRP scale, from 1.5 to 5.5 in steps of 0.5. It sets the starting rating as 1000 + (NTRP - 1.5) × 200 and doesn’t change afterward.
A player’s current rating and confidence.
object
A rating. New players start between 1000 and 1800, based on their self-assessed NTRP level.
How settled a rating is, from 0 to 100. New players start at 20. Each rated match adds 10, up to 95. After 60 days without a rated match, confidence drops by 5 every 30 days, down to 20.
Venues where the player prefers to play.
Weekly time windows when the player can usually play.
A weekly time window, in local time (Europe/Warsaw).
object
Start time, as HH:MM in 24-hour format.
End time, as HH:MM in 24-hour format. Must be later than start.
When the player joined.
Pass this value as cursor to get the next page. null means this is the last page.
Examples
Players at Riverside Courts Podgórze
{ "data": [ { "id": "plr_9fz3tr6wn1", "display_name": "Kasia W.", "self_assessed_ntrp": 4, "rating": { "value": 1499, "confidence": 70 }, "preferred_venue_ids": [ "ven_7hk2p9wq4m" ], "availability": [ { "day": "saturday", "start": "10:00", "end": "14:00" }, { "day": "sunday", "start": "10:00", "end": "12:00" } ], "created_at": "2026-05-11T17:30:00Z" }, { "id": "plr_8mq4ws1yd6", "display_name": "Marta Z.", "self_assessed_ntrp": 3.5, "rating": { "value": 1382, "confidence": 30 }, "preferred_venue_ids": [ "ven_3xr8tn5cva", "ven_7hk2p9wq4m" ], "availability": [ { "day": "tuesday", "start": "19:00", "end": "22:00" } ], "created_at": "2026-09-04T19:02:00Z" }, { "id": "plr_2b7xq9mhk4", "display_name": "Ola K.", "self_assessed_ntrp": 3.5, "rating": { "value": 1432, "confidence": 30 }, "preferred_venue_ids": [ "ven_7hk2p9wq4m" ], "availability": [ { "day": "tuesday", "start": "18:00", "end": "21:00" }, { "day": "saturday", "start": "09:00", "end": "13:00" } ], "created_at": "2026-09-02T08:15:00Z" } ], "next_cursor": null}The request is malformed, for example a query parameter has the wrong type.
An error, as RFC 9457 problem details.
object
A URL that identifies the error type and links to its documentation.
A short summary of the error type. It’s the same for every error of this type.
The HTTP status code.
An explanation of this occurrence of the error.
The request path that caused the error.
One item per invalid field or parameter. Only for invalid-request, invalid-score, and validation-failed.
object
A JSON Pointer to the invalid field in the request body, or #/ followed by the name of an invalid query parameter.
What’s wrong with the field and how to fix it.
Examples
Limit out of range
{ "type": "https://saverio-cirillo.com/krk-plays-tennis-api/errors/#invalid-request", "title": "Invalid request", "status": 400, "detail": "The request has 1 invalid parameter.", "instance": "/v1/players", "errors": [ { "pointer": "#/limit", "detail": "limit must be between 1 and 100." } ]}The credentials are missing, invalid, or expired.
An error, as RFC 9457 problem details.
object
A URL that identifies the error type and links to its documentation.
A short summary of the error type. It’s the same for every error of this type.
The HTTP status code.
An explanation of this occurrence of the error.
The request path that caused the error.
One item per invalid field or parameter. Only for invalid-request, invalid-score, and validation-failed.
object
A JSON Pointer to the invalid field in the request body, or #/ followed by the name of an invalid query parameter.
What’s wrong with the field and how to fix it.
Examples
Missing API key
{ "type": "https://saverio-cirillo.com/krk-plays-tennis-api/errors/#unauthenticated", "title": "Authentication required", "status": 401, "detail": "Send a valid API key in the X-API-Key header.", "instance": "/v1/players/plr_2b7xq9mhk4"}You sent too many requests. Wait for the number of seconds in Retry-After, then retry.
An error, as RFC 9457 problem details.
object
A URL that identifies the error type and links to its documentation.
A short summary of the error type. It’s the same for every error of this type.
The HTTP status code.
An explanation of this occurrence of the error.
The request path that caused the error.
One item per invalid field or parameter. Only for invalid-request, invalid-score, and validation-failed.
object
A JSON Pointer to the invalid field in the request body, or #/ followed by the name of an invalid query parameter.
What’s wrong with the field and how to fix it.
Examples
Rate limit reached
{ "type": "https://saverio-cirillo.com/krk-plays-tennis-api/errors/#rate-limited", "title": "Rate limit reached", "status": 429, "detail": "This API key is limited to 60 requests per minute. Retry after 30 seconds.", "instance": "/v1/matches"}Headers
Section titled “Headers”Number of seconds to wait before you retry.
Example
30© 2026 Saverio Cirillo · KRKplaysTennis is a fictional API · Built with Starlight