Mark a No Show
Record that a customer never came, for the whole booking or one person in a group, and undo it when it was marked by mistake.
POST /v1/bookings/{id}/actions/no-show
POST /v1/bookings/{id}/actions/revert-no-show
POST /v1/bookings/{id}/participants/{participantId}/no-show
POST /v1/bookings/{id}/participants/{participantId}/undo-no-show
Authenticationโ
Requires a valid API key with bookings:write scope.
What a no-show changesโ
The booking stays paid and on the books. Use Cancel Booking instead when the money should go back.
| After a no-show | |
|---|---|
| Seat on the session | Stays sold |
| Rental items | Free for other bookings for the rest of the booking's dates |
| Invoice and revenue | Unchanged. No refund runs and no booking.cancelled webhook is sent |
| Held security deposit | Released |
| Balance still owed | Still due, and collected the same way as on any booking |
| Booking reminders and the Late check-in or Late pickup email | Stop |
A booking can be marked any time it is confirmed, before its start time too (a customer can call ahead). A draft, a quote, a booking request still waiting, a store-only sale and a booking that is already completed or returned are refused.
The whole bookingโ
POST /v1/bookings/{id}/actions/no-show
Marks every part of the booking still waiting: rental items not picked up, activity days not checked in, and everyone on those days who has not checked in. The booking status reads no_show once every part is a no-show. On a booking with rental items and an activity where one half already went ahead, only the waiting half is marked: its lines read no_show in fulfillment_status and the booking keeps its status.
Request bodyโ
| Field | Type | Required | Description |
|---|---|---|---|
email_customer | boolean | No | Send the customer the We missed you email. Default true. Set false when the customer phoned ahead |
part | string | No | gear or activity. Marks only that half of a booking with rental items and an activity. Leave it out to mark the whole booking |
schedule_id | integer | No | With part: "activity", the session that was missed, from experiences[].schedule_id. Without it, the activity day that is due |
The email goes out only when the booking now reads no_show. Marking one person never sends it, and neither does an undo. Read no_show_emails on Get Booking before you ask: when it is false, the mark sends nothing whatever email_customer says.
Request exampleโ
curl -X POST "https://app.equipdash.com/api/v1/bookings/123/actions/no-show" \
-H "Authorization: Bearer eqd_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{"email_customer": false}'
Mark only the rental items of a booking that also has an activity:
curl -X POST "https://app.equipdash.com/api/v1/bookings/123/actions/no-show" \
-H "Authorization: Bearer eqd_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{"part": "gear"}'
The half you name reads no_show in its lines' fulfillment_status. The booking reads no_show once the other half is a no-show too, and completed when the other half went ahead.
Success responseโ
Returns 200 OK with the updated booking, in the same shape as Get Booking:
{
"data": {
"id": 123,
"status": "no_show",
"no_show_at": "2026-11-20T09:42:00+00:00",
"no_show_by": null
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-11-20T09:42:00+00:00"
}
}
no_show_by names the staff member (id, name) when someone marked it in the app or on the phone. An API key has no person behind it, so a mark made with one reads null.
One person in a groupโ
POST /v1/bookings/{id}/participants/{participantId}/no-show
POST /v1/bookings/{id}/participants/{participantId}/undo-no-show
participantId is the id of an entry in the booking's participants array on Get Booking. The rest of the group can still check in. The marked person's participants[].no_show_at is set, and the booking reads no_show only when nobody on it came. A rental is marked as a whole, never person by person.
Request bodyโ
| Field | Type | Required | Description |
|---|---|---|---|
schedule_id | integer | On a booking on several days | The day the person missed, from experiences[].schedule_id. Without it, a person booked on several days returns 422 schedule_id_required |
curl -X POST "https://app.equipdash.com/api/v1/bookings/123/participants/88/no-show" \
-H "Authorization: Bearer eqd_live_your_api_key"
Undoโ
POST /v1/bookings/{id}/actions/revert-no-show
Send the same part (and schedule_id) to undo only that half.
Puts the booking back to confirmed: the marked lines go back to confirmed, the people on them go back to not checked in, and no_show_at and no_show_by are cleared. No email is sent. The undo is refused when another booking has taken the rental items since.
A customer who turns up late does not need an undo. Check them in or hand over the items as normal with POST /v1/bookings/{id}/actions/check-in, POST /v1/bookings/{id}/actions/pickup, Redeem Ticket or a PATCH to checked_in or picked_up, and the no-show is cleared.
Through Update Bookingโ
PATCH /v1/bookings/{id} accepts "status": "no_show" with the same email_customer field. On a booking that reads no_show, a PATCH that sends only status is allowed: confirmed undoes the no-show, and checked_in or picked_up records a late arrival. Any other field returns 409 Conflict.
Finding no-showsโ
GET /v1/bookings lists them two ways:
?status=no_showreturns only bookings that read No show.?filter=no_showalso returns bookings with a no-show inside them: one half of a booking with rental items and an activity, a missed day on a booking on several days, or some people in a group that came.
Webhooksโ
When the booking now reads no_show, booking.no_show fires once, followed by booking.status_changed. Marking one person or one half without changing the booking's status fires booking.updated. An undo fires booking.status_changed. See Webhook Events for the payload.
Errorsโ
| Status | Code | Description |
|---|---|---|
401 | authentication_required | Missing or invalid API key |
403 | insufficient_scope | The API key is missing bookings:write |
404 | resource_not_found | The booking does not exist or belongs to another business, or the person is not on this booking |
422 | validation_error | email_customer is not a boolean, schedule_id is not a positive integer, or part is not gear or activity |
422 | no_show_failed | The booking cannot be marked. The message says why, for example "This booking is already marked as a no-show." |
422 | revert_failed | There is nothing to undo, or another booking has taken the rental items since. The message says why |
422 | schedule_id_required | The person is on several days. Send schedule_id for the day they missed |
Error exampleโ
{
"error": {
"code": "no_show_failed",
"message": "This booking is finished, so it cannot be a no-show."
},
"meta": { "request_id": "req_abc123" }
}