Skip to main content

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

info

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.