{"openapi":"3.1.0","info":{"title":"Corag Ayuda directa API","version":"1.0.0","description":"API pública e idempotente para publicar solicitudes y ofrecimientos de ayuda en Corag."},"servers":[{"url":"https://ayuda.corag.app"}],"paths":{"/api/public/v1/help":{"get":{"summary":"Consultar la API y las emergencias activas","responses":{"200":{"description":"Emergencias activas y enlaces de integración"}}},"post":{"summary":"Publicar una solicitud o un ofrecimiento","description":"No requiere autenticación. source + externalId hacen la operación idempotente. El contacto se publica y requiere consentimiento explícito.","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/HelpRequest"},{"$ref":"#/components/schemas/HelpOffer"}]}}}},"responses":{"200":{"description":"Reintento idempotente; el registro ya existía"},"201":{"description":"Ayuda publicada"},"400":{"description":"Datos inválidos"},"429":{"description":"Límite temporal alcanzado"}}},"options":{"summary":"CORS preflight","responses":{"204":{"description":"CORS habilitado"}}}},"/mcp":{"post":{"summary":"Servidor MCP remoto de Corag","description":"Endpoint Streamable HTTP compatible con MCP moderno y clientes 2025.","responses":{"200":{"description":"Respuesta MCP"}}}}},"components":{"schemas":{"Common":{"type":"object","required":["source","externalId","title","category","contactName","contactWhatsapp","publishContact"],"properties":{"source":{"type":"string","example":"mi-app"},"externalId":{"type":"string","example":"caso-1842","description":"Identificador estable en la aplicación de origen."},"emergencySlug":{"type":"string","example":"eje-cafetero","description":"Obligatorio cuando hay varias emergencias activas."},"title":{"type":"string","maxLength":100},"description":{"type":"string","maxLength":600},"category":{"type":"string","enum":["alimentos","salud","refugio","transporte","acopio","rescate","otro"]},"contactName":{"type":"string","maxLength":100},"contactWhatsapp":{"type":"string","example":"+573001234567"},"publishContact":{"type":"boolean","const":true,"description":"Confirma que el teléfono puede mostrarse públicamente."}}},"HelpRequest":{"allOf":[{"$ref":"#/components/schemas/Common"},{"type":"object","required":["type","address","latitude","longitude"],"properties":{"type":{"type":"string","const":"request"},"address":{"type":"string"},"neighborhood":{"type":"string"},"latitude":{"type":"number","minimum":-4.3,"maximum":13.6},"longitude":{"type":"number","minimum":-79.1,"maximum":-66.8},"urgency":{"type":"string","enum":["urgent","needed","stable"],"default":"needed"},"neededPeople":{"type":"integer","minimum":0,"maximum":10000,"default":1}}}]},"HelpOffer":{"allOf":[{"$ref":"#/components/schemas/Common"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","const":"offer"},"address":{"type":"string"},"latitude":{"type":"number","minimum":-4.3,"maximum":13.6},"longitude":{"type":"number","minimum":-79.1,"maximum":-66.8},"collectionCenterStatus":{"type":"string","enum":["full","needs_volunteers","needs_resources"]}}}]}}}}