CitaBox gives every clinic a public booking page where patients can reserve appointments on their own — no phone calls required. Once you enable the feature in clinic settings, patients get a dedicated URL they can visit from any device to pick a service, choose a doctor, select a date and time, and submit their details in a few taps.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/FerchoSG/healthcare-web/llms.txt
Use this file to discover all available pages before exploring further.
Online booking is disabled by default. You must turn it on in your clinic settings before patients can access the booking wizard. Look for the Booking enabled toggle under Settings → General.
Booking URL
Your clinic’s public booking page is available at:{clinicSlug} with your clinic’s unique identifier (the same slug that appears in your CitaBox dashboard URL). For example, a clinic with the slug clinica-sol would use https://citabox.app/book/clinica-sol.
Welcome landing page
When a patient visits the booking URL, they land on a welcome page that shows your clinic’s name, contact information, address, and a list of available services. Two call-to-action buttons — Reservar ahora and Empezar reserva — take the patient into the booking wizard. The landing page pulls its content from the public clinic record, which includesname, logo_path, public_phone, public_email, and address. No login is required to view it.
Booking wizard flow
The wizard walks patients through four steps before confirming their appointment.Select a service
The wizard loads all active services for your clinic. Each card shows the service name, description, price (in colones), and estimated duration. The patient taps a service to continue.Optionally, patients can also choose a preferred doctor on this screen. Selecting Cualquiera (any available) lets the backend pick the best slot across all doctors for the chosen service.
Pick a date and time
A calendar lets the patient choose any date from today forward. After selecting a date, the wizard fetches available time slots and shows them in a grid.When the patient selected Cualquiera in step 1, the backend merges availability across all doctors for the service and attaches the assigned
doctor_id to each slot — the patient sees open times without needing to know which doctor covers each one.Enter patient information
The patient fills in their personal details. All fields except WhatsApp are required to proceed.
| Field | Required | Description |
|---|---|---|
first_name | Yes | Patient’s first name |
last_name | Yes | Patient’s last name |
identification | Yes | Cédula or DIMEX number |
whatsapp_phone | No | 8-digit Costa Rican number (+506 prefix added automatically) |
Review and confirm
The patient sees a summary — service, date, time, assigned doctor, and their personal details. Tapping Reservar submits the booking.On success, the wizard displays a confirmation screen with the appointment
id, start_time, end_time, and the doctor’s full name. If the patient provided a WhatsApp number, the confirmation note indicates that details will be sent there.Booking form field reference
The booking form maps to theCreateBookingPayload type. The request is submitted to POST /booking/appointments without authentication (skipAuth: true).
| Field | Type | Required | Notes |
|---|---|---|---|
service_id | string (UUID) | Yes | ID of the selected service |
doctor_id | string (UUID) | Yes | Real doctor UUID; resolved from the chosen time slot when “any” is selected |
date | string | Yes | YYYY-MM-DD format |
time | string | Yes | HH:mm format (24-hour) |
first_name | string | Yes | Patient’s first name |
last_name | string | Yes | Patient’s last name |
identification | string | Yes | Cédula or DIMEX number |
whatsapp_phone | string | No | 8-digit local number, no country code |
BookingConfirmation object containing id, status, start_time, end_time, service.name, and doctor.first_name / doctor.last_name.
Public API endpoints
All booking endpoints are publicly accessible — they do not require a staff authentication token. This is intentional so patients can book without creating a CitaBox account.| Endpoint | Description |
|---|---|
GET /public/clinics/{slug} | Load clinic info for the landing page |
GET /booking/services?clinic_id= | List active services |
GET /booking/doctors?clinic_id= | List doctors, optionally filtered by service |
GET /booking/available-slots?clinic_id=&date= | Fetch time slots for a date |
POST /booking/appointments | Create the appointment |