{"openapi":"3.1.0","info":{"title":"MARTIN · API de agentes (El Mostrador)","version":"1.0.0-ola1","description":"Puerta de máquina del restaurante: identidad y disponibilidad real en una llamada. Solo lectura en esta versión (la reserva ejecutable llega en la siguiente). Autenticación por API key del restaurante — la key identifica al restaurante: no se envía ningún identificador de restaurante en las peticiones."},"servers":[{"url":"https://stagent.higa.martinapp.io"}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key"},"bearer":{"type":"http","scheme":"bearer"}}},"security":[{"apiKey":[]},{"bearer":[]}],"paths":{"/agent/v1/restaurant":{"get":{"operationId":"getRestaurant","summary":"Identidad, horarios y políticas del restaurante","responses":{"200":{"description":"Ficha pública del restaurante (sin PII de comensales).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"API key ausente o inválida."}}}},"/agent/v1/public/{restaurante}/restaurant":{"get":{"operationId":"getPublicRestaurant","summary":"Ficha pública del restaurante (sin API key · solo restaurantes con opt-in)","security":[],"parameters":[{"name":"restaurante","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Ficha pública.","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Restaurante sin superficie pública."}}}},"/agent/v1/public/{restaurante}/availability":{"get":{"operationId":"getPublicAvailability","summary":"Huecos reales de un día, sin API key. La fecha admite relativos (hoy/mañana) y, si se omite, es HOY en la zona del restaurante: la URL es ENLAZABLE tal cual desde una web. Cada hora disponible incluye reservar_whatsapp: un enlace que abre la conversación con el restaurante con la petición ya escrita — el humano confirma en un toque (la reserva NUNCA se ejecuta sin el humano).","security":[],"parameters":[{"name":"restaurante","in":"path","required":true,"schema":{"type":"string"}},{"name":"fecha","in":"query","required":false,"description":"YYYY-MM-DD, o un relativo publicable: hoy | today | mañana | tomorrow | proximo | next. «proximo/next» = el próximo día que el restaurante SIRVE según su horario (lo resuelve el restaurante: el consumidor no necesita saber a qué hora cierra la cocina). Si se OMITE se usa HOY en la zona horaria del restaurante — así una URL enlazada desde una web sigue siendo cierta sin que nadie la mantenga. ⚠️ En una URL publicada usa «tomorrow»/«next»: «mañana» lleva ñ y exige percent-encoding (ma%C3%B1ana). Ventana: hoy..+90 días.","schema":{"type":"string"}},{"name":"num_invitados","in":"query","required":true,"schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"Siempre 200 con un `estado` que DISCRIMINA los 4 casos (un día sin hueco no es un error): `abierto` (trae `servicios` con horas y su `reservar_whatsapp`) · `cerrado` (día de descanso/festivo/temporada · `motivo` verbatim del restaurante) · `servicio_terminado` (el día está abierto pero su servicio YA pasó · `horario_del_dia` aparte del `motivo`) · `sin_horario` (indeterminado · `abierto:null`). Los dos casos accionables (`cerrado` y `servicio_terminado`) incluyen `proxima_fecha_con_servicio` — o `null` si no hay ninguno en la ventana, que se declara en vez de inventarse.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Petición inválida."},"404":{"description":"Restaurante sin superficie pública."},"409":{"description":"Grupo por encima del máximo online → vía teléfono del equipo."}}}},"/agent/v1/availability":{"post":{"operationId":"getAvailability","summary":"Huecos reales de un día para un tamaño de grupo, en una llamada","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["num_invitados"],"properties":{"fecha":{"type":"string","description":"YYYY-MM-DD, o un relativo publicable: hoy | today | mañana | tomorrow | proximo | next. «proximo/next» = el próximo día que el restaurante SIRVE según su horario (lo resuelve el restaurante: el consumidor no necesita saber a qué hora cierra la cocina). Si se OMITE se usa HOY en la zona horaria del restaurante — así una URL enlazada desde una web sigue siendo cierta sin que nadie la mantenga. ⚠️ En una URL publicada usa «tomorrow»/«next»: «mañana» lleva ñ y exige percent-encoding (ma%C3%B1ana). Ventana: hoy..+90 días."},"num_invitados":{"type":"integer","minimum":1,"maximum":50}},"additionalProperties":false}}}},"responses":{"200":{"description":"Disponibilidad por servicio (horas con hueco y horas completas), estado del día (abierto/cerrado) y, si aplica al grupo, la señal requerida con sus condiciones. Los grupos por encima del máximo online devuelven la vía de teléfono del equipo.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Petición inválida (fecha/num_invitados fuera de contrato)."},"401":{"description":"API key ausente o inválida."}}}}}}