{"openapi":"3.1.0","info":{"title":"Crocantísimo — API pública","version":"1.0.0","summary":"Endpoints públicos de Crocantísimo para agentes e integraciones.","description":"Crocantísimo es una plataforma argentina para comer mejor: recetarios en PDF que se descargan gratis y Crocán, un acompañante de alimentación y hábitos con IA. Esta API expone las operaciones públicas: buscar guías del blog, pedir la descarga gratuita de un recetario y suscribirse a la guía de tiempos. Para el resumen navegable del sitio ver /llms.txt.","contact":{"name":"Crocantísimo","email":"hola@crocantisimo.app","url":"https://crocantisimo.app"},"license":{"name":"Uso propietario","url":"https://crocantisimo.app/terminos"}},"servers":[{"url":"https://crocantisimo.app","description":"Producción"}],"externalDocs":{"description":"Documentación para desarrolladores y agentes","url":"https://crocantisimo.app/docs"},"tags":[{"name":"Contenido","description":"Descubrimiento de guías y recetarios."},{"name":"Leads","description":"Captura de email y descarga gratuita."}],"paths":{"/api/blog/search":{"get":{"operationId":"searchBlog","tags":["Contenido"],"summary":"Buscar guías del blog","description":"Busca en el blog de Crocantísimo (guías de cocina en freidora de aire, ideas y trucos, pensadas para Argentina). Devuelve los resultados rankeados por relevancia. Endpoint de solo lectura, sin autenticación.","parameters":[{"name":"q","in":"query","required":false,"description":"Texto de búsqueda (título, categoría, descripción, keywords).","schema":{"type":"string"},"example":"papas fritas"},{"name":"cat","in":"query","required":false,"description":"Slug de categoría para acotar la búsqueda.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Cantidad máxima de resultados (1–60, default 24).","schema":{"type":"integer","minimum":1,"maximum":60,"default":24}},{"name":"offset","in":"query","required":false,"description":"Desplazamiento para paginar.","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Resultados de la búsqueda.","content":{"application/json":{"schema":{"type":"object","required":["total","results"],"properties":{"total":{"type":"integer","description":"Total de coincidencias."},"results":{"type":"array","items":{"type":"object","required":["slug","title"],"properties":{"slug":{"type":"string","description":"Slug del post; la URL es /blog/{slug}."},"title":{"type":"string"},"category":{"type":"string"},"emoji":{"type":"string"},"description":{"type":"string"},"minutes":{"type":"integer","description":"Minutos de lectura."}}}}}}}}}}}},"/api/free-download":{"post":{"operationId":"requestFreeRecetario","tags":["Leads"],"summary":"Descargar gratis un recetario","description":"Solicita la descarga gratuita de un recetario. Otorga el acceso al email indicado y envía por correo el PDF (o el link de descarga). Idempotente por (email, recetario).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","slug"],"properties":{"email":{"type":"string","format":"email","description":"Email de entrega."},"slug":{"type":"string","description":"Identificador del recetario (ver /llms.txt). Ej: air-fryer.","example":"air-fryer"},"name":{"type":"string","description":"Nombre del destinatario (opcional)."}}}}}},"responses":{"200":{"description":"Recetario entregado; se abre sesión automáticamente.","content":{"application/json":{"schema":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean","enum":[true]},"accountUrl":{"type":"string","description":"URL de la cuenta del usuario."}}}}}},"400":{"description":"Email inválido o body malformado.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","code","message"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Código de error estable (compat).","example":"email_invalido"},"code":{"type":"string","description":"Código de error estable.","example":"email_invalido"},"message":{"type":"string","description":"Mensaje legible del error."},"hint":{"type":"string","description":"Pista concreta para resolver el error."}}}}}},"404":{"description":"Recetario inexistente o no disponible gratis.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","code","message"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Código de error estable (compat).","example":"email_invalido"},"code":{"type":"string","description":"Código de error estable.","example":"email_invalido"},"message":{"type":"string","description":"Mensaje legible del error."},"hint":{"type":"string","description":"Pista concreta para resolver el error."}}}}}},"502":{"description":"Fallo transitorio de entrega.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","code","message"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Código de error estable (compat).","example":"email_invalido"},"code":{"type":"string","description":"Código de error estable.","example":"email_invalido"},"message":{"type":"string","description":"Mensaje legible del error."},"hint":{"type":"string","description":"Pista concreta para resolver el error."}}}}}}}}},"/api/lead":{"post":{"operationId":"requestTiemposGuide","tags":["Leads"],"summary":"Recibir la guía de tiempos y temperaturas","description":"Captura un email y envía por correo la tabla imprimible de tiempos y temperaturas para freidora de aire (PDF). Sin autenticación.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email","description":"Email de entrega."}}}}}},"responses":{"200":{"description":"Email enviado.","content":{"application/json":{"schema":{"type":"object","required":["ok"],"properties":{"ok":{"type":"boolean","enum":[true]}}}}}},"400":{"description":"Email inválido.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","code","message"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Código de error estable (compat).","example":"email_invalido"},"code":{"type":"string","description":"Código de error estable.","example":"email_invalido"},"message":{"type":"string","description":"Mensaje legible del error."},"hint":{"type":"string","description":"Pista concreta para resolver el error."}}}}}},"502":{"description":"Fallo transitorio de envío.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","code","message"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Código de error estable (compat).","example":"email_invalido"},"code":{"type":"string","description":"Código de error estable.","example":"email_invalido"},"message":{"type":"string","description":"Mensaje legible del error."},"hint":{"type":"string","description":"Pista concreta para resolver el error."}}}}}}}}},"/llms.txt":{"get":{"operationId":"getLlmsTxt","tags":["Contenido"],"summary":"Resumen del sitio para LLMs (llmstxt.org)","description":"Devuelve un resumen estructurado en Markdown del sitio (recetarios, guías, cómo funciona, cuándo usar Crocantísimo), pensado para que los asistentes de IA entiendan y citen la plataforma.","responses":{"200":{"description":"Resumen en Markdown.","content":{"text/markdown":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["ok","error","code","message"],"properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string","description":"Código de error estable (compat).","example":"email_invalido"},"code":{"type":"string","description":"Código de error estable.","example":"email_invalido"},"message":{"type":"string","description":"Mensaje legible del error."},"hint":{"type":"string","description":"Pista concreta para resolver el error."}}}}}}