> ## 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.

# Create bank transfer return operation

> Gives back, by STR0010 (devolução de transferência indevida), a TED credit this institution received. Prerequisite: the {operationId} path segment names the received credit, an INBOUND bank-transfer operation from STR0004R2..STR0008R2 in status DELIVERED — read it via getOperation (GET /v1/str/operations/{operationId}); any other operation answers SPB-3006. The body carries only the reason (returnCode) and an optional description: the debited and credited ISPBs (this institution, then the credit's sender), the amount (the credit's full amount) and NumCtrlSTROr (the credit's NumCtrlSTR) come from the received credit, and a credit that names another institution as credited is refused. A credit is returned once: a second return while one stands answers 409 (a rejected or failed one leaves the credit returnable). The accepted operation is RETURN_REQUESTED and its protocolMetadata.nuOp is the STR0010's NUOp, the key its STR0010R1 answer and the settlement fact carry; an Efetivado STR0010R1 settles it as its own transfer and closes the operation RETURNED. Above the client's alçada band the frame parks (status PENDING_APPROVAL) and leaves for the STR only when the quorum signs; a denial or expiry ends it without dispatch. Idempotent — the X-Idempotency key lives with the operation: the same key and parsed request (member order and whitespace do not count; any other difference, such as number spelling, null for an absent field, or an unknown member, is another request) answer the stored operation with X-Idempotency-Replayed: true, also after X-TTL has dropped the cached response, and the same key with another request answers 422.



## OpenAPI

````yaml /pt/openapi/v3-current/spb.yaml post /v1/str/operations/bank-transfers/{operationId}/returns
openapi: 3.1.0
info:
  contact:
    email: contact@lerian.studio
    name: Lerian Studio
    url: https://lerian.studio
  description: >-
    OpenAPI 3.1 surface for Lerian SPB, the direct integration between the
    institution and the Brazilian Payment System (SPB) over the National
    Financial System Network (RSFN). It covers the Reserve Transfer System
    (STR): message registry and capability catalog, operation lifecycle (bank
    transfers, IBS repasses, liquidity transfers, returns and cancellations),
    reserve-account and schedule queries, alçada governance, SME and LDL
    operations, inbound quarantine triage, reconciliation, and event delivery.
  license:
    name: Lerian Studio General License
  title: Lerian SPB API
  version: 1.0.0
servers:
  - url: https://api.example.com
    description: >-
      Replace the example host with the URL provided during environment
      onboarding.
security: []
tags:
  - description: Immutable audit-record trails for STR operations and lifecycle events.
    name: Audit
  - description: >-
      STR capability catalog describing supported message types and their
      constraints.
    name: Capabilities
  - description: >-
      ICP-Brasil certificate inventory with hot-reloadable rotation and
      activation.
    name: Certificates
  - description: >-
      STR compulsory-movement (RCO) family: the movements BACEN orders on a
      participant's reserve account, their answers and the periods they belong
      to.
    name: Compulsory
  - description: >-
      Maker-checker approval queue for emissions parked above their alçada band:
      list pending, sign (approve), and deny.
    name: EmissionApprovals
  - description: Operation event catalog enumerating the emitted domain event types.
    name: Events
  - description: >-
      Inbound GEN-family notice log (GEN0001 connectivity echo, GEN0004
      transmission error, GEN0005 administrative notice).
    name: GenNotices
  - description: >-
      SPB alçada governance config: value-band table + per-message-type
      signature requirements, hot-reloaded at runtime.
    name: Governance
  - description: >-
      Read raw STR message status: list messages and read a single message by
      NUOp.
    name: Messages
  - description: Aggregated operational summaries and metrics across STR operations.
    name: OperationalIntelligence
  - description: >-
      STR operation lifecycle for bank transfers and IBS repasses, including
      returns and cancellations.
    name: Operations
  - description: >-
      Service readiness state covering startup self-probes and dependency
      health.
    name: Readiness
  - description: Reconciliation cases and the actions that resolve operation discrepancies.
    name: Reconciliation
  - description: >-
      Redesconto do Banco Central: collateralised intraday and one-business-day
      BCB lending against Selic-registered federal securities. One create door
      derives the nine RDC commands from four operator-facing kinds (contract,
      payment, conversion, cancellation), plus the two consultas over
      eligible-security prices and open positions. An accepted rediscount is not
      necessarily a settled one — Selic may hold the request for want of
      securities, and that middle state is reported as its own.
    name: Rediscounts
  - description: >-
      STR Relatórios suite: synchronous, date-ranged aggregate reports
      (movimento financeiro, transações rejeitadas, volumetria) over Lerian
      SPB's own transmission record.
    name: Reports
  - description: >-
      STR0013 reserve-account balance and STR0014 statement (extrato,
      message-mode) queries and their async results.
    name: ReserveQueries
  - description: >-
      GEN0019 participant responsável roster: full-replacement updates announced
      to BACEN.
    name: Responsibles
  - description: STR operating-window schedule governing when operations may be sent.
    name: Schedule
  - description: >-
      STR0001 single-party schedule queries (consulta de horários do STR) and
      their async STR0001R1 grid results.
    name: ScheduleQueries
  - description: >-
      STR lançamentos (SLB) family: the charges BACEN raises against this
      participant, the payments that settle them, payments to BACEN it never
      demanded, and the entry consultas over them.
    name: SLB
  - description: >-
      Reads over an IEME's conta correspondente a moeda eletrônica (CCME):
      SME0003 statement (extrato) queries and their async SME0003R1 results,
      plus the log of SME0001R2/SME0002R2/SME0004R2 movement advices the STR
      delivered about movements this rail did not command.
    name: SMEQueries
  - description: Runtime SPB configuration settings for the STR integration.
    name: Settings
  - description: >-
      Flow (mandatory order): certificate → readiness → connectivity-test →
      submit. Activate a certificate, confirm the rail reports ready, pass a
      connectivity test, then submit an operation. Each step is its own
      resource; a submit must not be attempted before readiness passes.
    name: onboarding
  - description: >-
      Flow (mandatory order): parent operation SETTLED → return/cancel. A return
      or cancellation is a sub-resource of a settled parent operation; the
      {operationId}/{endToEndID} path segment enforces the parent structurally.
    name: lifecycle
paths:
  /v1/str/operations/bank-transfers/{operationId}/returns:
    post:
      tags:
        - Operations
        - lifecycle
      summary: Create bank transfer return operation
      description: >-
        Gives back, by STR0010 (devolução de transferência indevida), a TED
        credit this institution received. Prerequisite: the {operationId} path
        segment names the received credit, an INBOUND bank-transfer operation
        from STR0004R2..STR0008R2 in status DELIVERED — read it via getOperation
        (GET /v1/str/operations/{operationId}); any other operation answers
        SPB-3006. The body carries only the reason (returnCode) and an optional
        description: the debited and credited ISPBs (this institution, then the
        credit's sender), the amount (the credit's full amount) and NumCtrlSTROr
        (the credit's NumCtrlSTR) come from the received credit, and a credit
        that names another institution as credited is refused. A credit is
        returned once: a second return while one stands answers 409 (a rejected
        or failed one leaves the credit returnable). The accepted operation is
        RETURN_REQUESTED and its protocolMetadata.nuOp is the STR0010's NUOp,
        the key its STR0010R1 answer and the settlement fact carry; an Efetivado
        STR0010R1 settles it as its own transfer and closes the operation
        RETURNED. Above the client's alçada band the frame parks (status
        PENDING_APPROVAL) and leaves for the STR only when the quorum signs; a
        denial or expiry ends it without dispatch. Idempotent — the
        X-Idempotency key lives with the operation: the same key and parsed
        request (member order and whitespace do not count; any other difference,
        such as number spelling, null for an absent field, or an unknown member,
        is another request) answer the stored operation with
        X-Idempotency-Replayed: true, also after X-TTL has dropped the cached
        response, and the same key with another request answers 422.
      operationId: createBankTransferReturnOperation
      parameters:
        - description: Operation UUID of the received TED credit being returned.
          in: path
          name: operationId
          required: true
          schema:
            description: Operation UUID of the received TED credit being returned.
            type: string
        - description: Idempotency key. Required on every mutation.
          in: header
          name: X-Idempotency
          required: true
          schema:
            description: Idempotency key. Required on every mutation.
            type: string
        - description: >-
            Seconds the cached response is kept; it may only shorten
            IDEMPOTENCY_DEFAULT_TTL_SEC. The key itself lives with the
            operation.
          in: header
          name: X-TTL
          schema:
            description: >-
              Seconds the cached response is kept; it may only shorten
              IDEMPOTENCY_DEFAULT_TTL_SEC. The key itself lives with the
              operation.
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateBankTransferReturnRequest'
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperationAcceptedResponse'
          description: Created
          headers:
            X-Idempotency-Replayed:
              schema:
                description: >-
                  true when the X-Idempotency key already holds an operation:
                  the body is that operation and nothing new was sent to the
                  STR.
                type: string
          links:
            prerequisite:
              description: >-
                Lifecycle prerequisite: the operation read by getOperation must
                be a received TED credit (INBOUND, STR0004R2..STR0008R2) in
                status DELIVERED before a return is accepted.
              operationId: getOperation
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Bad Request
        '401':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unauthorized
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Not Found
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Conflict
        '413':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Request Entity Too Large
        '415':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unsupported Media Type
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Unprocessable Entity
        '429':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Too Many Requests
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Internal Server Error
        '503':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Service Unavailable
        '504':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Gateway Timeout
        default:
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Detail'
          description: Error
      security:
        - BearerAuth: []
components:
  schemas:
    CreateBankTransferReturnRequest:
      additionalProperties: false
      properties:
        description:
          description: Optional free-text description of the return (Hist).
          examples:
            - Wrong account
          type: string
        metadata:
          additionalProperties: {}
          description: >-
            Opaque client-side metadata forwarded verbatim to the legacy submit
            DTO; not persisted on the return intent.
          type: object
        returnCode:
          description: >-
            BACEN return reason (CodDevTransf) of the STR0010: one of the codes
            the BACEN dicionário de domínios keeps active, without a leading
            zero (type CodDevTransf, Catálogo v5.13 Vol IV). The retired 10-14,
            78, 79 and 81 are refused.
          enum:
            - '1'
            - '2'
            - '3'
            - '4'
            - '5'
            - '6'
            - '7'
            - '8'
            - '9'
            - '15'
            - '16'
            - '17'
            - '18'
            - '19'
            - '20'
            - '21'
            - '22'
            - '23'
            - '24'
            - '25'
            - '26'
            - '27'
            - '28'
            - '29'
            - '31'
            - '40'
            - '51'
            - '52'
            - '53'
            - '61'
            - '63'
            - '68'
            - '69'
            - '70'
            - '71'
            - '72'
            - '73'
            - '74'
            - '75'
            - '76'
            - '77'
            - '80'
            - '82'
            - '83'
            - '84'
            - '85'
            - '86'
          examples:
            - '1'
          type: string
      required:
        - returnCode
      type: object
    OperationAcceptedResponse:
      additionalProperties: false
      properties:
        acceptedAt:
          description: UTC RFC 3339 timestamp at which the command was accepted.
          examples:
            - '2026-05-06T18:30:00Z'
          format: date-time
          type: string
        capabilityId:
          description: >-
            STR capability identifier resolved for the accepted operation (e.g.
            STR0004).
          examples:
            - STR0004
          type: string
        correlationId:
          description: >-
            Request correlation identifier for tracing the accept across logs
            and traces.
          examples:
            - req-7c8b3a2e-9f1d-4a55-9b8e-1e1234567890
          type: string
        isReplay:
          description: >-
            True when this response replays a prior idempotent accept rather
            than creating a new operation.
          examples:
            - false
          type: boolean
        operationFamily:
          description: >-
            Operation family the accepted command belongs to (e.g.
            bankTransfer).
          enum:
            - bankTransfer
          examples:
            - bankTransfer
          type: string
        operationId:
          description: >-
            Server-assigned operation aggregate UUID used for subsequent status,
            return, and cancellation calls.
          examples:
            - 7c8b3a2e-9f1d-4a55-9b8e-1e1234567890
          format: uuid
          type: string
        protocolMetadata:
          $ref: '#/components/schemas/OperationProtocolMetadata'
          description: >-
            Optional SAFE protocol correlation fields; present once the
            operation is mapped to STR wire identifiers.
        status:
          description: >-
            Current control-plane lifecycle status of the operation; ACCEPTED on
            initial accept.
          enum:
            - ACCEPTED
            - SUBMITTED
            - SENT
            - CONFIRMED
            - REJECTED
            - FAILED
            - PENDING_CONFIGURATION
            - PENDING_RECONCILIATION
            - RETURN_REQUESTED
            - RETURNED
            - CANCEL_REQUESTED
            - CANCELLED
            - RECEIVED
            - DELIVERED
          examples:
            - ACCEPTED
          type: string
      required:
        - operationId
        - operationFamily
        - capabilityId
        - status
        - acceptedAt
        - isReplay
        - correlationId
      type: object
    Detail:
      additionalProperties: false
      properties:
        code:
          description: >-
            Stable, machine-readable domain error code scoped to the emitting
            service (format: <SERVICE>-NNNN).
          type: string
        correlationId:
          description: Request-scoped correlation identifier echoing X-Request-ID.
          examples:
            - req-7a3f9c2e
          type: string
        detail:
          description: >-
            A human-readable explanation specific to this occurrence of the
            problem.
          examples:
            - Property foo is required but is missing.
          type: string
        errors:
          description: Optional list of individual error details
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type:
            - array
            - 'null'
        instance:
          description: >-
            A URI reference that identifies the specific occurrence of the
            problem.
          examples:
            - https://example.com/error-log/abc123
          format: uri
          type: string
        status:
          description: HTTP status code
          examples:
            - 400
          format: int64
          type: integer
        title:
          description: >-
            A short, human-readable summary of the problem type. This value
            should not change between occurrences of the error.
          examples:
            - Bad Request
          type: string
        type:
          default: about:blank
          description: A URI reference to human-readable documentation for the error.
          examples:
            - https://example.com/errors/example
          format: uri
          type: string
        upstream:
          $ref: '#/components/schemas/Upstream'
          description: >-
            RFC 9457 extension member: the error a proxied third-party provider
            reported. Absent unless the emitting service explicitly surfaced
            one.
      required:
        - correlationId
      type: object
    OperationProtocolMetadata:
      additionalProperties: false
      properties:
        controlNumber:
          description: >-
            Control number identifying the message on the SPB network (official
            ControleIF, 1-20 characters); an issued number is an 8-digit
            movement date + a 12-digit sequence.
          examples:
            - '20260506000000000001'
          maxLength: 20
          minLength: 1
          type: string
        emissionApprovalId:
          description: >-
            Set when the alçada band parked this request: its id in GET
            /v1/str/emission-approvals. Only the accepted answer carries it; GET
            never does.
          type: string
        nuOp:
          description: >-
            STR operation number (NUOp), 23 characters: 8-character alphanumeric
            ISPB + 8-digit date + 7-digit sequence.
          examples:
            - '12345678202605060000001'
          maxLength: 23
          minLength: 23
          pattern: ^[0-9A-Z]{8}[0-9]{15}$
          type: string
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Where the error occurred, e.g. 'body.items[3].tags' or
            'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
    Upstream:
      additionalProperties: false
      properties:
        code:
          description: The upstream provider's own error code, verbatim.
          examples:
            - E4001
          type: string
        message:
          description: >-
            The upstream provider's own error message, verbatim (bounded, never
            its raw response body).
          examples:
            - account not found at provider
          type: string
      type: object
  securitySchemes:
    BearerAuth:
      bearerFormat: JWT
      description: JWT bearer token issued by the identity provider.
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.