{
  "openapi": "3.1.0",
  "info": {
    "title": "Torêva Public Discovery API",
    "version": "1.2.0",
    "summary": "API pública de descoberta da Torêva, plataforma B2B brasileira de prospecção.",
    "description": "Endpoints públicos de descoberta do toreva.com.br. Somente leitura, sem autenticação e sem cadastro.\n\n**Versionamento.** A versão fica no caminho: `/api/v1/...`. O caminho sem versão (`/api/...`) é um\napelido da versão estável corrente e pode mudar de destino — integre contra `/api/v1/`. Toda resposta\ntraz o cabeçalho `API-Version` com a versão que respondeu. Depreciação é sinalizada com os cabeçalhos\n`Deprecation` (RFC 9745) e `Sunset` (RFC 8594), com aviso mínimo de 180 dias. Política completa em https://toreva.com.br/docs/versioning.md\n\n**Limite de taxa.** 120 requisições por minuto por cliente, em janela deslizante. Toda resposta traz\n`RateLimit-Remaining` com o saldo real e `RateLimit-Reset` com a contagem regressiva até o próximo slot\nvagar, nos campos separados e no campo estruturado único `RateLimit`. Ao estourar, a resposta é `429`\ncom um `Retry-After` calculado.\n\n**Erros.** Toda resposta de erro é JSON com o mesmo envelope `error`, contendo um `code` estável\npara o cliente ramificar, uma `message` para humanos, um `hint` de resolução e a URL da documentação.\n\n**Ambiente de testes.** Estes endpoints SÃO o ambiente de testes: somente leitura, sem efeito colateral\ne sem credencial. Aponte sua suíte para eles.",
    "contact": {
      "name": "Torêva",
      "email": "contato@toreva.com.br",
      "url": "https://toreva.com.br/contato"
    },
    "license": {
      "name": "Uso sujeito aos Termos de Uso da Torêva",
      "url": "https://toreva.com.br/termos"
    },
    "termsOfService": "https://toreva.com.br/termos"
  },
  "externalDocs": {
    "description": "Portal do desenvolvedor Torêva",
    "url": "https://toreva.com.br/developers"
  },
  "servers": [
    {
      "url": "https://toreva.com.br",
      "description": "Produção. É também o ambiente de testes: os endpoints públicos são somente leitura."
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "API v1",
      "description": "Versão estável corrente da API pública."
    },
    {
      "name": "Descoberta",
      "description": "Documentos que descrevem a própria API."
    },
    {
      "name": "Agentes",
      "description": "Superfícies feitas para agentes de IA: MCP e agent skills."
    }
  ],
  "paths": {
    "/api": {
      "get": {
        "operationId": "getApiAlias",
        "summary": "Apelido da versão estável corrente",
        "description": "Devolve qual versão é a estável corrente e a URL base dela. Este caminho SEM versão pode mudar de destino quando houver v2 — integre contra /api/v1.",
        "tags": [
          "Descoberta"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Apelido resolvido para a versão corrente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiAlias"
                }
              }
            },
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/ApiVersion"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        }
      }
    },
    "/api/status": {
      "get": {
        "operationId": "getApiStatusAlias",
        "summary": "Estado do serviço (apelido sem versão)",
        "description": "Mesmo documento de /api/v1/status, servido no caminho sem versão. Integre contra /api/v1/status.",
        "tags": [
          "Descoberta"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Estado por componente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiStatus"
                }
              }
            },
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/ApiVersion"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        }
      }
    },
    "/api/v1": {
      "get": {
        "operationId": "getApiV1Index",
        "summary": "Índice da API v1",
        "description": "Endpoints publicados na v1, política de versão, limite de taxa, informações de onboarding e catálogo de erros. É o primeiro pedido que um cliente novo deve fazer.",
        "tags": [
          "API v1"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Índice completo da versão.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiIndex"
                }
              }
            },
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/ApiVersion"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        }
      }
    },
    "/api/v1/status": {
      "get": {
        "operationId": "getApiV1Status",
        "summary": "Estado do serviço",
        "description": "Estado dos serviços públicos da Torêva, componente a componente. Consulte antes de concluir que uma falha é do seu lado.",
        "tags": [
          "API v1"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Estado por componente.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiStatus"
                }
              }
            },
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/ApiVersion"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "operationId": "getOpenApiDocument",
        "summary": "Descrição OpenAPI",
        "description": "Esta descrição, em JSON. Servida também em /.well-known/openapi.json, com o mesmo conteúdo.",
        "tags": [
          "Descoberta"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Documento OpenAPI 3.1.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenApiDocument"
                }
              }
            },
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/ApiVersion"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        }
      }
    },
    "/.well-known/openapi.json": {
      "get": {
        "operationId": "getOpenApiDocumentWellKnown",
        "summary": "Descrição OpenAPI (well-known)",
        "description": "Mesmo documento de /openapi.json, no caminho .well-known que muitas ferramentas sondam primeiro.",
        "tags": [
          "Descoberta"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Documento OpenAPI 3.1.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenApiDocument"
                }
              }
            },
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/ApiVersion"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        }
      }
    },
    "/.well-known/status.json": {
      "get": {
        "operationId": "getWellKnownStatus",
        "summary": "Cartão estático de status",
        "description": "Cartão mínimo de status, sem detalhamento por componente. Para o estado completo, use /api/v1/status.",
        "tags": [
          "Descoberta"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Cartão de status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WellKnownStatus"
                }
              }
            },
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/ApiVersion"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        }
      }
    },
    "/.well-known/agent-skills/index.json": {
      "get": {
        "operationId": "getAgentSkillsIndex",
        "summary": "Índice de agent skills",
        "description": "Habilidades declaradas para agentes, cada uma com o hash SHA-256 do arquivo para verificação de integridade.",
        "tags": [
          "Agentes"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Índice de habilidades.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentSkillsIndex"
                }
              }
            },
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/ApiVersion"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        }
      }
    },
    "/.well-known/mcp/server-card.json": {
      "get": {
        "operationId": "getMcpServerCard",
        "summary": "Cartão do servidor MCP",
        "description": "Metadados do servidor MCP público: transporte, endpoint do handshake, ferramentas e recursos expostos.",
        "tags": [
          "Agentes"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Cartão do servidor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/McpServerCard"
                }
              }
            },
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/ApiVersion"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/UpstreamUnavailable"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        }
      }
    },
    "/.well-known/api-catalog": {
      "get": {
        "operationId": "getApiCatalog",
        "summary": "Catálogo de descoberta",
        "description": "Linkset RFC 9727 apontando para toda a documentação e todos os recursos públicos. Servido como application/linkset+json, que é JSON.",
        "tags": [
          "Descoberta"
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Linkset de descoberta.",
            "headers": {
              "API-Version": {
                "$ref": "#/components/headers/ApiVersion"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimitLimit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimitRemaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimitReset"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimitPolicy"
              }
            },
            "content": {
              "application/linkset+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiCatalog"
                }
              }
            }
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        }
      }
    },
    "/.well-known/mcp": {
      "post": {
        "operationId": "postMcpHandshake",
        "summary": "Handshake MCP (Streamable HTTP)",
        "description": "Endpoint JSON-RPC 2.0 do servidor MCP público, transporte Streamable HTTP, sem autenticação. Aceita initialize, ping, tools/list, tools/call, resources/list e resources/read. GET responde 405: este servidor não abre stream SSE.",
        "tags": [
          "Agentes"
        ],
        "security": [],
        "requestBody": {
          "required": true,
          "description": "Mensagem JSON-RPC 2.0, ou um lote delas.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/McpRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Resposta JSON-RPC.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/McpResponse"
                }
              }
            }
          },
          "202": {
            "description": "Notificação aceita. Sem corpo, conforme JSON-RPC."
          },
          "400": {
            "description": "Corpo não é JSON-RPC válido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/McpResponse"
                }
              }
            }
          },
          "405": {
            "description": "Método HTTP não suportado neste endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/McpResponse"
                }
              }
            }
          },
          "503": {
            "description": "Servidor MCP indisponível.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/McpResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "title": "Erro",
        "description": "Formato único de erro da API pública. Ramifique por error.code, nunca por error.message.",
        "properties": {
          "error": {
            "type": "object",
            "description": "Envelope do erro.",
            "properties": {
              "code": {
                "type": "string",
                "description": "Código estável, seguro para o cliente ramificar. Nunca muda dentro de uma versão.",
                "enum": [
                  "not_found",
                  "method_not_allowed",
                  "rate_limited",
                  "upstream_unavailable",
                  "endpoint_sunset"
                ]
              },
              "status": {
                "type": "integer",
                "description": "Código HTTP repetido no corpo, para clientes que só leem o payload."
              },
              "message": {
                "type": "string",
                "description": "Texto para humanos. Pode ser reescrito sem aviso."
              },
              "hint": {
                "type": "string",
                "description": "O que fazer a seguir para resolver."
              },
              "documentation": {
                "type": "string",
                "description": "URL da documentação que explica o caso.",
                "format": "uri"
              }
            },
            "required": [
              "code",
              "status",
              "message",
              "hint",
              "documentation"
            ]
          }
        },
        "required": [
          "error"
        ]
      },
      "VersionRef": {
        "type": "object",
        "title": "Versão da API",
        "description": "Uma versão publicada da API, com seu estado de ciclo de vida.",
        "properties": {
          "version": {
            "type": "string",
            "description": "Identificador da versão, como aparece no caminho."
          },
          "status": {
            "type": "string",
            "description": "Estado do ciclo de vida.",
            "enum": [
              "stable",
              "deprecated",
              "sunset"
            ]
          },
          "url": {
            "type": "string",
            "description": "URL base da versão.",
            "format": "uri"
          },
          "deprecated": {
            "type": "boolean",
            "description": "true quando a versão já tem substituta e envia o cabeçalho Deprecation."
          },
          "sunset": {
            "type": [
              "string",
              "null"
            ],
            "description": "Data em que a versão deixa de responder, em RFC 3339. null enquanto não houver.",
            "format": "date-time"
          }
        },
        "required": [
          "version",
          "status",
          "url",
          "deprecated"
        ]
      },
      "Contact": {
        "type": "object",
        "title": "Contato",
        "description": "Como falar com a Torêva.",
        "properties": {
          "email": {
            "type": "string",
            "description": "E-mail oficial de contato.",
            "format": "email"
          },
          "telephone": {
            "type": "string",
            "description": "Telefone e WhatsApp em formato E.164."
          },
          "url": {
            "type": "string",
            "description": "Página de contato com todos os canais.",
            "format": "uri"
          }
        },
        "required": [
          "email",
          "url"
        ]
      },
      "ApiAlias": {
        "type": "object",
        "title": "Apelido de versão",
        "description": "Resposta de /api, o caminho sem versão. Diz qual versão é a estável corrente e manda integrar contra ela.",
        "properties": {
          "service": {
            "type": "string",
            "description": "Nome do serviço."
          },
          "description": {
            "type": "string",
            "description": "Aviso de que este caminho pode mudar de destino."
          },
          "current_version": {
            "type": "string",
            "description": "Versão estável corrente."
          },
          "current_version_url": {
            "type": "string",
            "description": "URL base da versão corrente.",
            "format": "uri"
          },
          "versions": {
            "type": "array",
            "description": "Todas as versões publicadas.",
            "items": {
              "$ref": "#/components/schemas/VersionRef"
            }
          },
          "versioning_policy": {
            "type": "string",
            "description": "Política de versionamento e depreciação.",
            "format": "uri"
          },
          "documentation": {
            "type": "object",
            "description": "Onde ler mais.",
            "properties": {
              "portal": {
                "type": "string",
                "description": "Portal do desenvolvedor.",
                "format": "uri"
              },
              "reference": {
                "type": "string",
                "description": "Referência da API em markdown.",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "description": "Esta descrição OpenAPI.",
                "format": "uri"
              },
              "agent_instructions": {
                "type": "string",
                "description": "Instruções para agentes.",
                "format": "uri"
              }
            }
          },
          "contact": {
            "$ref": "#/components/schemas/Contact"
          }
        },
        "required": [
          "service",
          "current_version",
          "current_version_url",
          "versions",
          "versioning_policy"
        ]
      },
      "AuthInfo": {
        "type": "object",
        "title": "Autenticação",
        "description": "Se e como a versão exige credencial.",
        "properties": {
          "required": {
            "type": "boolean",
            "description": "false em toda a API pública de descoberta."
          },
          "scheme": {
            "type": "string",
            "description": "Esquema de autenticação.",
            "enum": [
              "none",
              "session-cookie",
              "bearer"
            ]
          },
          "description": {
            "type": "string",
            "description": "Explicação em prosa."
          },
          "documentation": {
            "type": "string",
            "description": "Regras completas de autenticação.",
            "format": "uri"
          }
        },
        "required": [
          "required",
          "scheme"
        ]
      },
      "VersioningInfo": {
        "type": "object",
        "title": "Política de versão",
        "description": "Como a versão é escolhida e como a depreciação é sinalizada.",
        "properties": {
          "strategy": {
            "type": "string",
            "description": "Onde a versão vive.",
            "enum": [
              "url-path"
            ]
          },
          "current": {
            "type": "string",
            "description": "Versão corrente."
          },
          "path_prefix": {
            "type": "string",
            "description": "Prefixo estável de caminho."
          },
          "unversioned_alias": {
            "type": "string",
            "description": "Caminho sem versão, que pode mudar de destino."
          },
          "response_header": {
            "type": "string",
            "description": "Cabeçalho que informa a versão que respondeu."
          },
          "deprecation_headers": {
            "type": "array",
            "description": "Cabeçalhos usados para avisar de depreciação.",
            "items": {
              "type": "string",
              "description": "Nome do cabeçalho."
            }
          },
          "minimum_notice_days": {
            "type": "integer",
            "description": "Aviso mínimo, em dias, entre Deprecation e Sunset de uma versão."
          },
          "policy": {
            "type": "string",
            "description": "Documento da política.",
            "format": "uri"
          }
        },
        "required": [
          "strategy",
          "current",
          "path_prefix",
          "policy"
        ]
      },
      "RateLimitInfo": {
        "type": "object",
        "title": "Limite de taxa",
        "description": "Teto de requisições e cabeçalhos que o anunciam.",
        "properties": {
          "limit": {
            "type": "integer",
            "description": "Requisições permitidas por janela."
          },
          "window_seconds": {
            "type": "integer",
            "description": "Tamanho da janela, em segundos."
          },
          "scope": {
            "type": "string",
            "description": "Do que o limite é contado.",
            "enum": [
              "ip"
            ]
          },
          "burst": {
            "type": "integer",
            "description": "Rajada liberada de imediato acima da taxa média."
          },
          "policy_name": {
            "type": "string",
            "description": "Nome da política, como aparece em RateLimit-Policy."
          },
          "response_headers": {
            "type": "array",
            "description": "Cabeçalhos presentes em toda resposta.",
            "items": {
              "type": "string",
              "description": "Nome do cabeçalho."
            }
          },
          "exceeded_status": {
            "type": "integer",
            "description": "Status devolvido ao estourar o limite."
          },
          "exceeded_headers": {
            "type": "array",
            "description": "Cabeçalhos adicionais na resposta de estouro.",
            "items": {
              "type": "string",
              "description": "Nome do cabeçalho."
            }
          },
          "documentation": {
            "type": "string",
            "description": "Onde a política está descrita.",
            "format": "uri"
          },
          "window_type": {
            "type": "string",
            "description": "Tipo de janela do limitador.",
            "enum": [
              "sliding",
              "fixed"
            ]
          },
          "remaining_is_exact": {
            "type": "boolean",
            "description": "true quando RateLimit-Remaining reflete um contador real, e não uma estimativa."
          },
          "reset_is_countdown": {
            "type": "boolean",
            "description": "true quando RateLimit-Reset é contagem regressiva, e não o tamanho da janela."
          }
        },
        "required": [
          "limit",
          "window_seconds",
          "scope",
          "exceeded_status"
        ]
      },
      "OnboardingInfo": {
        "type": "object",
        "title": "Onboarding",
        "description": "O que um cliente novo consegue fazer sozinho, sem falar com ninguém.",
        "properties": {
          "zero_auth_access": {
            "type": "boolean",
            "description": "true quando há endpoints úteis chamáveis sem credencial."
          },
          "zero_auth_endpoints": {
            "type": "array",
            "description": "Endpoints chamáveis agora, sem cadastro.",
            "items": {
              "type": "string",
              "description": "URL absoluta.",
              "format": "uri"
            }
          },
          "sandbox": {
            "type": "object",
            "description": "Ambiente de testes.",
            "properties": {
              "available": {
                "type": "boolean",
                "description": "Se existe ambiente de testes."
              },
              "type": {
                "type": "string",
                "description": "Natureza do ambiente.",
                "enum": [
                  "production-read-only",
                  "synthetic"
                ]
              },
              "base_url": {
                "type": "string",
                "description": "URL base do ambiente.",
                "format": "uri"
              },
              "description": {
                "type": "string",
                "description": "O que dá para fazer nele."
              },
              "credentials_required": {
                "type": "boolean",
                "description": "Se precisa de credencial."
              }
            },
            "required": [
              "available",
              "credentials_required"
            ]
          },
          "free_trial": {
            "type": "object",
            "description": "Teste gratuito da plataforma.",
            "properties": {
              "available": {
                "type": "boolean",
                "description": "Se há teste gratuito."
              },
              "url": {
                "type": "string",
                "description": "Onde começar.",
                "format": "uri"
              },
              "credit_card_required": {
                "type": "boolean",
                "description": "Se pede cartão de crédito."
              },
              "description": {
                "type": "string",
                "description": "O que o teste inclui."
              }
            },
            "required": [
              "available",
              "credit_card_required"
            ]
          },
          "self_serve_api_key": {
            "type": "object",
            "description": "Emissão de chave de API pelo próprio cliente.",
            "properties": {
              "available": {
                "type": "boolean",
                "description": "Se o cliente emite chave sozinho."
              },
              "description": {
                "type": "string",
                "description": "Como funciona hoje."
              },
              "request_via": {
                "type": "string",
                "description": "Canal para pedir acesso."
              }
            },
            "required": [
              "available"
            ]
          }
        },
        "required": [
          "zero_auth_access",
          "sandbox",
          "free_trial",
          "self_serve_api_key"
        ]
      },
      "EndpointRef": {
        "type": "object",
        "title": "Endpoint",
        "description": "Um endpoint publicado nesta versão.",
        "properties": {
          "method": {
            "type": "string",
            "description": "Método HTTP."
          },
          "path": {
            "type": "string",
            "description": "Caminho, relativo à raiz do domínio."
          },
          "operation_id": {
            "type": "string",
            "description": "operationId correspondente no OpenAPI."
          },
          "description": {
            "type": "string",
            "description": "O que o endpoint devolve."
          },
          "auth": {
            "type": "string",
            "description": "Credencial exigida.",
            "enum": [
              "none",
              "session-cookie"
            ]
          }
        },
        "required": [
          "method",
          "path",
          "description",
          "auth"
        ]
      },
      "ErrorCatalog": {
        "type": "object",
        "title": "Catálogo de erros",
        "description": "Formato e vocabulário de erro da versão.",
        "properties": {
          "media_type": {
            "type": "string",
            "description": "Tipo de conteúdo das respostas de erro."
          },
          "format": {
            "type": "string",
            "description": "Descrição do envelope."
          },
          "codes": {
            "type": "array",
            "description": "Todos os error.code possíveis.",
            "items": {
              "type": "string",
              "description": "Um código de erro."
            }
          },
          "example": {
            "$ref": "#/components/schemas/Error"
          }
        },
        "required": [
          "media_type",
          "format",
          "codes"
        ]
      },
      "ApiIndex": {
        "type": "object",
        "title": "Índice da versão",
        "description": "Resposta de /api/v1: tudo que um cliente precisa saber antes de integrar.",
        "properties": {
          "service": {
            "type": "string",
            "description": "Nome do serviço."
          },
          "version": {
            "type": "string",
            "description": "Versão que respondeu."
          },
          "status": {
            "type": "string",
            "description": "Estado do ciclo de vida da versão.",
            "enum": [
              "stable",
              "deprecated",
              "sunset"
            ]
          },
          "description": {
            "type": "string",
            "description": "O que a API faz."
          },
          "base_url": {
            "type": "string",
            "description": "URL base da versão.",
            "format": "uri"
          },
          "auth": {
            "$ref": "#/components/schemas/AuthInfo"
          },
          "documentation": {
            "type": "object",
            "description": "Todos os documentos de apoio.",
            "additionalProperties": {
              "type": "string",
              "description": "URL do documento.",
              "format": "uri"
            }
          },
          "versioning": {
            "$ref": "#/components/schemas/VersioningInfo"
          },
          "rate_limit": {
            "$ref": "#/components/schemas/RateLimitInfo"
          },
          "onboarding": {
            "$ref": "#/components/schemas/OnboardingInfo"
          },
          "endpoints": {
            "type": "array",
            "description": "Endpoints publicados.",
            "items": {
              "$ref": "#/components/schemas/EndpointRef"
            }
          },
          "discovery": {
            "type": "object",
            "description": "Arquivos de descoberta para agentes.",
            "additionalProperties": {
              "type": "string",
              "description": "URL do recurso.",
              "format": "uri"
            }
          },
          "errors": {
            "$ref": "#/components/schemas/ErrorCatalog"
          },
          "contact": {
            "$ref": "#/components/schemas/Contact"
          }
        },
        "required": [
          "service",
          "version",
          "status",
          "base_url",
          "auth",
          "versioning",
          "rate_limit",
          "onboarding",
          "endpoints",
          "errors"
        ]
      },
      "StatusComponent": {
        "type": "object",
        "title": "Componente",
        "description": "Estado de um componente do serviço.",
        "properties": {
          "name": {
            "type": "string",
            "description": "Identificador do componente."
          },
          "status": {
            "type": "string",
            "description": "Estado atual.",
            "enum": [
              "ok",
              "degraded",
              "down"
            ]
          },
          "description": {
            "type": "string",
            "description": "O que o componente faz."
          }
        },
        "required": [
          "name",
          "status"
        ]
      },
      "ApiStatus": {
        "type": "object",
        "title": "Estado do serviço",
        "description": "Resposta de /api/v1/status.",
        "properties": {
          "status": {
            "type": "string",
            "description": "Estado geral, agregando os componentes.",
            "enum": [
              "ok",
              "degraded",
              "down"
            ]
          },
          "service": {
            "type": "string",
            "description": "Nome do serviço."
          },
          "version": {
            "type": "string",
            "description": "Versão da API que respondeu."
          },
          "homepage": {
            "type": "string",
            "description": "Página inicial do site.",
            "format": "uri"
          },
          "documentation": {
            "type": "string",
            "description": "Portal do desenvolvedor.",
            "format": "uri"
          },
          "components": {
            "type": "array",
            "description": "Estado por componente.",
            "items": {
              "$ref": "#/components/schemas/StatusComponent"
            }
          },
          "updated_at": {
            "type": "string",
            "description": "Data da última atualização do documento.",
            "format": "date"
          }
        },
        "required": [
          "status",
          "service",
          "version",
          "homepage",
          "components"
        ]
      },
      "WellKnownStatus": {
        "type": "object",
        "title": "Status estático",
        "description": "Resposta de /.well-known/status.json, o cartão mínimo de status.",
        "properties": {
          "status": {
            "type": "string",
            "description": "Estado geral.",
            "enum": [
              "ok",
              "degraded",
              "down"
            ]
          },
          "service": {
            "type": "string",
            "description": "Nome do serviço."
          },
          "homepage": {
            "type": "string",
            "description": "Página inicial.",
            "format": "uri"
          },
          "documentation": {
            "type": "string",
            "description": "Portal do desenvolvedor.",
            "format": "uri"
          },
          "updated_at": {
            "type": "string",
            "description": "Data da última atualização.",
            "format": "date"
          }
        },
        "required": [
          "status",
          "service",
          "homepage"
        ]
      },
      "LinksetItem": {
        "type": "object",
        "title": "Item de linkset",
        "description": "Um link tipado dentro do catálogo, no formato RFC 9264.",
        "properties": {
          "href": {
            "type": "string",
            "description": "URL do recurso.",
            "format": "uri"
          },
          "type": {
            "type": "string",
            "description": "Tipo de conteúdo do recurso."
          },
          "title": {
            "type": "string",
            "description": "Rótulo legível do recurso."
          }
        },
        "required": [
          "href"
        ]
      },
      "ApiCatalog": {
        "type": "object",
        "title": "Catálogo da API",
        "description": "Linkset RFC 9727 de descoberta.",
        "properties": {
          "linkset": {
            "type": "array",
            "description": "Conjuntos de links, um por âncora.",
            "items": {
              "type": "object",
              "description": "Links agrupados por relação.",
              "properties": {
                "anchor": {
                  "type": "string",
                  "description": "Recurso ao qual os links se referem.",
                  "format": "uri"
                },
                "service-desc": {
                  "type": "array",
                  "description": "Descrições formais da API.",
                  "items": {
                    "$ref": "#/components/schemas/LinksetItem"
                  }
                },
                "service-doc": {
                  "type": "array",
                  "description": "Documentação em prosa.",
                  "items": {
                    "$ref": "#/components/schemas/LinksetItem"
                  }
                },
                "status": {
                  "type": "array",
                  "description": "Endpoints de status.",
                  "items": {
                    "$ref": "#/components/schemas/LinksetItem"
                  }
                },
                "item": {
                  "type": "array",
                  "description": "Demais recursos publicados.",
                  "items": {
                    "$ref": "#/components/schemas/LinksetItem"
                  }
                }
              },
              "required": [
                "anchor"
              ]
            }
          }
        },
        "required": [
          "linkset"
        ]
      },
      "AgentSkill": {
        "type": "object",
        "title": "Agent skill",
        "description": "Uma habilidade declarada para agentes.",
        "properties": {
          "name": {
            "type": "string",
            "description": "Identificador da habilidade."
          },
          "type": {
            "type": "string",
            "description": "Formato do arquivo da habilidade.",
            "enum": [
              "markdown"
            ]
          },
          "description": {
            "type": "string",
            "description": "O que a habilidade faz."
          },
          "url": {
            "type": "string",
            "description": "URL do arquivo.",
            "format": "uri"
          },
          "sha256": {
            "type": "string",
            "description": "Hash SHA-256 do arquivo, em hexadecimal, para verificação de integridade."
          }
        },
        "required": [
          "name",
          "type",
          "description",
          "url",
          "sha256"
        ]
      },
      "AgentSkillsIndex": {
        "type": "object",
        "title": "Índice de agent skills",
        "description": "Habilidades que a Torêva declara para agentes.",
        "properties": {
          "$schema": {
            "type": "string",
            "description": "Schema do próprio documento.",
            "format": "uri"
          },
          "publisher": {
            "type": "object",
            "description": "Quem publica as habilidades.",
            "properties": {
              "name": {
                "type": "string",
                "description": "Nome do publicador."
              },
              "url": {
                "type": "string",
                "description": "Site do publicador.",
                "format": "uri"
              }
            },
            "required": [
              "name",
              "url"
            ]
          },
          "skills": {
            "type": "array",
            "description": "Habilidades publicadas.",
            "items": {
              "$ref": "#/components/schemas/AgentSkill"
            }
          }
        },
        "required": [
          "publisher",
          "skills"
        ]
      },
      "McpServerCard": {
        "type": "object",
        "title": "Cartão do servidor MCP",
        "description": "Metadados do servidor MCP público, com o endpoint do handshake.",
        "properties": {
          "$schema": {
            "type": "string",
            "description": "Schema do próprio documento.",
            "format": "uri"
          },
          "serverInfo": {
            "type": "object",
            "description": "Identificação do servidor.",
            "properties": {
              "name": {
                "type": "string",
                "description": "Nome do servidor."
              },
              "title": {
                "type": "string",
                "description": "Rótulo legível."
              },
              "version": {
                "type": "string",
                "description": "Versão do servidor."
              },
              "description": {
                "type": "string",
                "description": "O que o servidor expõe."
              }
            },
            "required": [
              "name",
              "version"
            ]
          },
          "transport": {
            "type": "object",
            "description": "Como falar com o servidor.",
            "properties": {
              "type": {
                "type": "string",
                "description": "Transporte MCP.",
                "enum": [
                  "streamable-http"
                ]
              },
              "endpoint": {
                "type": "string",
                "description": "URL do handshake JSON-RPC.",
                "format": "uri"
              },
              "authentication": {
                "type": "string",
                "description": "Credencial exigida.",
                "enum": [
                  "none"
                ]
              }
            },
            "required": [
              "type",
              "endpoint"
            ]
          },
          "capabilities": {
            "type": "object",
            "description": "O que o servidor oferece.",
            "properties": {
              "tools": {
                "type": "boolean",
                "description": "Se expõe ferramentas."
              },
              "resources": {
                "type": "boolean",
                "description": "Se expõe recursos."
              },
              "prompts": {
                "type": "boolean",
                "description": "Se expõe prompts."
              }
            }
          },
          "tools": {
            "type": "array",
            "description": "Ferramentas expostas.",
            "items": {
              "type": "object",
              "description": "Uma ferramenta MCP.",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Nome da ferramenta."
                },
                "description": {
                  "type": "string",
                  "description": "O que ela faz."
                }
              },
              "required": [
                "name",
                "description"
              ]
            }
          },
          "resources": {
            "type": "array",
            "description": "Recursos expostos.",
            "items": {
              "type": "object",
              "description": "Um recurso MCP.",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Nome do recurso."
                },
                "uri": {
                  "type": "string",
                  "description": "URI do recurso.",
                  "format": "uri"
                },
                "mimeType": {
                  "type": "string",
                  "description": "Tipo de conteúdo."
                }
              },
              "required": [
                "name",
                "uri"
              ]
            }
          }
        },
        "required": [
          "serverInfo",
          "transport",
          "capabilities"
        ]
      },
      "McpRequest": {
        "type": "object",
        "title": "Mensagem JSON-RPC do MCP",
        "description": "Requisição ou notificação JSON-RPC 2.0 endereçada ao servidor MCP.",
        "properties": {
          "jsonrpc": {
            "type": "string",
            "description": "Versão do JSON-RPC. Sempre \"2.0\".",
            "enum": [
              "2.0"
            ]
          },
          "id": {
            "type": [
              "string",
              "integer",
              "null"
            ],
            "description": "Identificador da requisição. Ausente numa notificação."
          },
          "method": {
            "type": "string",
            "description": "Método MCP.",
            "enum": [
              "initialize",
              "ping",
              "tools/list",
              "tools/call",
              "resources/list",
              "resources/read",
              "notifications/initialized"
            ]
          },
          "params": {
            "type": "object",
            "description": "Parâmetros do método.",
            "additionalProperties": true
          }
        },
        "required": [
          "jsonrpc",
          "method"
        ]
      },
      "McpResponse": {
        "type": "object",
        "title": "Resposta JSON-RPC do MCP",
        "description": "Resposta JSON-RPC 2.0 do servidor MCP. Traz result OU error, nunca os dois.",
        "properties": {
          "jsonrpc": {
            "type": "string",
            "description": "Versão do JSON-RPC. Sempre \"2.0\".",
            "enum": [
              "2.0"
            ]
          },
          "id": {
            "type": [
              "string",
              "integer",
              "null"
            ],
            "description": "Mesmo id da requisição."
          },
          "result": {
            "type": "object",
            "description": "Resultado do método, quando deu certo.",
            "additionalProperties": true
          },
          "error": {
            "type": "object",
            "description": "Erro de protocolo, quando o método falhou.",
            "properties": {
              "code": {
                "type": "integer",
                "description": "Código de erro JSON-RPC."
              },
              "message": {
                "type": "string",
                "description": "Descrição do erro."
              },
              "data": {
                "type": "object",
                "description": "Detalhes adicionais.",
                "additionalProperties": true
              }
            },
            "required": [
              "code",
              "message"
            ]
          }
        },
        "required": [
          "jsonrpc"
        ]
      },
      "OpenApiDocument": {
        "type": "object",
        "title": "Documento OpenAPI",
        "description": "Esta própria descrição, servida como JSON.",
        "properties": {
          "openapi": {
            "type": "string",
            "description": "Versão da especificação OpenAPI."
          },
          "info": {
            "type": "object",
            "description": "Metadados da API.",
            "additionalProperties": true
          },
          "paths": {
            "type": "object",
            "description": "Operações publicadas.",
            "additionalProperties": true
          },
          "components": {
            "type": "object",
            "description": "Schemas, respostas e cabeçalhos reutilizáveis.",
            "additionalProperties": true
          }
        },
        "required": [
          "openapi",
          "info",
          "paths"
        ]
      }
    },
    "responses": {
      "NotFound": {
        "description": "Endpoint inexistente. O corpo é JSON, nunca HTML.",
        "headers": {
          "API-Version": {
            "$ref": "#/components/headers/ApiVersion"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "not_found",
                "status": 404,
                "message": "Endpoint não encontrado.",
                "hint": "Consulte https://toreva.com.br/api/v1 para a lista de endpoints públicos.",
                "documentation": "https://toreva.com.br/developers"
              }
            }
          }
        }
      },
      "MethodNotAllowed": {
        "description": "Método não aceito; a API pública é somente leitura.",
        "headers": {
          "API-Version": {
            "$ref": "#/components/headers/ApiVersion"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "method_not_allowed",
                "status": 405,
                "message": "Método não permitido nesta API.",
                "hint": "A API pública da Torêva é somente leitura: use GET, HEAD ou OPTIONS.",
                "documentation": "https://toreva.com.br/developers"
              }
            }
          }
        }
      },
      "RateLimited": {
        "description": "Limite de taxa excedido.",
        "headers": {
          "API-Version": {
            "$ref": "#/components/headers/ApiVersion"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Limit": {
            "$ref": "#/components/headers/RateLimitLimit"
          },
          "RateLimit-Remaining": {
            "$ref": "#/components/headers/RateLimitRemaining"
          },
          "RateLimit-Reset": {
            "$ref": "#/components/headers/RateLimitReset"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimitPolicy"
          },
          "Retry-After": {
            "$ref": "#/components/headers/RetryAfter"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "rate_limited",
                "status": 429,
                "message": "Limite de requisições excedido.",
                "hint": "O limite é de 120 requisições por minuto por cliente. Aguarde os segundos indicados em Retry-After.",
                "documentation": "https://toreva.com.br/developers"
              }
            }
          }
        }
      },
      "UpstreamUnavailable": {
        "description": "Serviço de origem indisponível. Falhas de gateway 502/503/504 são normalizadas neste código.",
        "headers": {
          "API-Version": {
            "$ref": "#/components/headers/ApiVersion"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "upstream_unavailable",
                "status": 503,
                "message": "Serviço indisponível no momento.",
                "hint": "Repita a chamada com backoff exponencial. Estado do serviço em https://toreva.com.br/api/v1/status.",
                "documentation": "https://toreva.com.br/developers"
              }
            }
          }
        }
      },
      "UnexpectedError": {
        "description": "Qualquer outra falha. O envelope de erro é sempre o mesmo.",
        "headers": {
          "API-Version": {
            "$ref": "#/components/headers/ApiVersion"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            },
            "example": {
              "error": {
                "code": "upstream_unavailable",
                "status": 500,
                "message": "Falha inesperada.",
                "hint": "Repita com backoff exponencial e, se persistir, escreva para contato@toreva.com.br.",
                "documentation": "https://toreva.com.br/developers"
              }
            }
          }
        }
      }
    },
    "headers": {
      "ApiVersion": {
        "description": "Versão da API que efetivamente respondeu.",
        "schema": {
          "type": "string",
          "description": "Identificador da versão.",
          "example": "v1"
        }
      },
      "RateLimitLimit": {
        "description": "Requisições permitidas por janela.",
        "schema": {
          "type": "integer",
          "description": "Teto da janela.",
          "example": 120
        }
      },
      "RateLimitReset": {
        "description": "Contagem regressiva, em segundos, até o próximo slot da cota vagar.",
        "schema": {
          "type": "integer",
          "description": "Segundos até liberar um slot.",
          "example": 43
        }
      },
      "RateLimitPolicy": {
        "description": "Política de limite em campo estruturado.",
        "schema": {
          "type": "string",
          "description": "Política nomeada com quota e janela.",
          "example": "\"public-api\";q=120;w=60"
        }
      },
      "RateLimitRemaining": {
        "description": "Saldo real de requisições restantes na janela deslizante, para o cliente que fez a chamada.",
        "schema": {
          "type": "integer",
          "description": "Requisições ainda disponíveis.",
          "example": 117
        }
      },
      "RetryAfter": {
        "description": "Segundos exatos até haver saldo. Calculado a partir da janela deslizante, não um valor fixo.",
        "schema": {
          "type": "integer",
          "description": "Espera recomendada.",
          "example": 10
        }
      },
      "Deprecation": {
        "description": "Presente quando o endpoint está depreciado. Data em que a depreciação passou a valer, conforme RFC 9745.",
        "schema": {
          "type": "string",
          "description": "Data prefixada por @, em segundos desde a época.",
          "example": "@1788307200"
        }
      },
      "Sunset": {
        "description": "Presente quando há data de desligamento. Conforme RFC 8594.",
        "schema": {
          "type": "string",
          "description": "Data HTTP do desligamento.",
          "example": "Wed, 01 Jul 2026 00:00:00 GMT"
        }
      },
      "RateLimit": {
        "description": "Campo estruturado único do rascunho IETF de RateLimit headers, com limite, saldo e reset.",
        "schema": {
          "type": "string",
          "description": "Limite, saldo e reset num campo só.",
          "example": "limit=120, remaining=117, reset=43"
        }
      }
    }
  }
}
