Bridge Transfers API

The Transfers API from Bridge — 5 operation(s) for transfers.

OpenAPI Specification

bridge-transfers-api-openapi.yml Raw ↑
openapi: 3.0.2
info:
  title: Bridge API Keys Transfers API
  description: APIs to move into, out of, and between any form of a dollar
  version: '1'
servers:
- url: https://api.bridge.xyz/v0
  description: The base path for all resources
security:
- ApiKey: []
tags:
- name: Transfers
paths:
  /transfers:
    get:
      summary: Get all transfers
      tags:
      - Transfers
      parameters:
      - $ref: '#/components/parameters/LimitParameter'
      - $ref: '#/components/parameters/TransferStartingAfterParameter'
      - $ref: '#/components/parameters/TransferEndingBeforeParameter'
      - $ref: '#/components/parameters/TxHashParameter'
      - $ref: '#/components/parameters/UpdatedAfterMsParameter'
      - $ref: '#/components/parameters/UpdatedBeforeMsParameter'
      - $ref: '#/components/parameters/TemplateIDParameter'
      - $ref: '#/components/parameters/TransferStateParameter'
      responses:
        '200':
          description: List of transfers (the returned list is empty if none found)
          content:
            application/json:
              schema:
                title: Transfers
                type: object
                required:
                - count
                - data
                properties:
                  count:
                    type: integer
                    description: The number of transfers returned
                  data:
                    type: array
                    minItems: 0
                    items:
                      $ref: '#/components/schemas/TransferResponse'
              examples:
                TransfersFound:
                  summary: A non-empty list of transfers
                  value:
                    count: 2
                    data:
                    - $ref: '#/components/examples/AchOnrampFundsReceivedTransferResponse'
                    - $ref: '#/components/examples/AchOfframpTransferResponse'
                NoTransfersFound:
                  summary: An empty list of transfers
                  value:
                    count: 0
                    data: []
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    post:
      summary: Create a transfer
      description: 'Create a transfer.


        If this transfer cannot be created because the funding source is temporarily busy processing another update, this endpoint may return `409 resource_state_conflict`.

        This is a transient, retryable response. You may safely retry the same request with the same `Idempotency-Key`.

        '
      tags:
      - Transfers
      parameters:
      - $ref: '#/components/parameters/IdempotencyKeyParameter'
      requestBody:
        description: Transfer object to be created
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransferRequest'
      responses:
        '201':
          description: Transfer object created
          content:
            application/json:
              schema:
                oneOf:
                - $ref: '#/components/schemas/TransferResponse'
                - $ref: '#/components/schemas/TransferRouteResponse'
              examples:
                AchOnrampTransferResponse:
                  $ref: '#/components/examples/AchOnrampTransferResponse'
                AchOfframpTransferResponse:
                  $ref: '#/components/examples/AchOfframpTransferResponse'
                AchOfframpWithMemoTransferResponse:
                  $ref: '#/components/examples/AchOfframpWithMemoTransferResponse'
                WireOnrampTransferResponse:
                  $ref: '#/components/examples/WireOnrampTransferResponse'
                WireOfframpTransferResponse:
                  $ref: '#/components/examples/WireOfframpTransferResponse'
                SepaOnrampTransferResponse:
                  $ref: '#/components/examples/SepaOnrampTransferResponse'
                SepaOfframpTransferResponse:
                  $ref: '#/components/examples/SepaOfframpTransferResponse'
                PixOnrampTransferResponse:
                  $ref: '#/components/examples/PixOnrampTransferResponse'
                PixOfframpTransferResponse:
                  $ref: '#/components/examples/PixOfframpTransferResponse'
                SpeiOnrampTransferResponse:
                  $ref: '#/components/examples/SpeiOnrampTransferResponse'
                SpeiOfframpTransferResponse:
                  $ref: '#/components/examples/SpeiOfframpTransferResponse'
                BreBOnrampTransferResponse:
                  $ref: '#/components/examples/BreBOnrampTransferResponse'
                BreBOfframpTransferResponse:
                  $ref: '#/components/examples/BreBOfframpTransferResponse'
                CoBankTransferOnrampTransferResponse:
                  $ref: '#/components/examples/CoBankTransferOnrampTransferResponse'
                CoBankTransferOfframpTransferResponse:
                  $ref: '#/components/examples/CoBankTransferOfframpTransferResponse'
                ValidTransferRouteResponse:
                  $ref: '#/components/examples/ValidTransferRouteResponse'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '409':
          $ref: '#/components/responses/ResourceStateConflictError'
        '403':
          $ref: '#/components/responses/TransferAmlError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /transfers/pending:
    get:
      summary: List transfers with pending USDT trades
      description: 'Returns transfers that have a stuck USDT-to-USD trade awaiting execution. Results are sorted by creation time (newest first) and paginated.


        Use `POST /transfers/{transferID}/execute` to force-execute a pending trade at the current market rate.

        '
      tags:
      - Transfers
      parameters:
      - $ref: '#/components/parameters/LimitParameter'
      - $ref: '#/components/parameters/TransferStartingAfterParameter'
      - $ref: '#/components/parameters/TransferEndingBeforeParameter'
      responses:
        '200':
          description: List of transfers with pending trades (the returned list is empty if none found)
          content:
            application/json:
              schema:
                title: PendingTransfers
                type: object
                required:
                - count
                - data
                properties:
                  count:
                    type: integer
                    description: The number of transfers returned
                  data:
                    type: array
                    minItems: 0
                    items:
                      $ref: '#/components/schemas/TransferResponse'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /transfers/{transferID}:
    parameters:
    - $ref: '#/components/parameters/TransferIDParameter'
    get:
      summary: Get a transfer
      description: Retrieve a transfer object from the passed in transfer ID
      tags:
      - Transfers
      responses:
        '200':
          description: Successful transfer object response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransferResponse'
              examples:
                AchOnrampTransferResponse:
                  $ref: '#/components/examples/AchOnrampTransferResponse'
                AchOfframpTransferResponse:
                  $ref: '#/components/examples/AchOfframpTransferResponse'
                AchOfframpWithMemoTransferResponse:
                  $ref: '#/components/examples/AchOfframpWithMemoTransferResponse'
                WireOnrampTransferResponse:
                  $ref: '#/components/examples/WireOnrampTransferResponse'
                WireOfframpTransferResponse:
                  $ref: '#/components/examples/WireOfframpTransferResponse'
                SepaOnrampTransferResponse:
                  $ref: '#/components/examples/SepaOnrampTransferResponse'
                SepaOfframpTransferResponse:
                  $ref: '#/components/examples/SepaOfframpTransferResponse'
                PixOnrampTransferResponse:
                  $ref: '#/components/examples/PixOnrampTransferResponse'
                PixOfframpTransferResponse:
                  $ref: '#/components/examples/PixOfframpTransferResponse'
                SpeiOnrampTransferResponse:
                  $ref: '#/components/examples/SpeiOnrampTransferResponse'
                SpeiOfframpTransferResponse:
                  $ref: '#/components/examples/SpeiOfframpTransferResponse'
                BreBOnrampTransferResponse:
                  $ref: '#/components/examples/BreBOnrampTransferResponse'
                BreBOfframpTransferResponse:
                  $ref: '#/components/examples/BreBOfframpTransferResponse'
                CoBankTransferOnrampTransferResponse:
                  $ref: '#/components/examples/CoBankTransferOnrampTransferResponse'
                CoBankTransferOfframpTransferResponse:
                  $ref: '#/components/examples/CoBankTransferOfframpTransferResponse'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    put:
      summary: Update a transfer
      description: Update a transfer that was previously created. Must be in the awaiting_funds state.
      tags:
      - Transfers
      requestBody:
        description: Transfer object to be updated
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransferUpdateRequest'
      responses:
        '201':
          description: Transfer object created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransferResponse'
              examples:
                AchOnrampTransferResponse:
                  $ref: '#/components/examples/AchOnrampTransferResponse'
                AchOfframpTransferResponse:
                  $ref: '#/components/examples/AchOfframpTransferResponse'
                AchOfframpWithMemoTransferResponse:
                  $ref: '#/components/examples/AchOfframpWithMemoTransferResponse'
                WireOnrampTransferResponse:
                  $ref: '#/components/examples/WireOnrampTransferResponse'
                WireOfframpTransferResponse:
                  $ref: '#/components/examples/WireOfframpTransferResponse'
                SepaOnrampTransferResponse:
                  $ref: '#/components/examples/SepaOnrampTransferResponse'
                SepaOfframpTransferResponse:
                  $ref: '#/components/examples/SepaOfframpTransferResponse'
                PixOnrampTransferResponse:
                  $ref: '#/components/examples/PixOnrampTransferResponse'
                PixOfframpTransferResponse:
                  $ref: '#/components/examples/PixOfframpTransferResponse'
                SpeiOnrampTransferResponse:
                  $ref: '#/components/examples/SpeiOnrampTransferResponse'
                SpeiOfframpTransferResponse:
                  $ref: '#/components/examples/SpeiOfframpTransferResponse'
                BreBOnrampTransferResponse:
                  $ref: '#/components/examples/BreBOnrampTransferResponse'
                BreBOfframpTransferResponse:
                  $ref: '#/components/examples/BreBOfframpTransferResponse'
                CoBankTransferOnrampTransferResponse:
                  $ref: '#/components/examples/CoBankTransferOnrampTransferResponse'
                CoBankTransferOfframpTransferResponse:
                  $ref: '#/components/examples/CoBankTransferOfframpTransferResponse'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '403':
          $ref: '#/components/responses/TransferAmlError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    delete:
      summary: Delete a transfer
      description: Delete a transfer that was previously created. Must be in the awaiting_funds state.
      tags:
      - Transfers
      responses:
        '200':
          description: Successful deletion of transfer
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /transfers/{transferID}/execute:
    parameters:
    - $ref: '#/components/parameters/TransferIDParameter'
    post:
      summary: Execute a pending USDT trade on a transfer
      description: 'Force-executes a stuck USDT-to-USD trade at the current market rate. The transfer must have a pending trade (i.e. appear in `GET /transfers/pending`).


        After execution, the transfer will continue processing normally with the executed market rate.

        '
      tags:
      - Transfers
      parameters:
      - $ref: '#/components/parameters/IdempotencyKeyParameter'
      responses:
        '200':
          description: Transfer with trade execute at market rate enabled successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransferResponse'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /transfers/static_templates:
    get:
      summary: Get all static templates
      tags:
      - Transfers
      parameters:
      - $ref: '#/components/parameters/LimitParameter'
      - $ref: '#/components/parameters/TransferStartingAfterParameter'
      - $ref: '#/components/parameters/TransferEndingBeforeParameter'
      responses:
        '200':
          description: List of static templates (the returned list is empty if none found). Static templates are transfers that are used as templates for other transfers and can be created using the static_templates feature flag.
          content:
            application/json:
              schema:
                title: Static Templates
                type: object
                required:
                - count
                - data
                properties:
                  count:
                    type: integer
                    description: The number of static templates returned
                  data:
                    type: array
                    minItems: 0
                    items:
                      $ref: '#/components/schemas/TransferResponse'
              examples:
                TransfersFound:
                  summary: A non-empty list of static templates
                  value:
                    count: 2
                    data:
                    - $ref: '#/components/examples/AchOnrampFundsReceivedTransferResponse'
                    - $ref: '#/components/examples/AchOfframpTransferResponse'
                NoTransfersFound:
                  summary: An empty list of static templates
                  value:
                    count: 0
                    data: []
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
components:
  responses:
    AuthenticationError:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            MissingTokenError:
              summary: No Api-Key header
              description: The header may be missing or misspelled.
              value:
                code: required
                location: header
                name: Api-Key
                message: Missing Api-Key header
            InvalidTokenError:
              summary: Invalid key in Api-Key header
              value:
                code: invalid
                location: header
                name: Api-Key
                message: Invalid Api-Key header
    NotFoundError:
      description: No resource found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            NotFoundErrorExample:
              summary: Invalid customer id
              value:
                code: Invalid
                message: Unknown customer id
    UnexpectedError:
      description: Unexpected error. User may try and send the request again.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            UnexpectedError:
              summary: An unexpected error
              value:
                errors:
                - code: unexpected
                  message: An expected error occurred, you may try again later
    ResourceStateConflictError:
      description: The requested resource is temporarily in a conflicting state. Retry the same request later with the same idempotency key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            ResourceStateConflictErrorExample:
              summary: Balance lock contention while creating a transfer
              value:
                code: resource_state_conflict
                message: Another transfer or balance update is currently in progress for this funding source. Please retry this request.
    TransferAmlError:
      description: The transfer has failed due to an AML violation (anti-money laundering).  Reach out to Bridge for more information
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            TransferAmlErrorExample:
              summary: An AML violation error response
              value:
                code: aml_violation
                message: Failed AML Screening
    BadRequestError:
      description: Request containing missing or invalid parameters.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            BadCustomerRequestErrorExample:
              summary: Bad customer request
              value:
                code: bad_customer_request
                message: fields missing from customer body.
                name: first_name,ssn
  schemas:
    TravelRuleIsSelf:
      type: boolean
      description: Set to `true` when this party is the same person or business as the Bridge customer on the resource. When `true`, Bridge uses the customer's name and address on file instead of relying on `name` and `address` in this payload.
    ExchangeDetails:
      description: Exchange information for a currency conversion.
      properties:
        fixed_rate:
          description: The target exchange rate.
          type: string
        estimated_market_rate:
          description: The estimated achievable rate based on current market conditions.
          type: string
        traded_market_rate:
          description: The actual effective exchange rate achieved.
          type: string
        trade_at_market:
          description: Whether market-rate execution has been applied to this trade.
          type: boolean
        updated_at:
          description: Timestamp of the last exchange details update.
          type: string
          format: date-time
    client_reference_id:
      description: A client-provided reference ID that uniquely identifies a resource in the client's system
      type: string
      minLength: 1
      maxLength: 256
    TravelRuleOriginator:
      type: object
      description: Travel Rule details for originator crypto movement.
      properties:
        is_self:
          $ref: '#/components/schemas/TravelRuleIsSelf'
        name:
          $ref: '#/components/schemas/TravelRuleName'
        address:
          description: Mailing or legal address of the originator. Usually omitted when `is_self` is `true`.
          allOf:
          - $ref: '#/components/schemas/TravelRuleAddress'
        wallet_type:
          $ref: '#/components/schemas/TravelRuleWalletType'
        wallet_attested_ownership_at:
          $ref: '#/components/schemas/TravelRuleWalletAttestedOwnershipAt'
        identifying_information:
          allOf:
          - $ref: '#/components/schemas/IdentifyingInformation'
          description: 'List of identification objects for the originator. Do **not** include `image_front` or `image_back` fields in this context; those are not accepted in Travel Rule submissions.

            '
        birth_date:
          type: string
          description: Date of birth in format yyyy-mm-dd.
          minLength: 10
          maxLength: 10
        place_of_birth:
          $ref: '#/components/schemas/PlaceOfBirthInput'
        legal_entity_identifier:
          type: string
          description: The Legal Entity Identifier (LEI) or equivalent (e.g. VAT number) of the originator. Provide this when the originator is a legal entity rather than an individual.
    TransferInitiationAuthFactor:
      type: object
      required:
      - category
      - authenticated_at
      - reference
      properties:
        category:
          description: 'The type of authentication factor used. Must be one of: `knowledge` (something only the user knows, e.g. a PIN or password), `possession` (something only the user has, e.g. a phone receiving an OTP or a hardware token), or `inherence` (something the user is, e.g. a fingerprint or face scan). When `outcome` is `sca_used`, the two factors in `auth_factors` must belong to two different categories.'
          type: string
          enum:
          - knowledge
          - possession
          - inherence
        authenticated_at:
          description: The ISO 8601 timestamp when this factor was authenticated.
          type: string
          format: date-time
        reference:
          description: Your internal identifier for this authentication event (e.g. a session ID, transaction ID, or audit log reference). Used for reconciliation; Bridge does not validate its format.
          type: string
    TransferRouteResponse:
      required:
      - state
      - notes
      properties:
        state:
          type: string
          enum:
          - valid
          - invalid
        notes:
          type: array
          items:
            type: string
    TransferSourcePaymentRail:
      type: string
      enum:
      - ach
      - wire
      - ach_push
      - ach_same_day
      - fednow
      - arbitrum
      - avalanche_c_chain
      - base
      - bre_b
      - co_bank_transfer
      - bridge_wallet
      - celo
      - ethereum
      - faster_payments
      - optimism
      - pix
      - polygon
      - sepa
      - solana
      - spei
      - stellar
      - swift
      - tempo
      - tron
    ReturnInstructions:
      description: Optional instructions for where to send funds if the transfer is returned (e.g. refund). Only supported when the source payment rail is crypto. Memo is required when the source payment rail is Stellar.
      type: object
      required:
      - address
      properties:
        address:
          description: The crypto wallet address to send returned funds to. Must be valid for the source payment rail's chain.
          type: string
        memo:
          description: Memo to include with the return transaction. Required when the source payment rail is Stellar; optional for other memo-capable chains.
          type: string
    CoBankTransferDocumentType:
      description: 'Colombian document type identifier. `cc` = Cédula de Ciudadanía, `ce` = Cédula de Extranjería, `nit` = NIT (tax ID), `rut` = RUT (worker registration), `pa` = Passport, `ppt` = Permiso de Protección Temporal.

        '
      type: string
      enum:
      - cc
      - ce
      - nit
      - rut
      - pa
      - ppt
      - ti
      - rc
      - te
      - die
      - nd
    TransferDestination:
      required:
      - currency
      - payment_rail
      properties:
        currency:
          description: When `eur` is specified as the destination currency, the destination rail must be `sepa`.
          $ref: '#/components/schemas/EuroInclusiveCurrency'
        payment_rail:
          description: When `sepa` is specified as the destination payment rail, the destination currency must be `eur`; when `swift` is specified as the destination payment rail, the destination currency must be `usd`.
          $ref: '#/components/schemas/SepaSwiftInclusiveOfframpPaymentRail'
        external_account_id:
          description: External bank account Bridge should send the funds to. The currency associated with the External Account must match the destination currency.
          $ref: '#/components/schemas/Id'
        bridge_wallet_id:
          description: The Bridge Wallet to which Bridge will send the funds. The chain associated with the Bridge Wallet must match the destination payment rail.
          $ref: '#/components/schemas/Id'
        omad:
          $ref: '#/components/schemas/Omad'
          readOnly: true
        imad:
          $ref: '#/components/schemas/Imad'
          readOnly: true
        trace_number:
          $ref: '#/components/schemas/TraceNumber'
          readOnly: true
        end_to_end_id:
          $ref: '#/components/schemas/EndToEndId'
          readOnly: true
        wire_message:
          $ref: '#/components/schemas/WireMessage'
        sepa_reference:
          $ref: '#/components/schemas/SepaReference'
        swift_reference:
          $ref: '#/components/schemas/SwiftReference'
        spei_reference:
          $ref: '#/components/schemas/SpeiReference'
        reference:
          $ref: '#/components/schemas/Reference'
        swift_charges:
          description: '**Deprecated**: prefer `charge_bearer`; this field will be removed in a future release. In responses, this field always mirrors `charge_bearer`. Sending both `swift_charges` and `charge_bearer` with conflicting values on a request is rejected.


            Which party will bear the charges for the SWIFT transaction. When left blank, `sha` will be used as the default.

            '
          deprecated: true
          $ref: '#/components/schemas/SwiftCharges'
        charge_bearer:
          description: Which party bears the charges for the SWIFT transaction. Defaults to `sha` when not specified. Replaces the deprecated `swift_charges` field; accepted on both request and response.
          $ref: '#/components/schemas/ChargeBearer'
        ach_reference:
          $ref: '#/components/schemas/AchReference'
        uetr:
          $ref: '#/components/schemas/Uetr'
        blockchain_memo:
          type: string
          description: The memo to include when sending funds on chain. Only allowed for blockchains that support memos such as Stellar
        deposit_id:
          $ref: '#/components/schemas/DepositId'
        tracking_number:
          $ref: '#/components/schemas/TrackingNumber'
          readOnly: true
        transaction_id:
          $ref: '#/components/schemas/TransactionId'
          readOnly: true
        sending_institution_name:
          description: The name of the institution sending the funds
          type: string
          readOnly: true
    TransactionId:
      description: 'Deprecated: use tracking_number instead. The unique transaction identifier for this payment.'
      type: string
      deprecated: true
    PaymentRail:
      type: string
      enum:
      - ach
      - wire
      - ach_push
      - ach_same_day
      - arbitrum
      - avalanche_c_chain
      - base
      - bre_b
      - co_bank_transfer
      - celo
      - ethereum
      - optimism
      - pix
      - polygon
      - solana
      - spei
      - stellar
      - tempo
    TransferState:
      type: string
      enum:
      - awaiting_funds
      - in_review
      - funds_received
      - payment_submitted
      - payment_processed
      - canceled
      - undeliverable
      - returned
      - refund_in_flight
      - refund_failed
      - refunded
    Clabe:
      description: The 18-digit CLABE (Clave Bancaria Estandarizada) of the sender who initiated this SPEI transaction
      type: string
      pattern: ^[0-9]+$
      minLength: 18
      maxLength: 18
    TravelRuleWalletType:
      type: string
      description: Indicates the custody model for the wallet. Use `self_custodied` for customer-owned wallets (customer controls private keys), `hosted` for wallets managed by a developer or regulated entity on behalf of the customer, or `external` for wallets belonging to external exchanges or smart contracts.
      enum:
      - hosted
      - external
      - self_custodied
    TrackingNumber:
      description: The primary tracking identifier for this fiat transaction. Format varies by payment rail (e.g., UETR for SEPA/FPS, clave de rastreo for SPEI, end-to-end ID for PIX).
      type: string
      readOnly: true
    PixReference:
      title: Pix
      type: string
      minLength: 1
      maxLength: 100
    TransferInitiationSca:
      type: object
      required:
      - outcome
      properties:
        outcome:
          description: 'Whether Strong Customer Authentication (SCA) was applied or which regulatory exemption or non-applicability reason covers this payment. Use `sca_used` when the user authenticated with SCA. Otherwise, choose the value that applies: `payment_to_self` — payer and payee are the same person (remote only); `trusted_beneficiaries` — payee is on the user''s pre-approved list; `recurring_transaction` — amount and payee match a previously SCA-authorized recurring series; `contactless_low_value` — contactless card payment below the low-value threshold (non-remote only); `unattended_terminal_for_transport` — automated terminal for transport fares or parking (non-remote only); `low_value` — remote payment below the low-value threshold (remote only); `secure_corporate_payment` — dedicated corporate payment process with controls equivalent to SCA (remote only); `transaction_risk_analysis` — PSP has performed real-time risk analysis and the transaction falls within permitted thresholds (remote only); `merchant_initiated_transaction` — payment triggered by the merchant without the payer present, on a pre-authorized mandate (remote only); `not_applicable` — this flow requires initiation context but SCA and SCA exemptions do not apply; `other` — another recognized exemption not listed above.'
          type: string
          enum:
          - sca_used
          - payment_to_self
          - trusted_beneficiaries
          - recurring_transaction
          - contactless_low_value
          - unattended_terminal_for_transport
          - low_value
          - secure_corporate_payment
          - transaction_risk_analysis
          - merchant_initiated_transaction
          - not_applicable
          - other
        auth_factors:
          description: Authentication factor metadata. Optional when `outcome` is `sca_used`; if provided, it must contain at least two entries from different `category` values (e.g. one `possession` factor and one `knowledge` factor). Omit this field for any other outcome.
          type: array
          minItems: 2
          items:
            $ref: '#/components/schemas/TransferInitiationAuthFactor'
    EndToEndId:
      description: The end-to-end ID of the FedNow transaction, assigned by the sending bank, and is not guaranteed to be unique across payments.
      type: string
    TransferResponse:
      required:
      - id
      - amount
      - developer_fee
      - currency
      - on_behalf_of
      - source
      - destination
      - state
      - receipt
      - created_at
      - updated_at
      properties:
        id:
          $ref: '#/components/schemas/Id'
          readOnly: true
        client_reference_id:
          $ref: '#/components/schemas/client_reference_id'
        amount:
          description: 'Amount of the transfer

# --- truncated at 32 KB (101 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/bridge/refs/heads/main/openapi/bridge-transfers-api-openapi.yml