{
  "openapi": "3.0.3",
  "info": {
    "title": "Finway API",
    "description": "API unificada da plataforma Finway.\n\n- **Accounts**: API responsável pelo gerenciamento de contas, incluindo operações de consulta, atualização, bloqueio de saldo, upload de documentos, alteração de credenciais via OTP e preferências de notificação.\n\n- **Onboarding PF**: API responsável pelo processo de onboarding de pessoa física, incluindo cadastro simplificado, verificação de identidade via OTP (SMS e e-mail), upload de documentos, ativação de conta e consulta de termos regulatórios.\n\n- **Onboarding PJ**: API responsável pelo processo de onboarding de Pessoa Jurídica, incluindo criação de conta, validação de OTP (SMS e E-mail), upload de documentos e registro de conta empresarial.\n\n- **Pix Charge API**: API para gerenciamento de cobranças Pix (Cob) e devoluções, seguindo o padrão BACEN. Permite criar, consultar, atualizar e listar cobranças imediatas e devoluções Pix.\n\n- **Pix Service API**: API responsável pelos serviços Pix do Finway, incluindo transferências (QR Code, chave e conta bancária), gerenciamento de chaves Pix, reivindicações (claims), limites transacionais, Pix Automático e estornos.\n\n- **Security Service**: API responsável pelos serviços de segurança da plataforma Finway. Contempla autenticação, autorização (PBAC), gerenciamento de dispositivos, recuperação e alteração de credenciais (senha e PIN), geração de tokens OAuth2, associação de dispositivos confiáveis e gerenciamento de arquivos em storage.\n\n- **Transactions Service**: API responsável pela consulta de transações bancárias, extratos, comprovantes e operações PIX. Permite listar transações de uma conta, obter detalhes e comprovantes de transações específicas, e consultar transações PIX com filtros avançados.",
    "version": "v2.0.0"
  },
  "servers": [
    {
      "url": "https://api-finway-dev.finaya.tech/api/bank-services",
      "description": "Development"
    }
  ],
  "security": [
    {
      "x-buildersbank-authorization": []
    },
    {
      "client_id": []
    }
  ],
  "tags": [
    {
      "name": "OAuth Token",
      "description": "Geração de tokens OAuth2 para autenticação de serviços e aplicações"
    },
    {
      "name": "Onboarding PF",
      "description": "Endpoints para o fluxo de onboarding de pessoa física"
    },
    {
      "name": "Onboarding PJ",
      "description": "Endpoints para o fluxo de onboarding de pessoa jurídica"
    }
  ],
  "paths": {
    "/security/auth/tokens": {
      "post": {
        "tags": [
          "OAuth Token"
        ],
        "summary": "Gerar token via client credentials",
        "description": "Gera um token de acesso utilizando o fluxo client_credentials com as credenciais enviadas no corpo da requisição",
        "operationId": "generateOAuth2Token",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientCredentialsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Token gerado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            }
          },
          "401": {
            "description": "Credenciais inválidas",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TokenResponse"
                }
              }
            }
          }
        }
      }
    },
    "/simple-onboarding": {
      "post": {
        "tags": [
          "Onboarding PF"
        ],
        "summary": "Iniciar onboarding simplificado",
        "description": "Cria um novo registro de onboarding simplificado para pessoa física. Retorna um token de sessão para prosseguir com as próximas etapas do fluxo.",
        "operationId": "create1",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartOnboardingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Onboarding iniciado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SimpleOnboardingResponse"
                }
              }
            }
          },
          "400": {
            "description": "Dados de entrada inválidos"
          },
          "422": {
            "description": "Regra de negócio violada (ex: CPF já cadastrado)"
          }
        },
        "x-order": "1"
      }
    },
    "/simple-onboarding/sms/otp/challenge": {
      "post": {
        "tags": [
          "Onboarding PF"
        ],
        "summary": "Solicitar desafio OTP via SMS",
        "description": "Envia um código OTP via SMS para o número de celular informado no cadastro. Necessário para validar a posse do número de telefone.",
        "operationId": "smsChallenge",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SMSChallengeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OTP enviado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OTPResponse"
                }
              }
            }
          },
          "400": {
            "description": "Dados de entrada inválidos"
          },
          "429": {
            "description": "Limite de tentativas de envio excedido"
          }
        },
        "x-order": "2"
      }
    },
    "/simple-onboarding/sms/otp/validate": {
      "post": {
        "tags": [
          "Onboarding PF"
        ],
        "summary": "Validar OTP via SMS",
        "description": "Valida o código OTP recebido via SMS. Confirma a posse do número de telefone e avança o fluxo de onboarding.",
        "operationId": "smsValidate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateOTPRequest1"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OTP validado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OTPResponse"
                }
              }
            }
          },
          "400": {
            "description": "Código OTP inválido ou expirado"
          },
          "429": {
            "description": "Limite de tentativas de validação excedido"
          }
        },
        "x-order": "3"
      }
    },
    "/simple-onboarding/mail/otp/challenge": {
      "post": {
        "tags": [
          "Onboarding PF"
        ],
        "summary": "Solicitar desafio OTP via e-mail",
        "description": "Envia um código OTP via e-mail para o endereço informado no cadastro. Necessário para validar a posse do e-mail.",
        "operationId": "mailChallenge",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MailChallengeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OTP enviado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OTPResponse"
                }
              }
            }
          },
          "400": {
            "description": "Dados de entrada inválidos"
          },
          "429": {
            "description": "Limite de tentativas de envio excedido"
          }
        },
        "x-order": "4"
      }
    },
    "/simple-onboarding/mail/otp/validate": {
      "post": {
        "tags": [
          "Onboarding PF"
        ],
        "summary": "Validar OTP via e-mail",
        "description": "Valida o código OTP recebido via e-mail. Confirma a posse do e-mail e avança o fluxo de onboarding.",
        "operationId": "mailValidate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateOTPRequest1"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OTP validado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OTPResponse"
                }
              }
            }
          },
          "400": {
            "description": "Código OTP inválido ou expirado"
          },
          "429": {
            "description": "Limite de tentativas de validação excedido"
          }
        },
        "x-order": "5"
      }
    },
    "/simple-onboarding/accounts": {
      "post": {
        "tags": [
          "Onboarding PF"
        ],
        "summary": "Criar conta no onboarding simplificado",
        "description": "Finaliza o fluxo de onboarding simplificado criando a conta do usuário. Requer que todas as etapas anteriores (OTP SMS e e-mail) tenham sido concluídas.",
        "operationId": "createAccount",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FinishOnboardRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Conta criada com sucesso"
          },
          "400": {
            "description": "Dados de entrada inválidos"
          },
          "422": {
            "description": "Etapas anteriores do onboarding não concluídas"
          }
        },
        "x-order": "6"
      }
    },
    "/holders/{document}/terms": {
      "get": {
        "tags": [
          "Onboarding PF"
        ],
        "summary": "Consultar termos regulatórios",
        "description": "Retorna os documentos regulatórios (termos de uso, política de privacidade, etc.) que o titular deve aceitar para ativar a conta.",
        "operationId": "getTerms",
        "parameters": [
          {
            "name": "document",
            "in": "path",
            "description": "Número do documento do titular ou 'me' para o usuário autenticado",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "me"
          }
        ],
        "responses": {
          "200": {
            "description": "Termos retornados com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TermsResponse"
                }
              }
            }
          },
          "404": {
            "description": "Titular não encontrado"
          }
        },
        "x-order": "9"
      }
    },
    "/holders/{document}/personal/account": {
      "patch": {
        "tags": [
          "Onboarding PF"
        ],
        "summary": "Atualizar dados pessoais da conta",
        "description": "Atualiza os dados pessoais do titular (nome da mãe, data de nascimento, endereço, renda declarada, etc.) durante o processo de ativação da conta.",
        "operationId": "updatePersonalAccount",
        "parameters": [
          {
            "name": "document",
            "in": "path",
            "description": "Número do documento do titular ou 'me' para o usuário autenticado",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "me"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PersonalAccountRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "204": {
            "description": "Dados pessoais atualizados com sucesso"
          },
          "400": {
            "description": "Dados de entrada inválidos"
          },
          "404": {
            "description": "Titular não encontrado"
          }
        },
        "x-order": "10"
      }
    },
    "/holders/{document}/personal/account/documents": {
      "post": {
        "tags": [
          "Onboarding PF"
        ],
        "summary": "Enviar documentos de identificação",
        "description": "Realiza o upload de documentos de identificação (RG, CNH, selfie, etc.) para verificação de identidade durante a ativação da conta.",
        "operationId": "uploadFile",
        "parameters": [
          {
            "name": "document",
            "in": "path",
            "description": "Número do documento do titular ou 'me' para o usuário autenticado",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "me"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FileUploadRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Documento enviado com sucesso"
          },
          "400": {
            "description": "Dados do documento inválidos"
          },
          "404": {
            "description": "Titular não encontrado"
          },
          "422": {
            "description": "Tipo de documento não aceito"
          }
        },
        "x-order": "11"
      }
    },
    "/holders/{document}/personal/account/settlement": {
      "post": {
        "tags": [
          "Onboarding PF"
        ],
        "summary": "Finalizar abertura de conta",
        "description": "Conclui o processo de ativação criando a conta de liquidação (settlement). Requer que os dados pessoais e documentos já tenham sido enviados.",
        "operationId": "createAccount_1",
        "parameters": [
          {
            "name": "document",
            "in": "path",
            "description": "Número do documento do titular ou 'me' para o usuário autenticado",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "me"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAccountRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Conta criada com sucesso"
          },
          "400": {
            "description": "Dados de entrada inválidos"
          },
          "404": {
            "description": "Titular não encontrado"
          },
          "422": {
            "description": "Etapas anteriores de ativação não concluídas"
          }
        },
        "x-order": "12"
      }
    },
    "/pj/onboarding": {
      "post": {
        "tags": [
          "Onboarding PJ"
        ],
        "summary": "Iniciar onboarding simplificado",
        "description": "Cria um novo processo de onboarding simplificado para Pessoa Jurídica, retornando um token de sessão.",
        "operationId": "create2",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StartOnboardingRequest1"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Onboarding iniciado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SimpleOnboardingResponse1"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos na requisição"
          },
          "422": {
            "description": "Erro de validação nos dados do onboarding"
          }
        },
        "x-order": "1"
      }
    },
    "/pj/onboarding/sms/otp/challenge": {
      "post": {
        "tags": [
          "Onboarding PJ"
        ],
        "summary": "Enviar desafio OTP por SMS",
        "description": "Envia um código OTP via SMS para o número de telefone associado ao processo de onboarding.",
        "operationId": "smsChallenge1",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SmsOTPChallengeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Desafio OTP enviado com sucesso",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OTPResponse1"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos na requisição"
          },
          "422": {
            "description": "Falha ao enviar OTP"
          }
        },
        "x-order": "2"
      }
    },
    "/pj/onboarding/sms/otp/validate": {
      "post": {
        "tags": [
          "Onboarding PJ"
        ],
        "summary": "Validar OTP recebido por SMS",
        "description": "Valida o código OTP recebido por SMS, confirmando a posse do número de telefone.",
        "operationId": "smsValidate1",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateOTPRequest2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OTP validado com sucesso",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/OTPResponse1"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos na requisição"
          },
          "422": {
            "description": "Código OTP inválido ou expirado"
          }
        },
        "x-order": "3"
      }
    },
    "/pj/onboarding/mail/otp/challenge": {
      "post": {
        "tags": [
          "Onboarding PJ"
        ],
        "summary": "Enviar desafio OTP por e-mail",
        "description": "Envia um código OTP via e-mail para o endereço associado ao processo de onboarding.",
        "operationId": "mailChallenge1",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MailOTPChallengeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Desafio OTP enviado com sucesso",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/OTPResponse1"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos na requisição"
          },
          "422": {
            "description": "Falha ao enviar OTP"
          }
        },
        "x-order": "4"
      }
    },
    "/pj/onboarding/mail/otp/validate": {
      "post": {
        "tags": [
          "Onboarding PJ"
        ],
        "summary": "Validar OTP recebido por e-mail",
        "description": "Valida o código OTP recebido por e-mail, confirmando a posse do endereço de e-mail.",
        "operationId": "mailValidate1",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateOTPRequest2"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OTP validado com sucesso",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/OTPResponse1"
                }
              }
            }
          },
          "400": {
            "description": "Dados inválidos na requisição"
          },
          "422": {
            "description": "Código OTP inválido ou expirado"
          }
        },
        "x-order": "5"
      }
    },
    "/pj/onboarding/accounts": {
      "post": {
        "tags": [
          "Onboarding PJ"
        ],
        "summary": "Criar conta PJ",
        "description": "Finaliza o processo de onboarding simplificado criando a conta de Pessoa Jurídica.",
        "operationId": "createAccount1",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateAccountRequest1"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Conta criada com sucesso"
          },
          "400": {
            "description": "Dados inválidos na requisição"
          },
          "422": {
            "description": "Erro ao criar a conta"
          }
        },
        "x-order": "6"
      }
    },
    "/holders/{document}/business/accounts/documents": {
      "post": {
        "tags": [
          "Onboarding PJ"
        ],
        "summary": "Upload de documento",
        "description": "Realiza o upload de documento necessário para o processo de onboarding (ex: contrato social, ata de eleição).",
        "operationId": "uploadDocument",
        "parameters": [
          {
            "name": "document",
            "in": "path",
            "description": "'me' para o holder autenticado ou o número do documento (CNPJ)",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "me"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FileUploadRequest1"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Documento enviado com sucesso"
          },
          "400": {
            "description": "Dados inválidos ou documento não suportado"
          },
          "422": {
            "description": "Erro ao processar o documento"
          }
        },
        "x-order": "7"
      }
    },
    "/holders/{document}/business/accounts": {
      "patch": {
        "tags": [
          "Onboarding PJ"
        ],
        "summary": "Atualizar dados da conta empresarial",
        "description": "Atualiza informações da conta empresarial como endereço, representante legal, CNAE e faturamento.",
        "operationId": "updateBusinessAccount",
        "parameters": [
          {
            "name": "document",
            "in": "path",
            "description": "'me' para o holder autenticado ou o número do documento (CNPJ)",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "me"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BusinessAccountRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Conta empresarial atualizada com sucesso"
          },
          "400": {
            "description": "Dados inválidos na requisição"
          },
          "422": {
            "description": "Erro ao atualizar a conta"
          }
        },
        "x-order": "8"
      }
    },
    "/holders/{document}/business/accounts/settlement": {
      "post": {
        "tags": [
          "Onboarding PJ"
        ],
        "summary": "Criar conta de liquidação",
        "description": "Cria a conta de liquidação (settlement) associada à conta empresarial PJ.",
        "operationId": "createBusinessAccount",
        "parameters": [
          {
            "name": "document",
            "in": "path",
            "description": "'me' para o holder autenticado ou o número do documento (CNPJ)",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "me"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBusinessAccountRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Conta de liquidação criada com sucesso"
          },
          "400": {
            "description": "Dados inválidos na requisição"
          },
          "422": {
            "description": "Erro ao criar a conta de liquidação"
          }
        },
        "x-order": "9"
      }
    }
  },
  "components": {
    "schemas": {
      "ClientCredentialsRequest": {
        "type": "object",
        "properties": {
          "client_id": {
            "type": "string"
          },
          "client_secret": {
            "type": "string"
          },
          "grant_type": {
            "type": "string",
            "enum": [
              "client_credentials"
            ]
          }
        }
      },
      "TokenResponse": {
        "type": "object",
        "properties": {
          "access_token": {
            "type": "string"
          },
          "expires_in": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "StartOnboardingRequest": {
        "type": "object",
        "properties": {
          "nickname": {
            "type": "string",
            "description": "Apelido do usuário",
            "example": "joaosilva"
          },
          "name": {
            "type": "string",
            "description": "Nome completo do usuário",
            "example": "João da Silva"
          },
          "document": {
            "type": "string",
            "description": "CPF do usuário (somente números)",
            "example": "12345678900"
          }
        },
        "description": "Dados para iniciar o onboarding simplificado"
      },
      "SimpleOnboardingResponse": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Token de sessão para prosseguir com o fluxo de onboarding"
          }
        },
        "description": "Resposta do onboarding simplificado"
      },
      "ValidateOTPRequest1": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Token de sessão do onboarding"
          },
          "code": {
            "type": "string",
            "description": "Código OTP recebido via SMS ou e-mail",
            "example": "123456"
          }
        },
        "description": "Dados para validação do código OTP"
      },
      "OTPResponse": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Token de sessão atualizado após operação OTP"
          }
        },
        "description": "Resposta da operação OTP"
      },
      "SMSChallengeRequest": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Token de sessão do onboarding"
          },
          "mobilePhone": {
            "type": "string",
            "description": "Número do celular para envio do OTP via SMS",
            "example": "11999998888"
          }
        },
        "description": "Dados para solicitar envio de código OTP via SMS"
      },
      "MailChallengeRequest": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Token de sessão do onboarding"
          },
          "mail": {
            "type": "string",
            "description": "E-mail para envio do OTP",
            "example": "joao@email.com"
          }
        },
        "description": "Dados para solicitar envio de código OTP via e-mail"
      },
      "FinishOnboardRequest": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Token de sessão do onboarding"
          },
          "password": {
            "type": "string",
            "description": "Senha de acesso"
          },
          "deviceKey": {
            "type": "string",
            "description": "Chave Publica RSA vinculada ao dispositivo"
          },
          "deviceIdentification": {
            "type": "string",
            "description": "Identificação única do dispositivo"
          }
        },
        "description": "Dados para criação da conta no onboarding simplificado"
      },
      "CreateAccountRequest": {
        "type": "object",
        "properties": {
          "pin": {
            "type": "string",
            "description": "PIN de segurança para transações",
            "example": "1234"
          }
        },
        "description": "Dados para finalizar abertura de conta"
      },
      "FileUploadRequest": {
        "type": "object",
        "properties": {
          "filename": {
            "type": "string",
            "description": "Nome do arquivo",
            "example": "selfie.jpg"
          },
          "contentType": {
            "type": "string",
            "description": "Tipo de conteúdo do arquivo (MIME type)",
            "example": "image/jpeg"
          },
          "type": {
            "type": "string",
            "description": "Tipo do documento enviado",
            "enum": [
              "DRIVER_LICENSE_FRONT",
              "DRIVER_LICENSE_REAR",
              "IDENTITY_CARD_FRONT",
              "IDENTITY_CARD_REAR",
              "DIGITAL_DOCUMENT",
              "DIGITAL_DRIVER_LICENSE",
              "DIGITAL_IDENTITY_CARD",
              "RNE_FRONT",
              "RNE_REAR",
              "PASSPORT",
              "SELFIE",
              "SIGNATURE",
              "PAC"
            ]
          }
        },
        "description": "Dados para upload de documento de identificação"
      },
      "AddressRequest": {
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "Logradouro (rua, avenida, etc.)",
            "example": "Rua das Flores"
          },
          "number": {
            "type": "string",
            "description": "Número do endereço",
            "example": "123"
          },
          "complement": {
            "type": "string",
            "description": "Complemento do endereço",
            "example": "Apto 45"
          },
          "cep": {
            "type": "string",
            "description": "CEP (somente números)",
            "example": "01001000"
          },
          "city": {
            "type": "string",
            "description": "Cidade",
            "example": "São Paulo"
          },
          "neighborhood": {
            "type": "string",
            "description": "Bairro",
            "example": "Centro"
          },
          "uf": {
            "type": "string",
            "description": "Unidade federativa (sigla do estado)",
            "example": "SP"
          },
          "country": {
            "type": "string",
            "description": "País",
            "example": "BR"
          },
          "valid": {
            "type": "boolean"
          }
        },
        "description": "Endereço residencial do titular"
      },
      "AppInfoRequest": {
        "type": "object",
        "properties": {
          "deviceName": {
            "type": "string",
            "description": "Nome do dispositivo",
            "example": "iPhone 15 Pro"
          },
          "operationSystem": {
            "type": "string",
            "description": "Sistema operacional do dispositivo",
            "example": "iOS 17.4"
          },
          "ip": {
            "type": "string",
            "description": "Endereço IP do dispositivo",
            "example": "192.168.1.100"
          },
          "altitude": {
            "type": "number",
            "description": "Altitude da localização do dispositivo (metros)",
            "format": "double",
            "example": 760
          },
          "latitude": {
            "type": "number",
            "description": "Latitude da localização do dispositivo",
            "format": "double",
            "example": -23.5505
          },
          "accuracy": {
            "type": "number",
            "description": "Precisão da localização (metros)",
            "format": "double",
            "example": 10
          },
          "longitude": {
            "type": "number",
            "description": "Longitude da localização do dispositivo",
            "format": "double",
            "example": -46.6333
          }
        },
        "description": "Informações do aplicativo e dispositivo do usuário"
      },
      "PersonalAccountRequest": {
        "type": "object",
        "properties": {
          "motherName": {
            "type": "string",
            "description": "Nome da mãe do titular",
            "example": "Maria da Silva"
          },
          "birthdate": {
            "type": "string",
            "description": "Data de nascimento do titular",
            "format": "date",
            "example": "1990-05-15"
          },
          "address": {
            "$ref": "#/components/schemas/AddressRequest"
          },
          "isPoliticallyExposedPerson": {
            "type": "string",
            "description": "Indicação de pessoa politicamente exposta",
            "enum": [
              "SELF",
              "RELATED",
              "NONE"
            ]
          },
          "declaredIncome": {
            "type": "string",
            "description": "Faixa de renda declarada",
            "enum": [
              "NONE",
              "LESS_THAN_ONE_THOUSAND",
              "FROM_ONE_THOUSAND_TO_TWO_THOUSAND",
              "FROM_TWO_THOUSAND_TO_THREE_THOUSAND",
              "FROM_THREE_THOUSAND_TO_FIVE_THOUSAND",
              "FROM_FIVE_THOUSAND_TO_TEN_THOUSAND",
              "FROM_TEN_THOUSAND_TO_TWENTY_THOUSAND",
              "OVER_TWENTY_THOUSAND"
            ]
          },
          "revenueAmount": {
            "type": "number",
            "description": "Valor da renda mensal",
            "example": 5000
          },
          "nationality": {
            "type": "string",
            "description": "Nacionalidade do titular",
            "example": "brasileira"
          },
          "occupation": {
            "type": "string",
            "description": "Código da ocupação profissional",
            "enum": [
              "OCP0001",
              "OCP0002",
              "OCP0003",
              "OCP0004",
              "OCP0005",
              "OCP0006",
              "OCP0007",
              "OCP0008",
              "OCP0009",
              "OCP0010",
              "OCP0011",
              "OCP0012",
              "OCP0013",
              "OCP0014",
              "OCP0015",
              "OCP0016",
              "OCP0017",
              "OCP0018",
              "OCP0019",
              "OCP0020",
              "OCP0021",
              "OCP0022",
              "OCP0023",
              "OCP0024",
              "OCP0025",
              "OCP0026",
              "OCP0027",
              "OCP0028",
              "OCP0029",
              "OCP0030",
              "OCP0031",
              "OCP0032",
              "OCP0033",
              "OCP0034",
              "OCP0035",
              "OCP0036",
              "OCP0037",
              "OCP0038",
              "OCP0039",
              "OCP0040",
              "OCP0041",
              "OCP0042",
              "OCP0043",
              "OCP0044",
              "OCP0045",
              "OCP0046",
              "OCP0047",
              "OCP0048",
              "OCP0049",
              "OCP0050",
              "OCP0051",
              "OCP0052",
              "OCP0053",
              "OCP0054",
              "OCP0055",
              "OCP0056",
              "OCP0057",
              "OCP0058",
              "OCP0059",
              "OCP0060",
              "OCP0061",
              "OCP0062",
              "OCP0063",
              "OCP0064",
              "OCP0065",
              "OCP0066",
              "OCP0067",
              "OCP0068",
              "OCP0069",
              "OCP0070",
              "OCP0071",
              "OCP0072",
              "OCP0073",
              "OCP0074",
              "OCP0075",
              "OCP0076",
              "OCP0077",
              "OCP0078",
              "OCP0079",
              "OCP0080",
              "OCP0081",
              "OCP0082",
              "OCP0083",
              "OCP0084",
              "OCP0085",
              "OCP0086",
              "OCP0087",
              "OCP0088",
              "OCP0089",
              "OCP0090",
              "OCP0091",
              "OCP0092",
              "OCP0093",
              "OCP0094",
              "OCP0095",
              "OCP0096",
              "OCP0097",
              "OCP0098",
              "OCP0099",
              "OCP0100",
              "OCP0101",
              "OCP0102",
              "OCP0103",
              "OCP0104",
              "OCP0105"
            ]
          },
          "agreeTerms": {
            "type": "string",
            "description": "Identificador do aceite dos termos regulatórios"
          },
          "gender": {
            "type": "string",
            "description": "Gênero do titular",
            "enum": [
              "M",
              "F",
              "OTHER"
            ]
          },
          "professionalClass": {
            "type": "string",
            "description": "Classe profissional"
          },
          "appInfo": {
            "$ref": "#/components/schemas/AppInfoRequest"
          },
          "paymentType": {
            "type": "string",
            "description": "Tipo de pagamento (débito, crédito)",
            "example": "DEBIT"
          },
          "name": {
            "type": "string",
            "description": "Nome completo do titular",
            "example": "João da Silva"
          },
          "paymentDay": {
            "type": "integer",
            "description": "Dia de pagamento da fatura",
            "format": "int32",
            "example": 10
          },
          "email": {
            "type": "string",
            "description": "E-mail do titular",
            "example": "joao@email.com"
          },
          "dueDay": {
            "type": "integer",
            "description": "Dia de vencimento da fatura",
            "format": "int32",
            "example": 15
          },
          "grantedLimit": {
            "type": "number",
            "description": "Limite de crédito concedido",
            "example": 2000
          },
          "mobilePhone": {
            "type": "string",
            "description": "Número do celular do titular",
            "example": "11999998888"
          }
        },
        "description": "Dados pessoais para ativação da conta"
      },
      "RegulatoryDocumentsDTO": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "Tipo do documento regulatório",
            "enum": [
              "PRIVACY_POLICY",
              "TERMS_OF_USE",
              "CREDIT_CONTRACT"
            ]
          },
          "text": {
            "type": "string",
            "description": "Conteúdo do documento em texto"
          },
          "pdf": {
            "type": "string",
            "description": "URL do documento em formato PDF"
          }
        },
        "description": "Documento regulatório"
      },
      "TermsResponse": {
        "type": "object",
        "properties": {
          "regulatoryDocuments": {
            "type": "array",
            "description": "Lista de documentos regulatórios (termos de uso, política de privacidade, etc.)",
            "items": {
              "$ref": "#/components/schemas/RegulatoryDocumentsDTO"
            }
          }
        },
        "description": "Resposta com documentos regulatórios"
      },
      "StartOnboardingRequest1": {
        "type": "object",
        "properties": {
          "tradingName": {
            "type": "string",
            "description": "Nome fantasia da empresa",
            "example": "Loja do João"
          },
          "businessName": {
            "type": "string",
            "description": "Razão social da empresa",
            "example": "João Silva Comércio LTDA"
          },
          "document": {
            "type": "string",
            "description": "CNPJ da empresa",
            "example": "12345678000199"
          }
        },
        "description": "Dados para iniciar o onboarding simplificado PJ"
      },
      "SimpleOnboardingResponse1": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Token de sessão para continuidade do fluxo de onboarding"
          }
        },
        "description": "Resposta do onboarding simplificado PJ"
      },
      "ValidateOTPRequest2": {
        "required": [
          "code",
          "token"
        ],
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Token de sessão do onboarding"
          },
          "code": {
            "type": "string",
            "description": "Código OTP recebido por SMS ou e-mail",
            "example": "123456"
          },
          "cpf": {
            "type": "string",
            "description": "CPF do representante legal",
            "example": "12345678900"
          }
        },
        "description": "Dados para validação do código OTP"
      },
      "OTPResponse1": {
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Token de sessão atualizado após a operação de OTP"
          }
        },
        "description": "Resposta da operação de OTP"
      },
      "SmsOTPChallengeRequest": {
        "required": [
          "phone",
          "token"
        ],
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Token de sessão do onboarding"
          },
          "phone": {
            "type": "string",
            "description": "Número de telefone para envio do OTP via SMS",
            "example": "11999998888"
          }
        },
        "description": "Dados para solicitar envio de código OTP via SMS"
      },
      "MailOTPChallengeRequest": {
        "required": [
          "email",
          "token"
        ],
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Token de sessão do onboarding"
          },
          "email": {
            "type": "string",
            "description": "Endereço de e-mail para envio do OTP",
            "example": "usuario@empresa.com.br"
          }
        },
        "description": "Dados para solicitar envio de código OTP via e-mail"
      },
      "CreateAccountRequest1": {
        "required": [
          "deviceIdentification",
          "deviceKey",
          "password",
          "token"
        ],
        "type": "object",
        "properties": {
          "token": {
            "type": "string",
            "description": "Token de sessão do onboarding"
          },
          "password": {
            "type": "string",
            "description": "Senha de acesso definida pelo usuário"
          },
          "deviceKey": {
            "type": "string",
            "description": "Chave Publica RSA vinculada ao dispositivo"
          },
          "deviceIdentification": {
            "type": "string",
            "description": "Identificação única do dispositivo"
          }
        },
        "description": "Dados para criação da conta PJ"
      },
      "CreateBusinessAccountRequest": {
        "type": "object",
        "properties": {
          "pin": {
            "type": "string",
            "description": "PIN de segurança da conta",
            "example": "1234"
          },
          "businessType": {
            "type": "string",
            "description": "Tipo da empresa",
            "example": "LTDA",
            "enum": [
              "MEI",
              "ME",
              "EI",
              "EIRELI",
              "SLU",
              "LTDA",
              "SA",
              "SS"
            ]
          },
          "businessSize": {
            "type": "string",
            "description": "Porte da empresa",
            "example": "ME",
            "enum": [
              "MEI",
              "ME",
              "EPP",
              "MP",
              "GP"
            ]
          }
        },
        "description": "Dados para criação de conta de liquidação empresarial"
      },
      "FileUploadRequest1": {
        "required": [
          "contentType",
          "filename",
          "type"
        ],
        "type": "object",
        "properties": {
          "filename": {
            "type": "string",
            "description": "Nome do arquivo",
            "example": "contrato_social.pdf"
          },
          "contentType": {
            "type": "string",
            "description": "Tipo de conteúdo do arquivo (MIME type)",
            "example": "application/pdf"
          },
          "token": {
            "type": "string",
            "description": "Token de sessão do onboarding"
          },
          "type": {
            "type": "string",
            "description": "Tipo do documento",
            "enum": [
              "DRIVER_LICENSE_FRONT",
              "DRIVER_LICENSE_REAR",
              "IDENTITY_CARD_FRONT",
              "IDENTITY_CARD_REAR",
              "SELFIE",
              "RG",
              "CNH",
              "COMPANY_STATUTE",
              "DIRECTORS_ELECTION_MINUTE"
            ]
          },
          "document": {
            "type": "string",
            "description": "Conteúdo do documento em Base64"
          }
        },
        "description": "Dados para upload de documento no onboarding"
      },
      "Address": {
        "required": [
          "address",
          "cep",
          "city",
          "neighborhood",
          "number",
          "uf"
        ],
        "type": "object",
        "properties": {
          "address": {
            "type": "string",
            "description": "Logradouro",
            "example": "Rua das Flores"
          },
          "number": {
            "type": "string",
            "description": "Número",
            "example": "123"
          },
          "complement": {
            "type": "string",
            "description": "Complemento",
            "example": "Sala 45"
          },
          "cep": {
            "type": "string",
            "description": "CEP",
            "example": "01001000"
          },
          "addressTypeId": {
            "type": "integer",
            "description": "ID do tipo de endereço",
            "format": "int64"
          },
          "city": {
            "type": "string",
            "description": "Cidade",
            "example": "São Paulo"
          },
          "neighborhood": {
            "type": "string",
            "description": "Bairro",
            "example": "Centro"
          },
          "uf": {
            "type": "string",
            "description": "Unidade federativa (estado)",
            "example": "SP"
          },
          "country": {
            "type": "string",
            "description": "País",
            "example": "Brasil"
          },
          "mailAddress": {
            "type": "integer",
            "description": "ID do endereço de correspondência",
            "format": "int64"
          },
          "valid": {
            "type": "boolean"
          }
        },
        "description": "Endereço"
      },
      "BusinessAccountRequest": {
        "type": "object",
        "properties": {
          "businessAddress": {
            "$ref": "#/components/schemas/Address"
          },
          "legalRepresentative": {
            "$ref": "#/components/schemas/LegalRepresentativeRequest"
          },
          "agreeTerms": {
            "type": "string",
            "description": "Aceite dos termos de uso",
            "example": "true"
          },
          "cnaeCode": {
            "type": "string",
            "description": "Código CNAE da atividade principal",
            "example": "4712100"
          },
          "foundationDate": {
            "type": "string",
            "description": "Data de fundação da empresa",
            "format": "date",
            "example": "2020-01-15"
          },
          "declaredAnnualBilling": {
            "type": "string",
            "description": "Faixa de faturamento anual declarado",
            "enum": [
              "UP_TO_FIFTY_THOUSAND",
              "MORE_THAN_FIFTY_THOUSAND_UP_TO_ONE_HUNDRED_THOUSAND",
              "MORE_THAN_ONE_HUNDRED_THOUSAND_UP_TO_TWO_HUNDRED_AND_FIFTY_THOUSAND",
              "MORE_THAN_TWO_HUNDRED_AND_FIFTY_THOUSAND_UP_TO_FIVE_HUNDRED_THOUSAND",
              "MORE_THAN_FIVE_HUNDRED_THOUSAND_UP_TO_ONE_MILLION",
              "MORE_THAN_ONE_MILLION_UP_TO_TWO_MILLION_AND_FIVE_HUNDRED_THOUSAND",
              "MORE_THAN_TWO_MILLION_AND_FIVE_HUNDRED_THOUSAND_UP_TO_FIVE_MILLION",
              "MORE_THAN_FIVE_MILLION_UP_TO_TEN_MILLION",
              "MORE_THAN_TEN_MILLION_UP_TO_TWENTY_FIVE_MILLION",
              "MORE_THAN_TWENTY_FIVE_MILLION_UP_TO_FIFTY_MILLION",
              "MORE_THAN_FIFTY_MILLION_UP_TO_ONE_HUNDRED_MILLION",
              "MORE_THAN_ONE_HUNDRED_MILLION_UP_TO_TWO_HUNDRED_AND_FIFTY_MILLION",
              "MORE_THAN_TWO_HUNDRED_AND_FIFTY_MILLION_UP_TO_FIVE_HUNDRED_MILLION",
              "MORE_THAN_FIVE_HUNDRED_MILLION",
              "NOT_DECLARED",
              "EXEMPT_COMPANY",
              "INACTIVE_COMPANY"
            ]
          },
          "revenueAmount": {
            "type": "number",
            "description": "Faturamento mensal declarado",
            "example": 50000
          },
          "dueDay": {
            "type": "integer",
            "description": "Dia de vencimento da fatura",
            "format": "int32",
            "example": 15
          },
          "grantedLimit": {
            "type": "number",
            "description": "Limite de crédito concedido",
            "example": 100000
          }
        },
        "description": "Dados para atualização da conta empresarial"
      },
      "LegalRepresentativeRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Nome completo do representante legal",
            "example": "João da Silva"
          },
          "nickName": {
            "type": "string",
            "description": "Nome social ou apelido",
            "example": "João"
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          },
          "birthDate": {
            "type": "string",
            "description": "Data de nascimento",
            "format": "date",
            "example": "1990-05-20"
          },
          "motherName": {
            "type": "string",
            "description": "Nome da mãe",
            "example": "Maria da Silva"
          },
          "declaredIncome": {
            "type": "string",
            "description": "Faixa de renda declarada",
            "enum": [
              "LESS_THAN_ONE_THOUSAND",
              "FROM_ONE_THOUSAND_TO_TWO_THOUSAND",
              "FROM_TWO_THOUSAND_TO_THREE_THOUSAND",
              "FROM_THREE_THOUSAND_TO_FIVE_THOUSAND",
              "FROM_FIVE_THOUSAND_TO_TEN_THOUSAND",
              "FROM_TEN_THOUSAND_TO_TWENTY_THOUSAND",
              "OVER_TWENTY_THOUSAND"
            ]
          },
          "occupation": {
            "type": "string",
            "description": "Ocupação profissional",
            "enum": [
              "OCP0001",
              "OCP0002",
              "OCP0003",
              "OCP0004",
              "OCP0005",
              "OCP0006",
              "OCP0007",
              "OCP0008",
              "OCP0009",
              "OCP0010",
              "OCP0011",
              "OCP0012",
              "OCP0013",
              "OCP0014",
              "OCP0015",
              "OCP0016",
              "OCP0017",
              "OCP0018",
              "OCP0019",
              "OCP0020",
              "OCP0021",
              "OCP0022",
              "OCP0023",
              "OCP0024",
              "OCP0025",
              "OCP0026",
              "OCP0027",
              "OCP0028",
              "OCP0029",
              "OCP0030",
              "OCP0031",
              "OCP0032",
              "OCP0033",
              "OCP0034",
              "OCP0035",
              "OCP0036",
              "OCP0037",
              "OCP0038",
              "OCP0039",
              "OCP0040",
              "OCP0041",
              "OCP0042",
              "OCP0043",
              "OCP0044",
              "OCP0045",
              "OCP0046",
              "OCP0047",
              "OCP0048",
              "OCP0049",
              "OCP0050",
              "OCP0051",
              "OCP0052",
              "OCP0053",
              "OCP0054",
              "OCP0055",
              "OCP0056",
              "OCP0057",
              "OCP0058",
              "OCP0059",
              "OCP0060",
              "OCP0061",
              "OCP0062",
              "OCP0063",
              "OCP0064",
              "OCP0065",
              "OCP0066",
              "OCP0067",
              "OCP0068",
              "OCP0069",
              "OCP0070",
              "OCP0071",
              "OCP0072",
              "OCP0073",
              "OCP0074",
              "OCP0075",
              "OCP0076",
              "OCP0077",
              "OCP0078",
              "OCP0079",
              "OCP0080",
              "OCP0081",
              "OCP0082",
              "OCP0083",
              "OCP0084",
              "OCP0085",
              "OCP0086",
              "OCP0087",
              "OCP0088",
              "OCP0089",
              "OCP0090",
              "OCP0091",
              "OCP0092",
              "OCP0093",
              "OCP0094",
              "OCP0095",
              "OCP0096",
              "OCP0097",
              "OCP0098",
              "OCP0099",
              "OCP0100",
              "OCP0101",
              "OCP0102",
              "OCP0103",
              "OCP0104",
              "OCP0105"
            ]
          },
          "document": {
            "type": "string",
            "description": "CPF do representante legal",
            "example": "12345678900"
          },
          "nationality": {
            "type": "string",
            "description": "Nacionalidade",
            "example": "Brasileira"
          },
          "nationalIdentification": {
            "type": "string",
            "description": "Documento de identificação nacional (RG)",
            "example": "123456789"
          },
          "maritalStatus": {
            "type": "string",
            "description": "Estado civil",
            "enum": [
              "SINGLE",
              "MARRIED",
              "DIVORCED",
              "SEPARATED",
              "WIDOWER"
            ]
          },
          "mobilePhone": {
            "type": "string",
            "description": "Telefone celular",
            "example": "11999998888"
          },
          "email": {
            "type": "string",
            "description": "E-mail de contato",
            "example": "joao@empresa.com.br"
          },
          "isPoliticallyExposedPerson": {
            "type": "string",
            "description": "Indicador de pessoa politicamente exposta (PEP)",
            "enum": [
              "SELF",
              "RELATED",
              "NONE"
            ]
          }
        },
        "description": "Dados do representante legal da empresa"
      }
    },
    "securitySchemes": {
      "x-buildersbank-authorization": {
        "type": "apiKey",
        "description": "Token JWT de autorização do usuário. Exemplo: eyJraWQiOiI0....",
        "name": "x-buildersbank-authorization",
        "in": "header"
      },
      "client_id": {
        "type": "apiKey",
        "description": "Identificador único do cliente (aplicação). Exemplo: f115c385-5a17-4e91-ae0d-b2726834d837",
        "name": "client_id",
        "in": "header"
      }
    }
  }
}
