{
  "openapi": "3.1.0",
  "info": { "title": "FirmaRED · API pública de verificación", "version": "1.0.0", "description": "Verificación pública de firmas electrónicas con criptografía post-cuántica, sellos de tiempo y hechos de la máquina (actas de agentes, notas de FirmaRED Hoy, cierres del día). Sin cuenta ni clave. Public verification API; no auth.", "contact": { "name": "FirmaRED", "url": "https://firmared.com/soporte" } },
  "servers": [ { "url": "https://firmared.com" } ],
  "paths": {
    "/v/{codigo}": { "get": { "summary": "Página corta de verificación (HTML, con JSON-LD)", "parameters": [ { "name": "codigo", "in": "path", "required": true, "schema": { "type": "string", "minLength": 10 } } ], "responses": { "200": { "description": "Qué es, cuándo y las pruebas" }, "404": { "description": "No existe" } } } },
    "/api/public/estado/{id}": { "get": { "summary": "Estado de una firma pública", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "JSON con estado, sellos y anclajes" } } } },
    "/api/public/sello/{id}": { "get": { "summary": "Sello de tiempo (no antes / no después) de una firma", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Beacons drand/NIST y TSA RFC 3161" } } } },
    "/api/public/verificar-pqc/{hash}": { "get": { "summary": "Pruebas post-cuánticas (ML-DSA) de un hash", "parameters": [ { "name": "hash", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Verificación" } } } },
    "/api/public/hecho/{hash}": { "get": { "summary": "Hecho de la máquina por hash (acta, nota, jugada, cierre)", "parameters": [ { "name": "hash", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Hecho verificable" }, "404": { "description": "No existe" } } } },
    "/api/public/contadores": { "get": { "summary": "Contadores honestos: firmas de personas y hechos de la máquina, por separado", "responses": { "200": { "description": "JSON" } } } },
    "/api/hoy/nota/{id}": { "get": { "summary": "Nota de FirmaRED Hoy con beacons y TSA", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Nota y verificación" }, "404": { "description": "No existe" } } } },
    "/api/hoy/feed": { "get": { "summary": "Portada de FirmaRED Hoy", "parameters": [ { "name": "n", "in": "query", "schema": { "type": "integer", "maximum": 60 } } ], "responses": { "200": { "description": "Notas con fuente, autor y hora sellada" } } } },
    "/api/hoy/escena": { "get": { "summary": "La foto del momento vigente", "responses": { "200": { "description": "Titular, escena, hilos, hora, acta" } } } },
    "/api/hoy/audiovisual": { "get": { "summary": "Audiovisual Hoy: momentos de videos recién subidos", "responses": { "200": { "description": "Videos publicados con momentos" } } } },
    "/api/cierres/{fecha}": { "get": { "summary": "Cierre del día (raíz Merkle, conteos, anclajes)", "parameters": [ { "name": "fecha", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" } } ], "responses": { "200": { "description": "Documento del cierre" }, "404": { "description": "No existe" } } } }
  }
}
