{
  "openapi": "3.1.0",
  "info": {
    "title": "IAC Trust Registry Public API",
    "version": "1.0.0",
    "description": "Endpoints REST públicos del International Accreditation Center. Sin autenticación. Rate-limit 60/min por IP.",
    "contact": {
      "name": "IAC API Support",
      "email": "contact@accreditationcenter.org",
      "url": "https://www.accreditationcenter.org/contacto"
    },
    "license": {
      "name": "CC BY-ND 4.0",
      "url": "https://creativecommons.org/licenses/by-nd/4.0/"
    },
    "x-status-page": "https://www.accreditationcenter.org/status",
    "x-api-docs": "https://www.accreditationcenter.org/api-docs"
  },
  "servers": [
    {
      "url": "https://www.accreditationcenter.org",
      "description": "Production · static + edge"
    },
    {
      "url": "https://iac-registry-api.fernandoarrietasayour.workers.dev",
      "description": "Trust Registry Worker · Cloudflare"
    }
  ],
  "paths": {
    "/registry/verify": {
      "get": {
        "summary": "Verificar credencial",
        "description": "Verifica una credencial del Trust Registry por código IAC. Retorna ficha pública si está vigente.",
        "parameters": [
          {
            "name": "c",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Código IAC (ej. IAC-2026-REF-00001)"
          },
          {
            "name": "sig",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Prefijo HMAC para verificación firmada"
          }
        ],
        "responses": {
          "200": {
            "description": "OK · payload con ficha pública"
          },
          "404": {
            "description": "Código no encontrado"
          },
          "410": {
            "description": "Registro revocado · estado terminal"
          },
          "429": {
            "description": "Rate limit excedido"
          }
        }
      }
    },
    "/registry": {
      "get": {
        "summary": "Listar registros",
        "description": "Lista paginable de fichas públicas con búsqueda y filtros.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Término de búsqueda"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "maximum": 50
            },
            "description": "Máximo de resultados"
          },
          {
            "name": "tipo",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "profesional",
                "organizacion",
                "programa"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Listado paginable"
          },
          "429": {
            "description": "Rate limit excedido"
          }
        }
      }
    },
    "/registry/health": {
      "get": {
        "summary": "Health check del Trust Registry",
        "description": "Estado operativo del worker. Sin auth. Sin rate-limit. Equivale a /healthz y /health.",
        "responses": {
          "200": {
            "description": "Operacional"
          },
          "503": {
            "description": "Servicio degradado"
          }
        }
      }
    },
    "/standards/publicaciones.json": {
      "get": {
        "summary": "Corpus técnico · listado",
        "description": "Listado completo del corpus técnico publicado. Paginable, filtrable.",
        "parameters": [
          {
            "name": "categoria",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "estado",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "Published",
                "Open for comments",
                "Superseded"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Listado completo · esquema documentado en /api-docs"
          }
        }
      }
    },
    "/standards/publicaciones/{id}.json": {
      "get": {
        "summary": "Documento individual del corpus",
        "description": "Recupera un documento individual del corpus técnico por identificador estable.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Documento individual · ETag soportado"
          },
          "404": {
            "description": "No encontrado"
          }
        }
      }
    },
    "/standards/feed.atom": {
      "get": {
        "summary": "Feed Atom · publicaciones y revisiones",
        "responses": {
          "200": {
            "description": "Atom XML"
          }
        }
      }
    },
    "/status.json": {
      "get": {
        "summary": "Estado operativo del sistema",
        "description": "Health check público del sistema completo. Métricas, servicios, 90 días de uptime, incidentes.",
        "responses": {
          "200": {
            "description": "Estado completo del sistema"
          }
        }
      }
    },
    "/status/feed.atom": {
      "get": {
        "summary": "Feed Atom · incidentes y cambios de estado",
        "responses": {
          "200": {
            "description": "Atom XML"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "FichaPublica": {
        "type": "object",
        "required": [
          "codigo",
          "tipo",
          "estado"
        ],
        "properties": {
          "codigo": {
            "type": "string",
            "example": "IAC-2026-REF-00001"
          },
          "tipo": {
            "type": "string",
            "enum": [
              "Profesional",
              "Organización",
              "Programa"
            ]
          },
          "estado": {
            "type": "string",
            "enum": [
              "Activo",
              "Vencido",
              "Suspendido",
              "Revocado",
              "En revisión"
            ]
          },
          "modalidad": {
            "type": "string",
            "enum": [
              "estandar",
              "protegida"
            ]
          },
          "titular_publico": {
            "type": "string"
          },
          "programa_norma": {
            "type": "string"
          },
          "alcance": {
            "type": "string"
          },
          "fecha_emision": {
            "type": "string",
            "format": "date"
          },
          "fecha_vigencia": {
            "type": "string",
            "format": "date"
          },
          "ultima_actualizacion": {
            "type": "string",
            "format": "date"
          }
        }
      },
      "HealthCheck": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "operational",
              "degraded",
              "major"
            ]
          },
          "service": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "region": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "Trust Registry",
      "description": "Verificación de credenciales acreditadas"
    },
    {
      "name": "Standards",
      "description": "Corpus técnico citable"
    },
    {
      "name": "Status",
      "description": "Salud operativa del sistema"
    }
  ]
}