Skip to main content
GET
/
api
/
calendar
/
v1
/
public
/
bookings
/
confirmation
/
{confirmation_number}
Lookup Booking
curl --request GET \
  --url https://api.example.com/api/calendar/v1/public/bookings/confirmation/{confirmation_number}
{
  "400": {},
  "403": {},
  "404": {},
  "429": {},
  "booking": {
    "id": "<string>",
    "confirmation_number": "<string>",
    "status": "<string>",
    "organization_slug": "<string>",
    "organization_name": "<string>",
    "start_at": "<string>",
    "end_at": "<string>",
    "service_id": "<string>",
    "service_slug": "<string>",
    "service_name": "<string>",
    "contact": {},
    "location": {},
    "timezone": "<string>"
  }
}

Endpoint

GET https://api.kordless.ai/api/calendar/v1/public/bookings/confirmation/{confirmation_number}
Retrieves booking details using the confirmation number. This endpoint uses contact verification instead of an API key, allowing customers to look up their own bookings.

Authentication

This endpoint uses confirmation number + contact verification instead of an API key.
confirmation_number
string
required
The booking confirmation number (case-insensitive)Example: BOOK_ABC123XYZ or book_abc123xyz
contact
string
required
Email or phone number used when booking. Must match the booking’s contact info.Examples: [email protected] or +1234567890

Response

booking
object
The booking details

Examples

# Lookup by email
curl "https://api.kordless.ai/api/calendar/v1/public/bookings/confirmation/[email protected]"

# Lookup by phone
curl "https://api.kordless.ai/api/calendar/v1/public/bookings/confirmation/BOOK_ABC123XYZ?contact=+1234567890"

Response Example

{
  "booking": {
    "id": "book_abc123xyz",
    "confirmation_number": "BOOK_ABC123XYZ",
    "status": "confirmed",
    "organization_slug": "acme-salon",
    "organization_name": "Acme Salon",
    "start_at": "2025-12-03T14:00:00Z",
    "end_at": "2025-12-03T15:00:00Z",
    "service_id": "haircut",
    "service_slug": "haircut",
    "service_name": "Haircut",
    "contact": {
      "name": "Jane Doe",
      "email": "[email protected]",
      "phone": "+1234567890"
    },
    "location": {
      "type": "onsite",
      "value": "123 Main St, Suite 100"
    },
    "timezone": "America/New_York"
  }
}

Customer Self-Service Page

Build a booking management page for your customers:
// Booking lookup form handler
async function handleLookup(e) {
  e.preventDefault();

  const confirmationNumber = document.getElementById('confirmation').value;
  const contactInfo = document.getElementById('contact').value;

  try {
    const { booking } = await lookupBooking(confirmationNumber, contactInfo);

    // Display booking details
    showBookingDetails({
      status: booking.status,
      service: booking.service_name,
      date: formatDate(booking.start_at, booking.timezone),
      time: formatTime(booking.start_at, booking.timezone),
      location: booking.location.value
    });

    // Show management options if booking is confirmed
    if (booking.status === 'confirmed') {
      showManagementOptions(booking);
    }

  } catch (error) {
    showError('Could not find booking. Please check your confirmation number and contact info.');
  }
}

function showManagementOptions(booking) {
  // Show cancel and reschedule buttons
  document.getElementById('cancel-btn').onclick = () => cancelBooking(booking);
  document.getElementById('reschedule-btn').onclick = () => rescheduleBooking(booking);
}

Use Cases

Booking Confirmation Page

Show booking details after customer books:
// After creating a booking
const { booking } = await createBooking(data);

// Redirect to confirmation page
window.location.href = `/confirmation?number=${booking.confirmation_number}&email=${customerEmail}`;

// On confirmation page
const params = new URLSearchParams(window.location.search);
const { booking } = await lookupBooking(
  params.get('number'),
  params.get('email')
);
Include a link in confirmation emails:
const confirmationUrl = `https://yoursite.com/manage-booking?confirmation=${booking.confirmation_number}&contact=${encodeURIComponent(booking.contact.email)}`;

await sendEmail({
  to: booking.contact.email,
  subject: 'Your Booking Confirmation',
  body: `
    View or manage your booking:
    ${confirmationUrl}
  `
});

Booking Widget Integration

Add a “Manage Booking” tab to your widget:
function BookingManager() {
  const [booking, setBooking] = useState(null);
  const [error, setError] = useState(null);

  async function handleLookup(confirmation, contact) {
    try {
      const { booking } = await lookupBooking(confirmation, contact);
      setBooking(booking);
      setError(null);
    } catch (e) {
      setError('Booking not found');
      setBooking(null);
    }
  }

  return (
    <div>
      <LookupForm onSubmit={handleLookup} />
      {error && <ErrorMessage>{error}</ErrorMessage>}
      {booking && <BookingDetails booking={booking} />}
    </div>
  );
}

Errors

400
Bad Request
Missing contact parameter
{
  "detail": "Contact information is required to manage this booking"
}
403
Forbidden
Contact doesn’t match booking
{
  "detail": "We could not verify that booking with the provided contact information."
}
404
Not Found
Booking not found
{
  "detail": "Booking not found"
}
429
Too Many Requests
Rate limit exceeded