GET/availabilityHorários marcáveis num intervalo de datas.
Devolve os horários em que é possível marcar, já com a duração, os horários de trabalho, os bloqueios, as ausências, as consultas existentes e o limite de sobreposição aplicados. Usa o mesmo motor do widget de marcação.
Parâmetros
| Parâmetro | Predefinição | Descrição |
|---|
| from | hoje | Primeiro dia, YYYY-MM-DD, inclusive. |
| to | from + 7 dias | Último dia, inclusive. Tem de ser igual ou posterior a from e no máximo 31 dias depois. |
| local_id | todos | Limita a um local. Responde 404 se não pertencer à organização. |
| provider_id | todos | Limita a um profissional. Repetível (provider_id=7&provider_id=9); identificadores desconhecidos são ignorados. |
| service_id | — | Serviço a marcar. Define a duração (a do tipo de marcação associado ao serviço, quando existe; caso contrário, a do próprio serviço) e restringe ao local do serviço. Responde 404 se não existir, estiver inativo ou pertencer a outro local que não o local_id pedido. |
| appointment_type_id | — | Tipo de marcação a marcar (ver «Tipos de marcação»). Define a duração e restringe ao local do tipo; tem prioridade sobre service_id. Responde 404 se não existir, estiver arquivado ou pertencer a outro local que não o local_id pedido. |
| duration_minutes | 30 | Duração em minutos, de 5 a 480. Ignorado quando há service_id ou appointment_type_id. |
Campos da resposta
| Campo | Tipo | Descrição |
|---|
| from, to | data | Intervalo efetivamente calculado. |
| timezone | texto | Sempre Europe/Lisbon. |
| duration_minutes | inteiro | Duração usada para calcular os horários. |
| service_id | inteiro ou null | Serviço pedido, se houver. |
| appointment_type_id | inteiro ou null | Tipo de marcação usado para a duração, se houver. |
| slots | lista | Horários marcáveis, ordenados por início: local_id, provider_id, start e end. |
| professionals | lista | Profissionais considerados: id e display_name. |
| locals | lista | Locais considerados: id, name e public_booking_mode. |
Pedido
curl -H "Authorization: Bearer $MEDORA_KEY" \
"https://api.medora.pt/public/api/v1/availability?service_id=31&from=2026-09-15&to=2026-09-22"
Resposta 200
{
"from": "2026-09-15",
"to": "2026-09-22",
"timezone": "Europe/Lisbon",
"duration_minutes": 30,
"service_id": 31,
"slots": [
{ "local_id": 12, "provider_id": 7, "start": "2026-09-15T09:00:00+01:00", "end": "2026-09-15T09:30:00+01:00" },
{ "local_id": 12, "provider_id": 7, "start": "2026-09-15T09:15:00+01:00", "end": "2026-09-15T09:45:00+01:00" }
],
"professionals": [{ "id": 7, "display_name": "Dra. Ana Silva" }],
"locals": [{ "id": 12, "name": "Clínica São João", "public_booking_mode": "slots" }]
}
- Os horários começam de 15 em 15 minutos, ou no intervalo definido nas regras de agendamento do local, e sobrepõem-se; escolha um.
- Horários já iniciados nunca são devolvidos e dias anteriores a hoje não são calculados.
- Não há antecedência mínima: a clínica decide as suas regras.
- Sem service_id nem appointment_type_id, a duração vem de duration_minutes e não é considerado nenhum serviço.
- Locais em modo requests não devolvem horários; continuam em locals com public_booking_mode.