curl "https://api.nevatal.com/api/v1/appointments/doctors/schedule/66dc441b8208f63a0269eecf/form-schema" \
-H "Authorization: Bearer nvtl_your_api_key"
{
"success": true,
"data": {
"locale": "es-CO",
"doctorId": "66dc441b8208f63a0269eecf",
"sections": [
{
"id": "schedule-blocks",
"name": "Bloques de horario",
"repeatable": true,
"minItems": 1,
"fields": [
{ "name": "day", "label": "Día", "type": "select", "required": true,
"options": [{ "value": "monday", "label": "Lunes" }] },
{ "name": "locationId", "label": "Sede", "type": "select", "required": true,
"options": [
{ "value": "69616b710ea6a551535841bb", "label": "Armenia" },
{ "value": "696bdadfee83d82621f17748", "label": "Pereira" }
],
"helpText": "Solo las sedes asignadas a este doctor" },
{ "name": "startTime", "label": "Hora inicio", "type": "time", "required": true,
"validation": { "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", "message": "Formato HH:MM" } }
]
}
],
"currentSchedule": null
}
}
Appointments
Get Schedule Form Schema
Backend-driven descriptor for the schedule editor: fields, options, validation hints and current values
GET
/
api
/
v1
/
appointments
/
doctors
/
schedule
/
{doctorId}
/
form-schema
curl "https://api.nevatal.com/api/v1/appointments/doctors/schedule/66dc441b8208f63a0269eecf/form-schema" \
-H "Authorization: Bearer nvtl_your_api_key"
{
"success": true,
"data": {
"locale": "es-CO",
"doctorId": "66dc441b8208f63a0269eecf",
"sections": [
{
"id": "schedule-blocks",
"name": "Bloques de horario",
"repeatable": true,
"minItems": 1,
"fields": [
{ "name": "day", "label": "Día", "type": "select", "required": true,
"options": [{ "value": "monday", "label": "Lunes" }] },
{ "name": "locationId", "label": "Sede", "type": "select", "required": true,
"options": [
{ "value": "69616b710ea6a551535841bb", "label": "Armenia" },
{ "value": "696bdadfee83d82621f17748", "label": "Pereira" }
],
"helpText": "Solo las sedes asignadas a este doctor" },
{ "name": "startTime", "label": "Hora inicio", "type": "time", "required": true,
"validation": { "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", "message": "Formato HH:MM" } }
]
}
],
"currentSchedule": null
}
}
The schedule editor is rendered from this descriptor — the frontend never
hardcodes day lists, location options or validation patterns. The
Validation hints in the schema are UX helpers only — the backend re-validates
everything on save (assigned location, overlaps, lunch-within-block).
schedule-blocks section is repeatable: fields defines one block row and
the UI renders N rows with add/remove.
Location options are restricted server-side to the doctor’s assigned locations.
When the doctor has a single location, the field arrives disabled: true with
that location preselected — the backend decides that rule, not the frontend.
Path Parameters
string
required
The doctor’s user ID
Response
string
es-CO or en-US — all labels arrive pre-localized.array
One repeatable
schedule-blocks section (repeatable: true, minItems: 1)
whose fields describe a block row: day (select, 7 localized options),
locationId (select, only assigned locations), startTime/endTime/
lunchStartTime/lunchEndTime (time fields with "HH:MM" validation hints).object | null
The doctor’s current schedule (same shape as Get Doctor Schedule), used to
populate the initial rows.
null when no schedule exists yet.curl "https://api.nevatal.com/api/v1/appointments/doctors/schedule/66dc441b8208f63a0269eecf/form-schema" \
-H "Authorization: Bearer nvtl_your_api_key"
{
"success": true,
"data": {
"locale": "es-CO",
"doctorId": "66dc441b8208f63a0269eecf",
"sections": [
{
"id": "schedule-blocks",
"name": "Bloques de horario",
"repeatable": true,
"minItems": 1,
"fields": [
{ "name": "day", "label": "Día", "type": "select", "required": true,
"options": [{ "value": "monday", "label": "Lunes" }] },
{ "name": "locationId", "label": "Sede", "type": "select", "required": true,
"options": [
{ "value": "69616b710ea6a551535841bb", "label": "Armenia" },
{ "value": "696bdadfee83d82621f17748", "label": "Pereira" }
],
"helpText": "Solo las sedes asignadas a este doctor" },
{ "name": "startTime", "label": "Hora inicio", "type": "time", "required": true,
"validation": { "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$", "message": "Formato HH:MM" } }
]
}
],
"currentSchedule": null
}
}

