{"openapi": "3.0.3", "info": {"title": "VATEX Pay — contrato sandbox consolidado", "version": "0.49.0", "description": "Sandbox até Sprint 18 e seus complementos. Valores fictícios. Contrato da fonte atual; disponibilidade no serviço principal depende da versão publicada. Regras condicionais estão nas descrições/guias. Schemas de resposta Object/Receipt são extensíveis e não esgotam todos os campos. Erros listados são possibilidades comuns, não todos aplicáveis a cada rota. Sem dinheiro real."}, "servers": [{"url": "http://127.0.0.1:18080", "description": "Somente computador local"}], "tags": [{"name": "approvals", "description": "Guia: docs/APPROVALS.md"}, {"name": "limits", "description": "Guia: docs/LIMITS.md"}, {"name": "identity", "description": "Guia: docs/IDENTITY.md"}, {"name": "customers", "description": "Guia: docs/CUSTOMERS.md"}, {"name": "ledger", "description": "Guia: docs/LEDGER.md"}, {"name": "wallets", "description": "Guia: docs/WALLETS.md"}, {"name": "transfers", "description": "Guia: docs/TRANSFERS.md"}, {"name": "exchange", "description": "Guia: docs/EXCHANGE.md"}, {"name": "fiat", "description": "Guia: docs/FIAT-MOCK.md"}, {"name": "crypto", "description": "Guia: docs/CRYPTO.md"}, {"name": "lightning", "description": "Guia: docs/LIGHTNING.md"}, {"name": "business", "description": "Guia: docs/BUSINESS.md"}, {"name": "merchant", "description": "Guia: docs/MERCHANT.md"}, {"name": "developers", "description": "Guia: docs/DEVELOPER-API.md"}, {"name": "compliance", "description": "Guia: docs/COMPLIANCE.md"}, {"name": "operations", "description": "Guia: docs/OPERATIONS-SUPPORT.md"}, {"name": "reconciliation", "description": "Guia: docs/RECONCILIATION.md"}, {"name": "integrations", "description": "Guia: docs/DEVELOPER-API.md"}, {"name": "foundation", "description": "Guia: docs/OPERATIONS.md"}], "paths": {"/api/v1/csrf": {"get": {"operationId": "identity_api_v1_csrf_get", "tags": ["identity"], "summary": "Obter token CSRF", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [], "x-guide": "docs/IDENTITY.md", "x-authentication": "public", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"csrf_token": {"type": "string"}}, "required": ["csrf_token"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/auth/register": {"post": {"operationId": "identity_api_v1_auth_register_post", "tags": ["identity"], "summary": "Cadastrar conta de teste", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "public", "responses": {"202": {"description": "Resultado local. Resposta genérica, sem confirmar existência de conta.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"name": {"type": "string", "minLength": 1, "maxLength": 100}, "email": {"type": "string", "format": "email"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs.", "minLength": 12}}, "additionalProperties": false, "required": ["name", "email", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/auth/verify-email": {"post": {"operationId": "identity_api_v1_auth_verify-email_post", "tags": ["identity"], "summary": "Confirmar e-mail simulado", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "public", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"token": {"type": "string", "maxLength": 1024}}, "additionalProperties": true, "required": ["token"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/auth/login": {"post": {"operationId": "identity_api_v1_auth_login_post", "tags": ["identity"], "summary": "Entrar na conta", "description": "Login pode iniciar desafio MFA de cinco minutos. Reobtenha CSRF após login/2FA; cookies são rotacionados. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "public", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"oneOf": [{"type": "object", "properties": {"user": {"$ref": "#/components/schemas/User"}}, "required": ["user"]}, {"type": "object", "properties": {"mfa_required": {"type": "boolean", "enum": [true]}}, "required": ["mfa_required"]}]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"email": {"type": "string", "format": "email"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": true, "required": ["email", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/auth/mfa-login": {"post": {"operationId": "identity_api_v1_auth_mfa-login_post", "tags": ["identity"], "summary": "Concluir desafio 2FA", "description": "Requer o cookie da sessão com desafio pendente. Código TOTP ou recuperação de uso único. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "public", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"user": {"$ref": "#/components/schemas/User"}}, "required": ["user"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"code": {"type": "string", "maxLength": 64, "writeOnly": true}}, "additionalProperties": true, "required": ["code"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/auth/logout": {"post": {"operationId": "identity_api_v1_auth_logout_post", "tags": ["identity"], "summary": "Encerrar sessão", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {}, "additionalProperties": true}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/auth/password-reset": {"post": {"operationId": "identity_api_v1_auth_password-reset_post", "tags": ["identity"], "summary": "Solicitar recuperação simulada", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "public", "responses": {"202": {"description": "Resultado local. Resposta genérica, sem confirmar existência de conta.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"email": {"type": "string", "format": "email"}}, "additionalProperties": true, "required": ["email"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/auth/password-reset/confirm": {"post": {"operationId": "identity_api_v1_auth_password-reset_confirm_post", "tags": ["identity"], "summary": "Confirmar recuperação", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "public", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"uid": {"type": "string", "format": "uuid"}, "token": {"type": "string", "maxLength": 256}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs.", "minLength": 12}}, "additionalProperties": true, "required": ["uid", "token", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/auth/password-change": {"post": {"operationId": "identity_api_v1_auth_password-change_post", "tags": ["identity"], "summary": "Alterar senha", "description": "code obrigatório se 2FA ativo. Revoga todas as sessões. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"current_password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs.", "minLength": 12}, "code": {"type": "string", "maxLength": 64, "writeOnly": true}}, "additionalProperties": true, "required": ["current_password", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/me": {"get": {"operationId": "identity_api_v1_me_get", "tags": ["identity"], "summary": "Consultar perfil próprio", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"user": {"$ref": "#/components/schemas/User"}}, "required": ["user"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/sessions": {"get": {"operationId": "identity_api_v1_sessions_get", "tags": ["identity"], "summary": "Listar até 50 sessões próprias", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"sessions": {"type": "array", "items": {"$ref": "#/components/schemas/Object"}}}, "additionalProperties": true, "required": ["sessions"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/sessions/revoke": {"post": {"operationId": "identity_api_v1_sessions_revoke_post", "tags": ["identity"], "summary": "Revogar sessão própria", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}}, "additionalProperties": true, "required": ["id"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/devices": {"get": {"operationId": "identity_api_v1_devices_get", "tags": ["identity"], "summary": "Listar navegadores lembrados próprios", "description": "Opt-in DEV/TEST, desligado por padrão; 503 quando indisponível. Reconhecimento não dispensa autenticação/MFA. Token somente em Set-Cookie, sem Domain, HttpOnly, SameSite=Strict; Secure e prefixo __Host- em HTTPS. Validade técnica fixa de 30 dias, sem prazo de retenção presumido. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/KnownDeviceList"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "cursor", "in": "query", "required": false, "schema": {"type": "string", "maxLength": 2048}}]}}, "/api/v1/devices/remember": {"post": {"operationId": "identity_api_v1_devices_remember_post", "tags": ["identity"], "summary": "Lembrar navegador após confirmação de senha", "description": "Opt-in DEV/TEST, desligado por padrão; 503 quando indisponível. Reconhecimento não dispensa autenticação/MFA. Token somente em Set-Cookie, sem Domain, HttpOnly, SameSite=Strict; Secure e prefixo __Host- em HTTPS. Validade técnica fixa de 30 dias, sem prazo de retenção presumido. Até 20 ativos. Replay não reemite token. Resposta perdida: replay recupera ID e nova confirmação com replaces_id próprio substitui a tentativa de forma atômica. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/KnownDeviceRemember"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}, "Set-Cookie": {"description": "Token sensível emitido uma vez; nunca registrar. Ausente no replay.", "schema": {"type": "string", "writeOnly": true}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"current_password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}, "idempotency_key": {"type": "string", "format": "uuid"}, "replaces_id": {"type": "string", "format": "uuid"}}, "additionalProperties": false, "required": ["current_password", "idempotency_key"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/devices/forget": {"post": {"operationId": "identity_api_v1_devices_forget_post", "tags": ["identity"], "summary": "Esquecer reconhecimento próprio", "description": "Opt-in DEV/TEST, desligado por padrão; 503 quando indisponível. Reconhecimento não dispensa autenticação/MFA. Token somente em Set-Cookie, sem Domain, HttpOnly, SameSite=Strict; Secure e prefixo __Host- em HTTPS. Validade técnica fixa de 30 dias, sem prazo de retenção presumido. Não encerra sessões ativas. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "current_password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["id", "current_password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/devices/forget-all": {"post": {"operationId": "identity_api_v1_devices_forget-all_post", "tags": ["identity"], "summary": "Esquecer todos os reconhecimentos próprios", "description": "Opt-in DEV/TEST, desligado por padrão; 503 quando indisponível. Reconhecimento não dispensa autenticação/MFA. Token somente em Set-Cookie, sem Domain, HttpOnly, SameSite=Strict; Secure e prefixo __Host- em HTTPS. Validade técnica fixa de 30 dias, sem prazo de retenção presumido. Não encerra sessões ativas. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"current_password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["current_password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/access-notices": {"get": {"operationId": "identity_api_v1_access-notices_get", "tags": ["identity"], "summary": "Consultar avisos de acesso próprios", "description": "Opt-in DEV/TEST, desligado por padrão; 503 quando indisponível. Reconhecimento não dispensa autenticação/MFA. Token somente em Set-Cookie, sem Domain, HttpOnly, SameSite=Strict; Secure e prefixo __Host- em HTTPS. Validade técnica fixa de 30 dias, sem prazo de retenção presumido. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccessNoticeList"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "cursor", "in": "query", "required": false, "schema": {"type": "string", "maxLength": 2048}}]}}, "/api/v1/access-notices/read": {"post": {"operationId": "identity_api_v1_access-notices_read_post", "tags": ["identity"], "summary": "Marcar aviso próprio como lido", "description": "Opt-in DEV/TEST, desligado por padrão; 503 quando indisponível. Reconhecimento não dispensa autenticação/MFA. Token somente em Set-Cookie, sem Domain, HttpOnly, SameSite=Strict; Secure e prefixo __Host- em HTTPS. Validade técnica fixa de 30 dias, sem prazo de retenção presumido. Leitura idempotente; não decide risco ou encerra acesso. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}}, "additionalProperties": false, "required": ["id"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/mfa/setup": {"post": {"operationId": "identity_api_v1_mfa_setup_post", "tags": ["identity"], "summary": "Preparar autenticador", "description": "Chave sensível de configuração; confirmar em dez minutos. Não persistir em documentação ou logs. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"secret": {"type": "string"}, "message": {"type": "string"}}, "required": ["secret", "message"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"current_password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": true, "required": ["current_password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/mfa/enable": {"post": {"operationId": "identity_api_v1_mfa_enable_post", "tags": ["identity"], "summary": "Ativar segundo fator", "description": "Exibe oito códigos de recuperação uma única vez e encerra sessões. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"recovery_codes": {"type": "array", "items": {"type": "string"}}, "message": {"type": "string"}}, "required": ["recovery_codes", "message"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"code": {"type": "string", "minLength": 1, "maxLength": 6, "writeOnly": true}}, "additionalProperties": true, "required": ["code"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/mfa/disable": {"post": {"operationId": "identity_api_v1_mfa_disable_post", "tags": ["identity"], "summary": "Desativar segundo fator", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"current_password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}, "code": {"type": "string", "maxLength": 64, "writeOnly": true}}, "additionalProperties": true, "required": ["current_password", "code"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/audit": {"get": {"operationId": "identity_api_v1_audit_get", "tags": ["identity"], "summary": "Consultar até 100 eventos", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Exige audit.read e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"events": {"type": "array", "items": {"$ref": "#/components/schemas/Object"}}}, "additionalProperties": true, "required": ["events"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "audit.read"}}, "/api/v1/admin/users": {"get": {"operationId": "identity_api_v1_admin_users_get", "tags": ["identity"], "summary": "Consultar até 100 usuários", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Exige users.read e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"users": {"type": "array", "items": {"$ref": "#/components/schemas/Object"}}}, "additionalProperties": true, "required": ["users"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "users.read"}}, "/api/v1/admin/global-outgoing-controls/detail": {"get": {"operationId": "identity_api_v1_admin_global-outgoing-controls_detail_get", "tags": ["identity"], "summary": "Consultar controle global de saídas e até 50 eventos", "description": "Todas as carteiras CUSTOMER atuais/futuras do titular. Sem suspensão de login ou recebimentos. Guia docs/GLOBAL-OUTGOING.md. Exige users.outgoing_control e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "users.outgoing_control", "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/admin/global-outgoing-controls/change": {"post": {"operationId": "identity_api_v1_admin_global-outgoing-controls_change_post", "tags": ["identity"], "summary": "Bloquear ou desbloquear novas saídas do titular", "description": "Senha atual, 2FA, motivo correspondente e revisão esperada. Sem autorrevisão. Novo bloqueio exige cliente ativo/confirmado; desbloqueio aceita alvo com histórico bloqueado que mudou role/atividade. Histórico imutável; replay devolve evento original e estado atual. Conflito concorrente devolve 503, comando desfeito: repetir mesma chave/conteúdo. Não remove bloqueio por conta nem suspensão de acesso. Guia docs/GLOBAL-OUTGOING.md. Exige users.outgoing_control e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "201": {"description": "Resultado local. Novo registro.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "users.outgoing_control", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"target_id": {"type": "string", "format": "uuid"}, "action": {"type": "string", "enum": ["BLOCK_OUTGOING", "UNBLOCK_OUTGOING"]}, "reason": {"type": "string", "enum": ["SECURITY_REVIEW", "OWNER_REQUEST", "REVIEW_COMPLETED"]}, "expected_revision": {"type": "integer", "minimum": 0, "maximum": 2147483646}, "idempotency_key": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["target_id", "action", "reason", "expected_revision", "idempotency_key", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/admin/user-controls/detail": {"get": {"operationId": "identity_api_v1_admin_user-controls_detail_get", "tags": ["identity"], "summary": "Consultar acesso e até 50 alterações de um cliente", "description": "Cliente ativo e confirmado, distinto do operador; perfis internos excluídos. Estado inicial permitido. Guia docs/USER-ACCESS.md. Exige users.control e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "users.control", "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/admin/user-controls/change": {"post": {"operationId": "identity_api_v1_admin_user-controls_change_post", "tags": ["identity"], "summary": "Suspender ou restaurar acesso de cliente", "description": "Motivo deve corresponder à ação. Exige senha atual e revisão; sem autorrevisão ou alvo interno. Encerra sessões, invalida desafios MFA, pausa Bearer e novas entregas de webhook; preserva créditos e regras financeiras. Repetição recupera evento original e estado atual. Não congela dinheiro nem altera KYC/KYB. Guia docs/USER-ACCESS.md. Exige users.control e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/IDENTITY.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "201": {"description": "Resultado local. Novo registro.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "users.control", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "action": {"type": "string", "enum": ["SUSPEND_ACCESS", "RESTORE_ACCESS"]}, "reason": {"type": "string", "enum": ["SECURITY_REVIEW", "OWNER_REQUEST", "REVIEW_COMPLETED"]}, "expected_revision": {"type": "integer", "minimum": 0, "maximum": 2147483646}, "idempotency_key": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["id", "action", "reason", "expected_revision", "idempotency_key", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/customers/summary": {"get": {"operationId": "customers_api_v1_customers_summary_get", "tags": ["customers"], "summary": "Consultar cadastros próprios", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/CUSTOMERS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"profiles": {"type": "array", "items": {"$ref": "#/components/schemas/Object"}}}, "additionalProperties": true, "required": ["profiles"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/customers/save": {"post": {"operationId": "customers_api_v1_customers_save_post", "tags": ["customers"], "summary": "Salvar cadastro fictício", "description": "kind seleciona o formato de data. Revisão zero no primeiro cadastro; edição invalida aprovação da versão anterior. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/CUSTOMERS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"kind": {"type": "string", "enum": ["PF", "PJ"]}, "expected_revision": {"type": "integer", "minimum": 0, "maximum": 2147483646}, "data": {"oneOf": [{"$ref": "#/components/schemas/ProfilePF"}, {"$ref": "#/components/schemas/ProfilePJ"}]}}, "additionalProperties": false, "required": ["kind", "expected_revision", "data"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/customers/verify": {"post": {"operationId": "customers_api_v1_customers_verify_post", "tags": ["customers"], "summary": "Simular KYC/KYB", "description": "Timeout produz caso ERROR persistido; repetir a chave devolve o caso original. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/CUSTOMERS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "201": {"description": "Resultado local. Novo registro.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"kind": {"type": "string", "enum": ["PF", "PJ"]}, "expected_revision": {"type": "integer", "minimum": 0, "maximum": 2147483646}, "scenario": {"type": "string", "enum": ["approve", "review", "reject", "timeout"]}, "idempotency_key": {"type": "string", "format": "uuid"}}, "additionalProperties": false, "required": ["kind", "expected_revision", "scenario", "idempotency_key"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/customers/reviews": {"get": {"operationId": "customers_api_v1_customers_reviews_get", "tags": ["customers"], "summary": "Listar até 50 revisões de terceiros", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Exige customers.review e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/CUSTOMERS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"cases": {"type": "array", "items": {"$ref": "#/components/schemas/Object"}}}, "additionalProperties": true, "required": ["cases"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "customers.review"}}, "/api/v1/customers/review": {"post": {"operationId": "customers_api_v1_customers_review_post", "tags": ["customers"], "summary": "Decidir revisão cadastral", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Exige customers.review e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/CUSTOMERS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "201": {"description": "Resultado local. Novo registro.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "customers.review", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"case_id": {"type": "string", "format": "uuid"}, "outcome": {"type": "string", "enum": ["APPROVED", "REJECTED"]}}, "additionalProperties": false, "required": ["case_id", "outcome"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/approvals/create": {"post": {"operationId": "approvals_api_v1_approvals_create_post", "tags": ["approvals"], "summary": "Solicitar aprovação de transferência", "description": "pricing_mode omitido = ZERO. FEES_V1 cobra 50 bps (0,5%) sobre o principal, arredondado para cima na menor unidade do ativo; tarifa somada ao débito do remetente. Destinatário recebe amount integral. Principal + tarifa contam nos limites. Política e custo preservados no pedido/prévia e no retry. Resposta inclui fee, total e pricing_mode. Guia docs/TRANSFER-FEES.md. Fluxo opcional no padrão OFF; obrigatório para titular em ALL_INTERNAL (USD/USDC/BTC, sem mínimo). Solicitação captura versão da política, que deve continuar vigente ao revisar/executar. Mudança de política exige nova solicitação, sem alterar histórico. Campos review_policy, review_required, policy_bound, policy_current, can_review/can_execute; flags não dispensam autorização atual. Guia docs/REQUIRED-REVIEW.md. Sem reserva de saldo. Prazo fixo de 15 minutos; no máximo 20 solicitações ativas por titular. Guia docs/APPROVALS.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/APPROVALS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "201": {"description": "Resultado local. Novo registro.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"source": {"type": "string", "format": "uuid"}, "destination": {"type": "string", "format": "uuid"}, "amount": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "idempotency_key": {"type": "string", "format": "uuid"}, "pricing_mode": {"type": "string", "enum": ["ZERO", "FEES_V1"]}}, "additionalProperties": false, "required": ["source", "destination", "amount", "idempotency_key"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/approvals/policy": {"get": {"operationId": "approvals_api_v1_approvals_policy_get", "tags": ["approvals"], "summary": "Consultar minha política de revisão", "description": "Sem filtros; somente modo, versão e canal TRANSFERS/ativos USD/USDC/BTC. OFF padrão sem ativação automática; não expõe motivos administrativos. Guia docs/REQUIRED-REVIEW.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/APPROVALS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/admin/review-policy/detail": {"get": {"operationId": "approvals_api_v1_admin_review-policy_detail_get", "tags": ["approvals"], "summary": "Consultar política de revisão e até 50 eventos", "description": "Outro titular cliente ou alvo com histórico; exige MFA e e-mail confirmado. history_has_more indica eventos adicionais. Guia docs/REQUIRED-REVIEW.md. Exige approvals.policy_manage e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/APPROVALS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "approvals.policy_manage", "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/admin/review-policy/change": {"post": {"operationId": "approvals_api_v1_admin_review-policy_change_post", "tags": ["approvals"], "summary": "Alterar política de revisão por titular", "description": "OFF padrão. ALL_INTERNAL exige cliente ativo/confirmado e motivo REQUIRE_INTERNAL_REVIEW; OFF exige política anterior ligada e RESTORE_DIRECT_INTERNAL. Sem valor mínimo nem ativação em lote. Nova revisão invalida prévias/solicitações abertas. Senha/MFA/CSRF; replay devolve evento original e estado atual. Locks ocupados retornam 503 sem efeito. Guia docs/REQUIRED-REVIEW.md. Exige approvals.policy_manage e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/APPROVALS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "201": {"description": "Resultado local. Novo registro.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "approvals.policy_manage", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"target_id": {"type": "string", "format": "uuid"}, "mode": {"type": "string", "enum": ["OFF", "ALL_INTERNAL"]}, "reason": {"type": "string", "enum": ["REQUIRE_INTERNAL_REVIEW", "RESTORE_DIRECT_INTERNAL"]}, "expected_revision": {"type": "integer", "minimum": 0, "maximum": 2147483646}, "idempotency_key": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["target_id", "mode", "reason", "expected_revision", "idempotency_key", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/approvals/list": {"get": {"operationId": "approvals_api_v1_approvals_list_get", "tags": ["approvals"], "summary": "Listar até 50 solicitações recentes", "description": "Titular vê suas solicitações. ADMIN/SUPER_ADMIN com 2FA vê a fila administrativa. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/APPROVALS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/approvals/detail": {"get": {"operationId": "approvals_api_v1_approvals_detail_get", "tags": ["approvals"], "summary": "Consultar solicitação e histórico", "description": "Acesso do titular ou approvals.review com 2FA. Expiração é derivada do prazo; eventos são imutáveis. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/APPROVALS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/approvals/review": {"post": {"operationId": "approvals_api_v1_approvals_review_post", "tags": ["approvals"], "summary": "Aprovar ou rejeitar solicitação", "description": "Solicitante e destinatário não podem revisar. Aprovar exige REVIEW_APPROVED; rejeitar exige DATA_MISMATCH ou RISK_REVIEW. Não movimenta saldo nem estende o prazo. Exige approvals.review e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/APPROVALS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "approvals.review", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "expected_revision": {"type": "integer", "minimum": 0, "maximum": 3}, "idempotency_key": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}, "action": {"type": "string", "enum": ["APPROVED", "REJECTED"]}, "reason": {"type": "string", "enum": ["REVIEW_APPROVED", "DATA_MISMATCH", "RISK_REVIEW"]}}, "additionalProperties": false, "required": ["id", "expected_revision", "idempotency_key", "password", "action", "reason"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/approvals/cancel": {"post": {"operationId": "approvals_api_v1_approvals_cancel_post", "tags": ["approvals"], "summary": "Cancelar solicitação própria", "description": "Titular; somente PENDING ou APPROVED dentro do prazo. Nenhum débito. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/APPROVALS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "expected_revision": {"type": "integer", "minimum": 0, "maximum": 3}, "idempotency_key": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["id", "expected_revision", "idempotency_key", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/approvals/execute": {"post": {"operationId": "approvals_api_v1_approvals_execute_post", "tags": ["approvals"], "summary": "Executar transferência aprovada", "description": "Titular com senha; somente APPROVED dentro do prazo. Revalida cadastro, saldo, limites e bloqueios; consome limite de TRANSFERS. Repetição do comando com mesma chave recupera resultado sem novo débito. Guia docs/APPROVALS.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/APPROVALS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "expected_revision": {"type": "integer", "minimum": 0, "maximum": 3}, "idempotency_key": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["id", "expected_revision", "idempotency_key", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/limits/policy": {"get": {"operationId": "limits_api_v1_limits_policy_get", "tags": ["limits"], "summary": "Consultar limites vigentes de teste", "description": "Política global por ativo. Contagem por usuário e módulo; cripto e Lightning também por direção. Dia UTC. Confirmações usam a versão vigente. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/LIMITS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/limits/effective": {"get": {"operationId": "limits_api_v1_limits_effective_get", "tags": ["limits"], "summary": "Consultar limites efetivos próprios", "description": "Sem filtros. Global, individual e efetivo; não expõe operador. Menor teto por campo; consumo por titular/módulo/direção, UTC, incluindo DEPOSIT/RECEIVE mock. Sem reserva. Guia docs/INDIVIDUAL-LIMITS.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/LIMITS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/admin/individual-limits/detail": {"get": {"operationId": "limits_api_v1_admin_individual-limits_detail_get", "tags": ["limits"], "summary": "Consultar limites individuais e até 50 eventos", "description": "UUID de outro titular cliente; histórico adicional indicado. Global, armazenado e efetivo separados. Exige e-mail administrativo confirmado. Guia docs/INDIVIDUAL-LIMITS.md. Exige limits.manage e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/LIMITS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "limits.manage", "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/admin/individual-limits/change": {"post": {"operationId": "limits_api_v1_admin_individual-limits_change_post", "tags": ["limits"], "summary": "Alterar limites individuais", "description": "SET_LIMITS exige limites completos positivos <= global vigente e quantidade inteira. INHERIT_GLOBAL exige assets/daily_count nulos e motivo RESTORE_GLOBAL. Senha, MFA, alvo elegível, revisões global/individual e chave idempotente. Replay devolve evento original e estado atual. Não ativa revisão obrigatória. Guia docs/INDIVIDUAL-LIMITS.md. Exige limits.manage e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/LIMITS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "201": {"description": "Resultado local. Novo registro.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "limits.manage", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"target_id": {"type": "string", "format": "uuid"}, "action": {"type": "string", "enum": ["SET_LIMITS", "INHERIT_GLOBAL"]}, "assets": {"type": "object", "properties": {"USD": {"type": "object", "properties": {"per_operation": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "per_day": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}}, "additionalProperties": false, "required": ["per_operation", "per_day"]}, "USDC": {"type": "object", "properties": {"per_operation": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "per_day": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}}, "additionalProperties": false, "required": ["per_operation", "per_day"]}, "BTC": {"type": "object", "properties": {"per_operation": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "per_day": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}}, "additionalProperties": false, "required": ["per_operation", "per_day"]}}, "additionalProperties": false, "required": ["USD", "USDC", "BTC"], "nullable": true}, "daily_count": {"type": "integer", "minimum": 1, "maximum": 10, "nullable": true}, "reason": {"type": "string", "enum": ["POLICY_REVIEW", "OWNER_REQUEST", "RESTORE_GLOBAL"]}, "expected_revision": {"type": "integer", "minimum": 0, "maximum": 2147483646}, "expected_global_revision": {"type": "integer", "minimum": 0, "maximum": 2147483646}, "idempotency_key": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["target_id", "action", "assets", "daily_count", "reason", "expected_revision", "expected_global_revision", "idempotency_key", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/limits/detail": {"get": {"operationId": "limits_api_v1_limits_detail_get", "tags": ["limits"], "summary": "Consultar política e até 50 versões", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Exige limits.manage e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/LIMITS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "limits.manage"}}, "/api/v1/limits/change": {"post": {"operationId": "limits_api_v1_limits_change_post", "tags": ["limits"], "summary": "Publicar nova versão de limites", "description": "Exige ADMIN/SUPER_ADMIN, 2FA e senha. Valores por operação <= diário, dentro dos máximos originais do sandbox. Motivo RESTORE_DEFAULTS exige todos os valores originais. Revisão inicial zero; repetição retorna event_id original e política atual. Guia docs/LIMITS.md. Exige limits.manage e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/LIMITS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "201": {"description": "Resultado local. Novo registro.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "limits.manage", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"assets": {"type": "object", "properties": {"USD": {"type": "object", "properties": {"per_operation": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "per_day": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}}, "additionalProperties": false, "required": ["per_operation", "per_day"]}, "USDC": {"type": "object", "properties": {"per_operation": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "per_day": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}}, "additionalProperties": false, "required": ["per_operation", "per_day"]}, "BTC": {"type": "object", "properties": {"per_operation": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "per_day": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}}, "additionalProperties": false, "required": ["per_operation", "per_day"]}}, "additionalProperties": false, "required": ["USD", "USDC", "BTC"]}, "daily_count": {"type": "integer", "minimum": 1, "maximum": 10}, "reason": {"type": "string", "enum": ["POLICY_REVIEW", "RESTORE_DEFAULTS"]}, "expected_revision": {"type": "integer", "minimum": 0, "maximum": 2147483646}, "idempotency_key": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["assets", "daily_count", "reason", "expected_revision", "idempotency_key", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/ledger/summary": {"get": {"operationId": "ledger_api_v1_ledger_summary_get", "tags": ["ledger"], "summary": "Consultar contas e ativos próprios", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/LEDGER.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/ledger/open": {"post": {"operationId": "ledger_api_v1_ledger_open_post", "tags": ["ledger"], "summary": "Abrir contas zeradas", "description": "Exige cadastro próprio com aprovação atual; repetição não cria contas duplicadas. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/LEDGER.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"profile_id": {"type": "string", "format": "uuid"}}, "additionalProperties": false, "required": ["profile_id"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/ledger/controls/list": {"get": {"operationId": "ledger_api_v1_ledger_controls_list_get", "tags": ["ledger"], "summary": "Consultar contas de terceiros", "description": "Até 50 contas recentes. ADMIN/SUPER_ADMIN com segundo fator confirmado. Não inclui contas próprias. Exige accounts.control e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/LEDGER.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "accounts.control", "parameters": [{"name": "status", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "BLOCKED"]}}]}}, "/api/v1/ledger/controls/detail": {"get": {"operationId": "ledger_api_v1_ledger_controls_detail_get", "tags": ["ledger"], "summary": "Consultar situação e histórico de saídas", "description": "Até 50 decisões recentes de uma conta de terceiro. Exige accounts.control e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/LEDGER.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "accounts.control", "parameters": [{"name": "account_id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/ledger/controls/transition": {"post": {"operationId": "ledger_api_v1_ledger_controls_transition_post", "tags": ["ledger"], "summary": "Bloquear ou liberar novas saídas", "description": "Motivo SECURITY_REVIEW/OWNER_REQUEST para bloqueio, REVIEW_COMPLETED para desbloqueio. Revisão inicial zero. Exige senha do administrador. Repetição idêntica devolve event_id original com situação atual. Novos débitos são impedidos no banco; entradas, consultas e replays concluídos continuam disponíveis. Guia docs/ACCOUNT-CONTROLS.md. Exige accounts.control e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/LEDGER.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "201": {"description": "Resultado local. Novo registro.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "accounts.control", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"account_id": {"type": "string", "format": "uuid"}, "blocked": {"type": "boolean"}, "reason": {"type": "string", "enum": ["SECURITY_REVIEW", "OWNER_REQUEST", "REVIEW_COMPLETED"]}, "expected_revision": {"type": "integer", "minimum": 0, "maximum": 2147483646}, "idempotency_key": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["account_id", "blocked", "reason", "expected_revision", "idempotency_key", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/wallets/summary": {"get": {"operationId": "wallets_api_v1_wallets_summary_get", "tags": ["wallets"], "summary": "Consultar carteiras próprias", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/WALLETS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"wallets": {"type": "array", "items": {"$ref": "#/components/schemas/Wallet"}}, "simulated": {"type": "boolean"}, "real_money_enabled": {"type": "boolean"}}, "required": ["wallets", "simulated", "real_money_enabled"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/wallets/statement": {"get": {"operationId": "wallets_api_v1_wallets_statement_get", "tags": ["wallets"], "summary": "Consultar extrato por snapshot", "description": "Datas UTC inclusivas, entre 2000 e 2100; cursor assinado dura 15 minutos, vincula usuário, carteira, filtros e snapshot. Não repetir filtros nem adicionar campos desconhecidos. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/WALLETS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "wallet_id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}, {"name": "from", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "to", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "direction", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "CREDIT", "DEBIT"]}}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer", "minimum": 1, "maximum": 50, "default": 20}}, {"name": "cursor", "in": "query", "required": false, "schema": {"type": "string"}}]}}, "/api/v1/transfers/prepare": {"post": {"operationId": "transfers_api_v1_transfers_prepare_post", "tags": ["transfers"], "summary": "Preparar transferência", "description": "Política ALL_INTERNAL recusa envio direto com 409/review_required. Prévia OFF vincula ID/revisão; mudança exige nova prévia (409/review_policy_changed). Replay concluído permanece válido após autenticação. Comprovante inclui review com evidência original, sem exigir política atual. Guia docs/REQUIRED-REVIEW.md. pricing_mode omitido = ZERO. FEES_V1 cobra 50 bps (0,5%) sobre o principal, arredondado para cima na menor unidade do ativo; tarifa somada ao débito do remetente. Destinatário recebe amount integral. Principal + tarifa contam nos limites. Política e custo preservados no pedido/prévia e no retry. Resposta inclui fee, total e pricing_mode. Guia docs/TRANSFER-FEES.md. Mesmo ativo, usuários diferentes; prévia de dois minutos, sem reserva de saldo. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/TRANSFERS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"source": {"type": "string", "format": "uuid"}, "destination": {"type": "string", "format": "uuid"}, "amount": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "idempotency_key": {"type": "string", "format": "uuid"}, "pricing_mode": {"type": "string", "enum": ["ZERO", "FEES_V1"]}}, "additionalProperties": false, "required": ["source", "destination", "amount", "idempotency_key"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/transfers/confirm": {"post": {"operationId": "transfers_api_v1_transfers_confirm_post", "tags": ["transfers"], "summary": "Confirmar transferência", "description": "Política ALL_INTERNAL recusa envio direto com 409/review_required. Prévia OFF vincula ID/revisão; mudança exige nova prévia (409/review_policy_changed). Replay concluído permanece válido após autenticação. Comprovante inclui review com evidência original, sem exigir política atual. Guia docs/REQUIRED-REVIEW.md. Repita o mesmo token em resultado incerto. Repetição concluída retorna o mesmo comprovante, inclusive após expiração. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/TRANSFERS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Receipt"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"token": {"type": "string", "maxLength": 6000, "description": "Prévia assinada devolvida pelo servidor. Reutilize a mesma em resultado incerto."}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["token", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/transfers/receipt": {"get": {"operationId": "transfers_api_v1_transfers_receipt_get", "tags": ["transfers"], "summary": "Consultar comprovante das partes", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/TRANSFERS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Receipt"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/transfers/history": {"get": {"operationId": "transfers_api_v1_transfers_history_get", "tags": ["transfers"], "summary": "Consultar envios e recebimentos próprios", "description": "Sessão revalidada sob lock; 2FA quando ativado. Administrador vê apenas suas próprias transferências. Datas UTC inclusivas entre 2000 e 2100; parâmetros únicos. Cursor assinado de 15 minutos vinculado ao usuário, filtros, tamanho de página e snapshot. Novas transferências/estornos só aparecem ao atualizar. Inclui fluxo direto/aprovado e referência de estorno, sem alterar o registro original. Não inclui pedidos não executados nem outros módulos. Guia docs/TRANSFER-HISTORY.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/TRANSFERS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "asset", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "USD", "USDC", "BTC"]}}, {"name": "direction", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "SENT", "RECEIVED"]}}, {"name": "from", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "to", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer", "minimum": 1, "maximum": 50, "default": 20}}, {"name": "cursor", "in": "query", "required": false, "schema": {"type": "string", "maxLength": 12000}}]}}, "/api/v1/transfers/history.csv": {"get": {"operationId": "transfers_api_v1_transfers_history_csv_get", "tags": ["transfers"], "summary": "Exportar histórico próprio em CSV", "description": "Nova consulta dos filtros selecionados, sem cursor ou limit. Mesmas regras privadas do histórico, sessão revalidada e MFA quando ativado. Máximo 1.000 registros; excedente retorna 409 sem truncar. CSV UTF-8 com BOM, separador ponto e vírgula, campos entre aspas e proteção contra fórmulas. Valores exatos com ponto decimal e unidades mínimas em texto. Cabeçalhos X-Export-Count e X-Export-Captured-At; download no-store auditado; até dez tentativas por conta em cinco minutos. Erros retornam JSON. Guia docs/TRANSFER-CSV.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/TRANSFERS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"text/csv": {"schema": {"type": "string", "format": "binary"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "from", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "to", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "asset", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "USD", "USDC", "BTC"]}}, {"name": "direction", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "SENT", "RECEIVED"]}}]}}, "/api/v1/transfers/policy": {"get": {"operationId": "transfers_api_v1_transfers_policy_get", "tags": ["transfers"], "summary": "Consultar limites e cenários de tarifa", "description": "Tetos efetivos do próprio titular; revision é global e individual_revision identifica a versão individual. fee=0 representa o cenário padrão ZERO. pricing_modes informa ZERO e FEES_V1, com bps por ativo. fee_rounding=CEILING_MINOR_UNIT; limits_basis=PRINCIPAL_PLUS_FEE. V1 tem alíquota congelada e não configura preço comercial. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/TRANSFERS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/wallets/statement.pdf": {"get": {"operationId": "wallets_api_v1_wallets_statement_pdf_get", "tags": ["wallets"], "summary": "Baixar extrato próprio em PDF", "description": "PDF paginado do sandbox: resumo mesmo sem movimentos e até 200 registros, sem truncamento. Nova captura comum para saldos, totais e movimentos. Filtro de direção não recalcula saldos/totais. Sem cursor/limit. Sessão revalidada sob lock, MFA quando ativado e carteira própria; administrador sem vínculo recebe 404. Download no-store e auditado; dez tentativas por conta em cinco minutos. Excesso de registros retorna JSON 409. X-Export-Count conta movimentos e X-Export-Captured-At identifica a consulta. Guia docs/WALLET-PDF.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/WALLETS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/pdf": {"schema": {"type": "string", "format": "binary"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "wallet_id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}, {"name": "from", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "to", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "direction", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "CREDIT", "DEBIT"]}}]}}, "/api/v1/wallets/statement.csv": {"get": {"operationId": "wallets_api_v1_wallets_statement_csv_get", "tags": ["wallets"], "summary": "Exportar extrato próprio em CSV", "description": "Nova consulta da carteira própria; mesma posição para saldos e movimentos. Uma linha RESUMO, mesmo sem movimentos, e até 1.000 linhas MOVIMENTO. Acima do teto: JSON 409 sem truncar. Totais e saldos do período incluem ambas as direções, independentemente do filtro. Sem cursor/limit. CSV UTF-8 BOM, ponto e vírgula, proteção contra fórmulas e valores exatos. X-Export-Count conta movimentos, sem RESUMO. Sessão revalidada sob lock e MFA quando ativado; download auditado, no-store, dez tentativas por usuário em cinco minutos. Administrador sem vínculo não tem acesso. Guia docs/WALLET-CSV.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/WALLETS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"text/csv": {"schema": {"type": "string", "format": "binary"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "wallet_id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}, {"name": "from", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "to", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "direction", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "CREDIT", "DEBIT"]}}]}}, "/api/v1/exchange/quotes": {"post": {"operationId": "exchange_api_v1_exchange_quotes_post", "tags": ["exchange"], "summary": "Criar cotação fictícia", "description": "Ativos diferentes do mesmo cadastro; validade 60 segundos. Mesma chave retorna cotação original, inclusive vencida. pricing_mode omitido = ZERO. FEES_V1: tarifa de 50 bps (0,5%) sobre amount total, convertendo o restante; spread de 100 bps (1%) sobre destino bruto. Custos arredondados para cima, destino bruto para baixo. Resposta inclui fee, net_amount_in, gross_amount_out, spread, amount_out líquido, pricing_mode e alíquotas em bps. Valores por ativo em strings decimais. Consulte docs/PRICING.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/EXCHANGE.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"source": {"type": "string", "format": "uuid"}, "destination": {"type": "string", "format": "uuid"}, "amount": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "idempotency_key": {"type": "string", "format": "uuid"}, "pricing_mode": {"type": "string", "enum": ["ZERO", "FEES_V1"]}}, "additionalProperties": false, "required": ["source", "destination", "amount", "idempotency_key"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/exchange/confirm": {"post": {"operationId": "exchange_api_v1_exchange_confirm_post", "tags": ["exchange"], "summary": "Liquidar cotação fictícia", "description": "Mesma cotação liquidada retorna a ordem original sem novo débito. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/EXCHANGE.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"quote_id": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["quote_id", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/exchange/quote": {"get": {"operationId": "exchange_api_v1_exchange_quote_get", "tags": ["exchange"], "summary": "Consultar cotação própria", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/EXCHANGE.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/exchange/order": {"get": {"operationId": "exchange_api_v1_exchange_order_get", "tags": ["exchange"], "summary": "Consultar ordem própria", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/EXCHANGE.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/exchange/summary": {"get": {"operationId": "exchange_api_v1_exchange_summary_get", "tags": ["exchange"], "summary": "Resumir conversões próprias por par de moedas", "description": "Resumo do conjunto completo, independente da paginação/CSV. Sessão revalidada sob lock e MFA quando ativado; inclusive ADMIN consulta somente operações próprias. Datas UTC inclusivas entre 2000 e 2100, por liquidação original; não aceita cursor/limit/ID de titular. Original = reversed + unreversed em cada par. Estornos conhecidos no snapshot são separados, mesmo ocorridos depois do período; não é fluxo de estornos do período nem saldo de carteira. Tarifa no ativo de origem, spread no destino; valores formatados e unidades mínimas em strings exatas. Nova captura independente do histórico e CSV. Sem escrita financeira, nova cotação ou auditoria de download. Guia docs/EXCHANGE-SUMMARY.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/EXCHANGE.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ConversionSummary"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "asset_in", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "USD", "USDC", "BTC"]}}, {"name": "asset_out", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "USD", "USDC", "BTC"]}}, {"name": "from", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "to", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}]}}, "/api/v1/exchange/history.csv": {"get": {"operationId": "exchange_api_v1_exchange_history_csv_get", "tags": ["exchange"], "summary": "Exportar conversões próprias em CSV", "description": "Nova consulta privada dos mesmos filtros do histórico. Sem cursor ou limit; parâmetros únicos. Máximo 1.000 conversões, excesso retorna JSON 409 sem truncar. Valores debitado/recebido, tarifa na moeda de origem e spread na moeda de destino, valores e unidades mínimas em strings; estado original e estorno separados. CSV UTF-8 BOM com ponto e vírgula, proteção contra fórmulas; arquivo vazio mantém cabeçalho. Sessão revalidada sob lock e MFA quando ativado; administrador sem acesso global. Download no-store auditado; dez tentativas por conta e 60 por IP em cinco minutos. X-Export-Count e X-Export-Captured-At. Guia docs/EXCHANGE-CSV.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/EXCHANGE.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"text/csv": {"schema": {"type": "string", "format": "binary"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "asset_in", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "USD", "USDC", "BTC"]}}, {"name": "asset_out", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "USD", "USDC", "BTC"]}}, {"name": "from", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "to", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}]}}, "/api/v1/exchange/history": {"get": {"operationId": "exchange_api_v1_exchange_history_get", "tags": ["exchange"], "summary": "Consultar conversões próprias liquidadas", "description": "Somente ordens liquidadas do titular, inclusive para administradores. Sessão revalidada sob lock e MFA quando ativado. Datas UTC inclusivas entre 2000 e 2100; parâmetros únicos. Cursor assinado de 15 minutos vinculado a usuário, filtros, tamanho de página e snapshot. Novas conversões e estornos só aparecem ao atualizar. Valores debitados/recebidos, tarifa e spread originais em strings por ativo; nenhuma soma entre ativos. Consulta sem escrita financeira ou auditoria de download. Guia docs/EXCHANGE-HISTORY.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/EXCHANGE.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "asset_in", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "USD", "USDC", "BTC"]}}, {"name": "asset_out", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "USD", "USDC", "BTC"]}}, {"name": "from", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "to", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "limit", "in": "query", "required": false, "schema": {"type": "integer", "minimum": 1, "maximum": 50, "default": 20}}, {"name": "cursor", "in": "query", "required": false, "schema": {"type": "string", "maxLength": 12000}}]}}, "/api/v1/transfers/receipt.pdf": {"get": {"operationId": "transfers_api_v1_transfers_receipt_pdf_get", "tags": ["transfers"], "summary": "Baixar comprovante PDF da transferência", "description": "Somente remetente ou destinatário da transferência contabilizada. Administrador não ganha acesso a terceiros. Sessão revalidada sob lock; 2FA quando ativado. PDF privado no-store, auditoria, dez tentativas por conta/ação em cinco minutos. Valores originais, sem novo débito. Aprovação identificada pelo vínculo persistido; pedidos não executados não geram PDF. Estornos permanecem no extrato. Erros retornam JSON. Guia docs/TRANSFER-RECEIPTS.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/TRANSFERS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/pdf": {"schema": {"type": "string", "format": "binary"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/exchange/receipt.pdf": {"get": {"operationId": "exchange_api_v1_exchange_receipt_pdf_get", "tags": ["exchange"], "summary": "Baixar comprovante PDF da conversão", "description": "Somente titular de ordem liquidada; sessão revalidada sob bloqueio e 2FA quando ativado. Download privado no-store, com auditoria e limite de 10 tentativas por conta em 5 minutos. Valores originais, inclusive tarifa e spread; não recalcula cotação nem movimenta saldo. Estornos posteriores permanecem no extrato. Erros retornam JSON. Guia docs/RECEIPTS.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/EXCHANGE.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/pdf": {"schema": {"type": "string", "format": "binary"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/crypto/prepare": {"post": {"operationId": "crypto_api_v1_crypto_prepare_post", "tags": ["crypto"], "summary": "Preparar depósito ou saque mock", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/CRYPTO.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"account_id": {"type": "string", "format": "uuid"}, "direction": {"type": "string", "enum": ["DEPOSIT", "WITHDRAWAL"]}, "amount": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "destination": {"type": "string", "description": "Vazio para depósito; referência MOCK válida do ativo para saque, diferente da própria."}, "scenario": {"type": "string", "enum": ["success", "reject", "timeout"]}, "idempotency_key": {"type": "string", "format": "uuid"}}, "additionalProperties": false, "required": ["account_id", "direction", "amount", "destination", "scenario", "idempotency_key"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/crypto/confirm": {"post": {"operationId": "crypto_api_v1_crypto_confirm_post", "tags": ["crypto"], "summary": "Confirmar movimento mock", "description": "Timeout não cria movimento terminal; repetir request_id. Recusa é resultado de negócio sem journal. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/CRYPTO.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"request_id": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["request_id", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/crypto/request": {"get": {"operationId": "crypto_api_v1_crypto_request_get", "tags": ["crypto"], "summary": "Consultar solicitação própria", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/CRYPTO.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/crypto/history": {"get": {"operationId": "crypto_api_v1_crypto_history_get", "tags": ["crypto"], "summary": "Últimas 20 solicitações", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/CRYPTO.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/crypto/wallets": {"get": {"operationId": "crypto_api_v1_crypto_wallets_get", "tags": ["crypto"], "summary": "Carteiras BTC/USDC próprias", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/CRYPTO.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/fiat/prepare": {"post": {"operationId": "fiat_api_v1_fiat_prepare_post", "tags": ["fiat"], "summary": "Preparar depósito ou retirada USD mock", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/FIAT-MOCK.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"account_id": {"type": "string", "format": "uuid"}, "direction": {"type": "string", "enum": ["DEPOSIT", "WITHDRAWAL"]}, "amount": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "destination": {"type": "string", "description": "Vazio para depósito; referência MOCK-FIAT-USD válida para saque, diferente da própria."}, "scenario": {"type": "string", "enum": ["success", "reject", "timeout"]}, "idempotency_key": {"type": "string", "format": "uuid"}}, "additionalProperties": false, "required": ["account_id", "direction", "amount", "destination", "scenario", "idempotency_key"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/fiat/confirm": {"post": {"operationId": "fiat_api_v1_fiat_confirm_post", "tags": ["fiat"], "summary": "Confirmar movimento mock", "description": "Timeout não cria movimento terminal; repetir request_id. Recusa é resultado de negócio sem journal. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/FIAT-MOCK.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"request_id": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["request_id", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/fiat/request": {"get": {"operationId": "fiat_api_v1_fiat_request_get", "tags": ["fiat"], "summary": "Consultar solicitação própria", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/FIAT-MOCK.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/fiat/history": {"get": {"operationId": "fiat_api_v1_fiat_history_get", "tags": ["fiat"], "summary": "Últimas 20 solicitações", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/FIAT-MOCK.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/fiat/wallets": {"get": {"operationId": "fiat_api_v1_fiat_wallets_get", "tags": ["fiat"], "summary": "Contas USD próprias", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/FIAT-MOCK.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/lightning/invoices": {"post": {"operationId": "lightning_api_v1_lightning_invoices_post", "tags": ["lightning"], "summary": "Criar invoice fictícia", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/LIGHTNING.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/LightningInvoice"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"account_id": {"type": "string", "format": "uuid"}, "direction": {"type": "string", "enum": ["RECEIVE", "PAY"]}, "amount": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "scenario": {"type": "string", "enum": ["success", "reject", "timeout"]}, "idempotency_key": {"type": "string", "format": "uuid"}}, "additionalProperties": false, "required": ["account_id", "direction", "amount", "scenario", "idempotency_key"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/lightning/confirm": {"post": {"operationId": "lightning_api_v1_lightning_confirm_post", "tags": ["lightning"], "summary": "Confirmar invoice mock", "description": "Pagamento PAY exige confirmação autenticada. Timeout permite repetir invoice_id sem débito duplicado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/LIGHTNING.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/LightningInvoice"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"invoice_id": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["invoice_id", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/lightning/invoice": {"get": {"operationId": "lightning_api_v1_lightning_invoice_get", "tags": ["lightning"], "summary": "Consultar invoice própria", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/LIGHTNING.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/LightningInvoice"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/lightning/history": {"get": {"operationId": "lightning_api_v1_lightning_history_get", "tags": ["lightning"], "summary": "Últimas 20 invoices", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/LIGHTNING.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/LightningHistory"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/lightning/wallets": {"get": {"operationId": "lightning_api_v1_lightning_wallets_get", "tags": ["lightning"], "summary": "Carteiras BTC próprias", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/LIGHTNING.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/lightning/webhook": {"post": {"operationId": "lightning_api_v1_lightning_webhook_post", "tags": ["lightning"], "summary": "Receber evento Lightning assinado", "description": "HMAC-SHA256(timestamp ASCII + ponto + bytes exatos do corpo); assinatura hexadecimal minúscula de 64 caracteres. Tolerância 300 segundos. Notificação externa apenas RECEIVE; não autentica débito PAY. IDs/dados conferidos contra invoice e simulador. Sem CSRF. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"LightningSignature": [], "LightningTimestamp": []}], "x-guide": "docs/LIGHTNING.md", "x-authentication": "signature", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"event_id": {"type": "string", "format": "uuid"}, "invoice_id": {"type": "string", "format": "uuid"}, "code": {"type": "string"}, "provider": {"type": "string", "enum": ["mock-lightning-v1"]}, "asset": {"type": "string", "enum": ["BTC"]}, "amount": {"type": "string", "pattern": "^[0-9]+$"}, "status": {"type": "string", "enum": ["SUCCEEDED", "FAILED"]}}, "additionalProperties": false, "required": ["event_id", "invoice_id", "code", "provider", "asset", "amount", "status"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/business/list": {"get": {"operationId": "business_api_v1_business_list_get", "tags": ["business"], "summary": "Listar empresas e convites próprios", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/BUSINESS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/business/detail": {"get": {"operationId": "business_api_v1_business_detail_get", "tags": ["business"], "summary": "Consultar empresa acessível", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/BUSINESS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/business/balances": {"get": {"operationId": "business_api_v1_business_balances_get", "tags": ["business"], "summary": "Consultar carteiras PJ autorizadas", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/BUSINESS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/business/dashboard": {"get": {"operationId": "business_api_v1_business_dashboard_get", "tags": ["business"], "summary": "Consultar painel Business por período", "description": "Requer balances.read e KYB atual. Somente contas do PJ selecionado. Datas UTC inclusivas 2000–2100, vazias sem limite; filtros desconhecidos/repetidos recusados. Todos os agregados financeiros usam uma consulta SQL. Pagamentos são transferências enviadas, Merchant e Lightning PAY concluídos; conversões contam uma vez por lançamento. Estornos entram na própria data, sem apagar a contagem original. Saldo atual independe do período. team mostra equipe atual somente com team.read. Rate limit por usuário. Guia docs/BUSINESS-DASHBOARD.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/BUSINESS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/BusinessDashboard"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}, {"name": "from", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "to", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}]}}, "/api/v1/business/dashboard.csv": {"get": {"operationId": "business_api_v1_business_dashboard_csv_get", "tags": ["business"], "summary": "Baixar resumo Business em CSV", "description": "Requer balances.read e KYB atual. Somente contas do PJ selecionado. Datas UTC inclusivas 2000–2100, vazias sem limite; filtros desconhecidos/repetidos recusados. Todos os agregados financeiros usam uma consulta SQL. Pagamentos são transferências enviadas, Merchant e Lightning PAY concluídos; conversões contam uma vez por lançamento. Estornos entram na própria data, sem apagar a contagem original. Saldo atual independe do período. team mostra equipe atual somente com team.read. Rate limit por usuário. Guia docs/BUSINESS-DASHBOARD.md. Nova consulta privada; UTF-8 BOM, ponto e vírgula, proteção contra fórmulas. Uma linha OPERACOES e uma SALDOS por carteira; contagens não se repetem por moeda. Sem equipe/dados pessoais. Download auditado e no-store. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/BUSINESS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"text/csv": {"schema": {"type": "string", "format": "binary"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}, {"name": "from", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}, {"name": "to", "in": "query", "required": false, "schema": {"type": "string", "format": "date"}}]}}, "/api/v1/business/create": {"post": {"operationId": "business_api_v1_business_create_post", "tags": ["business"], "summary": "Criar empresa de teste", "description": "Somente titular de PJ aprovado; uma empresa por cadastro. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/BUSINESS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"profile_id": {"type": "string", "format": "uuid"}, "name": {"type": "string"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["profile_id", "name", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/business/invite": {"post": {"operationId": "business_api_v1_business_invite_post", "tags": ["business"], "summary": "Convidar conta interna", "description": "Papéis da equipe são distintos dos perfis globais. OWNER pode gerir MANAGER/VIEWER; MANAGER apenas VIEWER. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/BUSINESS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"business_id": {"type": "string", "format": "uuid"}, "recipient_email": {"type": "string", "format": "email"}, "role": {"type": "string", "enum": ["MANAGER", "VIEWER"]}, "idempotency_key": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["business_id", "recipient_email", "role", "idempotency_key", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/business/decide": {"post": {"operationId": "business_api_v1_business_decide_post", "tags": ["business"], "summary": "Decidir convite", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/BUSINESS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"invitation_id": {"type": "string", "format": "uuid"}, "outcome": {"type": "string", "enum": ["ACCEPTED", "DECLINED", "REVOKED"]}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["invitation_id", "outcome", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/business/member": {"post": {"operationId": "business_api_v1_business_member_post", "tags": ["business"], "summary": "Alterar membro", "description": "Não reativa membro revogado sem novo convite aceito; não altera o titular. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/BUSINESS.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"business_id": {"type": "string", "format": "uuid"}, "member_id": {"type": "string", "format": "uuid"}, "role": {"type": "string", "enum": ["MANAGER", "VIEWER"]}, "active": {"type": "boolean"}, "expected_revision": {"type": "integer", "minimum": 0, "maximum": 2147483646}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["business_id", "member_id", "role", "active", "expected_revision", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/merchant/public": {"get": {"operationId": "merchant_api_v1_merchant_public_get", "tags": ["merchant"], "summary": "Consultar cobrança pública", "description": "Dados públicos da cobrança e nome comercial. Não divulga dados privados do pagador. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [], "x-guide": "docs/MERCHANT.md", "x-authentication": "public", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/merchant/list": {"get": {"operationId": "merchant_api_v1_merchant_list_get", "tags": ["merchant"], "summary": "Listar empresas próprias e cobranças", "description": "Comprovantes privados em payments e links[].receipt incluem pricing conforme MerchantReceipt. lightning_invoices mostra as últimas 20 invoices do próprio pagador, conforme MerchantLightningInvoice; códigos/source não são expostos no checkout público nem nos comprovantes da empresa. Sem consultar provedor ou alterar histórico; terceiros não recebem esses registros. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/MERCHANT.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/merchant/create": {"post": {"operationId": "merchant_api_v1_merchant_create_post", "tags": ["merchant"], "summary": "Criar cobrança por link", "description": "SINGLE_ASSET padrão preserva links antigos. MULTI_ASSET aceita carteira USD/USDC/BTC. Principal CEIL da cobrança para a moeda paga; bruto FLOOR do principal para destino. ZERO padrão. FEES_V1 opt-in congela tarifa de 0,5% acrescentada ao pagador e spread de 1% descontado da empresa somente com conversão; custos arredondados para cima. Guia docs/MERCHANT-PRICING.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/MERCHANT.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"business_id": {"type": "string", "format": "uuid"}, "asset": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "settlement_asset": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "amount": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "description": {"type": "string"}, "idempotency_key": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}, "payment_mode": {"type": "string", "enum": ["SINGLE_ASSET", "MULTI_ASSET"]}, "pricing_mode": {"type": "string", "enum": ["ZERO", "FEES_V1"]}}, "additionalProperties": false, "required": ["business_id", "asset", "settlement_asset", "amount", "description", "idempotency_key", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/merchant/cancel": {"post": {"operationId": "merchant_api_v1_merchant_cancel_post", "tags": ["merchant"], "summary": "Cancelar cobrança própria aberta", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/MERCHANT.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"link_id": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["link_id", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/merchant/prepare": {"post": {"operationId": "merchant_api_v1_merchant_prepare_post", "tags": ["merchant"], "summary": "Preparar pagamento de cobrança", "description": "Prévia assinada; pagamento próprio do lojista é recusado. Conversão usa LiquidityProviderInterface/mock-liquidity-v1; timeout, indisponibilidade ou resposta incompatível retornam 503 sem débito. Cada trecho na mesma moeda dispensa provider. Em ZERO, SINGLE_ASSET preserva merchant-zero-v1 e MULTI_ASSET usa merchant-multi-zero-v1. MULTI_ASSET converte cobrança para principal com arredondamento para cima e principal para bruto recebido para baixo; FEES_V1 usa merchant-fees-v1. Limites usam ativo/valor debitados. Custos conforme pricing_mode do link; saldo/limites incluem tarifa. Valores exatos em pricing; FEES_V1 consta no token assinado e no total da invoice Lightning. Guia docs/MERCHANT-MULTICURRENCY.md. channel=WALLET por padrão. LIGHTNING_MOCK exige BTC e cria invoice imutável por chave; scenario é permitido somente nesse canal (success padrão). Mesma chave recupera a invoice, mesmo expirada. Sem reserva de saldo. Guia docs/MERCHANT-LIGHTNING.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/MERCHANT.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/MerchantPreview"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"link_id": {"type": "string", "format": "uuid"}, "source": {"type": "string", "format": "uuid"}, "idempotency_key": {"type": "string", "format": "uuid"}, "channel": {"type": "string", "enum": ["WALLET", "LIGHTNING_MOCK"]}, "scenario": {"type": "string", "enum": ["success", "reject", "timeout"]}}, "additionalProperties": false, "required": ["link_id", "source", "idempotency_key"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/merchant/confirm": {"post": {"operationId": "merchant_api_v1_merchant_confirm_post", "tags": ["merchant"], "summary": "Confirmar pagamento Merchant", "description": "LIGHTNING_MOCK: SUCCEEDED liquida pelo Merchant; FAILED retorna 200 sem débito; timeout/retorno inválido retorna 503 sem resultado terminal. Retry da mesma prévia antes de expirar; resultado concluído recuperável depois. Não há webhook público de débito. Pagamento, journal e evento Merchant são atômicos. Confirma a prévia sem nova cotação. Repetir token concluído não cobra novamente. Compatível com tokens anteriores e registros históricos; pricing deriva dos valores originais e da política imutável da cobrança, sem reescrever histórico. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/MERCHANT.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"oneOf": [{"$ref": "#/components/schemas/MerchantReceipt"}, {"$ref": "#/components/schemas/MerchantLightningFailed"}]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"token": {"type": "string", "maxLength": 6000, "description": "Prévia assinada devolvida pelo servidor. Reutilize a mesma em resultado incerto."}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["token", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/developers/list": {"get": {"operationId": "developers_api_v1_developers_list_get", "tags": ["developers"], "summary": "Listar empresas e scopes", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/DEVELOPER-API.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/developers/detail": {"get": {"operationId": "developers_api_v1_developers_detail_get", "tags": ["developers"], "summary": "Consultar configuração própria", "description": "Inclui webhook_queue dos últimos 50 pares de eventos/receptores automáticos da empresa; tentativas e estados READY, WAITING, SUCCEEDED, EXHAUSTED, REVOKED, BLOCKED; next_attempt_at ISO ou null. Consulta sem disparar entregas. endpoints/deliveries incluem automatic boolean; históricos preservados. Guia docs/WEBHOOK-WORKER.md. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/DEVELOPER-API.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "business_id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/developers/keys/create": {"post": {"operationId": "developers_api_v1_developers_keys_create_post", "tags": ["developers"], "summary": "Criar chave de integração", "description": "Titular do PJ aprovado; validade 30 dias, até dez ativas. Token exibido uma vez; replay retorna token null. merchant:create permite somente criar cobranças da empresa da chave; não autoriza débito nem inclui scopes de leitura. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/DEVELOPER-API.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"business_id": {"type": "string", "format": "uuid"}, "name": {"type": "string", "minLength": 2, "maxLength": 60}, "scopes": {"type": "array", "items": {"type": "string", "enum": ["wallets:read", "merchant:read", "events:read", "merchant:create", "exchange:quote"]}, "minItems": 1, "maxItems": 5, "uniqueItems": true}, "idempotency_key": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["business_id", "name", "scopes", "idempotency_key", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/developers/keys/revoke": {"post": {"operationId": "developers_api_v1_developers_keys_revoke_post", "tags": ["developers"], "summary": "Revogar chave própria", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/DEVELOPER-API.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"key_id": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["key_id", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/developers/webhooks/create": {"post": {"operationId": "developers_api_v1_developers_webhooks_create_post", "tags": ["developers"], "summary": "Criar receptor interno simulado", "description": "automatic=false padrão. Opt-in imutável considera eventos criados depois do receptor. Até cinco receptores ativos. Segredo exibido uma vez, null em replay. Não aceita URL de destino externa. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/DEVELOPER-API.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"business_id": {"type": "string", "format": "uuid"}, "name": {"type": "string", "minLength": 2, "maxLength": 60}, "scenario": {"type": "string", "enum": ["SUCCESS", "FAILURE", "TIMEOUT"]}, "automatic": {"type": "boolean"}, "idempotency_key": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["business_id", "name", "scenario", "idempotency_key", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/developers/webhooks/revoke": {"post": {"operationId": "developers_api_v1_developers_webhooks_revoke_post", "tags": ["developers"], "summary": "Revogar receptor próprio", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/DEVELOPER-API.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"endpoint_id": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["endpoint_id", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/developers/webhooks/deliver": {"post": {"operationId": "developers_api_v1_developers_webhooks_deliver_post", "tags": ["developers"], "summary": "Executar entrega manual simulada", "description": "Até cinco tentativas por par evento/receptor. Mesma chave recupera tentativa; nova chave cria outra tentativa quando elegível. Sucesso terminal não é repetido. Em receptor automático, novas tentativas aguardam 30/120/600/1800 segundos após a anterior; replay conserva o original. Compartilha limite de cinco com o worker interno. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/DEVELOPER-API.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"endpoint_id": {"type": "string", "format": "uuid"}, "event_id": {"type": "string", "format": "uuid"}, "idempotency_key": {"type": "string", "format": "uuid"}, "password": {"type": "string", "maxLength": 128, "writeOnly": true, "description": "Senha da própria conta; nunca registrar em logs."}}, "additionalProperties": false, "required": ["endpoint_id", "event_id", "idempotency_key", "password"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/compliance/list": {"get": {"operationId": "compliance_api_v1_compliance_list_get", "tags": ["compliance"], "summary": "Listar fila e análises elegíveis", "description": "Até 50 pendentes mais antigos e 50 análises conforme filtro. Exclui lançamentos do ator/participante. Exige compliance.review e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/COMPLIANCE.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "compliance.review", "parameters": [{"name": "status", "in": "query", "required": false, "schema": {"type": "string", "enum": ["OPEN", "CLEARED", "ESCALATED", "NO_ALERT", "ALL"]}}]}}, "/api/v1/compliance/screen": {"post": {"operationId": "compliance_api_v1_compliance_screen_post", "tags": ["compliance"], "summary": "Analisar journal de terceiro", "description": "Uma análise por journal na política sandbox-kyt-v1; cria alerta apenas se houver sinal. Núcleo agrega débitos por ativo e usa KytProviderInterface/MockKytProvider puro, preservando pontos e fatos históricos. Timeout, indisponibilidade ou resposta incompatível retornam 503/kyt_unavailable sem análise parcial; repetir permite nova tentativa. Replay recupera histórico sem consultar provider, após revalidar acesso. Sem alteração financeira, varredura automática ou bloqueio por score. Guia docs/KYT-PROVIDER.md. Exige compliance.review e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/COMPLIANCE.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "201": {"description": "Resultado local. Novo registro.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "compliance.review", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"journal_id": {"type": "string", "format": "uuid"}}, "additionalProperties": false, "required": ["journal_id"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/compliance/decide": {"post": {"operationId": "compliance_api_v1_compliance_decide_post", "tags": ["compliance"], "summary": "Decidir alerta de terceiro", "description": "Mesma decisão pelo mesmo revisor é idempotente; outra decisão/revisor conflita. Escalonamento terminal somente local. Exige compliance.review e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/COMPLIANCE.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "201": {"description": "Resultado local. Novo registro.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "compliance.review", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"alert_id": {"type": "string", "format": "uuid"}, "outcome": {"type": "string", "enum": ["CLEARED", "ESCALATED"]}}, "additionalProperties": false, "required": ["alert_id", "outcome"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/operations/dashboard": {"get": {"operationId": "operations_api_v1_operations_dashboard_get", "tags": ["operations"], "summary": "Indicadores por perfil", "description": "Exige 2FA e uma entre operations.read, support.review ou compliance.review. Retorna apenas indicadores autorizados, sem filtros. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/OPERATIONS-SUPPORT.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/api/v1/operations/monitoring": {"get": {"operationId": "operations_api_v1_operations_monitoring_get", "tags": ["operations"], "summary": "Métricas, filas e alertas locais", "description": "Sem filtros; janela Redis de 15 buckets, até 20 falhas 5xx, probes puros. webhook_worker observa até 20 execuções atualizadas nas últimas 24h (AVAILABLE/NO_DATA/UNAVAILABLE/DISABLED); runs com RUNNING/STALE/COMPLETED/STOPPED/FAILED, modo, UUID aleatório, horários, fase, lotes concluídos e totais processed/succeeded/failed/timeout/blocked desses lotes. STALE significa RUNNING sem atualização por 180s, não prova de processo morto. batch_incomplete indica interrupção durante lote; resultados parciais podem estar persistidos e não entram nos totais. Falha de coleta não altera entregas. automatic_worker=false significa que o painel não ativa processos; ausência de observações não prova worker parado. Sem notificações externas. Guias docs/OBSERVABILITY.md e docs/WORKER-OBSERVABILITY.md. Exige observability.read e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/OPERATIONS-SUPPORT.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "observability.read"}}, "/api/v1/operations/tickets/list": {"get": {"operationId": "operations_api_v1_operations_tickets_list_get", "tags": ["operations"], "summary": "Listar chamados próprios ou fila", "description": "mode=mine padrão. queue exige support.review + 2FA e exclui chamados próprios. Até 50 registros. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/OPERATIONS-SUPPORT.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "mode", "in": "query", "required": false, "schema": {"type": "string", "enum": ["mine", "queue"]}}, {"name": "status", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "OPEN", "IN_PROGRESS", "RESOLVED"]}}]}}, "/api/v1/operations/tickets/detail": {"get": {"operationId": "operations_api_v1_operations_tickets_detail_get", "tags": ["operations"], "summary": "Consultar chamado autorizado", "description": "Chamado próprio ou support.review + 2FA para terceiros; leitura de terceiro é auditada. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/OPERATIONS-SUPPORT.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "parameters": [{"name": "ticket_id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/operations/tickets/create": {"post": {"operationId": "operations_api_v1_operations_tickets_create_post", "tags": ["operations"], "summary": "Abrir chamado fictício", "description": "journal_id obrigatório, pode ser null; se informado deve envolver o solicitante. Até dez chamados ativos. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/OPERATIONS-SUPPORT.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "201": {"description": "Resultado local. Novo registro.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"category": {"type": "string", "enum": ["ACCESS", "VERIFICATION", "PAYMENT"]}, "message": {"type": "string", "minLength": 10, "maxLength": 1000}, "journal_id": {"type": "string", "format": "uuid", "nullable": true}, "idempotency_key": {"type": "string", "format": "uuid"}}, "additionalProperties": false, "required": ["category", "message", "journal_id", "idempotency_key"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/operations/tickets/transition": {"post": {"operationId": "operations_api_v1_operations_tickets_transition_post", "tags": ["operations"], "summary": "Avançar atendimento de terceiro", "description": "Revisão 0 + REVIEW_STARTED inicia; revisão 1 + outro motivo encerra. Não permite autorrevisão. Exige support.review e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/OPERATIONS-SUPPORT.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "201": {"description": "Resultado local. Novo registro.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "support.review", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"ticket_id": {"type": "string", "format": "uuid"}, "expected_revision": {"type": "integer", "enum": [0, 1]}, "reason": {"type": "string", "enum": ["REVIEW_STARTED", "GUIDANCE_PROVIDED", "TEST_REPRODUCED"]}, "idempotency_key": {"type": "string", "format": "uuid"}}, "additionalProperties": false, "required": ["ticket_id", "expected_revision", "reason", "idempotency_key"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/reconciliation/create": {"post": {"operationId": "reconciliation_api_v1_reconciliation_create_post", "tags": ["reconciliation"], "summary": "Gerar conciliação local", "description": "NORMAL exige ALL; SHORTFALL/TIMEOUT exigem um provedor específico. Snapshot v3 imutável de sete linhas; v1/v2 mantêm seis linhas, sem ajuste de saldo. Receita inclui tarifas e spread por ativo; Merchant LIGHTNING_MOCK não duplica fluxo do provider Lightning. MATCHED não certifica cotas ou revisão: evidências históricas são verificadas separadamente. A função SQL revalida suspensão após bloquear o ator, inclusive no replay. Guia docs/RECONCILIATION.md. Exige reconciliation.manage e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"Session": [], "CsrfCookie": [], "CsrfHeader": []}], "x-guide": "docs/RECONCILIATION.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "201": {"description": "Resultado local. Novo registro.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "reconciliation.manage", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"scenario": {"type": "string", "enum": ["NORMAL", "SHORTFALL", "TIMEOUT"]}, "provider": {"type": "string", "enum": ["ALL", "mock-usdc-v1", "mock-btc-v1", "mock-lightning-v1", "mock-fiat-usd-v1"]}, "idempotency_key": {"type": "string", "format": "uuid"}}, "additionalProperties": false, "required": ["scenario", "provider", "idempotency_key"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/v1/reconciliation/list": {"get": {"operationId": "reconciliation_api_v1_reconciliation_list_get", "tags": ["reconciliation"], "summary": "Últimos 50 relatórios", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Exige reconciliation.manage e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/RECONCILIATION.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "reconciliation.manage", "parameters": [{"name": "status", "in": "query", "required": false, "schema": {"type": "string", "enum": ["ALL", "MATCHED", "MISMATCH", "INCOMPLETE"]}}]}}, "/api/v1/reconciliation/detail": {"get": {"operationId": "reconciliation_api_v1_reconciliation_detail_get", "tags": ["reconciliation"], "summary": "Consultar relatório JSON", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Exige reconciliation.manage e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/RECONCILIATION.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "reconciliation.manage", "parameters": [{"name": "run_id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/reconciliation/report.json": {"get": {"operationId": "reconciliation_api_v1_reconciliation_report_json_get", "tags": ["reconciliation"], "summary": "Consultar relatório JSON", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Exige reconciliation.manage e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/RECONCILIATION.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "reconciliation.manage", "parameters": [{"name": "run_id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/v1/reconciliation/report.csv": {"get": {"operationId": "reconciliation_api_v1_reconciliation_report_csv_get", "tags": ["reconciliation"], "summary": "Consultar relatório CSV", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Exige reconciliation.manage e 2FA verificado. Sessão própria válida; se 2FA estiver ativado, deve estar verificado. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"Session": []}], "x-guide": "docs/RECONCILIATION.md", "x-authentication": "session", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"text/csv": {"schema": {"type": "string"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-permission": "reconciliation.manage", "parameters": [{"name": "run_id", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}]}}, "/api/integrations/v1/wallets": {"get": {"operationId": "integrations_api_integrations_v1_wallets_get", "tags": ["integrations"], "summary": "Consulta de integração: wallets", "description": "Chave da própria empresa, ativa e com scope; titular ativo e PJ aprovado. Sem filtros/corpo. Links/eventos limitados aos últimos 50. Registra DeveloperLog. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"PartnerKey": []}], "x-guide": "docs/DEVELOPER-API.md", "x-authentication": "bearer", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"wallets": {"type": "array", "items": {"$ref": "#/components/schemas/Object"}}, "simulated": {"type": "boolean"}, "request_id": {"type": "string", "format": "uuid"}}, "required": ["wallets", "simulated", "request_id"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-scope": "wallets:read"}}, "/api/integrations/v1/links": {"get": {"operationId": "integrations_api_integrations_v1_links_get", "tags": ["integrations"], "summary": "Consulta de integração: links", "description": "Chave da própria empresa, ativa e com scope; titular ativo e PJ aprovado. Sem filtros/corpo. Links/eventos limitados aos últimos 50. Registra DeveloperLog. links[].receipt inclui pricing conforme MerchantReceipt; somente merchant:read, sem ampliar autorização. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"PartnerKey": []}], "x-guide": "docs/DEVELOPER-API.md", "x-authentication": "bearer", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"links": {"type": "array", "items": {"$ref": "#/components/schemas/Object"}}, "simulated": {"type": "boolean"}, "request_id": {"type": "string", "format": "uuid"}}, "required": ["links", "simulated", "request_id"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-scope": "merchant:read"}}, "/api/integrations/v1/events": {"get": {"operationId": "integrations_api_integrations_v1_events_get", "tags": ["integrations"], "summary": "Consulta de integração: events", "description": "Chave da própria empresa, ativa e com scope; titular ativo e PJ aprovado. Sem filtros/corpo. Links/eventos limitados aos últimos 50. Registra DeveloperLog. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [{"PartnerKey": []}], "x-guide": "docs/DEVELOPER-API.md", "x-authentication": "bearer", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"events": {"type": "array", "items": {"$ref": "#/components/schemas/Object"}}, "simulated": {"type": "boolean"}, "request_id": {"type": "string", "format": "uuid"}}, "required": ["events", "simulated", "request_id"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-scope": "events:read"}}, "/api/integrations/v1/links/create": {"post": {"operationId": "integrations_api_integrations_v1_links_create_post", "tags": ["integrations"], "summary": "Criar cobrança Merchant por integração", "description": "Somente Bearer: cookie/senha não autorizam; sem CSRF. Empresa e ator definidos pela chave, sem business_id ou parâmetros na URL. Titular ativo/verificado e PJ aprovado inclusive no replay. Padrões SINGLE_ASSET e ZERO. Mesmas regras Merchant de limites, precisão, cotação, custos e 24 horas de validade. Não debita nem reserva saldo. Idempotência por empresa/UUID compartilhada com portal e demais chaves da empresa; mesma solicitação normalizada recupera link com situação atual, diferente retorna 409. Link, evento, auditoria e log são atômicos. 10 chamadas por chave/rota/5 min; repetir também consome o limite. Guia docs/INTEGRATION-MERCHANT-CREATE.md. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"PartnerKey": []}], "x-guide": "docs/DEVELOPER-API.md", "x-authentication": "bearer", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "business_name": {"type": "string"}, "description": {"type": "string"}, "asset": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "amount": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "status": {"type": "string", "enum": ["OPEN", "PAID", "CANCELLED", "EXPIRED"]}, "expires_at": {"type": "string", "format": "date-time"}, "simulated": {"type": "boolean"}, "payment_mode": {"type": "string", "enum": ["SINGLE_ASSET", "MULTI_ASSET"]}, "pricing_mode": {"type": "string", "enum": ["ZERO", "FEES_V1"]}, "checkout_path": {"type": "string"}, "qr_path": {"type": "string"}, "request_id": {"type": "string", "format": "uuid"}}, "additionalProperties": false, "required": ["id", "business_name", "description", "asset", "amount", "status", "expires_at", "simulated", "payment_mode", "pricing_mode", "checkout_path", "qr_path", "request_id"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-scope": "merchant:create", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"asset": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "settlement_asset": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "amount": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "description": {"type": "string", "minLength": 2, "maxLength": 120}, "idempotency_key": {"type": "string", "format": "uuid"}, "payment_mode": {"type": "string", "enum": ["SINGLE_ASSET", "MULTI_ASSET"]}, "pricing_mode": {"type": "string", "enum": ["ZERO", "FEES_V1"]}}, "additionalProperties": false, "required": ["asset", "settlement_asset", "amount", "description", "idempotency_key"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/integrations/v1/exchange/quote": {"post": {"operationId": "integrations_api_integrations_v1_exchange_quote_post", "tags": ["integrations"], "summary": "Cotação indicativa por integração", "description": "Cotação mock de 60s, não executável, entidade independente do portal. Sem saldo, reserva, débito ou consumo diário financeiro; limite por operação vigente e cem novas cotações/empresa/24h. Mesmo pedido normalizado recupera snapshot original, inclusive expirado. Empresa/carteiras PJ derivadas da chave; nenhum ID de titular/conta no corpo. Revalidar acesso, aprovação e revisão PJ no replay. Logs por chamada; falha de auditoria/log desfaz criação. Guia docs/INTEGRATION-EXCHANGE-QUOTE-SPEC.md. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais. Objeto JSON UTF-8 de até 16 KiB e 32 níveis de objetos/arrays; campos repetidos, números não finitos e surrogates isolados são recusados com 400, antes da operação.", "security": [{"PartnerKey": []}], "x-guide": "docs/DEVELOPER-API.md", "x-authentication": "bearer", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ApiExchangeQuote"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}, "x-required-scope": "exchange:quote", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"asset_in": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "asset_out": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "amount": {"type": "string", "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$", "maxLength": 30, "description": "Total de entrada incluindo tarifa; positivo. Precisão USD 2, USDC 6, BTC 8; sem expoente, sinal ou milhar."}, "idempotency_key": {"type": "string", "format": "uuid"}, "pricing_mode": {"type": "string", "enum": ["ZERO", "FEES_V1"], "default": "ZERO"}}, "additionalProperties": false, "required": ["asset_in", "asset_out", "amount", "idempotency_key"]}}}}, "x-json-input": {"encoding": "UTF-8", "root": "object", "maxBytes": 16384, "maxDepth": 32, "duplicateMembers": "REJECT", "nonFiniteNumbers": "REJECT", "loneSurrogates": "REJECT"}}}, "/api/integrations/v1/openapi.json": {"get": {"operationId": "integrations_api_integrations_v1_openapi_json_get", "tags": ["integrations"], "summary": "Contrato das integrações Bearer", "description": "Consulte o guia do módulo para regras de negócio e detalhes de resposta. Parâmetros de consulta não podem ser repetidos, mesmo com valores iguais.", "security": [], "x-guide": "docs/DEVELOPER-API.md", "x-authentication": "public", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Object"}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "400": {"description": "Entrada inválida. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "401": {"description": "Credenciais, sessão ou desafio inválidos. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "403": {"description": "Permissão, CSRF, fator ou assinatura recusados. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "404": {"description": "Recurso inexistente ou não acessível. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "405": {"description": "Método não permitido; corpo pode ser vazio/não JSON."}, "409": {"description": "Conflito de versão, estado ou idempotência. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "413": {"description": "Corpo acima de 16 KiB. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "414": {"description": "Caminho/query excessivo. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "415": {"description": "Corpo comprimido não aceito. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "422": {"description": "Limite ou regra de negócio. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "429": {"description": "Limite de chamadas; respeite Retry-After. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "headers": {"Retry-After": {"schema": {"type": "string"}, "description": "Segundos até nova tentativa."}}}, "500": {"description": "Falha interna genérica. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}, "503": {"description": "Dependência indisponível ou API de negócio bloqueada em staging. Quando aplicável à operação.", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}}}}}, "/health/live": {"get": {"operationId": "foundation_health_live_get", "tags": ["foundation"], "summary": "Saúde: live", "description": "Também aceita HEAD. Ready verifica banco migrado e Redis; live apenas o processo.", "security": [], "x-guide": "docs/OPERATIONS.md", "x-authentication": "public", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "string"}, "mode": {"type": "string", "enum": ["sandbox"]}}, "required": ["status"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "405": {"description": "Método diferente de GET/HEAD.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "string", "enum": ["method_not_allowed"]}}, "required": ["status"]}}}}}}}, "/health/ready": {"get": {"operationId": "foundation_health_ready_get", "tags": ["foundation"], "summary": "Saúde: ready", "description": "Também aceita HEAD. Ready verifica banco migrado e Redis; live apenas o processo.", "security": [], "x-guide": "docs/OPERATIONS.md", "x-authentication": "public", "responses": {"200": {"description": "Resultado local. Consulta, conclusão ou repetição aceita.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "string"}, "mode": {"type": "string", "enum": ["sandbox"]}}, "required": ["status"]}}}, "headers": {"X-Request-ID": {"description": "UUID gerado no servidor para correlação.", "schema": {"type": "string", "format": "uuid"}}}}, "405": {"description": "Método diferente de GET/HEAD.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "string", "enum": ["method_not_allowed"]}}, "required": ["status"]}}}}, "503": {"description": "Banco migrado ou Redis indisponível.", "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "string", "enum": ["unavailable"]}}, "required": ["status"]}}}}}}}}, "components": {"schemas": {"Error": {"type": "object", "properties": {"error": {"type": "string"}, "message": {"type": "string"}, "request_id": {"type": "string", "format": "uuid"}}, "required": ["error"]}, "Object": {"type": "object", "additionalProperties": true, "description": "Objeto específico do módulo. Consulte o guia indicado; campos adicionais podem estar presentes."}, "Message": {"type": "object", "properties": {"message": {"type": "string"}}, "required": ["message"]}, "Money": {"type": "object", "properties": {"minor": {"type": "string", "pattern": "^-?[0-9]+$"}, "formatted": {"type": "string"}}, "required": ["minor", "formatted"]}, "Wallet": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "profile_kind": {"type": "string", "enum": ["PF", "PJ"]}, "asset": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "decimals": {"type": "integer"}, "balance": {"$ref": "#/components/schemas/Money"}, "outgoing_blocked": {"type": "boolean"}, "account_outgoing_blocked": {"type": "boolean"}, "global_outgoing_blocked": {"type": "boolean"}}, "required": ["id", "profile_kind", "asset", "decimals", "balance", "outgoing_blocked", "account_outgoing_blocked", "global_outgoing_blocked"]}, "User": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "name": {"type": "string"}, "email": {"type": "string", "format": "email"}, "role": {"type": "string"}, "mfa_enabled": {"type": "boolean"}, "permissions": {"type": "array", "items": {"type": "string"}}}, "required": ["id", "name", "email", "role", "mfa_enabled", "permissions"]}, "Receipt": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "journal_id": {"type": "string", "format": "uuid"}, "status": {"type": "string"}, "simulated": {"type": "boolean", "enum": [true]}}, "additionalProperties": true}, "ProfilePF": {"type": "object", "properties": {"name": {"type": "string", "minLength": 2, "maxLength": 120}, "document_ref": {"type": "string", "pattern": "^TESTE-[A-Z0-9-]{3,40}$"}, "country": {"type": "string", "enum": ["BR", "SV", "US"]}, "phone": {"type": "string", "pattern": "^\\+999[0-9]{6,12}$"}, "synthetic_data": {"type": "boolean", "enum": [true]}, "birth_date": {"type": "string", "format": "date", "description": "Data fictícia entre 1900-01-01 e hoje."}}, "additionalProperties": false, "required": ["name", "document_ref", "country", "phone", "synthetic_data", "birth_date"]}, "ProfilePJ": {"type": "object", "properties": {"name": {"type": "string", "minLength": 2, "maxLength": 120}, "document_ref": {"type": "string", "pattern": "^TESTE-[A-Z0-9-]{3,40}$"}, "country": {"type": "string", "enum": ["BR", "SV", "US"]}, "phone": {"type": "string", "pattern": "^\\+999[0-9]{6,12}$"}, "synthetic_data": {"type": "boolean", "enum": [true]}, "representative": {"type": "object", "properties": {"name": {"type": "string", "minLength": 2, "maxLength": 120}, "document_ref": {"type": "string", "pattern": "^TESTE-[A-Z0-9-]{3,40}$"}}, "additionalProperties": false, "required": ["name", "document_ref"]}, "beneficial_owners": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string", "minLength": 2, "maxLength": 120}, "document_ref": {"type": "string", "pattern": "^TESTE-[A-Z0-9-]{3,40}$"}, "percentage": {"type": "string", "pattern": "^[0-9]{1,3}(\\.[0-9]{1,2})?$"}}, "additionalProperties": false, "required": ["name", "document_ref", "percentage"]}, "minItems": 1, "maxItems": 10, "description": "Referências distintas; percentuais positivos que somam 100."}}, "additionalProperties": false, "required": ["name", "document_ref", "country", "phone", "synthetic_data", "representative", "beneficial_owners"]}, "KnownDevice": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "label": {"type": "string", "maxLength": 40}, "status": {"type": "string", "enum": ["ACTIVE", "REVOKED", "EXPIRED", "SECURITY_CHANGED"]}, "current": {"type": "boolean"}, "created_at": {"type": "string", "format": "date-time"}, "last_seen_at": {"type": "string", "format": "date-time"}, "expires_at": {"type": "string", "format": "date-time"}, "revoked_at": {"type": "string", "format": "date-time", "nullable": true}}, "additionalProperties": false, "description": "Reconhecimento informativo por cookie. Não dispensa senha/MFA e não identifica hardware.", "required": ["id", "label", "status", "current", "created_at", "last_seen_at", "expires_at", "revoked_at"]}, "AccessNotice": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "label": {"type": "string", "maxLength": 40}, "kind": {"type": "string", "enum": ["KNOWN_BROWSER", "UNRECOGNIZED_BROWSER"]}, "created_at": {"type": "string", "format": "date-time"}, "read_at": {"type": "string", "format": "date-time", "nullable": true}}, "additionalProperties": false, "required": ["id", "label", "kind", "created_at", "read_at"]}, "KnownDeviceList": {"type": "object", "properties": {"devices": {"type": "array", "items": {"$ref": "#/components/schemas/KnownDevice"}, "maxItems": 50}, "next_cursor": {"type": "string", "nullable": true, "maxLength": 2048}, "limit": {"type": "integer", "enum": [50]}}, "additionalProperties": false, "required": ["devices", "next_cursor", "limit"]}, "AccessNoticeList": {"type": "object", "properties": {"access_notices": {"type": "array", "items": {"$ref": "#/components/schemas/AccessNotice"}, "maxItems": 50}, "next_cursor": {"type": "string", "nullable": true, "maxLength": 2048}, "limit": {"type": "integer", "enum": [50]}}, "additionalProperties": false, "required": ["access_notices", "next_cursor", "limit"]}, "KnownDeviceRemember": {"type": "object", "properties": {"device": {"$ref": "#/components/schemas/KnownDevice"}, "replayed": {"type": "boolean"}, "remembered": {"type": "boolean"}}, "additionalProperties": false, "required": ["device", "replayed", "remembered"]}, "ConversionTotals": {"type": "object", "properties": {"count": {"type": "integer", "minimum": 0}, "amount_in": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "amount_out": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "fee": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "spread": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "amount_in_minor": {"type": "string", "pattern": "^[0-9]+$"}, "amount_out_minor": {"type": "string", "pattern": "^[0-9]+$"}, "fee_minor": {"type": "string", "pattern": "^[0-9]+$"}, "spread_minor": {"type": "string", "pattern": "^[0-9]+$"}}, "additionalProperties": false, "description": "Totais exatos por par de ativos, em strings. amount_in e fee no ativo de origem; amount_out e spread no destino. Débito já inclui tarifa e recebido já desconta spread. Não somar ativos diferentes nem interpretar como saldo.", "required": ["count", "amount_in", "amount_out", "fee", "spread", "amount_in_minor", "amount_out_minor", "fee_minor", "spread_minor"]}, "ConversionSummary": {"type": "object", "properties": {"groups": {"type": "array", "items": {"type": "object", "properties": {"asset_in": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "asset_out": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "original": {"$ref": "#/components/schemas/ConversionTotals"}, "reversed": {"$ref": "#/components/schemas/ConversionTotals"}, "unreversed": {"$ref": "#/components/schemas/ConversionTotals"}}, "additionalProperties": false, "required": ["asset_in", "asset_out", "original", "reversed", "unreversed"]}, "maxItems": 6}, "filters": {"type": "object", "properties": {"asset_in": {"type": "string", "enum": ["ALL", "USD", "USDC", "BTC"]}, "asset_out": {"type": "string", "enum": ["ALL", "USD", "USDC", "BTC"]}, "from": {"type": "string", "description": "YYYY-MM-DD ou vazio."}, "to": {"type": "string", "description": "YYYY-MM-DD ou vazio."}}, "additionalProperties": false, "required": ["asset_in", "asset_out", "from", "to"]}, "captured_at": {"type": "string", "format": "date-time"}, "order_count": {"type": "integer", "minimum": 0}, "reversed_count": {"type": "integer", "minimum": 0}, "period_basis": {"type": "string", "enum": ["original-settlement"]}, "simulated": {"type": "boolean", "enum": [true]}}, "additionalProperties": false, "required": ["groups", "filters", "captured_at", "order_count", "reversed_count", "period_basis", "simulated"]}, "LightningPayment": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "status": {"type": "string", "enum": ["SUCCEEDED", "FAILED"]}, "journal_id": {"type": "string", "format": "uuid", "nullable": true}, "created_at": {"type": "string", "format": "date-time"}, "events": {"type": "array", "items": {"type": "string", "format": "uuid"}, "maxItems": 20, "description": "Até 20 primeiros IDs de entregas, ordenados por criação/ID; não representa toda a trilha de auditoria."}}, "nullable": true, "additionalProperties": false, "required": ["id", "status", "journal_id", "created_at", "events"]}, "LightningMetadata": {"type": "object", "properties": {"representation": {"type": "string", "enum": ["DERIVED"]}, "network": {"type": "string", "enum": ["NONE"]}, "scenario": {"type": "string", "enum": ["success", "reject", "timeout"]}, "profile_revision": {"type": "integer", "minimum": 1}}, "additionalProperties": false, "description": "Metadados derivados de fatos persistidos e do contrato mock. Não são metadados recebidos de um provedor externo.", "required": ["representation", "network", "scenario", "profile_revision"]}, "LightningInvoice": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "account_id": {"type": "string", "format": "uuid"}, "direction": {"type": "string", "enum": ["RECEIVE", "PAY"]}, "asset": {"type": "string", "enum": ["BTC"]}, "amount": {"type": "string", "pattern": "^[0-9]+\\.[0-9]{8}$"}, "satoshis": {"type": "string", "pattern": "^[1-9][0-9]*$"}, "fee": {"type": "string", "enum": ["0.00000000"]}, "code": {"type": "string", "pattern": "^MOCK-LN-[A-F0-9]{32}$"}, "reference": {"type": "string", "pattern": "^LIGHTNING:[A-F0-9]{32}$"}, "scenario": {"type": "string", "enum": ["success", "reject", "timeout"]}, "created_at": {"type": "string", "format": "date-time"}, "expires_at": {"type": "string", "format": "date-time"}, "expired": {"type": "boolean"}, "simulated": {"type": "boolean", "enum": [true]}, "replayed": {"type": "boolean"}, "payment": {"$ref": "#/components/schemas/LightningPayment"}, "record_version": {"type": "string", "enum": ["lightning-record-v1"]}, "idempotency_key": {"type": "string", "format": "uuid"}, "updated_at": {"type": "string", "format": "date-time", "description": "Último fato da operação: maior entre criação da invoice e do Payment. Consultas, reentregas, expiração e estorno não mudam esse campo."}, "status": {"type": "string", "enum": ["PENDING", "SUCCEEDED", "FAILED"]}, "source": {"type": "string", "pattern": "^MOCK-LN-(EXTERNAL|BTC-[A-F0-9]{32})$"}, "destination": {"type": "string", "pattern": "^MOCK-LN-(EXTERNAL|BTC-[A-F0-9]{32})$"}, "provider": {"type": "string", "enum": ["mock-lightning-v1"]}, "metadata": {"$ref": "#/components/schemas/LightningMetadata"}, "audit_subjects": {"type": "object", "properties": {"invoice_id": {"type": "string", "format": "uuid"}, "payment_id": {"type": "string", "format": "uuid", "nullable": true}}, "additionalProperties": false, "required": ["invoice_id", "payment_id"]}}, "additionalProperties": true, "description": "Registro próprio versionado, compatível com invoices antigas. PENDING significa ausência de resultado, inclusive se expired=true. Referências de origem/destino são fictícias; não são endereços Lightning. audit_subjects aponta os sujeitos em AuditEvent, sem divulgar seus registros.", "required": ["id", "account_id", "direction", "asset", "amount", "satoshis", "fee", "code", "reference", "scenario", "created_at", "expires_at", "expired", "simulated", "replayed", "payment", "record_version", "idempotency_key", "updated_at", "status", "source", "destination", "provider", "metadata", "audit_subjects"]}, "LightningHistory": {"type": "object", "properties": {"invoices": {"type": "array", "items": {"$ref": "#/components/schemas/LightningInvoice"}, "maxItems": 20}, "limit": {"type": "integer", "enum": [20]}, "simulated": {"type": "boolean", "enum": [true]}}, "additionalProperties": false, "required": ["invoices", "limit", "simulated"]}, "BusinessDashboard": {"type": "object", "properties": {"business_id": {"type": "string", "format": "uuid"}, "captured_at": {"type": "string", "format": "date-time"}, "filters": {"type": "object", "properties": {"from": {"type": "string"}, "to": {"type": "string"}}, "additionalProperties": false, "required": ["from", "to"]}, "wallets": {"type": "array", "items": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "asset": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "balance_at_capture": {"$ref": "#/components/schemas/Money"}, "period": {"type": "object", "properties": {"opening": {"$ref": "#/components/schemas/Money"}, "credits": {"$ref": "#/components/schemas/Money"}, "debits": {"$ref": "#/components/schemas/Money"}, "closing": {"$ref": "#/components/schemas/Money"}}, "additionalProperties": false, "required": ["opening", "credits", "debits", "closing"]}}, "additionalProperties": false, "required": ["id", "asset", "balance_at_capture", "period"]}}, "operations": {"type": "object", "properties": {"payments": {"type": "integer", "minimum": 0}, "conversions": {"type": "integer", "minimum": 0}, "reversals": {"type": "integer", "minimum": 0}}, "additionalProperties": false, "required": ["payments", "conversions", "reversals"]}, "team": {"type": "object", "properties": {"active_members": {"type": "integer", "minimum": 0}, "owners": {"type": "integer", "enum": [1]}}, "additionalProperties": false, "required": ["active_members", "owners"]}, "simulated": {"type": "boolean", "enum": [true]}}, "additionalProperties": false, "required": ["business_id", "captured_at", "filters", "wallets", "operations", "simulated"]}, "MerchantPricing": {"type": "object", "properties": {"policy": {"type": "string", "enum": ["merchant-zero-v1", "merchant-multi-zero-v1", "merchant-fees-v1"]}, "representation": {"type": "string", "enum": ["DERIVED"]}, "source_asset": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "settlement_asset": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "amount_in": {"$ref": "#/components/schemas/Money"}, "fee": {"$ref": "#/components/schemas/Money"}, "total_debit": {"$ref": "#/components/schemas/Money"}, "gross_amount_out": {"$ref": "#/components/schemas/Money"}, "spread": {"$ref": "#/components/schemas/Money"}, "net_amount_out": {"$ref": "#/components/schemas/Money"}, "rate_numerator": {"type": "string", "pattern": "^[1-9][0-9]*$"}, "rate_denominator": {"type": "string", "pattern": "^[1-9][0-9]*$"}, "rounding": {"type": "string", "enum": ["DOWN"]}, "input_rounding": {"type": "string", "enum": ["UP"]}, "cost_rounding": {"type": "string", "enum": ["UP"]}, "fee_bps": {"type": "integer", "enum": [50]}, "spread_bps": {"type": "integer", "enum": [0, 100]}}, "additionalProperties": false, "description": "Valores originais; ZERO preserva políticas históricas e FEES_V1 usa merchant-fees-v1. amount_in, fee e total_debit em source_asset; bruto, spread e líquido em settlement_asset. Taxas fictícias: BTC=60000 USD, USDC=1 USD. Em FEES_V1, fee=ceil(principal*0,5%) soma ao débito; spread=ceil(bruto*1%) reduz o destino somente com conversão. ZERO mantém custos zero. Sem reescrever registros antigos.", "required": ["policy", "representation", "source_asset", "settlement_asset", "amount_in", "fee", "total_debit", "gross_amount_out", "spread", "net_amount_out", "rate_numerator", "rate_denominator", "rounding"]}, "MerchantLightningInvoice": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "link_id": {"type": "string", "format": "uuid"}, "source": {"type": "string", "format": "uuid"}, "code": {"type": "string", "pattern": "^MOCK-MERCHANT-LN-[A-F0-9]{32}$"}, "provider": {"type": "string", "enum": ["mock-lightning-v1"]}, "asset": {"type": "string", "enum": ["BTC"]}, "satoshis": {"type": "string", "pattern": "^[1-9][0-9]*$"}, "scenario": {"type": "string", "enum": ["success", "reject", "timeout"]}, "status": {"type": "string", "enum": ["PENDING", "SUCCEEDED", "FAILED"]}, "expired": {"type": "boolean"}, "created_at": {"type": "string", "format": "date-time"}, "expires_at": {"type": "string", "format": "date-time"}, "event_id": {"type": "string", "format": "uuid", "nullable": true}, "payment_id": {"type": "string", "format": "uuid", "nullable": true}, "replayed": {"type": "boolean"}, "simulated": {"type": "boolean", "enum": [true]}}, "additionalProperties": false, "description": "Invoice fictícia do pagador Merchant, financiada por sua carteira BTC. PENDING com expired=true não confirma pagamento. Não é BOLT11 nem recebimento externo.", "required": ["id", "link_id", "source", "code", "provider", "asset", "satoshis", "scenario", "status", "expired", "created_at", "expires_at", "event_id", "payment_id", "replayed", "simulated"]}, "MerchantLightningReceipt": {"type": "object", "properties": {"invoice_id": {"type": "string", "format": "uuid"}, "provider": {"type": "string", "enum": ["mock-lightning-v1"]}, "status": {"type": "string", "enum": ["SUCCEEDED"]}, "event_id": {"type": "string", "format": "uuid"}}, "nullable": true, "additionalProperties": false, "required": ["invoice_id", "provider", "status", "event_id"]}, "MerchantLightningFailed": {"type": "object", "properties": {"status": {"type": "string", "enum": ["FAILED"]}, "simulated": {"type": "boolean", "enum": [true]}, "replayed": {"type": "boolean"}, "lightning": {"$ref": "#/components/schemas/MerchantLightningInvoice"}, "message": {"type": "string"}}, "additionalProperties": false, "required": ["status", "simulated", "replayed", "lightning", "message"]}, "MerchantReceipt": {"type": "object", "properties": {"id": {"type": "string", "format": "uuid"}, "link_id": {"type": "string", "format": "uuid"}, "business_name": {"type": "string"}, "description": {"type": "string"}, "asset": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "amount": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "settlement_asset": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "settlement_amount": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "journal_id": {"type": "string", "format": "uuid"}, "created_at": {"type": "string", "format": "date-time"}, "fee": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "status": {"type": "string", "enum": ["PAID"]}, "simulated": {"type": "boolean", "enum": [true]}, "replayed": {"type": "boolean"}, "pricing": {"$ref": "#/components/schemas/MerchantPricing"}, "pricing_mode": {"type": "string", "enum": ["ZERO", "FEES_V1"]}, "payment_mode": {"type": "string", "enum": ["SINGLE_ASSET", "MULTI_ASSET"]}, "payment_asset": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "payment_amount": {"type": "string", "pattern": "^[0-9]+(\\.[0-9]+)?$", "description": "Valor decimal positivo como string, ponto decimal. Precisão: USD 2, USDC 6, BTC 8; limites adicionais do módulo."}, "channel": {"type": "string", "enum": ["WALLET", "LIGHTNING_MOCK"]}, "lightning": {"$ref": "#/components/schemas/MerchantLightningReceipt"}}, "additionalProperties": false, "description": "Comprovante da operação original. Estornos posteriores são lançamentos separados e não reescrevem estes valores.", "required": ["id", "link_id", "business_name", "description", "asset", "amount", "settlement_asset", "settlement_amount", "journal_id", "created_at", "fee", "status", "simulated", "replayed", "pricing", "pricing_mode", "payment_mode", "payment_asset", "payment_amount", "channel", "lightning"]}, "MerchantPreview": {"type": "object", "properties": {"pricing": {"$ref": "#/components/schemas/MerchantPricing"}}, "additionalProperties": true, "description": "Campos existentes da cobrança e prévia assinada, acrescidos do detalhamento pricing. Validade de até 60 segundos.", "required": ["pricing"]}, "ApiExchangeQuoteRequest": {"type": "object", "additionalProperties": false, "properties": {"asset_in": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "asset_out": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "amount": {"type": "string", "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$", "maxLength": 30, "description": "Total de entrada incluindo tarifa; positivo. Precisão USD 2, USDC 6, BTC 8; sem expoente, sinal ou milhar."}, "idempotency_key": {"type": "string", "format": "uuid"}, "pricing_mode": {"type": "string", "enum": ["ZERO", "FEES_V1"], "default": "ZERO"}}, "required": ["asset_in", "asset_out", "amount", "idempotency_key"]}, "ApiExchangeQuote": {"type": "object", "additionalProperties": false, "properties": {"id": {"type": "string", "format": "uuid"}, "asset_in": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "asset_out": {"type": "string", "enum": ["USD", "USDC", "BTC"]}, "amount_in": {"type": "string", "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$", "maxLength": 30, "description": "Decimal no ativo correspondente; precisão e limites conferidos em runtime."}, "net_amount_in": {"type": "string", "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$", "maxLength": 30, "description": "Decimal no ativo correspondente; precisão e limites conferidos em runtime."}, "gross_amount_out": {"type": "string", "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$", "maxLength": 30, "description": "Decimal no ativo correspondente; precisão e limites conferidos em runtime."}, "amount_out": {"type": "string", "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$", "maxLength": 30, "description": "Decimal no ativo correspondente; precisão e limites conferidos em runtime."}, "fee": {"type": "string", "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$", "maxLength": 30, "description": "Decimal no ativo correspondente; precisão e limites conferidos em runtime."}, "spread": {"type": "string", "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$", "maxLength": 30, "description": "Decimal no ativo correspondente; precisão e limites conferidos em runtime."}, "pricing_mode": {"type": "string", "enum": ["ZERO", "FEES_V1"]}, "fee_bps": {"type": "integer", "enum": [0, 50]}, "spread_bps": {"type": "integer", "enum": [0, 100]}, "rate_numerator": {"type": "string", "pattern": "^[1-9][0-9]*$"}, "rate_denominator": {"type": "string", "pattern": "^[1-9][0-9]*$"}, "policy": {"type": "string", "enum": ["sandbox-fixed-v1"]}, "provider": {"type": "string", "enum": ["mock-liquidity-v1"]}, "reference": {"type": "string", "pattern": "^APIQUOTE:[0-9A-F]{32}$"}, "created_at": {"type": "string", "format": "date-time"}, "expires_at": {"type": "string", "format": "date-time"}, "expired": {"type": "boolean"}, "replayed": {"type": "boolean"}, "executable": {"type": "boolean", "enum": [false]}, "simulated": {"type": "boolean", "enum": [true]}, "request_id": {"type": "string", "format": "uuid"}}, "required": ["id", "asset_in", "asset_out", "amount_in", "net_amount_in", "gross_amount_out", "amount_out", "fee", "spread", "pricing_mode", "fee_bps", "spread_bps", "rate_numerator", "rate_denominator", "policy", "provider", "reference", "created_at", "expires_at", "expired", "replayed", "executable", "simulated", "request_id"]}}, "securitySchemes": {"Session": {"type": "apiKey", "in": "cookie", "name": "vatex_pay_session", "description": "Sessão local; não é chave de parceiro."}, "CsrfCookie": {"type": "apiKey", "in": "cookie", "name": "vatex_pay_csrf"}, "CsrfHeader": {"type": "apiKey", "in": "header", "name": "X-CSRFToken", "description": "Obter em GET /api/v1/csrf usando o mesmo cookie jar."}, "PartnerKey": {"type": "http", "scheme": "bearer", "bearerFormat": "vp_test_<id>.<secret>"}, "LightningSignature": {"type": "apiKey", "in": "header", "name": "X-Pay-Signature"}, "LightningTimestamp": {"type": "apiKey", "in": "header", "name": "X-Pay-Timestamp"}}}}