openapi: 3.0.0 info: title: API Withdrawal - Open Insurance Brasil description: | API de Resgate de Previdência e Capitalização para o Open Insurance Brasil - Fase 3. Não possui segregação entre pessoa natural e pessoa jurídica. ## Permissions necessárias para a API withdrawal Para cada um dos `paths` desta API, além dos escopos (`scopes`) indicados existem `permissions` que deverão ser observadas: ### `/pension/request` - permissions: - POST: **PENSION_WITHDRAWAL_CREATE** ### `/capitalization-title/request` - permissions: - POST: **CAPITALIZATION_TITLE_WITHDRAWAL_CREATE** ## Válidações Semanticas - Entidade não processável - 422 - 1 - `Idempotência:` Valida se há divergência entre chave de idempotência e informações enviadas (ERRO_IDEMPOTENCIA); - 2 - `Demais validações:` Valida itens não explicitamente informados pelo servidor - (NAO_INFORMADO). version: 1.1.1 license: name: Apache 2.0 url: 'https://www.apache.org/licenses/LICENSE-2.0' contact: name: Governança do Open Insurance Brasil – Especificações email: gt-interfaces@openbankingbr.org url: 'https://openinsurance-brasil.github.io/areadesenvolvedor/' servers: - url: 'https://api.seguradora.com.br/open-insurance/withdrawal/v1' description: Servidor de Produção - url: 'https://apih.seguradora.com.br/open-insurance/withdrawal/v1' description: Servidor de Homologação tags: - name: Pension Withdrawal - name: Capitalization Title Withdrawal paths: /pension/request: post: tags: - Pension Withdrawal summary: Enviar os dados de solicitação de Resgate de Previdência operationId: postPensionWithdrawal description: Método para a criação de Resgate de Previdência parameters: - $ref: '#/components/parameters/Authorization' - $ref: '#/components/parameters/xFapiAuthDate' - $ref: '#/components/parameters/xFapiCustomerIpAddress' - $ref: '#/components/parameters/xFapiInteractionId' - $ref: '#/components/parameters/xCustomerUserAgent' requestBody: content: application/json: schema: $ref: '#/components/schemas/CreatePensionWithdrawal' description: Payload para criação de Resgate. required: true responses: '201': $ref: '#/components/responses/201PensionWithdrawalCreated' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '405': $ref: '#/components/responses/MethodNotAllowed' '406': $ref: '#/components/responses/NotAcceptable' '422': $ref: '#/components/responses/UnprocessableEntity' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' default: $ref: '#/components/responses/Default' security: - OpenId: - openid OAuth2Security: - 'consent:consentId' - pension-withdrawal /capitalization-title/request: post: tags: - Capitalization Title Withdrawal summary: Enviar os dados de solicitação de Resgate de Título de Capitalização operationId: postCapitalizationTitleWithdrawal description: Método para a criação de Resgate de Título de Capitalização parameters: - $ref: '#/components/parameters/Authorization' - $ref: '#/components/parameters/xFapiAuthDate' - $ref: '#/components/parameters/xFapiCustomerIpAddress' - $ref: '#/components/parameters/xFapiInteractionId' - $ref: '#/components/parameters/xCustomerUserAgent' - $ref: '#/components/parameters/xIdempotencyKey' requestBody: content: application/json: schema: $ref: '#/components/schemas/RequestCapitalizationTitleWithdrawal' description: Payload para criação de Resgate. required: true responses: '201': $ref: '#/components/responses/CreatedCapitalizationTitleWithdrawal' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '405': $ref: '#/components/responses/MethodNotAllowed' '406': $ref: '#/components/responses/NotAcceptable' '422': $ref: '#/components/responses/UnprocessableEntity' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' default: $ref: '#/components/responses/Default' security: - OpenId: - openid OAuth2Security: - 'consent:consentId' - capitalization-title-withdrawal components: schemas: CreatePensionWithdrawal: type: object required: - data properties: data: type: object description: Objeto contendo dados de resgate. required: - certificateId properties: certificateId: description: Identificador do Certificado (Caso Tipo de Documento Emitido for certificado) type: string maxLength: 60 withdrawalType: description: Tipo de resgate. Obrigatório para Previdência Sobrevivência. type: string enum: [TOTAL, PARCIAL] withdrawalReason: description: Motivo do resgate. Obrigatório para Previdência Sobrevivência. type: string enum: [EMERGENCIAS_DE_SAUDE, APLICACAO_EM_OUTROS_INVESTIMENTOS, INSATISFACAO_COM_A_ENTIDADE, INSATISFACAO_COM_A_RENTABILIDADE_DO_PRODUTO, INSATISFACAO_COM_O_PRODUTO, AQUISICAO_DE_BENS, LIQUIDEZ_FINANCEIRA, REALIZACAO_DO_OBJETIVO_DO_INVESTIMENTO] desiredAmount: description: 'Valor desejado do resgate. Este valor será submetido a análise e pode estar sujeito a alteração. Condicional, caso a opção "2. Parcial" seja selecionada no campo "Tipo de resgate"' allOf: - $ref: '#/components/schemas/AmountDetails' customData: type: object properties: generalWithdrawalInfo: type: array items: $ref: '#/components/schemas/CustomInfoData' generalContractInfo: type: array items: $ref: '#/components/schemas/CustomInfoData' ResponsePensionWithdrawal: type: object required: - data - redirectLink properties: data: type: object description: Objeto contendo dados de resgate. required: - protocolNumber - protocolDateTime - certificateId properties: protocolNumber: description: Protocolo de solicitação do resgate type: string maxLength: 60 protocolDateTime: description: Data de solicitação do resgate type: string maxLength: 2048 format: date-time example: '2021-08-20T08:30:00Z' certificateId: description: Identificador do Certificado (Caso Tipo de Documento Emitido for certificado) type: string maxLength: 60 withdrawalType: description: Tipo de resgate. Obrigatório para Previdência Sobrevivência. type: string enum: [TOTAL, PARCIAL] withdrawalReason: description: Motivo do resgate. Obrigatório para Previdência Sobrevivência. type: string enum: [EMERGENCIAS_DE_SAUDE, APLICACAO_EM_OUTROS_INVESTIMENTOS, INSATISFACAO_COM_A_ENTIDADE, INSATISFACAO_COM_A_RENTABILIDADE_DO_PRODUTO, INSATISFACAO_COM_O_PRODUTO, AQUISICAO_DE_BENS, LIQUIDEZ_FINANCEIRA, REALIZACAO_DO_OBJETIVO_DO_INVESTIMENTO] desiredAmount: description: 'Valor desejado do resgate. Este valor será submetido a análise e pode estar sujeito a alteração. Condicional, caso a opção "2. Parcial" seja selecionada no campo "Tipo de resgate"' allOf: - $ref: '#/components/schemas/AmountDetails' redirectLink: type: string description: 'Link interno para direcionamento para o ambiente da sociedade de capitalização. Não possui restrição, ambiente de direcionamento escolhido a critério da sociedade de capitalização.' allOf: - $ref: "#/components/schemas/LinkInfo" customData: type: object properties: generalWithdrawalInfo: type: array items: $ref: '#/components/schemas/CustomInfoData' generalContractInfo: type: array items: $ref: '#/components/schemas/CustomInfoData' RequestCapitalizationTitleWithdrawal: type: object required: - data properties: data: type: object description: Objeto contendo dados de resgate de capitalização. required: - modality - susepProcessNumber - productInformation - withdrawalInformation properties: modality: type: string description: Modalidade enum: [TRADICIONAL, INSTRUMENTO_GARANTIA, COMPRA_PROGRAMADA, POPULAR, INCENTIVO, FILANTROPIA_PREMIAVEL] susepProcessNumber: description: Número do Processo Susep type: string maxLength: 70 example: "12345" productInformation: $ref: '#/components/schemas/ProductInformationCapitalizationTitleWithdrawal' withdrawalInformation: $ref: '#/components/schemas/WithdrawalInformationCapitalizationTitleWithdrawal' withdrawalCustomData: $ref: '#/components/schemas/WithdrawalCustomData' ProductInformationCapitalizationTitleWithdrawal: type: object description: Objeto contendo dados de Informações do Produto. required: - capitalizationTitleName - planId - titleId - seriesId - termEndDate properties: capitalizationTitleName: type: string description: Nome comercial do produto, pelo qual é identificado nos canais de distribuição e atendimento da sociedade. maxLength: 100 planId: description: Identificação do plano type: string maxLength: 60 titleId: description: Identificação do título de capitalização type: string maxLength: 60 seriesId: description: Identificação da série type: string maxLength: 60 termEndDate: description: Data de fim de vigência do título type: string format: date maxLength: 10 pattern: '^(\d{4})-(1[0-2]|0?[1-9])-(3[01]|[12][0-9]|0?[1-9])$' example: '2022-10-27' WithdrawalInformationCapitalizationTitleWithdrawal: type: object description: Objeto contendo dados de Informações do Resgate. required: - withdrawalReason - withdrawalTotalAmount properties: withdrawalReason: description: Motivo do resgate. type: string enum: [IMPOSSIBILIDADE_DE_PAGAMENTO_DAS_PARCELAS, COMPROMISSOS_PESSOAIS_EMERGENCIAIS, INSATISFACAO_COM_CARACTERISTICAS_DO_PRODUTO, INSATISFACAO_NO_RELACIONAMENTO_COM_SOCIEDADE_CAPITALIZACAO, AQUISICAO_DE_OUTROS_BENS_OU_PRODUTOS, PERDA_DE_INTERESSE, PREFIRO_NAO_RESPONDER, OUTROS] withdrawalReasonOthers: description: Motivo do resgate para 'Outros'. type: string maxLength: 500 withdrawalTotalAmount: description: Valor bruto a resgatar. O pedido de resgate será analisado e o valor será submetido a análise e estará sujeito as alterações (aplicação de impostos, variação de saldos, viabilidade do pedido de resgate, entre outros). Ocorrendo o resgate do título, este será automaticamente cancelado. allOf: - $ref: '#/components/schemas/AmountDetails' ResponseCapitalizationTitleWithdrawal: type: object required: - data - links properties: data: type: object description: Objeto contendo dados de resgate. required: - protocolNumber - protocolDateTime - modality - susepProcessNumber - productInformation - withdrawalInformation - redirectLink properties: protocolNumber: description: Protocolo de solicitação do resgate type: string maxLength: 60 protocolDateTime: description: Data de solicitação do resgate type: string maxLength: 2048 format: date-time example: '2021-08-20T08:30:00Z' modality: type: string description: Modalidade enum: [TRADICIONAL, INSTRUMENTO_GARANTIA, COMPRA_PROGRAMADA, POPULAR, INCENTIVO, FILANTROPIA_PREMIAVEL] susepProcessNumber: description: Número do Processo Susep type: string maxLength: 70 example: "12345" productInformation: $ref: '#/components/schemas/ProductInformationCapitalizationTitleWithdrawal' withdrawalInformation: $ref: '#/components/schemas/WithdrawalInformationCapitalizationTitleWithdrawal' redirectLink: type: string description: 'Link interno para direcionamento para o ambiente da sociedade de capitalização. Não possui restrição, ambiente de direcionamento escolhido a critério da sociedade de capitalização.' allOf: - $ref: "#/components/schemas/LinkInfo" withdrawalCustomData: $ref: '#/components/schemas/WithdrawalCustomData' AmountDetails: type: object required: - amount - currency properties: amount: type: number pattern: '^\d{1,16}\.\d{2}$' example: 2000.00 currency: description: Moeda da Parcela, de acordo com ISO-4217. type: string pattern: '^(\w{3}){1}$' example: BRL WithdrawalCustomData: type: object description: Objeto que agrupa as categorias de dados customizáveis em listas. properties: customerIdentification: type: array description: Lista de campos com informações de Identificação. items: $ref: '#/components/schemas/CustomInfoData' customerQualification: type: array description: Lista de campos com informações de Qualificação. items: $ref: '#/components/schemas/CustomInfoData' relationshipInfo: type: array description: Lista de campos com informações de Relacionamento. items: $ref: '#/components/schemas/CustomInfoData' productInfo: type: array description: Lista de campos com Informações do Produto. items: $ref: '#/components/schemas/CustomInfoData' withdrawalInfo: type: array description: Lista de campos com Informações de Resgate. items: $ref: '#/components/schemas/CustomInfoData' generalSeriesInfo: type: array description: Lista de campos com Dados Gerais da Série. items: $ref: '#/components/schemas/CustomInfoData' CustomInfoData: type: object description: Objeto para identificação dos campos e valores de dados customizáveis. required: - fieldId - value properties: fieldId: type: string pattern: '^[a-zA-Z0-9][a-zA-Z0-9\-]{0,99}$' maxLength: 100 description: Um identificador único usado para identificar o valor transmitido. example: "578-psd-71md6971kjh-2d414" value: description: Valor do campo identificado acima, esse campo pode ser implementado como qualquer tipo de dado (objeto, texto, número, booleano, etc.) additionalProperties: false 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 additionalProperties: false meta: $ref: '#/components/schemas/Meta' 422ResponseErrorCreateWithdrawal: type: object required: - errors properties: errors: type: object minItems: 1 required: - code - title - detail properties: code: type: string enum: - ERRO_IDEMPOTENCIA - NAO_INFORMADO example: 'ERRO_IDEMPOTENCIA' description: 'Código do erro 422 de Entidade não processada.' title: type: string maxLength: 255 pattern: '[\w\W\s*]' example: 'Tentativa de alteração de requisição já processada' description: | - ERRO_ IDEMPOTENCIA: Tentativa de alteração de requisição já processada - NÃO_INFORMADO: Não informada pelo servidor detail: type: string maxLength: 2048 pattern: '[\w\W\s*]' example: 'Tentativa de alteração de requisição já processada' description: | - ERRO_ IDEMPOTENCIA: Tentativa de alteração de requisição já processada - NÃO_INFORMADO: Não informada pelo servidor meta: $ref: '#/components/schemas/Meta' additionalProperties: false XFapiInteractionId: type: string pattern: '^[a-zA-Z0-9][a-zA-Z0-9\-]{0,99}$' maxLength: 100 description: Um UID [RFC4122](https://tools.ietf.org/html/rfc4122) usado como um ID de correlação. Se fornecido, o transmissor deve reproduzir" esse valor no cabeçalho de resposta.' LinkInfo: type: string maxLength: 5000 example: 'https://www.abcseguros.com/withdrawal?id=000123' Meta: type: object description: Meta informações referente à API requisitada. required: - totalRecords - totalPages - requestDateTime 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 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' additionalProperties: false parameters: Authorization: name: Authorization in: header description: Cabeçalho HTTP padrão. Permite que as credenciais sejam fornecidas dependendo do tipo de recurso solicitado required: true schema: type: string pattern: '[\w\W\s]*' maxLength: 2048 xIdempotencyKey: name: x-idempotency-key in: header description: Cabeçalho HTTP personalizado. Identificador de solicitação exclusivo para suportar a idempotência. required: true schema: type: string minLength: 1 maxLength: 40 pattern: ^(?!\s)(.*)(\S)$ xCustomerUserAgent: name: x-customer-user-agent in: header description: Indica o user-agent que o usuário utiliza. required: false schema: type: string pattern: '[\w\W\s]*' minLength: 1 maxLength: 100 xFapiAuthDate: name: x-fapi-auth-date in: header description: "Data em que o usuário logou pela última vez com o receptor. Representada de acordo com a [RFC7231](https://tools.ietf.org/html/rfc7231).Exemplo: Sun, 10 Sep 2017 19:43:31 UTC" required: false schema: type: string pattern: '^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), \d{2} (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{4} \d{2}:\d{2}:\d{2} (GMT|UTC)$' minLength: 29 maxLength: 29 xFapiCustomerIpAddress: name: x-fapi-customer-ip-address in: header description: O endereço IP do usuário se estiver atualmente logado com o receptor. required: false schema: type: string pattern: '[\w\W\s]*' minLength: 1 maxLength: 100 xFapiInteractionId: name: x-fapi-interaction-id in: header description: Um UID [RFC4122](https://tools.ietf.org/html/rfc4122) usado como um ID de correlação. Se fornecido, o transmissor deve reproduzir" esse valor no cabeçalho de resposta.' required: true schema: type: string pattern: '^[a-zA-Z0-9][a-zA-Z0-9\-]{0,99}$' minLength: 1 maxLength: 100 securitySchemes: OpenId: type: openIdConnect openIdConnectUrl: 'https://auth.mockbank.poc.raidiam.io/.well-known/openid-configuration' OAuth2Security: type: oauth2 description: Fluxo OAuth necessário para que a receptora tenha acesso aos dados na instituição transmissora. Inclui o processo de redirecionamento e autenticação do usuário a que se referem os dados. flows: authorizationCode: authorizationUrl: 'https://authserver.example/authorization' tokenUrl: 'https://authserver.example/token' scopes: withdrawal-pension: Escopo necessário para acesso à API Withdrawal - Previdência. withdrawal-capitalization-title: Escopo necessário para acesso à API Withdrawal- Capitalização. 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' Forbidden: description: O token tem escopo incorreto ou uma política de segurança foi violada 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' 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' NotAcceptable: description: A solicitação continha um cabeçalho Accept diferente dos tipos de mídia permitidos ou um conjunto de caracteres diferente de UTF-8 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' UnprocessableEntity: description: O servidor entende o tipo de conteúdo da entidade da requisição, e a sintaxe da requisição esta correta, mas não foi possível processar as instruções presentes. Seguir as orientações presentes na descrição deste endpoint. content: application/json; charset=utf-8: schema: $ref: '#/components/schemas/422ResponseErrorCreateWithdrawal' 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' Unauthorized: description: Cabeçalho de autenticação ausente/inválido ou token inválido content: application/json; charset=utf-8: schema: $ref: '#/components/schemas/ResponseError' Default: description: Erro inesperado. content: application/json; charset=utf-8: schema: $ref: '#/components/schemas/ResponseError' 201PensionWithdrawalCreated: description: Solicitação de Resgate enviado com sucesso headers: x-fapi-interaction-id: schema: $ref: '#/components/schemas/XFapiInteractionId' content: application/json: schema: $ref: '#/components/schemas/ResponsePensionWithdrawal' CreatedCapitalizationTitleWithdrawal: description: Solicitação de Resgate de Título de Capitalização enviado com sucesso headers: x-fapi-interaction-id: schema: $ref: '#/components/schemas/XFapiInteractionId' content: application/json: schema: $ref: '#/components/schemas/ResponseCapitalizationTitleWithdrawal' x-internal: false