> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Criar estorno

> Solicita um estorno para uma transacao PIX concluida. Voce deve fornecer um codigo de motivo de estorno valido do BACEN
(FR01=Fraude, AC03=Conta invalida, AG01=Proibido, MD06=Solicitado pelo recebedor, BE01=Dados inconsistentes, AC07=Conta encerrada).
A transacao original deve estar no status EXECUTED para ser elegivel ao estorno.




## OpenAPI

````yaml pt/openapi/v3-current/pix.yaml POST /v1/refunds
openapi: 3.0.3
info:
  title: Plugin BR Pix Direct - API Completa
  description: >
    API completa para o sistema de pagamentos instantaneos PIX brasileiro,
    incluindo

    operacoes de dicionario de chaves PIX, geracao/decodificacao de QR codes,
    transacoes e

    limites de transacao.
  version: 1.0.0
servers:
  - url: https://plugin-pix-direct.api.lerian.net
  - url: https://plugin-pix-direct-qrcode.api.lerian.net
security:
  - bearerAuth: []
paths:
  /v1/refunds:
    post:
      tags:
        - API de Estornos
      summary: Criar estorno
      description: >
        Solicita um estorno para uma transacao PIX concluida. Voce deve fornecer
        um codigo de motivo de estorno valido do BACEN

        (FR01=Fraude, AC03=Conta invalida, AG01=Proibido, MD06=Solicitado pelo
        recebedor, BE01=Dados inconsistentes, AC07=Conta encerrada).

        A transacao original deve estar no status EXECUTED para ser elegivel ao
        estorno.
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRefundRequest'
            examples:
              fraud_refund:
                summary: Estorno por fraude (codigo FR01)
                value:
                  endToEndId: E12345678202501011200000001
                  accountId: 019c96a0-0c0c-7221-8cf3-13313fb60081
                  transactionId: 019c96a0-10ce-75fc-a273-dc799079a99c
                  code: FR01
                  amount: 100.5
                  description: Fraudulent transaction detected
              receiver_requested_refund:
                summary: Estorno solicitado pelo recebedor (codigo MD06)
                value:
                  endToEndId: E12345678202501011200000002
                  accountId: 019c96a0-0c0c-7221-8cf3-13313fb60081
                  transactionId: 019c96a0-10ce-75fc-a273-dc799079a99c
                  code: MD06
                  amount: 250
                  description: Refund requested by payee
              invalid_account_refund:
                summary: Estorno por conta invalida (codigo AC03)
                value:
                  endToEndId: E12345678202501011200000003
                  accountId: 019c96a0-0c0c-7221-8cf3-13313fb60081
                  transactionId: 019c96a0-10ce-75fc-a273-dc799079a99c
                  code: AC03
                  amount: 75
                  description: Recipient account is invalid
      responses:
        '201':
          description: Estorno criado com sucesso
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RefundResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      description: >-
        Chave de idempotencia opcional para retentativas seguras (padrao IETF).
        Use um UUID v4 ou identificador de negocio unico. Se a mesma chave for
        enviada novamente e a requisicao original ja tiver sido processada, a
        resposta em cache e retornada.


        Consulte [Retentativas e
        idempotencia](/pt/reference/retries-idempotency) para mais detalhes.
      schema:
        type: string
      example: 550e8400-e29b-41d4-a716-446655440000
  schemas:
    CreateRefundRequest:
      type: object
      required:
        - endToEndId
        - accountId
        - transactionId
        - code
        - amount
        - description
      properties:
        endToEndId:
          type: string
          description: Identificador ponta a ponta da transacao original a ser estornada.
          example: E12345678202501011200000001
        accountId:
          type: string
          description: Identificador da conta solicitando o estorno.
          format: uuid
          example: 019c96a0-0c0c-7221-8cf3-13313fb60081
        transactionId:
          type: string
          description: Identificador da transacao original a ser estornada.
          format: uuid
          example: 019c96a0-0a98-7287-9a31-786e0809c769
        code:
          $ref: '#/components/schemas/RefundReasonCodeEnum'
        amount:
          type: number
          description: Valor do estorno (nao deve exceder o valor da transacao original).
          format: double
          example: 100.5
        description:
          type: string
          description: Descricao do motivo do estorno.
          example: Refund requested by receiver
    RefundResponse:
      type: object
      required:
        - id
        - accountId
        - code
        - endToEndId
        - endToEndRefundId
        - amount
        - description
        - status
        - createdAt
      properties:
        id:
          type: string
          description: Identificador unico do estorno.
          example: refund_123456789
        accountId:
          type: string
          description: Identificador da conta associada ao estorno.
          example: acc_123456789
        code:
          $ref: '#/components/schemas/RefundReasonCodeEnum'
        endToEndId:
          type: string
          description: Identificador ponta a ponta da transacao original que foi estornada.
          example: E1234567820230615123456789012345
        endToEndRefundId:
          type: string
          description: Identificador ponta a ponta do estorno.
          example: D1234567820230615987654321098765
        amount:
          type: number
          description: Valor do estorno.
          format: double
          example: 100.5
        description:
          type: string
          description: Descricao do motivo do estorno.
          example: Requested by receiver
        status:
          type: string
          description: Status do estorno.
          example: PENDING
        createdAt:
          type: string
          description: Data e hora de criacao do estorno.
          format: date-time
          example: '2023-06-15T11:00:00Z'
    RefundReasonCodeEnum:
      type: string
      description: >
        Codigos de motivo de estorno conforme definido pelo Banco Central do
        Brasil (BACEN).

        Codigos padronizados utilizados ao solicitar estornos de transacoes.


        **Valores validos:**

        - `FR01` = Fraude (Transacao identificada como fraudulenta)

        - `AC03` = Conta do credor invalida (Conta do destinatario e invalida ou
        nao existe)

        - `AG01` = Transacao proibida (Tipo de transacao nao permitido para esta
        conta)

        - `MD06` = Estorno solicitado pelo recebedor (Beneficiario solicitou o
        estorno)

        - `BE01` = Dados inconsistentes (Dados da transacao contem
        inconsistencias)

        - `AC07` = Conta encerrada (Conta do destinatario foi encerrada)
      enum:
        - FR01
        - AC03
        - AG01
        - MD06
        - BE01
        - AC07
      example: MD06
    ErrorResponse:
      type: object
      properties:
        code:
          type: string
          description: Codigo do erro
        message:
          type: string
          description: Mensagem de erro
        details:
          type: array
          items:
            type: string
          description: Detalhes adicionais do erro
  responses:
    BadRequest:
      description: Requisicao Invalida - Parametros invalidos
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            invalid_key_type:
              summary: Invalid key type
              value:
                code: INVALID_KEY_TYPE
                message: Key type must be between 0 and 4
                details:
                  - 'keyType: must be one of [0, 1, 2, 3, 4]'
            missing_required_field:
              summary: Missing required field
              value:
                code: VALIDATION_ERROR
                message: Required field is missing
                details:
                  - 'accountId: field is required'
            invalid_document_format:
              summary: Invalid document format
              value:
                code: INVALID_DOCUMENT
                message: Document must be valid CPF (11 digits) or CNPJ (14 digits)
                details:
                  - 'document: must match pattern ^\d{11}$|^\d{14}$'
            invalid_phone_format:
              summary: Invalid phone format
              value:
                code: INVALID_PHONE
                message: Phone must be in Brazilian format
                details:
                  - 'phone: must match pattern ^\+55\d{2}\d{8,9}$'
    Unauthorized:
      description: Nao Autorizado - Autenticacao invalida ou ausente
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            missing_token:
              summary: Missing authentication token
              value:
                code: MISSING_TOKEN
                message: Authorization header is required
                details: []
            invalid_token:
              summary: Invalid token
              value:
                code: INVALID_TOKEN
                message: Invalid or expired access token
                details: []
            expired_token:
              summary: Expired token
              value:
                code: TOKEN_EXPIRED
                message: Access token has expired. Please obtain a new token.
                details: []
    InternalServerError:
      description: Erro Interno do Servidor
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            generic_error:
              summary: Generic internal error
              value:
                code: INTERNAL_ERROR
                message: An internal error occurred. Please try again later.
                details: []
            database_error:
              summary: Database error
              value:
                code: DATABASE_ERROR
                message: Database operation failed
                details: []
            external_service_error:
              summary: External service error
              value:
                code: EXTERNAL_SERVICE_ERROR
                message: External service (JD PIX) is temporarily unavailable
                details: []
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >
        Autenticacao por token JWT Bearer. Obtenha o token no endpoint
        `/v1/login/oauth/access_token`

        usando credenciais do cliente (clientId e clientSecret).


        Inclua o token no header Authorization:

        `Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...`


        O token expira apos 3600 segundos (1 hora).

````