RegisterLog in

API documentation

Everything apps can do with Judochecker, version 1. JSON over HTTPS.

Base URL

https://www.judochecker.com//api/v1 · Machine-readable: OpenAPI

Two kinds of access

  • Public data: academies, schedules, events and public profiles. Send your app's client id in the X-Client-Id header.
  • For a member: their own data and everything that writes. The member signs in on Judochecker and allows your app (OAuth 2.0, authorization code with PKCE). You get an access token for one hour and a refresh token.
curl https://www.judochecker.com//api/v1/academies?q=gracie \
  -H "X-Client-Id: bcapp_your_client_id"

Signing a member in

1. Send the member to the authorize page with a code challenge (S256):

https://www.judochecker.com//oauth/authorize?response_type=code
  &client_id=bcapp_your_client_id
  &redirect_uri=https://yourapp.com/callback
  &scope=profile:read%20training:write
  &state=random_value
  &code_challenge=BASE64URL(SHA256(verifier))
  &code_challenge_method=S256

2. The member allows the app and comes back to your redirect URI with ?code= and your state. 3. Exchange the code:

curl -X POST https://www.judochecker.com//oauth/token \
  -d grant_type=authorization_code \
  -d code=THE_CODE \
  -d redirect_uri=https://yourapp.com/callback \
  -d client_id=bcapp_your_client_id \
  -d client_secret=YOUR_SECRET \
  -d code_verifier=THE_VERIFIER

Mobile and browser apps register as public clients: they have no secret and must use PKCE. Refresh with grant_type=refresh_token (the refresh token changes every time). Revoke with POST /oauth/revoke.

curl -X POST https://www.judochecker.com//api/v1/me/training \
  -H "Authorization: Bearer ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f1c2e" \
  -d '{"date":"2026-10-01","type":2,"minutes":90,"rounds":6,"style":"gi"}'

Scopes

  • profile:read See your profile, belt, promotion history and verification status
  • training:read See your training log and check-ins
  • training:write Log training for you, and edit or delete the sessions this app logged needs approval
  • checkins:write Check you in to classes at your academies needs approval
  • events:write Mark events you are going to needs approval
  • club:attendance Register attendance at academies you run, for members who allowed this app needs approval

Write scopes are open to an app once we have approved it: ask on your app's page. Apps can never vote, change belts, promotions or verification, send messages or touch payments.

Limits

  • 10,000 calls a day per app (more on request) and 120 a minute per member or IP.
  • Responses carry X-RateLimit-Limit and X-RateLimit-Remaining. Over the limit you get 429.
  • Lists are paged: pass next_cursor back as ?cursor= until it is null.
  • Send an Idempotency-Key header with writes: a retry with the same key never writes twice.

Errors

{"error": {"code": "insufficient_scope", "message": "The token lacks the 'training:write' scope."}}

Privacy

Public data only shows adults with a public profile who have not turned off "Show me in apps". Use the data only for what the member allowed, and delete it when they disconnect your app.

Your member

GET/me profile:read

The member: name, belt, verification, academy

GET/me/promotions profile:read

Promotion history (belts, dates, promoters)

GET/me/academies profile:read

Academies the member belongs to

GET/me/events profile:read

Events the member is going to or interested in

Training log

GET/me/training training:read

Training sessions and check-ins, newest first

?sinceFrom date, YYYY-MM-DD
?untilTo date, YYYY-MM-DD
?limitResults per page, 1-100 (default 25)
?cursornext_cursor from the previous page
POST/me/training training:write

Log a training session

dateYYYY-MM-DD (required)
typeId from /training-types (default 2, class)
minutes0-1440
rounds0-100
style'gi' or 'nogi' (ignored: this site has no gi/no-gi)
noteUp to 10000 characters
GET/me/training/{id} training:read

One session

PATCH/me/training/{id} training:write

Change a session this app logged

date
type
minutes
rounds
style
note
DELETE/me/training/{id} training:write

Delete a session this app logged

POST/me/checkins checkins:write

Check in to one of today's classes (from an hour before until 30 minutes after it)

academy_idAcademy id (required)
class_idClass id from /academies/{id}/schedule (required)
GET/training-types public

Training types an app may log

Academies

GET/academies public

Search academies

?qName, city or affiliation
?countryCountry name
?limitResults per page, 1-100 (default 25)
?cursornext_cursor from the previous page
GET/academies/{id} public

One academy

GET/academies/{id}/schedule public

Weekly class schedule

GET/academies/{id}/members public

Members with public profiles

?limitResults per page, 1-100 (default 25)
?cursornext_cursor from the previous page

Club attendance

GET/academies/{id}/consents club:attendance

Members who allowed this app to register their attendance, and the link to share with the others

GET/academies/{id}/attendance club:attendance

A day's attendance

?dateYYYY-MM-DD (default today)
POST/academies/{id}/attendance club:attendance

Register attendance for a member who allowed it (the token belongs to an admin or coach of the academy)

member_idMember id (required)
class_idClass id (optional)
dateYYYY-MM-DD, up to 14 days back (default today)
noteUp to 500 characters

Members

GET/members public

Search members with public profiles

?qName, at least 2 characters
?limit1-50 (default 20)
GET/members/{id} public

A public profile

GET/members/{id}/promotions public

A public profile's promotion history

Events

GET/events public

Events

?when'upcoming' (default) or 'all'
?countryCountry name
?type1 seminar, 2 competition, 3 training camp, 4 other
?limitResults per page, 1-100 (default 25)
?cursornext_cursor from the previous page
GET/events/{id} public

One event

PUT/events/{id}/rsvp events:write

Set the member's answer

status'going', 'interested', 'not_going' or 'none'

Reference

GET/belts public

All belts and degrees

Changes saved
Success
An error occured
Required fields missing
This person is already on Judochecker.