Court server license
Signed license for a club court server machine. Access: the club token.
Issue a court server license #
POST
/v1/license/courtAccess: Club token Header X-Club-Token: <club token> — the club court server token.
A signed 30-day license for a court server machine. The Ed25519 signature covers the JSON bytes sent base64-encoded in payload; the court server verifies it with an embedded public key. The machine is recorded in the cloud before the revocation check, so the club admin sees every machine that called with the club token. The license carries the club modules per court and day keys for offline player pass checks.
Headers
| Name | Type | Required | Description |
|---|---|---|---|
x-club-token | string | yes | Court server club token |
Request body application/json
| Field | Type | Required | Description |
|---|---|---|---|
fingerprint | string | yes | Machine fingerprint: sha256 as 64 hex characters pattern ^[0-9a-f]{64}$ |
version | string | no | Court server software version length up to 40 |
Example request
curl -X POST "https://your-server/api/v1/license/court" \
-H "X-Club-Token: <club token>" \
-H "Content-Type: application/json" \
-d '{"fingerprint": "<64 hex>", "version": "1.2137"}'Responses
| Code | detail | Meaning |
|---|---|---|
| 200 | — | Success; example below |
| 401 | bad_club_token | Invalid club token |
| 403 | fingerprint_revoked | The machine fingerprint was revoked by the club admin |
| 503 | license_key_not_configured | The license signing key is not configured in the cloud |
| 503 | license_key_invalid | The license signing key cannot be read |
| 422 | […] | Parameter or body validation error: detail is a list of errors |
Example response
{
"alg": "Ed25519",
"payload": "<base64>",
"signature": "<base64>",
"license": {
"v": 2,
"club_id": "c1",
"fingerprint": "<machine sha256>",
"issued_at": 1759400000,
"expires_at": 1761992000,
"features": ["<module>"],
"modules": {"<module>": ["<court>"]},
"courts": 2,
"pass_keys": {"2026-10-02": "<day key>"}
}
}