Reservations API
Manage restaurant reservations end-to-end — create new bookings, confirm or seat guests, mark visits as completed, cancel, or record no-shows. All endpoints are scoped to the API key's business and require the business type to be set to restaurant.
Base URL
All URLs referenced in the documentation use the following base:
Restaurant only
Reservations are only available for businesses with type restaurant. Calls from any other business type will respond with 403 and the error message:
{
"message": "This feature is available only for restaurant businesses. Update the business type to enable reservations."
}Reservation Management
Endpoints for listing, creating, updating, and cancelling reservations. Reservations include guest details, party size, date and time, optional table assignment and notes.
List reservations
Retrieve reservations with pagination and rich filters.
searchmatches name, phone, email and table.statusfilters by lifecycle status.fromandtoare ISO timestamps that boundreservation_at.customer_idfilters reservations linked to a CRM customer.
List reservations with optional filters.
curl -X GET "https://api.meetandrock.com/v1/dev/reservations?page=1&limit=10&status=confirmed" \ -H "Authorization: Bearer YOUR_API_KEY"Create reservation
Create a new reservation. Required fields: customer_name, customer_phone, party_size, reservation_at.
Optional fields: customer_email, customer_id, duration_minutes, table_number, notes, status.
Create a reservation in the restaurant.
curl -X POST "https://api.meetandrock.com/v1/dev/reservations" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "customer_name": "Jane Doe", "customer_phone": "+1 555 123 4567", "customer_email": "jane@example.com", "party_size": 4, "reservation_at": "2026-05-12T19:30:00.000Z", "duration_minutes": 90, "table_number": "12", "notes": "Window seat preferred" }'Get reservation
Fetch a single reservation by id, including the optional linked CRM customer.
Get reservation details by id.
curl -X GET "https://api.meetandrock.com/v1/dev/reservations/RES_ID" \ -H "Authorization: Bearer YOUR_API_KEY"Update reservation
Partially update a reservation. Any subset of writeable fields is accepted.
Update writeable fields of a reservation.
curl -X PUT "https://api.meetandrock.com/v1/dev/reservations/RES_ID" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "party_size": 6, "table_number": "21" }'Update status
Move the reservation through its lifecycle. Setting the status to cancelled also stamps cancelled_at automatically.
Update the lifecycle status.
curl -X PATCH "https://api.meetandrock.com/v1/dev/reservations/RES_ID/status" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "status": "confirmed" }'Cancel reservation
Convenience endpoint that cancels a reservation and stores an optional reason.
Cancel a reservation with an optional reason.
curl -X POST "https://api.meetandrock.com/v1/dev/reservations/RES_ID/cancel" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "cancellation_reason": "Guest cancelled" }'Delete reservation
Permanently remove a reservation record. Prefer cancellation for active bookings.
Permanently delete a reservation.
curl -X DELETE "https://api.meetandrock.com/v1/dev/reservations/RES_ID" \ -H "Authorization: Bearer YOUR_API_KEY"Status lifecycle
Reservations move through these statuses:
pending— newly created, awaiting confirmation.confirmed— confirmed by the restaurant.seated— guests have arrived and been seated.completed— visit ended successfully.cancelled— cancelled by guest or staff.no_show— guests did not arrive.
Filters & pagination
All list endpoints support standard page and limit pagination, returning a pagination object with total, page and limit.
Error responses
400 Bad Request
{ "message": "\"customer_phone\" is required" }403 Forbidden
{
"message": "This feature is available only for restaurant businesses..."
}404 Not Found
{ "message": "Reservation not found" }500 Internal Server Error
{ "message": "Something went wrong" }