# Mark a booking as attended or unattended by a specific member

`POST /api/bookings/{memberId}/attend-booking/{bookingId}`

- **Products:** Operator (`FOH`), Consumer (`CONSUMER`) (any one of these products, not all)
- **Features:** Online Bookings (`ONLINEBOOK`), Front of House Generic Access (`FOHGENERIC`) (any one of these features, not all)

HTML version: [Mark a booking as attended or unattended by a specific member](https://support.gladstonesoftware.cloud/reference/bookings/mark-a-booking-as-attended-or-unattended-by-a-specific-member)

## Overview

Records whether a member turned up for a booking they hold. Use it to check a member in at the door, and use it with `unattend=true` to reverse a check-in that was made in error.

The call sets an absolute state rather than toggling one: sending it twice leaves the member attended, it does not flip them back. If the member is already in the state you are asking for, nothing is changed and no change is passed on to other parts of the platform, and the endpoint still returns `200`. That makes the call safe to repeat.

Attendance is recorded against the member's place on the booking, so the member must already hold a confirmed place. A member who is only on the [alert list](../../guides/glossary.md) for the booking cannot be marked attended, and the request is rejected. Marking a member attended also affects what you can do next: attended bookings are excluded from the default cancellation rules.

## Endpoint

`POST {base_url}/api/bookings/{memberId}/attend-booking/{bookingId}`

`{base_url}` is the environment URL issued to your integration. See [Authenticating with Gladstone APIs](../../guides/authenticating-with-gladstone-apis.md).

## Path parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `memberId` | integer (int32) | Yes | The member whose attendance is being recorded. Must be a positive integer, must exist, and must hold a place on `bookingId`. On a booking with several members, only this member's attendance changes. |
| `bookingId` | integer (int32) | Yes | The booking being attended — one dated instance of a class or activity. Must be a positive integer and must exist. |

## Query parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `unattend` | boolean | No | Set to `true` to clear an attendance mark rather than set one. Defaults to `false` when omitted, so a bare call marks the member as attended. There is no third state: the member ends up either attended or not attended. |

## Sample request

```bash title="cURL"
curl -X POST '{base_url}/api/bookings/{memberId}/attend-booking/{bookingId}' \
  -H 'Authorization: Bearer {accessToken}' \
  -H 'X-Use-SSO: true'
```

## Errors

| Status | Meaning | When |
|--------|---------|------|
| `400` | Bad request | `memberId` is not a positive integer (`Invalid Member ID, must be a positive integer`); `bookingId` is not a positive integer (`Invalid Booking ID, must be a positive integer`); the booking does not exist (`Invalid Booking ID {bookingId}: booking doesn't exist`); or the member is on the booking's alert list rather than holding a place (`Cannot mark member {memberId} as attended for booking {bookingId} as they are on the alert list.`). |
| `404` | Not found | The member does not exist (`Invalid Member ID {memberId}: member doesn't exist`), or exists but holds no place on this booking (`Member not found for specified booking.`). |
| `500` | Internal server error | |
| `503` | Service unavailable | |
