openapi: 3.0.0
info:
  title: API OpenData Accounts do Open Finance Brasil
  description: A API descrita neste documento é referente as API Accounts da fase OpenData do Open Finance Brasil.
  version: 1.0.0-beta.1
  contact:
    url: 'https://servicedesk.openbankingbrasil.org.br/Login.jsp?navLanguage=pt-BR'
servers:
  - url: 'http://api.banco.com.br/open-banking/opendata-accounts/v1'
tags:
  - name: Accounts
paths:
  /personal-accounts:
    get:
      tags:
        - Accounts
      summary: Obtém dados das contas pessoa natural
      description: Obtém dados das contas
      operationId: getPersonalAccounts
      parameters:
        - $ref: "#/components/parameters/page"
        - $ref: "#/components/parameters/pageSize"
      responses:
        '200':
          description: Dados sobre contas pessoa natural obtidos com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponsePersonalAccounts'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
        '529':
          $ref: '#/components/responses/SiteIsOverloaded'
        default:
          $ref: '#/components/responses/Default'
  /business-accounts:
    get:
      tags:
        - Accounts
      summary: Obtém dados das contas pessoa jurídica
      description: Obtém dados das contas pessoa jurídica
      operationId: getBusinessAccounts
      parameters:
        - $ref: "#/components/parameters/page"
        - $ref: "#/components/parameters/pageSize"
      responses:
        '200':
          description: Dados sobre contas pessoa jurídica obtidos com sucesso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResponseBusinessAccounts'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
        '529':
          $ref: '#/components/responses/SiteIsOverloaded'
        default:
          $ref: '#/components/responses/Default'
components:
  schemas:
    AccountsTermsConditions:
      type: object
      description: Objeto que reúne informações relativas a Termos e Condições para as modalidades tratadas
      required:
        - minimumBalance
        - elegibilityCriteriaInfo
        - closingProcessInfo
      properties:
        minimumBalance:
          $ref: '#/components/schemas/MinimumBalance'
        elegibilityCriteriaInfo:
          type: string
          maxLength: 2000
          pattern: '[\w\W\s]*'
          description: 'Critérios de qualificação do cliente com a finalidade de definir sua elegibilidade para a aquisição do tipo de conta. Campo Aberto'
          example: 'https://example.com/mobile-banking'
        closingProcessInfo:
          type: string
          maxLength: 2000
          pattern: '[\w\W\s]*'
          description: 'Procedimentos de encerramento para o tipo de conta tratado. Possibilidade de inscrição da URL. Endereço eletrônico de acesso ao canal. p.ex. ''https://example.com/mobile-banking'' '
          example: 'https://example.com/mobile-banking'
    ResponsePersonalAccounts:
      type: object
      required:
        - data
        - links
        - meta
      properties:
        data:
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/PersonalData'
        links:
          $ref: '#/components/schemas/Links'
        meta:
          $ref: '#/components/schemas/Meta'
    PersonalData:
      type: object
      required:
        - participant
        - type
        - fees
        - openingClosingChannels
        - transactionMethods
        - termsConditions
      properties:
        participant:
          type: object
          required:
            - brand
            - name
            - cnpjNumber
          properties:
            brand:
              type: string
              maxLength: 80
              pattern: '[\w\W\s]*'
              description: 'Nome da Marca reportada pelo participante do Open Finance. O conceito a que se refere a ''marca'' é em essência uma promessa da empresa em fornecer uma série específica de atributos, benefícios e serviços uniformes aos clientes'
              example: Organização A
            name:
              type: string
              description: Nome da Instituição, pertencente à marca, responsável pela modalidade de Empréstimos. p.ex.'Empresa da Organização A'
              maxLength: 80
              pattern: '[\w\W\s]*'
              example: 'Empresa A1'
            cnpjNumber:
              type: string
              pattern: '^\d{14}$'
              description: CNPJ
              maxLength: 14
              example: "50685362000135"
            urlComplementaryList:
              type: string
              pattern: '[\w\W\s]*'
              maxLength: 1024
              description: |
                URL do link que conterá a lista complementar com os nomes e CNPJs agrupados sob o mesmo cnpjNumber. Os contidos nessa lista possuem as mesmas características para produtos e serviços. Endereço eletrônico de acesso ao canal. Será obrigatoriamente preenchido se houver lista complementar com os nomes e CNPJs a ser disponibilizada.
                Restrição: Será obrigatorimente preenchido se houver lista complementar com os nomes e CNPJs a ser disponibilizada
              example: 'https://empresadaorganizacaoa.com/complementarylist'
        type:
          $ref: '#/components/schemas/AccountType'
        fees:
          $ref: '#/components/schemas/AccountFee'
        serviceBundles:
          type: array
          items:
            $ref: '#/components/schemas/PersonalAccountServiceBundle'
          minItems: 1
          maxItems: 200
          description: |
            Lista dos pacotes de serviços de contas com serviços essenciais padronizados e regulados pela Resolução BC 3919, de 25/11/2010

            [Restrição]
            - Obrigatório quando "type" for igual "CONTA_DEPOSITO_A_VISTA" (conta corrente) ou "CONTA_POUPANCA", porque existem hoje pacotes passíveis de cobrança diferentes dos serviços essenciais (que não são cobrados);

            - Opcional quando "type" for igual "CONTA_PAGAMENTO_PRE_PAGA" ficando condicionado caso a instituição tenha pacote de serviço atrelado a este tipo de conta.
        openingClosingChannels:
          type: array
          items:
            $ref: '#/components/schemas/OpeningClosingChannels'
          minItems: 1
          maxItems: 7
          description: Lista dos canais para aberturas e encerramento
        openingClosingChannelsAdditionalInfo:
          type: string
          maxLength: 140
          pattern: '[\w\W\s]*'
          description: |
            Campo livre para preenchimento das informações adicionais referente ao "openingClosingChannels". 

            [Restrição] Obrigatório quando "openingClosingChannels" for igual 'OUTROS'.
          example: Informações adicionais 
        transactionMethods:
          type: array
          items:
            $ref: '#/components/schemas/TransactionMethods'
          minItems: 1
          maxItems: 4
          description: Lista de formas de movimentação
        termsConditions:
          $ref: '#/components/schemas/AccountsTermsConditions'
        incomeRate:
          $ref: '#/components/schemas/AccountsIncomeRate'
    AccountFee:
      type: object
      description: Objeto que reúne informações de tarifas de serviços
      required:
        - priorityServices
      properties:
        priorityServices:
          type: array
          items:
            $ref: '#/components/schemas/AccountPriorityService'
          minItems: 1
          maxItems: 40
          description: Lista das Tarifas cobradas sobre Serviços Prioritários
        otherServices:
          type: array
          items:
            $ref: '#/components/schemas/AccountOtherService'
          minItems: 1
          maxItems: 100
          description: Lista das Tarifas cobradas sobre outros Serviços, que não prioritários
    AccountPriorityService:
      type: object
      required:
        - name
        - code
        - chargingTriggerInfo
        - prices
        - minimum
        - maximum
      properties:
        name:
          $ref: '#/components/schemas/PriorityServiceName'
        code:
          $ref: '#/components/schemas/AccountPriorityServiceCode'
        chargingTriggerInfo:
          type: string
          maxLength: 2000
          pattern: '[\w\W\s]*'
          description: 'Fatos geradores de cobrança que incidem sobre os serviços prioritários, segundo Resolução 3.919 do Bacen, para pessoa natural.'
          example: 'Fornecimento de extrato com a movimentação de um período em guichê de caixa ou por outras formas de atendimento pessoal, tal como atendimento telefônico realizado por atendente.'
        prices:
          type: array
          items:
            $ref: '#/components/schemas/PersonalAccountPriorityServicePrice'
          minItems: 4
          maxItems: 4
          description: Lista distribuição preços tarifas de serviços
        minimum:
          $ref: '#/components/schemas/PriorityServiceMinimumPrice'
        maximum:
          $ref:  "#/components/schemas/PriorityServiceMaximumPrice"
    AccountType:
      type: string
      enum:
        - CONTA_DEPOSITO_A_VISTA
        - CONTA_POUPANCA
        - CONTA_PAGAMENTO_PRE_PAGA
      description: |
        Tipos de contas ofertadas para pessoa natural ou jurídica, p.ex. 'CONTA_DEPOSITO_A_VISTA'.
        Conta de depósito à vista ou Conta corrente - é o tipo mais comum. Nela, o dinheiro fica à sua disposição para ser sacado a qualquer momento. Essa conta não gera rendimentos para o depositante
        Conta poupança - foi criada para estimular as pessoas a pouparem. O dinheiro que ficar na conta por trinta dias passa a gerar rendimentos, com isenção de imposto de renda para quem declara. Ou seja, o dinheiro “cresce” (rende) enquanto ficar guardado na conta. Cada depósito terá rendimentos de mês em mês, sempre no dia do mês em que o dinheiro tiver sido depositado
        Conta de pagamento pré-paga: segundo CIRCULAR Nº 3.680, BCB de  2013, é a 'destinada à execução de transações de pagamento em moeda eletrônica realizadas com base em fundos denominados em reais previamente aportados'
      example: CONTA_DEPOSITO_A_VISTA
    OpeningClosingChannels:
      type: string
      enum:
        - DEPENDENCIAS_PROPRIAS
        - CORRESPONDENTES_BANCARIOS
        - INTERNET_BANKING
        - MOBILE_BANKING
        - CENTRAL_TELEFONICA
        - CHAT
        - OUTROS
      description: Canais disponíveis para abertura e encerramento de contas, p.ex. 'DEPENDENCIAS_PROPRIAS'
      example: DEPENDENCIAS_PROPRIAS
    TransactionMethods:
      type: string
      enum:
        - MOVIMENTACAO_ELETRONICA
        - MOVIMENTACAO_CHEQUE
        - MOVIMENTACAO_CARTAO
        - MOVIMENTACAO_PRESENCIAL
      description: Lista de formas de movimentação possíveis para a conta
      example: MOVIMENTACAO_CARTAO
    PriorityServiceName:
      type: string
      enum:
        - CONFECCAO_CADASTRO_INICIO_RELACIONAMENTO
        - FORNECIMENTO_2_VIA_CARTAO_FUNCAO_DEBITO
        - FORNECIMENTO_2_VIA_CARTAO_FUNCAO_MOVIMENTACAO_CONTA_POUPANCA
        - EXCLUSAO_CADASTRO_EMITENTES_CHEQUES_SEM_FUNDO_CCF
        - CONTRA_ORDEM_REVOGACAO_E_OPOSICAO_OU_SUSTACAO_PAGAMENTO_CHEQUE
        - FORNECIMENTO_FOLHAS_CHEQUE
        - CHEQUE_ADMINISTRATIVO
        - CHEQUE_VISADO
        - SAQUE_CONTA_DEPOSITO_A_VISTA_POUPANCA_PRESENCIAL_OU_PESSOAL
        - SAQUE_CONTA_DEPOSITO_A_VISTA_POUPANCA_TERMINAL_AUTOATENDIMENTO
        - SAQUE_CONTA_DEPOSITO_A_VISTA_POUPANCA_CORRESPONDENTES_PAIS
        - DEPOSITO_IDENTIFICADO
        - FORNECIMENTO_EXTRATO_MENSAL_CONTA_DEPOSITOS_A_VISTA_E_POUPANCA_PRESENCIAL_OU_PESSOAL
        - FORNECIMENTO_EXTRATO_MENSAL_CONTA_DEPOSITOS_A_VISTA_E_POUPANCA_TERMINAL_AUTOATENDIMENTO
        - FORNECIMENTO_EXTRATO_MENSAL_CONTA_DEPOSITOS_A_VISTA_E_POUPANCA_CORRESPONDENTES_PAIS
        - FORNECIMENTO_EXTRATO_DE_UM_PERIODO_CONTA_DEPOSITOS_A_VISTA_E_POUPANCA_PRESENCIAL_OU_PESSOAL
        - FORNECIMENTO_EXTRATO_DE_UM_PERIODO_CONTA_DEPOSITOS_A_VISTA_E_POUPANCA_TERMINAL_AUTOATENDIMENTO
        - FORNECIMENTO_EXTRATO_DE_UM_PERIODO_CONTA_DEPOSITOS_A_VISTA_E_POUPANCA_CORRESPONDENTES_PAIS
        - FORNECIMENTO_COPIA_MICROFILME_MICROFICHA_ASSEMELHADO
        - TRANSFERENCIA_DOC_PESSOAL_OU_PRESENCIAL
        - TRANSFERENCIA_DOC_TERMINAL_AUTOATENDIMENTO_OUTROS_MEIOS_ELETRONICOS
        - TRANSFERENCIA_DOC_INTERNET
        - TRANSFERENCIA_TED_PESSOAL_OU_PRESENCIAL
        - TRANSFERENCIA_TED_TERMINAL_AUTOATENDIMENTO_OUTROS_MEIOS_ELETRONICOS
        - TRANSFERENCIA_TED_INTERNET
        - TRANSFERENCIA_DOC_TED_PESSOAL_OU_PRESENCIAL
        - TRANSFERENCIA_DOC_TED_TERMINAL_AUTOATENDIMENTO_OUTROS_MEIOS_ELETRONICOS
        - TRANSFERENCIA_DOC_TED_INTERNET
        - TRANSFERENCIA_ENTRE_CONTAS_PROPRIA_INSTITUICAO_PESSOAL_OU_PRESENCIAL
        - TRANSFERENCIA_ENTRE_CONTAS_PROPRIA_INSTITUICAO_TERMINAL_AUTOATENDIMENTO_OUTROS_MEIOS_ELETRONICOS_INCLUSIVE_INTERNET
        - ORDEM_PAGAMENTO
        - ANUIDADE_CARTAO_BASICO_NACIONAL
        - ANUIDADE_CARTAO_BASICO_INTERNACIONAL
        - ANUIDADE_DIFERENCIADA
        - UTILIZACAO_CANAIS_ATENDIMENTO_RETIRADA_ESPECIE_BRASIL
        - UTILIZACAO_CANAIS_ATENDIMENTO_RETIRADA_ESPECIE_EXTERIOR
        - AVALIACAO_EMERGENCIAL_CREDITO
        - FORNECIMENTO_SEGUNDA_VIA_FUNCAO_CREDITO
        - PAGAMENTO_CONTAS_UTILIZANDO_FUNCAO_CREDITO
        - SMS
      description: 'Nome dos Serviços prioritários, segundo Resolução 3.919 do Bacen, para pessoa natural.'
      example: TRANSFERENCIA_TED_PESSOAL_OU_PRESENCIAL
    AccountOtherService:
      type: object
      required:
        - name
        - code
        - chargingTriggerInfo
        - prices
        - minimum
        - maximum
      properties:
        name:
          type: string
          maxLength: 250
          pattern: '[\w\W\s]*'
          description: 'Nome do Serviço que incide sobre tipo de conta (Campo Livre)'
          example: Evento personalizado
        code:
          type: string
          maxLength: 100
          pattern: '[\w\W\s]*'
          description: 'Siglas de identificação do Serviço (Campo Livre)'
          example: TALAO_DOMICILIO
        chargingTriggerInfo:
          type: string
          maxLength: 2000
          pattern: '[\w\W\s]*'
          description: Fatos geradores de cobrança que incidem sobre outros serviços para pessoa natural. (Campo Livre)
          example: Cobrança devido a evento personalizado
        prices:
          type: array
          items:
            $ref: "#/components/schemas/PersonalAccountPrice"
          minItems: 4
          maxItems: 4
          description: Lista distribuição preços tarifas de serviços
        minimum:
          $ref: "#/components/schemas/MinimumPrice"
        maximum:
          $ref: "#/components/schemas/MaximumPrice"
    AccountPriorityServiceCode:
      type: string
      description: 'Lista das Siglas de identificação do Serviço Prioritário, segundo Resolução 3.919 do Bacen.'
      enum:
        - CADASTRO
        - 2_VIA_CARTAO_DEBITO
        - 2_VIA_CARTAO_POUPANCA
        - EXCLUSAO_CCF
        - SUSTACAO_REVOGACAO
        - FOLHA_CHEQUE
        - CHEQUE_ADMINISTRATIVO
        - CHEQUE_VISADO
        - SAQUE_PESSOAL
        - SAQUE_TERMINAL
        - SAQUE_CORRESPONDENTE
        - DEPOSITO_IDENTIFICADO
        - EXTRATO_MES_P
        - EXTRATO_MES_E
        - EXTRATO_MES_C
        - EXTRATO_MOVIMENTO_P
        - EXTRATO_MOVIMENTO_E
        - EXTRATO_MOVIMENTO_C
        - MICROFILME
        - DOC_PESSOAL
        - DOC_ELETRONICO
        - DOC_INTERNET
        - TED_PESSOAL
        - TED_ELETRONICO
        - TED_INTERNET
        - DOC_TED_AGENDADO_P
        - DOC_TED_AGENDADO_E
        - DOC_TED_AGENDADO_I
        - TRANSF_RECURSO_P
        - TRANSF_RECURSO_E
        - ORDEM_PAGAMENTO
        - ANUIDADE_NACIONAL
        - ANUIDADE_INTERNACIONAL
        - ANUIDADE_DIFERENCIADA
        - SAQUE_CARTAO_BRASIL
        - SAQUE_CARTAO_EXTERIOR
        - AVALIACAO_EMERGENCIAL_CREDITO
        - EMISSAO_SEGUNDA_VIA
        - TARIFA_PAGAMENTO_CONTAS
        - SMS
    ServiceBundle:
      type: object
      required:
        - name
        - services
        - prices
        - minimum
        - maximum
      properties:
        name:
          type: string
          maxLength: 250
          pattern: '[\w\W\s]*'
          description: Nome do Pacote de Serviços dado pela instituição.
          example: Conta de depósitos à vista Movimentação com cartão (sem cheque)
        services:
          type: array
          maxItems: 100
          items:
            $ref: '#/components/schemas/ServiceBundleServiceDetail'
          minItems: 1
          description: Lista dos serviços que compõe o pacote de serviços
        prices:
          type: array
          items:
            $ref: "#/components/schemas/MonthlyPrice"
          minItems: 4
          maxItems: 4
          description: Lista distribuição preços tarifas de serviços
        minimum:
          $ref:  "#/components/schemas/MinimumPrice"
        maximum:
          $ref:  "#/components/schemas/MaximumPrice"
    PersonalAccountServiceBundle:
      type: object
      required:
        - name
        - services
        - prices
        - minimum
        - maximum
      properties:
        name:
          type: string
          maxLength: 250
          pattern: '[\w\W\s]*'
          description: Nome do Pacote de Serviços dado pela instituição.
          example: Conta de depósitos à vista Movimentação com cartão (sem cheque)
        services:
          type: array
          items:
            $ref: '#/components/schemas/ServiceBundleServiceDetail'
          minItems: 1
          maxItems: 100
          description: Lista dos serviços que compõe o pacote de serviços
        prices:
          type: array
          items:
            $ref: "#/components/schemas/MonthlyPrice"
          minItems: 4
          maxItems: 4
          description: Lista distribuição preços tarifas de serviços
        minimum:
          $ref:  "#/components/schemas/MinimumPrice"
        maximum:
          $ref:  "#/components/schemas/MaximumPrice"
    ServiceBundleServiceDetail:
      type: object
      required:
        - code
        - chargingTriggerInfo
        - eventLimitQuantity
        - freeEventQuantity
      properties:
        code:
          type: string
          maxLength: 100
          pattern: '[\w\W\s]*'
          description: |
            Código que identifica o Serviço que compõe o Pacote de Serviços, podendo ser da lista de Serviços Prioritários ou Outros Serviços. p.ex. segundo Resolução 3.919 do Bacen: 'SAQUE_TERMINAL'.
          example: SAQUE_TERMINAL
        chargingTriggerInfo:
          type: string
          maxLength: 2000
          pattern: '[\w\W\s]*'
          description: |
            Fatos geradores de cobrança que incidem sobre serviço que compõe o Pacote de Serviços.
          example: |
            Realização de pesquisa em serviços de proteção ao crédito, base de dados e informações cadastrais, e tratamento de dados e informações necessários ao início relacionamento decorrente da abertura de conta de depósitos à vista ou de poupança ou contratação de operação de crédito ou de arrendamento mercantil, não podendo ser cobrada cumulativamente
        eventLimitQuantity:
          type: string
          maxLength: 6
          pattern: ^(\d{1,6}){1}$
          description: |
            Segundo Resolução  4196, BCB, de 2013: Quantidade de eventos previstos no Pacote de Serviços (Número de eventos incluídos no mês) p.ex.'2'. No caso de quantidade ilimitada, reportar 999999
          example: '2'
        freeEventQuantity:
          type: string
          maxLength: 6
          pattern: ^(\d{1,6}){1}$
          description: |
            Segundo Resolução  4196, BCB, de 2013: Quantidade de eventos previstos no Pacote de Serviços com isenção de Tarifa.p.ex.'1'  No caso de quantidade ilimitada, reportar 999999
          example: '1'
    AccountsIncomeRate:
      type: object
      properties:
        savingAccount:
          type: string
          maxLength: 2000
          pattern: '[\w\W\s]*'
          description: |
            Descrição da Remuneração especificamente para Conta de Poupança. Deve ser preenchido com a determinação legal vigente. 
            
            [Restrição] Obrigatório quando "type" for igual "CONTA_POUPANCA".
        prepaidPaymentAccount:
          type: string
          maxLength: 2000
          pattern: '[\w\W\s]*'
          description: Campo Livre. Deve explicitar o Percentual em favor do titular da conta de pagamento pré-paga.
          example: '40% Rendimento a.m.'
    ResponseBusinessAccounts:
      type: object
      required:
        - data
        - links
        - meta
      properties:
        data:
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/BusinessData'
        links:
          $ref: '#/components/schemas/Links'
        meta:
          $ref: '#/components/schemas/Meta'
    BusinessData:
      type: object
      required:
        - participant
        - type
        - fees
        - openingClosingChannels
        - transactionMethods
        - termsConditions
      properties:
        participant:
          type: object
          required:
            - brand
            - name
            - cnpjNumber
          properties:
            brand:
              type: string
              maxLength: 80
              pattern: '[\w\W\s]*'
              description: 'Nome da Marca reportada pelo participante do Open Finance. O conceito a que se refere a ''marca'' é em essência uma promessa da empresa em fornecer uma série específica de atributos, benefícios e serviços uniformes aos clientes'
              example: Organização A
            name:
              type: string
              description: Nome da Instituição, pertencente à marca, responsável pela modalidade de Empréstimos. p.ex.'Empresa da Organização A'
              maxLength: 80
              pattern: '[\w\W\s]*'
              example: 'Empresa A1'
            cnpjNumber:
              type: string
              pattern: '^\d{14}$'
              description: CNPJ
              maxLength: 14
              example: "50685362000135"
            urlComplementaryList:
              type: string
              pattern: '[\w\W\s]*'
              maxLength: 1024
              description: |
                URL do link que conterá a lista complementar com os nomes e CNPJs agrupados sob o mesmo cnpjNumber. Os contidos nessa lista possuem as mesmas características para produtos e serviços. Endereço eletrônico de acesso ao canal. Será obrigatoriamente preenchido se houver lista complementar com os nomes e CNPJs a ser disponibilizada.
                Restrição: Será obrigatorimente preenchido se houver lista complementar com os nomes e CNPJs a ser disponibilizada
              example: 'https://empresadaorganizacaoa.com/complementarylist'
        type:
          $ref:  "#/components/schemas/AccountType"
        fees:
          type: object
          description: Objeto que reúne informações de tarifas de serviços
          required:
            - services
          properties:
            services:
              type: array
              maxItems: 200
              items:
                $ref: '#/components/schemas/BusinessAccountsService'
              minItems: 1
              description: Lista das Tarifas cobradas sobre Serviços
        serviceBundles:
          type: array
          maxItems: 100
          items:
            $ref:  "#/components/schemas/ServiceBundle"
          minItems: 1
          description: |
            Lista dos pacotes de serviços de contas com serviços essenciais padronizados e regulados pela Resolução BC 3919, de 25/11/2010

            [Restrição]
            - Obrigatório quando "type" for igual "CONTA_DEPOSITO_A_VISTA" (conta corrente) ou "CONTA_POUPANCA", porque existem hoje pacotes passíveis de cobrança diferentes dos serviços essenciais (que não são cobrados);

            - Opcional quando "type" for igual "CONTA_PAGAMENTO_PRE_PAGA" ficando condicionado caso a instituição tenha pacote de serviço atrelado a este tipo de conta.
        openingClosingChannels:
          type: array
          items:
            $ref: '#/components/schemas/OpeningClosingChannels'
          minItems: 1
          maxItems: 7
          description: Lista dos canais para aberturas e encerramento
        openingClosingChannelsAdditionalInfo:
          type: string
          maxLength: 140
          pattern: '[\w\W\s]*'
          description: |
            Campo livre para preenchimento das informações adicionais referente ao "openingClosingChannels". 

            [Restrição] Obrigatório quando "openingClosingChannels" for igual 'OUTROS'.
          example: Informações adicionais 
        transactionMethods:
          type: array
          items:
            $ref: '#/components/schemas/TransactionMethods'
          minItems: 1
          maxItems: 4
          description: Lista de formas de movimentação
        termsConditions:
          $ref: '#/components/schemas/AccountsTermsConditions'
        incomeRate:
          $ref: '#/components/schemas/AccountsIncomeRate'
    BusinessAccountsService:
      type: object
      required:
        - name
        - code
        - chargingTriggerInfo
        - prices
        - minimum
        - maximum
      properties:
        name:
          type: string
          maxLength: 250
          pattern: '[\w\W\s]*'
          description: 'Nome do Serviço que incide sobre tipo de conta selecionado para pessoa jurídica(Campo Livre)'
          example: Evento personalizado
        code:
          type: string
          maxLength: 100
          pattern: '[\w\W\s]*'
          description: Sigla de identificação de Outros Serviços que incidem sobre os tipos de contas informados.
          example: EVENTO_PERSONALIZADO
        chargingTriggerInfo:
          type: string
          maxLength: 2000
          pattern: '[\w\W\s]*'
          description: Fatos geradores de cobrança que incidem sobre serviço que compõe o Pacote de Serviços.
          example: Cobrança devido a evento personalizado
        prices:
          type: array
          items:
            $ref: '#/components/schemas/Price'
          minItems: 4
          maxItems: 4
          description: Lista distribuição preços tarifas de serviços
        minimum:
          $ref: '#/components/schemas/MinimumPrice'
        maximum:
          $ref: '#/components/schemas/MaximumPrice'
    PriceIntervals:
      type: string
      enum:
        - 1_FAIXA
        - 2_FAIXA
        - 3_FAIXA
        - 4_FAIXA
      description: |
        Segundo Normativa nº 32, BCB, de 2020: Distribuição de frequência relativa dos valores de tarifas cobradas dos clientes, de que trata o § 2º do art. 3º da Circular nº 4.015, de 2020, deve dar-se com base em quatro faixas de igual tamanho, com explicitação dos valores sobre a mediana em cada uma dessas faixas. Informando: 1ª faixa, 2ª faixa, 3ª faixa e 4ª faixa
      example: 1_FAIXA
    PersonalAccountPriceIntervals:
      type: string
      enum:
        - 1_FAIXA
        - 2_FAIXA
        - 3_FAIXA
        - 4_FAIXA
      description: |
        Segundo Normativa nº 32, BCB, de 2020: Distribuição de frequência relativa dos valores de tarifas cobradas dos clientes, de que trata o § 2º do art. 3º da Circular nº 4.015, de 2020, deve dar-se com base em quatro faixas de igual tamanho, com explicitação dos valores sobre a mediana em cada uma dessas faixas. Informando: 1ª faixa, 2ª faixa, 3ª faixa e 4ª faixa
      example: 1_FAIXA
    Price:
      type: object
      required:
        - interval
        - value
        - currency
        - customers
      properties:
        interval:
          $ref: '#/components/schemas/PriceIntervals'
        value:
          type: string
          pattern: '^(\d{1,9}\.\d{2}){1}$'
          maxLength: 12
          x-cds-type: AmountString
          description: |
            Valor da mediana de cada faixa relativa ao serviço ofertado, informado no período, conforme Res nº 32 BCB, 2020. p.ex. '45.00' 
            (representa um valor monetário. p.ex: 1547368.92. Este valor, considerando que a moeda seja BRL, significa R$ 1.547.368,92. 
            O único separador presente deve ser o '.' (ponto) para indicar a casa decimal. Não deve haver separador de milhar).

            Observação: Para efeito de comparação de taxas dos produtos, as instituições participantes, quando não cobram tarifas, 
            devem enviar o valor 0.00 sinalizando que para aquela taxa não há cobrança pelo serviço.
          example: '2000.00'
        currency:
          $ref:  '#/components/schemas/Currency'
        customers:
          $ref: '#/components/schemas/Customer'
    PersonalAccountPrice:
      type: object
      required:
        - interval
        - value
        - currency
        - customers
      properties:
        interval:
          $ref: '#/components/schemas/PersonalAccountPriceIntervals'
        value:
          type: string
          pattern: '^(\d{1,9}\.\d{2}){1}$'
          maxLength: 12
          x-cds-type: AmountString
          description: |
            Valor da mediana de cada faixa relativa ao serviço ofertado, informado no período, conforme Res nº 32 BCB, 2020. p.ex. '45.00' 
            (representa um valor monetário. p.ex: 1547368.92. Este valor, considerando que a moeda seja BRL, significa R$ 1.547.368,92. 
            O único separador presente deve ser o '.' (ponto) para indicar a casa decimal. Não deve haver separador de milhar).

            Observação: Para efeito de comparação de taxas dos produtos, as instituições participantes, quando não cobram tarifas, 
            devem enviar o valor 0.00 sinalizando que para aquela taxa não há cobrança pelo serviço.
          example: '2000.00'
        currency:
          $ref:  '#/components/schemas/Currency'
        customers:
          $ref: '#/components/schemas/Customer'
    PersonalAccountPriorityServicePrice:
      type: object
      required:
        - interval
        - value
        - currency
        - customers
      properties:
        interval:
          $ref: '#/components/schemas/PersonalAccountPriceIntervals'
        value:
          type: string
          pattern: '^(\d{1,9}\.\d{2}){1}$'
          maxLength: 12
          x-cds-type: AmountString
          description: |
            Valor da mediana de cada faixa relativa ao serviço ofertado, informado no período, conforme Res nº 32 BCB, 2020. p.ex. '45.00' (representa um valor monetário. p.ex: 1547368.92. Este valor, considerando que a moeda seja BRL, significa R$ 1.547.368,92. O único separador presente deve ser o '.' (ponto) para indicar a casa decimal. Não deve haver separador de milhar)
          example: '2000.00'
        currency:
          $ref:  '#/components/schemas/Currency'
        customers:
          $ref: '#/components/schemas/Customer'
    MonthlyPrice:
      type: object
      required:
        - interval
        - monthlyFee
        - currency
        - customers
      properties:
        interval:
          $ref: '#/components/schemas/PersonalAccountPriceIntervals'
        monthlyFee:
          type: string
          pattern: '^(\d{1,9}\.\d{2}){1}$'
          maxLength: 12
          x-cds-type: AmountString
          description: |
            Valor da mediana de cada faixa relativa ao serviço ofertado, informado no período, conforme Res nº 32 BCB, 2020. p.ex. ''45.00''
            (representa um valor monetário. p.ex: 1547368.92. Este valor, considerando que a moeda seja BRL, significa R$ 1.547.368,92. 
            O único separador presente deve ser o ''.'' (ponto) para indicar a casa decimal. Não deve haver separador de milhar).

            Observação: Para efeito de comparação de taxas dos produtos, as instituições participantes, quando não cobram tarifas, 
            devem enviar o valor 0.00 sinalizando que para aquela taxa não há cobrança pelo serviço.
          example: '2000.00'
        currency:
          $ref:  "#/components/schemas/Currency"
        customers:
          $ref: '#/components/schemas/Customer'
    MinimumPrice:
      type: object
      required:
        - value
        - currency
      properties:
        value:
          type: string
          pattern: '^(\d{1,9}\.\d{2}){1}$'
          maxLength: 12
          x-cds-type: AmountString
          description: |
            Valor mínimo apurado para a tarifa de serviços sobre a base de clientes no mês de referência.

            Observação: Para efeito de comparação de taxas dos produtos, as instituições participantes, quando não cobram tarifas, 
            devem enviar o valor 0.00 sinalizando que para aquela taxa não há cobrança pelo serviço.
          example: '1350.00'
        currency:
          $ref:  "#/components/schemas/Currency"
    PriorityServiceMinimumPrice:
      type: object
      required:
        - value
        - currency
      properties:
        value:
          type: string
          pattern: '^(\d{1,9}\.\d{2}){1}$'
          maxLength: 12
          x-cds-type: AmountString
          description: Valor mínimo apurado para a tarifa de serviços sobre a base de clientes no mês de referência
          example: '1350.00'
        currency:
          $ref:  "#/components/schemas/Currency"
    MaximumPrice:
      type: object
      required:
        - value
        - currency
      properties:
        value:
          type: string
          pattern: '^(\d{1,9}\.\d{2}){1}$'
          maxLength: 12
          x-cds-type: AmountString
          description: |
            Valor máximo apurado para a tarifa de serviços sobre a base de clientes no mês de referência.

            Observação: Para efeito de comparação de taxas dos produtos, as instituições participantes, quando não cobram tarifas, 
            devem enviar o valor 0.00 sinalizando que para aquela taxa não há cobrança pelo serviço.
          example: '8800.00'
        currency:
          $ref:  "#/components/schemas/Currency"
    PriorityServiceMaximumPrice:
      type: object
      required:
        - value
        - currency
      properties:
        value:
          type: string
          pattern: '^(\d{1,9}\.\d{2}){1}$'
          maxLength: 12
          x-cds-type: AmountString
          description: Valor máximo apurado para a tarifa de serviços sobre a base de clientes no mês de referência
          example: '8800.00'
        currency:
          $ref:  "#/components/schemas/Currency"
    Customer:
      type: object
      required:
        - rate
      properties:
        rate:
          type: string
          description: |
            Percentual de clientes em cada faixa.
          pattern: '^\d{1}\.\d{6}$'
          example: '0.150000'
          minLength: 8
          maxLength: 8
    MinimumBalance:
      type: object
      required:
        - value
        - currency
      properties:
        value:
          type: string
          maxLength: 12
          pattern: '^(\d{1,9}\.\d{2}){1}$'
          description: 'Saldo mínimo exigido nos Termos e condições contratuais, que regem as contas comercializadas.'
          example: '200.00'
        currency:
          $ref:  "#/components/schemas/Currency"
    Currency:
      type: string
      pattern: '^(\w{3}){1}$'
      maxLength: 3
      x-cds-type: CurrencyString
      description: 'Moeda referente ao valor mínimo da Tarifa, segundo modelo ISO-4217'
      example: BRL
    Links:
      type: object
      properties:
        self:
          type: string
          maxLength: 2000
          description: URL da página atualmente requisitada
          pattern: '^(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
          example: 'https://api.banco.com.br/open-banking/opendata-accounts/v1/resource'
        first:
          type: string
          maxLength: 2000
          description: URL da primeira página de registros
          pattern: '^(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
          example: 'https://api.banco.com.br/open-banking/opendata-accounts/v1/resource'
        prev:
          type: string
          maxLength: 2000
          description: URL da página anterior de registros
          pattern: '^(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
        next:
          type: string
          maxLength: 2000
          description: URL da próxima página de registros
          pattern: '^(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
        last:
          type: string
          maxLength: 2000
          description: URL da última página de registros
          pattern: '^(https:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/\/=]*)$'
          example: 'https://api.banco.com.br/open-banking/opendata-accounts/v1/resource'
    Meta:
      type: object
      properties:
        totalRecords:
          type: integer
          description: Total de registros encontrados
          example: 1
        totalPages:
          type: integer
          description: Total de páginas para os registros encontrados
          example: 1
      required:
        - totalRecords
        - totalPages
    ResponseErrorMetaSingle:
      type: object
      required:
        - errors
      properties:
        errors:
          type: array
          minItems: 1
          maxItems: 13
          items:
            type: object
            required:
              - code
              - title
              - detail
            properties:
              code:
                description: Código de erro específico do endpoint
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 255
              title:
                description: Título legível por humanos deste erro específico
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 255
              detail:
                description: Descrição legível por humanos deste erro específico
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 2048
        meta:
          type: object
          description: Meta informações referente à API requisitada.
          required:
            - requestDateTime
          properties:
            requestDateTime:
              description: 'Data e hora da consulta, conforme especificação RFC-3339, formato UTC.'
              type: string
              maxLength: 20
              format: date-time
              example: '2021-05-21T08:30:00Z'
    ResponseError:
      type: object
      required:
        - errors
      properties:
        errors:
          type: array
          minItems: 1
          maxItems: 13
          items:
            type: object
            required:
              - code
              - title
              - detail
            properties:
              code:
                description: Código de erro específico do endpoint
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 255
              title:
                description: Título legível por humanos deste erro específico
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 255
              detail:
                description: Descrição legível por humanos deste erro específico
                type: string
                pattern: '[\w\W\s]*'
                maxLength: 2048
        meta:
          type: object
          description: Meta informações referente à API requisitada.
          required:
            - totalRecords
            - totalPages
          properties:
            totalRecords:
              type: integer
              format: int32
              description: Número total de registros no resultado
              example: 1
            totalPages:
              type: integer
              format: int32
              description: Número total de páginas no resultado
              example: 1
  securitySchemes:
    APIKey1:
      name: API Key
      type: apiKey
      in: query
    APIKey2:
      name: API Key
      type: apiKey
      in: query
  parameters:
    page:
      name: page
      in: query
      description: Número da página que está sendo requisitada (o valor da primeira página é 1).
      schema:
        type: integer
        format: int32
        default: 1
        minimum: 1
        maximum: 2147483647
    pageSize:
      name: page-size
      in: query
      description: Quantidade total de registros por páginas.
      schema:
        type: integer
        format: int32
        default: 25
        minimum: 1
        maximum: 1000
  responses:
    BadRequest:
      description: A requisição foi malformada, omitindo atributos obrigatórios, seja no payload ou através de atributos na URL.
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    NotFound:
      description: O recurso solicitado não existe ou não foi implementado.
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    MethodNotAllowed:
      description: O consumidor tentou acessar o recurso com um método não suportado.
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    TooManyRequests:
      description: A operação foi recusada, pois muitas solicitações foram feitas dentro de um determinado período ou o limite global de requisições concorrentes foi atingido.
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    InternalServerError:
      description: Ocorreu um erro no gateway da API ou no microsserviço.
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    GatewayTimeout:
      description: GATEWAY TIMEOUT - A requisição não foi atendida dentro do tempo limite estabelecido.
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
    SiteIsOverloaded:
      description: O site está sobrecarregado e a operação foi recusada, pois foi atingido o limite máximo de TPS global, neste momento.
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseErrorMetaSingle'
    Default:
      description: '\-'
      content:
        application/json; charset=utf-8:
          schema:
            $ref: '#/components/schemas/ResponseError'
        