Bookings
Create booking
Books the party a hold claims, synchronously, and returns the full `booking`.
此内容尚不支持你的语言。
https://api.maple.inc/v1/bookingsAPI keyBooks the party a hold claims, synchronously, and returns the full booking. The location is the hold’s. status follows the venue’s acceptance mode (confirmed, or requested where the venue confirms by hand) and version starts at 0. A guest contact is required on this channel. Writes carry a body-level idempotency_key. Native and provider writes replay the same booking without reapplying the mutation. An uncertain provider result answers 409 operation_in_progress; retry the same key and body. If details.reason is replay_window_expired, contact support with the operation id rather than issuing a new key. Typed refusals: 409 hold_expired / hold_consumed / overlapping_booking / idempotency_key_reused; 422 guest_contact_required, outside_booking_window, payment_instrument_required, provider_rejected; 400 invalid_phone. Requires bookings:write.
Authorization
Send your API key as Authorization: Bearer <key>: mpk_test_… against the sandbox (https://api.staging.maple.inc/v1), mpk_live_… against production. See Authentication. The samples read the key from MAPLE_KEY and the base URL from MAPLE_BASE, as set up in the Quickstart.
Request body
application/json, required.
-
hold_idstring requiredThe hold to book from (
POST /booking_holds). -
slot_tokenstring or nullOptional for existing integrations. The persisted hold supplies the authoritative quote for native and provider-managed locations.
-
guestobject required -
guest.first_namestring required -
guest.last_namestring required -
guest.phonestring requiredE.164. A partner booking must carry a reachable guest contact; the venue contacts the guest here.
-
guest.emailstring or null -
notesstring or nullThe guest’s note to the venue.
-
intake_answersobject[] or nullStructured intake for native bookings. OpenTable does not support these answers and returns 422 capability_unsupported instead of dropping them.
-
intake_answers[].question_refstring requiredThe venue’s intake question reference.
-
intake_answers[].answerstring or boolean or number or string[] requiredFree text, yes/no, a number, or the chosen option references — per the question’s kind.
-
idempotency_keystring requiredYour unique key for this write (body-level, scoped to your app). Retrying with the same key and the same request replays the same booking; the same key with a different request answers 409
idempotency_key_reused. Up to 255 characters.
Responses
200 OK
-
objectstring requiredAlways
booking. -
idstring requiredOpaque, prefixed
bkg_…. -
livemodeboolean required -
creatednumber required -
versionnumber required -
location_idstring required -
statusstring requiredOne of
requested,confirmed,seated,completed,declined_by_venue,cancelled_by_guest,cancelled_by_venue,cancelled_unattributed,no_show. -
service_statestring or null required -
confirmation_codestring required -
starts_atstring requiredISO-8601 UTC instant.
-
starts_at_localstring requiredVenue wall-clock,
YYYY-MM-DDTHH:MM. -
service_datestring requiredThe venue service day the booking belongs to,
YYYY-MM-DD. -
duration_minutesnumber or null requiredTurn duration; null on provider-managed bookings, where Maple never invents one.
-
party_sizenumber required -
guestobject required -
guest.first_namestring or null required -
guest.last_namestring or null required -
guest.phonestring or null requiredE.164, when the guest left one.
-
guest.phone_last_fourstring or null required -
guest.emailstring or null required -
notesstring or null requiredThe guest-facing note; venue-internal notes are never exposed.
-
channelstring requiredThe channel the booking originated on, e.g.
api_partner,voice_ai,internal. -
providerstring requiredOne of
maple,opentable,resy,sevenrooms. -
cancellation_policyobject or null required -
cancellation_policy.typestring required -
cancellation_policy.currencystring or null requiredISO-4217.
-
cancellation_policy.policy_textstring or null required -
cancellation_policy.tiersobject[] required -
cancellation_policy.tiers[].within_hours_before_startnumber required -
cancellation_policy.tiers[].basisstring requiredper_partyorper_person. -
cancellation_policy.tiers[].amount_centsnumber or null required -
cancellation_policy.tiers[].percent_bpsnumber or null requiredBasis points of the party value, when the fee is a percentage.
-
cancellation_policy.depositobject or null required -
cancellation_policy.deposit.amount_centsnumber required -
cancellation_policy.deposit.currencystring required -
cancellation_policy.deposit.basisstring required -
experienceobject or null requiredThe experience booked (prix fixe, ticketed seating), or null for a standard reservation.
-
experience.idstring required -
experience.namestring or null requiredNull when Maple has not seen the name.
-
updated_atstring requiredISO-8601 UTC instant.
Errors
-
400Bad request -
401Unauthorized -
403Forbidden -
404Not found -
409Conflict -
422Unprocessable -
429Too many requests
Every error body names the error in _tag, explains it in message, and says where to report it in feedback. See Errors.
A 429 also sends Retry-After: Seconds to wait before retrying; also returned as retry_after in the body.