Skip to content

Confirm → booking

Terminal window
curl -s -X POST https://api.mrcharles.app/api/v1/public/holds/b59b9109-…/confirm \
-H 'Content-Type: application/json' \
-d '{"paymentMode":"on_site","notes":"Trio, we bring our own cymbals.","email":"marta@example.com"}'

The hold must be verified.

FieldTypeRequiredNotes
paymentModestring✅card or on_site — must be in the room’s paymentModes
notesstring—Up to 500 characters, shown to the studio
emailstring—Second contact for the receipt (useful when channel was phone)
{
"booking": {
"id": "96f52eb7-3360-486a-8d04-47b1663c049d",
"reference": "MC-TGRMY5",
"status": "confirmed",
"paymentMode": "on_site",
"paymentStatus": "unpaid",
"studioName": "Studio Uno",
"roomName": "Rehearsal B",
"guestName": "Marta Ruiz",
"date": "2026-10-08", "startTime": "17:00", "endTime": "19:00",
"timezone": "Europe/Madrid",
"startsAt": "2026-10-08T17:00:00+02:00",
"endsAt": "2026-10-08T19:00:00+02:00",
"minutes": 120,
"priceCents": 5000, "depositCents": 0, "currency": "EUR",
"cancelNoticeHours": 24,
"mayCancel": true,
"notes": "Trio, we bring our own cymbals.",
"paymentDueAt": null,
"createdAt": "2026-10-06T12:14:28+02:00"
},
"manageToken": "1000bb6057d799a44cd4efd8f8edcbf8acdf94264b8d7800ecbca85c547da3a0",
"manageUrl": "https://studio-uno-madrid.sites.mrcharles.app/r/1000bb60…",
"clientSecret": "pi_3Q…_secret_…"
}
  • manageToken is shown once. Store it or hand the guest manageUrl; we cannot recover it.
  • clientSecret is present only when paymentMode is card → Card payments.
  • With card, status is pending_payment and paymentDueAt is 20 minutes ahead.
statusMeaning
pending_paymentCard deposit not received yet; the slot is held until paymentDueAt
confirmedThe booking is real
completedThe session happened (set by the studio)
cancelledBy the guest, the studio, or the system on payment timeout
no_showThe guest did not turn up (set by the studio)
paymentStatusMeaning
unpaidPay at the studio
pendingWaiting for Stripe
deposit_paid / paidMoney received
refundedThe studio refunded
StatusCodeCause
400PAYMENT_MODE_DENIEDThat mode is not allowed for this room
409HOLD_NOT_VERIFIEDVerify the code first
409HOLD_ALREADY_CONFIRMEDA booking already exists for this hold
409PAYMENTS_UNAVAILABLECard payments are not configured
409SLOT_TAKENA conflicting booking appeared — restart
410HOLD_EXPIREDToo slow; create a new hold

The guest gets a message with the reference and the manage link. The studio gets a notification, and a reminder goes out 24 hours before the session. You do not need to send anything yourself.