Private Lessons
Get private lesson instructors
GET /api/public/studio/{studioId}/private-lesson-instructors
Returns instructors who have at least one active availability window and one active pricing entry.
Response
[
{
"id": "instr_xyz",
"name": "Maria",
"lastname": "García",
"image": "https://cdn.bailaya.com/users/xyz/photo.jpg",
"bio": "{\"en\":\"10 years of salsa experience\",\"es\":\"10 años de experiencia\"}",
"availability": [
{
"id": "avail_001",
"dayOfWeek": 1,
"startTime": "09:00",
"endTime": "17:00"
}
],
"pricing": [
{ "id": "price_001", "durationMins": 60, "price": 500, "currency": "MXN" },
{ "id": "price_002", "durationMins": 90, "price": 700, "currency": "MXN" }
]
}
]
dayOfWeek follows JavaScript convention: 0 = Sunday, 1 = Monday … 6 = Saturday.
Booking a private lesson
Private lesson bookings must go through the hosted checkout page. There is no direct booking API endpoint.
Direct students to:
https://www.bailaya.com/{locale}/book/private-lesson/{instructorId}
Example:
https://www.bailaya.com/en/book/private-lesson/instr_xyz
https://www.bailaya.com/es/book/private-lesson/instr_xyz
The checkout page handles guest registration, slot selection, and confirmation. The instructor ID comes from the id field in the private lesson instructors response.
Get private lesson booking questions
GET /api/public/studio/{studioId}/private-lesson-questions
Returns the studio-defined questions students must answer when requesting a private lesson. The hosted checkout page collects these automatically; this endpoint is only needed if you are mirroring the booking UI.
Response
[
{
"id": "plq_abc",
"label": { "en": "Preferred lesson language", "es": "Idioma preferido" },
"type": "DROPDOWN",
"options": [
{ "value": "en", "label": { "en": "English", "es": "Inglés" } },
{ "value": "es", "label": { "en": "Spanish", "es": "Español" } }
],
"required": true
},
{
"id": "plq_def",
"label": { "en": "Anything else we should know?" },
"type": "FREEFORM",
"options": null,
"required": false
}
]
type is either FREEFORM (student types a free text answer) or DROPDOWN (student picks one of the provided options). For DROPDOWN, the value field is the stable internal value sent back when the option is chosen; label is the localized text shown to the student.