{
  "openapi": "3.1.0",
  "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
  "info": {
    "title": "ConnectSalud Content API",
    "version": "1.0.0",
    "summary": "Contenido público de ConnectSalud para desarrolladores y agentes.",
    "description": "API estática de solo lectura (GET) sin autenticación. Expone datos de la empresa, preguntas frecuentes, glosario e índice de páginas. No contiene datos personales ni endpoints transaccionales. Los errores 4xx/5xx devuelven un objeto tipado `{ error: { code, message, status } }` (schema Error) y también están disponibles como `application/problem+json` (RFC 9457, schema Problem). La política de deprecación y versionado se publica en /api/deprecation-policy.json.",
    "license": {
      "name": "CC-BY-4.0",
      "identifier": "CC-BY-4.0"
    },
    "contact": {
      "name": "ConnectSalud",
      "email": "conecta@connectsalud.app",
      "url": "https://www.connectsalud.app/developers"
    }
  },
  "externalDocs": {
    "description": "Documentación para desarrolladores",
    "url": "https://www.connectsalud.app/developers"
  },
  "servers": [
    {
      "url": "https://www.connectsalud.app"
    }
  ],
  "x-api-versioning": {
    "strategy": "url-path",
    "current": "v1",
    "versions_document": "https://www.connectsalud.app/api/versions.json",
    "policy_document": "https://www.connectsalud.app/api/deprecation-policy.json",
    "deprecation_policy": {
      "breaking_changes": "Se publican bajo una nueva major en /api/v2/.",
      "additive_changes": "Se hacen dentro de la major vigente (vN) sin aviso previo.",
      "unversioned_aliases": "Los alias sin versión (/api/*.json) siguen la major actual.",
      "signaling": [
        "Deprecation header (RFC 9745)",
        "Sunset header (RFC 8594)"
      ],
      "minimum_notice_days": 180
    }
  },
  "x-ratelimit": {
    "policy": "default;q=600;w=3600",
    "limit": 600,
    "window_seconds": 3600,
    "headers": [
      "RateLimit-Limit",
      "RateLimit-Remaining",
      "RateLimit-Reset",
      "RateLimit-Policy",
      "RateLimit"
    ],
    "on_429": {
      "status": 429,
      "headers": [
        "RateLimit-Limit",
        "RateLimit-Remaining",
        "RateLimit-Reset",
        "RateLimit-Policy",
        "RateLimit",
        "Retry-After"
      ],
      "media_type": "application/json"
    }
  },
  "paths": {
    "/api/v1/company.json": {
      "get": {
        "operationId": "getCompany",
        "summary": "Datos públicos de ConnectSalud C.A.",
        "tags": [
          "content"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "Tipo de contenido aceptado. La API solo responde JSON.",
            "schema": {
              "type": "string",
              "enum": [
                "application/json"
              ],
              "default": "application/json"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Datos de la empresa.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "object": {
                      "type": "string",
                      "const": "company"
                    },
                    "name": {
                      "type": "string"
                    },
                    "legal_name": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "email": {
                      "type": "string",
                      "format": "email"
                    },
                    "telephone": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "address": {
                      "type": "object",
                      "properties": {
                        "country": {
                          "type": "string"
                        },
                        "region": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "country",
                        "region"
                      ]
                    },
                    "areas_served": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "languages": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "same_as": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "pricing_model": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": false
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Se superó el límite de peticiones.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos que el cliente debe esperar antes de reintentar."
              },
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "500": {
            "description": "Error interno al servir el recurso estático.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/pages.json": {
      "get": {
        "operationId": "listPages",
        "summary": "Índice de páginas indexables del sitio.",
        "tags": [
          "content"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "Tipo de contenido aceptado. La API solo responde JSON.",
            "schema": {
              "type": "string",
              "enum": [
                "application/json"
              ],
              "default": "application/json"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de páginas.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "object": {
                      "type": "string",
                      "const": "list"
                    },
                    "count": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "path": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string",
                            "format": "uri"
                          },
                          "title": {
                            "type": "string"
                          },
                          "description": {
                            "type": "string"
                          },
                          "changefreq": {
                            "type": "string",
                            "enum": [
                              "always",
                              "hourly",
                              "daily",
                              "weekly",
                              "monthly",
                              "yearly",
                              "never"
                            ]
                          },
                          "priority": {
                            "type": "number",
                            "minimum": 0,
                            "maximum": 1
                          }
                        },
                        "additionalProperties": false
                      }
                    }
                  },
                  "additionalProperties": false
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Se superó el límite de peticiones.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos que el cliente debe esperar antes de reintentar."
              },
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "500": {
            "description": "Error interno al servir el recurso estático.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/faqs.json": {
      "get": {
        "operationId": "listFaqs",
        "summary": "Preguntas frecuentes.",
        "tags": [
          "content"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "Tipo de contenido aceptado. La API solo responde JSON.",
            "schema": {
              "type": "string",
              "enum": [
                "application/json"
              ],
              "default": "application/json"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de preguntas frecuentes.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "object": {
                      "type": "string",
                      "const": "list"
                    },
                    "count": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "question": {
                            "type": "string"
                          },
                          "answer": {
                            "type": "string"
                          }
                        },
                        "additionalProperties": false
                      }
                    }
                  },
                  "additionalProperties": false
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Se superó el límite de peticiones.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos que el cliente debe esperar antes de reintentar."
              },
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "500": {
            "description": "Error interno al servir el recurso estático.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/glossary.json": {
      "get": {
        "operationId": "listGlossary",
        "summary": "Glosario de términos de ConnectSalud.",
        "tags": [
          "content"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "Tipo de contenido aceptado. La API solo responde JSON.",
            "schema": {
              "type": "string",
              "enum": [
                "application/json"
              ],
              "default": "application/json"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Lista de términos del glosario.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "object": {
                      "type": "string",
                      "const": "list"
                    },
                    "count": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "object": {
                            "type": "string",
                            "const": "glossary_term"
                          },
                          "slug": {
                            "type": "string",
                            "enum": [
                              "tap",
                              "validacion-en-3-capas",
                              "qr-rotativo",
                              "gamificacion-preventiva"
                            ]
                          },
                          "term": {
                            "type": "string"
                          },
                          "name": {
                            "type": "string"
                          },
                          "definition": {
                            "type": "string"
                          },
                          "related": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "additionalProperties": false
                      }
                    }
                  },
                  "additionalProperties": false
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Se superó el límite de peticiones.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos que el cliente debe esperar antes de reintentar."
              },
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "500": {
            "description": "Error interno al servir el recurso estático.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/glossary/{slug}.json": {
      "get": {
        "operationId": "getGlossaryTerm",
        "summary": "Un término del glosario por slug.",
        "tags": [
          "content"
        ],
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "Tipo de contenido aceptado. La API solo responde JSON.",
            "schema": {
              "type": "string",
              "enum": [
                "application/json"
              ],
              "default": "application/json"
            }
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Identificador del término.",
            "schema": {
              "type": "string",
              "enum": [
                "tap",
                "validacion-en-3-capas",
                "qr-rotativo",
                "gamificacion-preventiva"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Término del glosario.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "object": {
                      "type": "string",
                      "const": "glossary_term"
                    },
                    "slug": {
                      "type": "string",
                      "enum": [
                        "tap",
                        "validacion-en-3-capas",
                        "qr-rotativo",
                        "gamificacion-preventiva"
                      ]
                    },
                    "term": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string"
                    },
                    "definition": {
                      "type": "string"
                    },
                    "related": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  },
                  "additionalProperties": false
                }
              }
            }
          },
          "404": {
            "description": "Recurso no encontrado.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Se superó el límite de peticiones.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos que el cliente debe esperar antes de reintentar."
              },
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "500": {
            "description": "Error interno al servir el recurso estático.",
            "headers": {
              "RateLimit-Limit": {
                "schema": {
                  "type": "integer"
                },
                "description": "Cuota de peticiones en la ventana actual."
              },
              "RateLimit-Remaining": {
                "schema": {
                  "type": "integer"
                },
                "description": "Peticiones restantes en la ventana actual."
              },
              "RateLimit-Reset": {
                "schema": {
                  "type": "integer"
                },
                "description": "Segundos hasta que se reinicia la ventana."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "Política de límite legible por máquina."
              },
              "RateLimit": {
                "schema": {
                  "type": "string"
                },
                "description": "Estado del límite (campo estructurado)."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Company": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string",
            "const": "company"
          },
          "name": {
            "type": "string"
          },
          "legal_name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "email": {
            "type": "string",
            "format": "email"
          },
          "telephone": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "address": {
            "type": "object",
            "properties": {
              "country": {
                "type": "string"
              },
              "region": {
                "type": "string"
              }
            },
            "required": [
              "country",
              "region"
            ]
          },
          "areas_served": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "same_as": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "pricing_model": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "Page": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "changefreq": {
            "type": "string",
            "enum": [
              "always",
              "hourly",
              "daily",
              "weekly",
              "monthly",
              "yearly",
              "never"
            ]
          },
          "priority": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          }
        },
        "additionalProperties": false
      },
      "PageList": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string",
            "const": "list"
          },
          "count": {
            "type": "integer"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Page"
            }
          }
        }
      },
      "Faq": {
        "type": "object",
        "properties": {
          "question": {
            "type": "string"
          },
          "answer": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "FaqList": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string",
            "const": "list"
          },
          "count": {
            "type": "integer"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Faq"
            }
          }
        }
      },
      "GlossaryTerm": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string",
            "const": "glossary_term"
          },
          "slug": {
            "type": "string",
            "enum": [
              "tap",
              "validacion-en-3-capas",
              "qr-rotativo",
              "gamificacion-preventiva"
            ]
          },
          "term": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "definition": {
            "type": "string"
          },
          "related": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      },
      "GlossaryList": {
        "type": "object",
        "properties": {
          "object": {
            "type": "string",
            "const": "list"
          },
          "count": {
            "type": "integer"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GlossaryTerm"
            }
          }
        }
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "status": {
                "type": "integer"
              },
              "documentation_url": {
                "type": "string",
                "format": "uri"
              },
              "hint": {
                "type": "string"
              }
            },
            "required": [
              "code",
              "message",
              "status"
            ],
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "Problem": {
        "type": "object",
        "description": "Problem Details (RFC 9457).",
        "properties": {
          "type": {
            "type": "string",
            "format": "uri",
            "default": "about:blank"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string",
            "format": "uri"
          },
          "code": {
            "type": "string",
            "description": "Código legible por máquina (extensión)."
          }
        },
        "required": [
          "type",
          "title",
          "status"
        ]
      }
    },
    "headers": {
      "Deprecation": {
        "schema": {
          "type": "string"
        },
        "description": "Presente solo si la versión está en deprecación. Fecha HTTP o \"true\" (RFC 9745)."
      },
      "Sunset": {
        "schema": {
          "type": "string"
        },
        "description": "Presente solo si hay fecha de retiro. Fecha HTTP a partir de la cual la versión deja de responder (RFC 8594)."
      },
      "Link": {
        "schema": {
          "type": "string"
        },
        "description": "Cuando hay deprecación, incluye rel=\"deprecation\" (política) y rel=\"successor-version\" (versión nueva)."
      }
    }
  }
}
