در حال بارگذاری…
Creates a check-in record for a gym subscription.
| Permission | Description |
|---|---|
gym_subscriptions.checkin | Gym admin can check in a user |
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
| gym-id | int | Yes | ID of the gym | 123 |
| subscription-id | int | Yes | ID of the subscription | 456 |
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
| notes | string | No | Optional note for check-in | "Arrived late" |
{
"notes": "Arrived late"
}
Check-in is refused with 400 when the membership's expires_at is before today (a membership is usable through
its expiry date; null never expires) or when its available_sessions_count is 0. Otherwise a check-in uses one
session: the count goes down by one, unless it is null (unlimited). Deleting a check-in gives
the session back (a check-in from before then spent none, so it refunds none). Before 2026-10-20 check-in ignored both fields and the count never moved.
Returns the created check-in resource.
{
"data": { /* gym subscription check-in resource */ }
}
For a full schema, see Gym Subscription Check-in Resource.
| Status | Description | Reference |
|---|---|---|
| 404 | Not found (invalid gym or subscription, or inactive) | |
| 400 | Already open check-in exists | |
| 400 | Membership expired (expires_at before today): "This membership has expired." | |
| 400 | No sessions left (available_sessions_count is 0): "This membership has no sessions left." | |
| 403 | Forbidden (no permission or gym inactive) | Permission error |
| 401 | Unauthorized | Authentication error |
| 422 | Validation error | Validation error |