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

# Initiate an Orchestrator transfer.

> Create a transfer with Orchestrator helper.



## OpenAPI

````yaml Flutterwave_v4_Open_API.json post /direct-transfers
openapi: 3.1.0
info:
  version: '1.0'
  title: Flutterwave APIs
  description: APIs for Enterprise Customers
  contact:
    name: Flutterwave
    email: hi@flutterwavego.com
servers:
  - url: https://developersandbox-api.flutterwave.com
    description: Dev server
security:
  - bearerAuth: []
paths:
  /direct-transfers:
    post:
      tags:
        - Transfers
      summary: Initiate an Orchestrator transfer.
      description: Create a transfer with Orchestrator helper.
      operationId: direct_transfers_post
      parameters:
        - $ref: '#/components/parameters/trace_id'
        - $ref: '#/components/parameters/idempotency_key'
        - $ref: '#/components/parameters/scenario_key'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/direct_transfer_in'
      responses:
        '201':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/transfer-post-response'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/400'
        '401':
          description: Unauthorised request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/401'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/403'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/409'
components:
  parameters:
    trace_id:
      description: >-
        A unique identifier to track this operation. It must be between 12 and
        255 characters in length.
      in: header
      name: X-Trace-Id
      schema:
        type: string
        minLength: 12
        maxLength: 255
      example: acb123e4-f567-4a8b-9c0d-1e2f3a4b5c6d
    idempotency_key:
      description: >-
        A unique identifier to prevent duplicate requests. It must be between 12
        and 255 characters in length.
      in: header
      name: X-Idempotency-Key
      required: false
      schema:
        type: string
        minLength: 12
        maxLength: 255
      example: req-5c0a2e8c-f3b9-4d1a-8e2f-0c1d2e3f4a5b
    scenario_key:
      in: header
      name: X-Scenario-Key
      schema:
        type: string
        minimum: 1
        maximum: 1000
      description: >-
        An optional scenario key that can be used to simulate specific behaviors
        or test different scenarios within the API. Providing this header allows
        you to trigger predefined responses or alter data based on the key's
        value, which can be useful for testing, development, or demonstrating
        specific functionalities. The key should be a string of 1 to 1000
        characters.
      example: scenario:auth_redirect
  schemas:
    '400':
      description: Bad Request
      type: object
      properties:
        status:
          type: string
          nullable: false
          enum:
            - failed
        error:
          type: object
          properties:
            type:
              type: string
              example: REQUEST_NOT_VALID
            code:
              type: string
              example: '10400'
            message:
              type: string
              nullable: true
              example: Request is not valid
            validation_errors:
              type: array
              items:
                type: object
                properties:
                  field_name:
                    type: string
                    example: amount
                  message:
                    type: string
                    example: must not be null
          description: >-
            The request cannot be accepted and is malformed and/or missing
            required parameters.
    '401':
      description: Unauthorized
      type: object
      properties:
        status:
          type: string
          nullable: false
          enum:
            - failed
        message:
          type: string
          nullable: true
          description: Invalid API key provided
          example: UNAUTHORIZED
        error:
          type: object
          properties:
            type:
              type: string
              example: UNAUTHORIZED
            code:
              type: string
              example: '10401'
            message:
              type: string
              example: unauthorized
    '403':
      description: Forbidden
      type: object
      properties:
        status:
          type: string
          nullable: false
          enum:
            - failed
        message:
          type: string
          description: API key doesn't have permission to access this resource
        error:
          type: object
          properties:
            type:
              type: string
              example: FORBIDDEN
            code:
              type: string
              example: '10403'
            message:
              type: string
              example: Forbidden
    '409':
      description: Conflict
      type: object
      properties:
        status:
          type: string
          nullable: false
          enum:
            - failed
        message:
          type: string
          description: The request conflicts with another request
        error:
          type: object
          properties:
            type:
              type: string
              example: RESOURCE_CONFLICT
            code:
              type: string
              example: '10409'
            message:
              type: string
              example: Resource conflict
    direct_transfer_in:
      oneOf:
        - $ref: '#/components/schemas/bank_transfer'
        - $ref: '#/components/schemas/mobile_money_transfer'
        - $ref: '#/components/schemas/wallet_transfer'
      discriminator:
        propertyName: type
        mapping:
          bank: '#/components/schemas/bank_transfer'
          mobile_money: '#/components/schemas/mobile_money_transfer'
          wallet: '#/components/schemas/wallet_transfer'
    transfer-post-response:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/status'
        message:
          type: string
        data:
          $ref: '#/components/schemas/transfer'
    bank_transfer:
      type: object
      required:
        - action
        - payment_instruction
      properties:
        type:
          type: string
          default: bank
          readOnly: true
        action:
          description: >-
            To define whether the transfer should be processed immediately,
            scheduled for a later date, or deferred for future processing.
          type: string
          example: instant
          enum:
            - instant
            - deferred
            - scheduled
        reference:
          $ref: '#/components/schemas/reference'
        narration:
          description: Transfer description. This cannot be greater than 180 characters.
          type: string
          minLength: 1
          maxLength: 180
        disburse_option:
          $ref: '#/components/schemas/disburse_option'
        callback_url:
          description: >-
            Specify to set a callback url for receiving payout webhook, this
            will take precedent over the merchant's default webhook url.
          type: string
        meta:
          $ref: '#/components/schemas/meta'
        payment_instruction:
          $ref: '#/components/schemas/bank_transfer_instruction'
          description: Currency-specific information for the transfer.
    mobile_money_transfer:
      type: object
      required:
        - action
        - payment_instruction
      properties:
        type:
          type: string
          default: mobile_money
          readOnly: true
        action:
          description: >-
            To define whether the transfer should be processed immediately,
            scheduled for a later date, or deferred for future processing
          type: string
          enum:
            - instant
            - deferred
            - scheduled
        reference:
          $ref: '#/components/schemas/reference'
        narration:
          description: transfer description. This cannot be greater than 180 characters
          type: string
          minLength: 1
          maxLength: 180
        disburse_option:
          $ref: '#/components/schemas/disburse_option'
        callback_url:
          description: >-
            To set a callback url for receiving payout webhook, this will take
            precedent over the merchant's default webhook url
          type: string
        meta:
          $ref: '#/components/schemas/meta'
        payment_instruction:
          $ref: '#/components/schemas/mobile_money_transfer_instruction'
    wallet_transfer:
      type: object
      required:
        - action
        - payment_instruction
      properties:
        type:
          type: string
          default: wallet
          readOnly: true
        action:
          description: >-
            To define whether the transfer should be processed immediately,
            scheduled for a later date, or deferred for future processing
          type: string
          enum:
            - instant
            - deferred
            - scheduled
        reference:
          $ref: '#/components/schemas/reference'
        narration:
          description: transfer description. This cannot be greater than 180 characters
          type: string
          minLength: 1
          maxLength: 180
        disburse_option:
          $ref: '#/components/schemas/disburse_option'
        callback_url:
          description: >-
            To set a callback url for receiving payout webhook, this will take
            precedent over the merchant's default webhook url
          type: string
        meta:
          $ref: '#/components/schemas/meta'
        payment_instruction:
          $ref: '#/components/schemas/wallet_transfer_instruction'
    status:
      type: string
      nullable: false
      enum:
        - success
        - failed
    transfer:
      type: object
      properties:
        id:
          description: The unique identifier for the transfer
          type: string
          example: trf_yuK89vb
        type:
          type: string
          description: The type of transfer, indicating the method used to transfer funds.
          enum:
            - bank
            - mobile_money
            - wallet
            - cash_pickup
          example: bank
        action:
          description: Whether to process the transfer instantly or at a later date.
          type: string
          enum:
            - instant
            - deferred
            - scheduled
            - retry
            - duplicate
        reference:
          $ref: '#/components/schemas/reference'
        status:
          description: The status of the transfer.
          type: string
          enum:
            - NEW
            - PENDING
            - FAILED
            - SUCCESSFUL
            - CANCELLED
            - INITIATED
        reversal:
          type: object
          nullable: true
          properties:
            reversal_datetime:
              description: The transfer reversal date.
              type: string
              format: date-time
            initial_status:
              description: The original status of the transfer before reversal.
              type: string
              example: SUCCESSFUL
            reconciliation_status:
              description: The final status.
              type: string
              example: REVERSED
            reconciliation_type:
              description: Specifies either debit or credit.
              type: string
              enum:
                - D
                - C
        narration:
          type: string
          description: >-
            A brief description or message accompanying the transfer, provided
            by the sender to describe the purpose of the transfer.
          example: Salary payment for January
        source_currency:
          allOf:
            - $ref: '#/components/schemas/currency'
          description: The currency in which the transfer was debited.
          example: NGN
        destination_currency:
          allOf:
            - $ref: '#/components/schemas/currency'
          description: The currency in which the amount will be credited to the recipient.
          example: EUR
        amount:
          $ref: '#/components/schemas/transfer_amount'
        fee:
          type: object
          properties:
            currency:
              allOf:
                - $ref: '#/components/schemas/currency'
              description: The currency in which the fee is charged.
            value:
              type: number
              description: The amount charged as a fee for the transfer.
              format: double
              minimum: 0
              example: 10.35
        debit_information:
          type: object
          properties:
            currency:
              allOf:
                - $ref: '#/components/schemas/currency'
              description: >-
                The currency in which the fees and charges are applied for the
                transfer.
            actual_debit_amount:
              type: number
              description: >-
                The exact amount deducted for the transfer, including applicable
                fees.
              format: decimal
              minimum: 0
              example: 100.35
            rate_used:
              type: number
              description: The exchange rate applied to calculate the transfer amount.
              format: decimal
              minimum: 0
              example: 100.35
            vat:
              type: number
              description: The Value-Added Tax (VAT) amount charged for the transfer.
              format: decimal
              minimum: 0
              example: 100.35
        payment_information:
          type: object
          properties:
            proof:
              type: string
              description: Session ID
              example: '11000224070317345400001414441712312381'
        retry:
          allOf:
            - $ref: '#/components/schemas/parent_transfer_details'
          description: Contains the information of the initial transfer that was retried.
        duplicate:
          allOf:
            - $ref: '#/components/schemas/parent_transfer_details'
          description: >-
            Contains the information of the initial transfer that was
            duplicated.
        disburse_option:
          $ref: '#/components/schemas/disburse_option'
        callback_url:
          type: string
          description: A URL where callbacks or notifications will be sent.
          nullable: true
          example: https://example.com/flw/callback
        provider_response:
          $ref: '#/components/schemas/provider_response'
        recipient:
          allOf:
            - $ref: '#/components/schemas/recipient'
          description: The recipient details.
        sender:
          allOf:
            - $ref: '#/components/schemas/sender'
          description: The sender details.
        meta:
          $ref: '#/components/schemas/meta'
        created_datetime:
          type: string
          description: The date and time when the transfer was submitted for processing.
          format: date-time
    reference:
      type: string
      pattern: ^[a-zA-Z0-9\-]+$
      minLength: 6
      maxLength: 42
      description: >-
        A custom identifier to track the transaction, This must be unique across
        all your transactions.
      x-pattern-message: must be an alphanumeric string
    disburse_option:
      type: object
      description: >-
        To specify the date and time for disbursement, this is required when
        action is set to scheduled.
      properties:
        date_time:
          type: string
          description: >-
            the scheduled date and time for when the transfer should be
            disbursed to the recipient's account. It should be in the
            'YYYY-MM-DD HH:MM:SS' 24hr format.
        timezone:
          type: string
          enum:
            - Africa/Cairo
            - Africa/Accra
            - Africa/Nairobi
            - Africa/Lagos
            - Africa/Freetown
            - Africa/Dar_es_Salaam
            - Africa/Kampala
            - Africa/Douala
            - Africa/Ndjamena
            - Africa/Kinshasa
            - Africa/Lubumbashi
            - Africa/Libreville
            - Africa/Porto-Novo
            - Africa/Abidjan
            - Africa/Dakar
            - Africa/Johannesburg
            - America/New_York
            - America/Los_Angeles
            - America/Sao_Paulo
            - Asia/Dubai
            - Asia/Kolkata
            - Asia/Tokyo
            - Australia/Sydney
            - Europe/London
            - Europe/Berlin
            - Europe/Moscow
            - Pacific/Auckland
            - Pacific/Honolulu
            - UTC
    meta:
      type: object
      additionalProperties:
        type: string
    bank_transfer_instruction:
      oneOf:
        - $ref: '#/components/schemas/bank_ngn_instruction'
        - $ref: '#/components/schemas/bank_etb_instruction'
        - $ref: '#/components/schemas/bank_eur_instruction'
        - $ref: '#/components/schemas/bank_gbp_instruction'
        - $ref: '#/components/schemas/bank_ghs_instruction'
        - $ref: '#/components/schemas/bank_mwk_instruction'
        - $ref: '#/components/schemas/bank_usd_instruction'
        - $ref: '#/components/schemas/bank_zar_instruction'
      discriminator:
        propertyName: destination_currency
        mapping:
          ETB: '#/components/schemas/bank_etb_instruction'
          EUR: '#/components/schemas/bank_eur_instruction'
          GBP: '#/components/schemas/bank_gbp_instruction'
          GHS: '#/components/schemas/bank_ghs_instruction'
          KES: '#/components/schemas/bank_etb_instruction'
          MWK: '#/components/schemas/bank_mwk_instruction'
          NGN: '#/components/schemas/bank_ngn_instruction'
          USD: '#/components/schemas/bank_usd_instruction'
          RWF: '#/components/schemas/bank_ghs_instruction'
          SLL: '#/components/schemas/bank_ghs_instruction'
          UGX: '#/components/schemas/bank_ghs_instruction'
          XAF: '#/components/schemas/bank_ghs_instruction'
          XOF: '#/components/schemas/bank_ghs_instruction'
          ZAR: '#/components/schemas/bank_zar_instruction'
    mobile_money_transfer_instruction:
      oneOf:
        - $ref: '#/components/schemas/mobile_money_etb_instruction'
        - $ref: '#/components/schemas/mobile_money_egp_instruction'
        - $ref: '#/components/schemas/mobile_money_xaf_instruction'
      discriminator:
        propertyName: destination_currency
        mapping:
          ETB: '#/components/schemas/mobile_money_etb_instruction'
          GHS: '#/components/schemas/mobile_money_etb_instruction'
          KES: '#/components/schemas/mobile_money_etb_instruction'
          RWF: '#/components/schemas/mobile_money_etb_instruction'
          TZS: '#/components/schemas/mobile_money_etb_instruction'
          UGX: '#/components/schemas/mobile_money_etb_instruction'
          ZMW: '#/components/schemas/mobile_money_etb_instruction'
          XAF: '#/components/schemas/mobile_money_xaf_instruction'
          XOF: '#/components/schemas/mobile_money_xaf_instruction'
    wallet_transfer_instruction:
      type: object
      required:
        - recipient
        - destination_currency
        - source_currency
        - amount
      properties:
        source_currency:
          allOf:
            - $ref: '#/components/schemas/currency'
          description: >-
            The currency in which the transfer amount will be debited from the
            merchant's wallet. It must be provided in ISO 4217 format (e.g.,
            USD, EUR, EGP)
        destination_currency:
          type: string
          description: >-
            The currency in which the transfer amount will be credited to the
            recipient. It must be provided in ISO 4217 format (e.g., USD, EUR,
            EGP)
        amount:
          $ref: '#/components/schemas/transfer_amount'
        recipient:
          $ref: '#/components/schemas/wallet_all_recipient'
        sender:
          $ref: '#/components/schemas/generic_sender'
    currency:
      description: ISO 4217 currency code.
      type: string
      example: NGN
      enum:
        - AED
        - AFN
        - ALL
        - AMD
        - ANG
        - AOA
        - AQD
        - ARS
        - AUD
        - AZN
        - BAM
        - BBD
        - BDT
        - BGN
        - BHD
        - BIF
        - BMD
        - BND
        - BOB
        - BRL
        - BSD
        - BWP
        - BYR
        - BZD
        - CAD
        - CDF
        - CHF
        - CLP
        - CNY
        - COP
        - CRC
        - CUP
        - CVE
        - CYP
        - CZK
        - DJF
        - DKK
        - DOP
        - DZD
        - ECS
        - EEK
        - EGP
        - ETB
        - EUR
        - FJD
        - FKP
        - GBP
        - GEL
        - GGP
        - GHS
        - GIP
        - GMD
        - GNF
        - GTQ
        - GYD
        - HKD
        - HNL
        - HRK
        - HTG
        - HUF
        - IDR
        - ILS
        - INR
        - IQD
        - IRR
        - ISK
        - JMD
        - JOD
        - JPY
        - KES
        - KGS
        - KHR
        - KMF
        - KPW
        - KRW
        - KWD
        - KYD
        - KZT
        - LAK
        - LBP
        - LKR
        - LRD
        - LSL
        - LTL
        - LVL
        - LYD
        - MAD
        - MDL
        - MGA
        - MKD
        - MMK
        - MNT
        - MOP
        - MRO
        - MTL
        - MUR
        - MVR
        - MWK
        - MXN
        - MYR
        - MZN
        - NAD
        - NGN
        - NIO
        - NOK
        - NPR
        - NZD
        - OMR
        - PAB
        - PEN
        - PGK
        - PHP
        - PKR
        - PLN
        - PYG
        - QAR
        - RON
        - RSD
        - RUB
        - RWF
        - SAR
        - SBD
        - SCR
        - SDG
        - SEK
        - SGD
        - SKK
        - SLL
        - SOS
        - SRD
        - STD
        - SVC
        - SYP
        - SZL
        - THB
        - TJS
        - TMT
        - TND
        - TOP
        - TRY
        - TTD
        - TWD
        - TZS
        - UAH
        - UGX
        - USD
        - UYU
        - UZS
        - VEF
        - VND
        - VUV
        - XAF
        - XCD
        - XOF
        - XPF
        - YER
        - ZAR
        - ZMK
        - ZWD
        - ZMW
    transfer_amount:
      type: object
      required:
        - value
        - applies_to
      properties:
        value:
          description: >-
            Amount to be sent to the recipient. This is a positive integer in
            the smallest currency unit
          type: number
          format: decimal
          minimum: 1
          example: 3000.44
        applies_to:
          type: string
          enum:
            - destination_currency
            - source_currency
          description: >-
            Specifies whether the transfer amount is in destination_currency (no
            conversion) or source_currency (this will be converted to
            destination currency)
    parent_transfer_details:
      type: object
      properties:
        parent_id:
          type: string
          description: >-
            The unique identifier of the original transfer that is being
            retried.
          example: trf_HUQUYb1Sp5CkiIJFebk1Z
        parent_reference:
          type: string
          description: >-
            The external reference of the original transfer that is being
            retried.
          example: flw_z882wFGMjc
    provider_response:
      type: object
      required:
        - type
        - code
      description: >
        Represents payout error codes. The `type` and `code` fields are separate
        enums where:

        - `type` indicates the nature of the error.

        - `code` provides the specific error code associated with the error
        type.

        - `message` explains the meaning of the `type-code` pair
      properties:
        message:
          type: string
          description: The processor message for the transfer.
          example: 'DISBURSE FAILED: Insufficient wallet balance'
        type:
          type: string
          description: >
            The type of the payout error, representing the specific error
            scenario.
          enum:
            - transfer_amount_exceeds_limit
            - transfer_amount_below_limit
            - monthly_transfer_limit_exceeded
            - daily_transfer_limit_exceeded
            - transfer_limit_not_set_for_currency
            - payout_creation_failed
            - insufficient_balance
            - service_unavailable
            - transfer_failed
            - pricing_not_set
            - currency_conversion_not_set
            - rejected_recipient_merchant
            - invalid_bank_code
            - unable_to_determine_country
            - invalid_wallet_currency
        code:
          type: string
          description: >
            The unique code associated with the error type. This code follows a
            pattern of four digits.
          pattern: \d{4}
    recipient:
      oneOf:
        - $ref: '#/components/schemas/bank_recipient'
        - $ref: '#/components/schemas/mobile_money_recipient'
        - $ref: '#/components/schemas/wallet_recipient'
        - $ref: '#/components/schemas/cashpickup_recipient'
      discriminator:
        propertyName: type
        mapping:
          bank: '#/components/schemas/bank_recipient'
          mobile_money: '#/components/schemas/mobile_money_recipient'
          wallet: '#/components/schemas/wallet_recipient'
          cash_pickup: '#/components/schemas/cashpickup_recipient'
    sender:
      type: object
      properties:
        id:
          description: ID of the transfer sender
          type: string
        name:
          $ref: '#/components/schemas/name'
          description: The Sender's full name.
        national_identification:
          allOf:
            - $ref: '#/components/schemas/national_identification'
          description: The Sender's government identification.
        phone:
          $ref: '#/components/schemas/phone'
          description: The Sender's mobile number.
        date_of_birth:
          description: The Sender's date of birth.
          type: string
        email:
          $ref: '#/components/schemas/email'
          description: The Sender's email address.
        address:
          $ref: '#/components/schemas/address'
          description: The Sender's residential address.
    bank_ngn_instruction:
      type: object
      required:
        - recipient
        - destination_currency
        - source_currency
        - amount
      properties:
        destination_currency:
          type: string
          default: NGN
          readOnly: true
        source_currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        amount:
          $ref: '#/components/schemas/transfer_amount'
        recipient:
          $ref: '#/components/schemas/bank_ngn_recipient'
        sender:
          $ref: '#/components/schemas/generic_sender'
    bank_etb_instruction:
      type: object
      required:
        - recipient
        - destination_currency
        - source_currency
        - amount
      properties:
        destination_currency:
          type: string
          default: ETB
          readOnly: true
        source_currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        amount:
          $ref: '#/components/schemas/transfer_amount'
        recipient:
          $ref: '#/components/schemas/bank_etb_recipient'
        sender:
          $ref: '#/components/schemas/generic_sender'
    bank_eur_instruction:
      type: object
      required:
        - recipient
        - sender
        - destination_currency
        - source_currency
        - amount
      properties:
        destination_currency:
          type: string
          default: EUR
          readOnly: true
        source_currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        amount:
          $ref: '#/components/schemas/transfer_amount'
        recipient:
          $ref: '#/components/schemas/bank_eur_recipient'
        sender:
          $ref: '#/components/schemas/bank_eur_sender'
    bank_gbp_instruction:
      type: object
      required:
        - recipient
        - sender
        - destination_currency
        - source_currency
        - amount
      properties:
        destination_currency:
          type: string
          default: GBP
          readOnly: true
        source_currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        amount:
          $ref: '#/components/schemas/transfer_amount'
        recipient:
          $ref: '#/components/schemas/bank_gbp_recipient'
        sender:
          $ref: '#/components/schemas/bank_gbp_sender'
    bank_ghs_instruction:
      type: object
      required:
        - recipient
        - destination_currency
        - source_currency
        - amount
      properties:
        destination_currency:
          type: string
          default: GHS
          readOnly: true
        source_currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        amount:
          $ref: '#/components/schemas/transfer_amount'
        recipient:
          $ref: '#/components/schemas/bank_ghs_recipient'
        sender:
          $ref: '#/components/schemas/generic_sender'
    bank_mwk_instruction:
      type: object
      required:
        - recipient
        - destination_currency
        - source_currency
        - amount
      properties:
        destination_currency:
          type: string
          default: MWK
          readOnly: true
        source_currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        amount:
          $ref: '#/components/schemas/transfer_amount'
        recipient:
          $ref: '#/components/schemas/bank_mwk_recipient'
        sender:
          $ref: '#/components/schemas/generic_sender'
    bank_usd_instruction:
      type: object
      required:
        - recipient
        - destination_currency
        - source_currency
        - amount
      properties:
        destination_currency:
          type: string
          default: USD
          readOnly: true
        source_currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        amount:
          $ref: '#/components/schemas/transfer_amount'
        recipient:
          $ref: '#/components/schemas/bank_usd_recipient'
        sender:
          $ref: '#/components/schemas/generic_sender'
    bank_zar_instruction:
      type: object
      required:
        - recipient
        - destination_currency
        - source_currency
        - amount
      properties:
        destination_currency:
          type: string
          default: ZAR
          readOnly: true
        source_currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        amount:
          $ref: '#/components/schemas/transfer_amount'
        recipient:
          $ref: '#/components/schemas/bank_zar_recipient'
        sender:
          $ref: '#/components/schemas/generic_sender'
    mobile_money_etb_instruction:
      type: object
      required:
        - recipient
        - destination_currency
        - source_currency
        - amount
      properties:
        destination_currency:
          type: string
          default: ETB
          readOnly: true
        source_currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        amount:
          $ref: '#/components/schemas/transfer_amount'
        recipient:
          $ref: '#/components/schemas/mobile_money_etb_recipient'
        sender:
          $ref: '#/components/schemas/generic_sender'
    mobile_money_egp_instruction:
      type: object
      required:
        - recipient
        - sender
        - destination_currency
        - source_currency
        - amount
      properties:
        destination_currency:
          type: string
          default: EGP
          readOnly: true
        source_currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        amount:
          $ref: '#/components/schemas/transfer_amount'
        recipient:
          $ref: '#/components/schemas/mobile_money_egp_recipient'
        sender:
          $ref: '#/components/schemas/mobile_money_egp_sender'
    mobile_money_xaf_instruction:
      type: object
      required:
        - recipient
        - destination_currency
        - source_currency
        - amount
      properties:
        destination_currency:
          type: string
          default: XAF
          readOnly: true
        source_currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        amount:
          $ref: '#/components/schemas/transfer_amount'
        recipient:
          $ref: '#/components/schemas/mobile_money_xaf_recipient'
        sender:
          $ref: '#/components/schemas/generic_sender'
    wallet_all_recipient:
      type: object
      required:
        - wallet
      properties:
        type:
          type: string
          default: wallet
          readOnly: true
        name:
          $ref: '#/components/schemas/name'
          readOnly: true
        wallet:
          type: object
          required:
            - provider
            - identifier
          properties:
            provider:
              type: string
              enum:
                - flutterwave
              description: >-
                Specifies the payment or service provider. Currently, only
                "flutterwave" is supported
            identifier:
              description: >-
                A unique identifier assigned to the merchant by the payment or
                service provider.
              type: string
              example: '00118468'
              minLength: 7
              maxLength: 25
              pattern: ^[a-zA-Z0-9]*$
              x-pattern-message: must only contain alphanumeric characters
    generic_sender:
      type: object
      description: Sender information.
      required:
        - name
      properties:
        name:
          allOf:
            - $ref: '#/components/schemas/name'
            - type: object
              required:
                - first
                - last
        phone:
          description: The Sender's mobile number.
          allOf:
            - $ref: '#/components/schemas/phone'
            - type: object
              required:
                - country_code
                - number
        email:
          description: The Sender's email address
          allOf:
            - $ref: '#/components/schemas/email'
          example: erik@devxpay.com
        address:
          description: The Sender's residential address
          allOf:
            - $ref: '#/components/schemas/address'
            - type: object
              required:
                - city
                - country
                - line1
                - postal_code
                - state
    bank_recipient:
      type: object
      required:
        - bank
      properties:
        id:
          description: ID of the transfer recipient
          type: string
        type:
          type: string
          default: bank
          readOnly: true
        name:
          $ref: '#/components/schemas/name'
        currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        national_identification:
          allOf:
            - $ref: '#/components/schemas/national_identification'
          description: Sender government identification
        phone:
          $ref: '#/components/schemas/phone'
        date_of_birth:
          $ref: '#/components/schemas/date_of_birth'
        email:
          allOf:
            - $ref: '#/components/schemas/email'
          example: hi@flutterwave.com
        address:
          $ref: '#/components/schemas/address'
        bank:
          $ref: '#/components/schemas/bank'
    mobile_money_recipient:
      type: object
      required:
        - name
      properties:
        id:
          description: ID of the transfer recipient
          type: string
        type:
          type: string
          default: mobile_money
          readOnly: true
        name:
          $ref: '#/components/schemas/name'
        currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        national_identification:
          allOf:
            - $ref: '#/components/schemas/national_identification'
          description: Sender government identification
        phone:
          $ref: '#/components/schemas/phone'
        date_of_birth:
          $ref: '#/components/schemas/date_of_birth'
        email:
          $ref: '#/components/schemas/email'
        address:
          $ref: '#/components/schemas/address'
        mobile_money:
          type: object
          required:
            - network
            - country
            - msisdn
          properties:
            network:
              description: recipient network
              type: string
            country:
              description: recipient country
              type: string
            msisdn:
              description: recipient phone number
              type: string
    wallet_recipient:
      type: object
      properties:
        id:
          description: ID of the transfer recipient
          type: string
        type:
          type: string
          default: wallet
          readOnly: true
        name:
          $ref: '#/components/schemas/name'
          readOnly: true
        currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        wallet:
          $ref: '#/components/schemas/wallet'
    cashpickup_recipient:
      type: object
      properties:
        id:
          description: ID of the transfer recipient
          type: string
        type:
          type: string
          default: cash_pickup
          readOnly: true
        name:
          $ref: '#/components/schemas/name'
        currency:
          allOf:
            - $ref: '#/components/schemas/currency'
        national_identification:
          allOf:
            - $ref: '#/components/schemas/national_identification'
          description: Sender government identification
        phone:
          $ref: '#/components/schemas/phone'
        date_of_birth:
          $ref: '#/components/schemas/date_of_birth'
        email:
          allOf:
            - $ref: '#/components/schemas/email'
          example: hi@flutterwave.com
        address:
          $ref: '#/components/schemas/address'
        cash_pickup:
          type: object
          required:
            - network
          properties:
            network:
              description: cashpickup network
              type: string
    name:
      type: object
      description: The Customer's full name.
      properties:
        first:
          type: string
          description: The Customer's first name.
          example: King
          pattern: ^(?![ ,.'-]*$)[A-Za-z ,.'-]{2,50}$
          x-pattern-message: >-
            must be between 2 and 50 characters long, cannot be empty, only
            spaces, or only symbols, and can only contain letters, spaces,
            commas, periods, apostrophes, or hyphens.
        middle:
          type: string
          description: The Customer's middle name.
          example: Leo
          pattern: ^(?![ ,.'-]*$)[A-Za-z ,.'-]{2,50}$
          x-pattern-message: >-
            must be between 2 and 50 characters long, cannot be empty, only
            spaces, or only symbols, and can only contain letters, spaces,
            commas, periods, apostrophes, or hyphens.
        last:
          type: string
          description: The Customer's last name.
          example: LeBron
          pattern: ^(?![ ,.'-]*$)[A-Za-z ,.'-]{2,50}$
          x-pattern-message: >-
            must be between 2 and 50 characters long, cannot be empty, only
            spaces, or only symbols, and can only contain letters, spaces,
            commas, periods, apostrophes, or hyphens.
    national_identification:
      type: object
      properties:
        type:
          type: string
          enum:
            - PASSPORT
            - DRIVERS_LICENSE
            - NATIONAL_ID
        identifier:
          type: string
          example: FLY5869798686
          minLength: 4
          maxLength: 40
        expiration_date:
          type: string
          example: '2029-07-08'
          pattern: ^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
          x-pattern-message: must match YYYY-MM-DD format
    phone:
      type: object
      description: The customer's mobile number.
      required:
        - number
        - country_code
      example:
        country_code: '234'
        number: '08012345678'
      properties:
        country_code:
          description: ISO 3166 alpha-3 country code.
          type: string
          pattern: ^[0-9]{1,3}$
          example: '234'
          x-pattern-message: must be a valid ISO 3166 alpha-3 country code
        number:
          description: Unformatted 7-10-digit phone number without the country code.
          type: string
          pattern: ^[0-9]{7,10}$
          example: '8001122334'
          x-pattern-message: must be a digit containing between 7 and 10 characters
    email:
      type: string
      description: The Customer's email address.
      pattern: >-
        ^[a-zA-Z0-9_+&*-]+(?:\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$
      example: cornelius@gmail.com
      x-pattern-message: must be an email format
    address:
      type: object
      description: Customer address information.
      required:
        - line1
        - city
        - state
        - country
        - postal_code
      properties:
        city:
          type: string
          description: The name of the city.
          example: New York
          pattern: ^.+$
          x-pattern-message: value must not be empty
        country:
          description: ISO2 country code
          type: string
          pattern: ^[A-Z]{2}$
          example: US
          x-pattern-message: must be a valid country ISO2 format
        line1:
          type: string
          description: The first line of the Customer's address.
          example: 123 Main Street
          pattern: ^.+$
          x-pattern-message: value must not be empty
        line2:
          type: string
          description: The second line of the Customer's address.
          example: Apt 4B
          pattern: ^.+$
          x-pattern-message: value must not be empty
        postal_code:
          type: string
          example: '10001'
          pattern: ^.+$
          x-pattern-message: value must not be empty
        state:
          type: string
          description: The state or region.
          example: New York
          pattern: ^.+$
          x-pattern-message: value must not be empty
    bank_ngn_recipient:
      type: object
      required:
        - bank
      properties:
        name:
          allOf:
            - $ref: '#/components/schemas/name'
          readOnly: true
        type:
          type: string
          default: bank
          readOnly: true
        bank:
          type: object
          required:
            - account_number
            - code
          properties:
            account_number:
              description: recipient account number
              type: string
              example: '0690000031'
            code:
              description: recipient bank code
              type: string
              example: '044'
              pattern: ^.+$
              x-pattern-message: value must not be empty
    bank_etb_recipient:
      type: object
      required:
        - bank
        - name
      properties:
        type:
          type: string
          default: bank
          readOnly: true
        name:
          allOf:
            - $ref: '#/components/schemas/name'
            - type: object
              required:
                - first
                - last
        bank:
          type: object
          required:
            - account_number
            - code
          properties:
            account_number:
              description: recipient account number
              type: string
              example: '6708908978675'
              minLength: 7
              maxLength: 24
            code:
              description: recipient bank code
              type: string
              example: '15'
              pattern: ^.+$
              x-pattern-message: value must not be empty
    bank_eur_recipient:
      type: object
      required:
        - bank
        - name
        - phone
        - email
        - address
      properties:
        type:
          type: string
          default: bank
          readOnly: true
        name:
          allOf:
            - $ref: '#/components/schemas/name'
            - type: object
              required:
                - first
                - last
        phone:
          description: Recipient phone number
          allOf:
            - $ref: '#/components/schemas/phone'
            - type: object
              required:
                - country_code
                - number
        email:
          allOf:
            - $ref: '#/components/schemas/email'
          description: Recipient email address
          example: hi@flutterwave.com
        address:
          description: Recipient address
          allOf:
            - $ref: '#/components/schemas/address'
            - type: object
              required:
                - city
                - country
                - line1
                - postal_code
                - state
        bank:
          type: object
          required:
            - account_number
            - name
            - swift_code
          properties:
            account_number:
              description: recipient account number
              type: string
              example: DE89370400440532013000
              minLength: 8
              maxLength: 35
            name:
              description: recipient bank name
              type: string
              example: Deutsche Bank
              minLength: 2
              maxLength: 60
            swift_code:
              description: recipient bank swift code
              type: string
              example: DEUTDEFF
              minLength: 4
              maxLength: 15
    bank_eur_sender:
      type: object
      description: Sender information for EUR bank transfers.
      required:
        - name
        - email
        - address
        - phone
      properties:
        name:
          description: The Sender's name.
          allOf:
            - $ref: '#/components/schemas/name'
            - type: object
              required:
                - first
                - last
        email:
          description: The Sender's email address
          allOf:
            - $ref: '#/components/schemas/email'
        address:
          description: The Sender's residential address
          allOf:
            - $ref: '#/components/schemas/address'
            - type: object
              required:
                - city
                - country
                - line1
                - postal_code
                - state
        phone:
          description: The Sender's phone number
          allOf:
            - $ref: '#/components/schemas/phone'
            - type: object
              required:
                - number
                - country_code
    bank_gbp_recipient:
      type: object
      required:
        - bank
        - name
        - phone
        - email
        - address
      properties:
        type:
          type: string
          default: bank
          readOnly: true
        name:
          allOf:
            - $ref: '#/components/schemas/name'
            - type: object
              required:
                - first
                - last
        phone:
          description: Recipient phone number
          allOf:
            - $ref: '#/components/schemas/phone'
            - type: object
              required:
                - country_code
                - number
        email:
          allOf:
            - $ref: '#/components/schemas/email'
          description: Recipient email address
          example: hi@flutterwave.com
        address:
          description: Recipient address
          allOf:
            - $ref: '#/components/schemas/address'
            - type: object
              required:
                - city
                - country
                - line1
                - postal_code
                - state
        bank:
          type: object
          required:
            - account_number
            - account_type
            - name
            - sort_code
          properties:
            account_number:
              description: recipient account number
              type: string
              example: DE89370400440532013000
              minLength: 8
              maxLength: 35
            account_type:
              description: recipient account type
              type: string
              enum:
                - individual
                - corporate
              example: individual
            name:
              description: recipient bank name
              type: string
              example: Deutsche Bank
              minLength: 2
              maxLength: 60
            sort_code:
              description: recipient bank sort code
              type: string
              example: '80489123'
              minLength: 4
              maxLength: 15
    bank_gbp_sender:
      type: object
      description: Sender information for GBP bank transfers.
      required:
        - name
        - email
        - address
        - phone
      properties:
        name:
          description: The Sender's name.
          allOf:
            - $ref: '#/components/schemas/name'
            - type: object
              required:
                - first
                - last
        email:
          description: The Sender's email address
          allOf:
            - $ref: '#/components/schemas/email'
        address:
          description: The Sender's residential address
          allOf:
            - $ref: '#/components/schemas/address'
            - type: object
              required:
                - city
                - country
                - line1
                - postal_code
                - state
        phone:
          description: The Sender's phone number
          allOf:
            - $ref: '#/components/schemas/phone'
            - type: object
              required:
                - number
                - country_code
    bank_ghs_recipient:
      type: object
      required:
        - bank
        - name
      properties:
        type:
          type: string
          default: bank
          readOnly: true
        name:
          allOf:
            - $ref: '#/components/schemas/name'
            - type: object
              required:
                - first
                - last
        bank:
          type: object
          required:
            - account_number
            - code
            - branch
          properties:
            account_number:
              description: recipient account number
              type: string
              example: '001234567890'
              minLength: 7
              maxLength: 35
            code:
              description: recipient bank code
              type: string
              example: '11276282'
              pattern: ^.+$
              x-pattern-message: value must not be empty
            branch:
              description: recipient bank branch
              type: string
              example: 1812051EPC
              pattern: ^.+$
              x-pattern-message: value must not be empty
    bank_mwk_recipient:
      type: object
      required:
        - bank
        - name
      properties:
        type:
          type: string
          default: bank
          readOnly: true
        name:
          allOf:
            - $ref: '#/components/schemas/name'
            - type: object
              required:
                - first
                - last
        bank:
          type: object
          required:
            - account_number
            - code
          properties:
            account_number:
              description: recipient account number
              type: string
              example: '123456789012'
              minLength: 5
              maxLength: 19
            code:
              description: recipient bank code
              type: string
              example: ABHY
              pattern: ^.+$
              x-pattern-message: value must not be empty
            branch:
              description: recipient bank branch
              type: string
              example: ABHY0065001
              pattern: ^.+$
              x-pattern-message: value must not be empty
    bank_usd_recipient:
      type: object
      required:
        - bank
        - name
        - phone
        - email
        - address
      properties:
        type:
          type: string
          default: bank
          readOnly: true
        name:
          allOf:
            - $ref: '#/components/schemas/name'
            - type: object
              required:
                - first
                - last
        phone:
          description: Recipient phone number
          allOf:
            - $ref: '#/components/schemas/phone'
            - type: object
              required:
                - country_code
                - number
        email:
          allOf:
            - $ref: '#/components/schemas/email'
              description: Recipient email address
              example: hi@flutterwave.com
        address:
          description: Recipient address
          allOf:
            - $ref: '#/components/schemas/address'
            - type: object
              required:
                - city
                - country
                - line1
                - postal_code
                - state
        bank:
          type: object
          required:
            - account_number
            - account_type
            - code
            - swift_code
            - routing_number
          properties:
            account_number:
              description: recipient account number
              type: string
              example: '1234567890'
              minLength: 5
              maxLength: 17
            code:
              description: recipient bank code
              type: string
              example: '021000021'
              pattern: ^.+$
              x-pattern-message: value must not be empty
            account_type:
              description: recipient account type
              type: string
              enum:
                - checking
                - savings
              example: checking
            routing_number:
              description: recipient bank routing number
              type: string
              example: '021000021'
              minLength: 6
              maxLength: 9
            swift_code:
              description: recipient bank swift code
              type: string
              example: BOFAUS3NXXX
              minLength: 8
              maxLength: 11
    bank_zar_recipient:
      type: object
      required:
        - bank
        - phone
        - email
        - address
        - name
      properties:
        type:
          type: string
          default: bank
          readOnly: true
        name:
          allOf:
            - $ref: '#/components/schemas/name'
            - type: object
              required:
                - first
                - last
        phone:
          description: Recipient phone number
          allOf:
            - $ref: '#/components/schemas/phone'
            - type: object
              required:
                - country_code
                - number
        email:
          allOf:
            - $ref: '#/components/schemas/email'
          description: Recipient email address
          example: hi@flutterwave.com
        address:
          description: Recipient address
          allOf:
            - $ref: '#/components/schemas/address'
            - type: object
              required:
                - city
                - country
                - line1
                - postal_code
                - state
        bank:
          type: object
          required:
            - account_number
            - code
          properties:
            account_number:
              description: recipient account number
              type: string
              example: '123456789'
              minLength: 7
              maxLength: 11
            code:
              description: recipient bank code
              type: string
              example: '632005'
              pattern: ^.+$
              x-pattern-message: value must not be empty
    mobile_money_etb_recipient:
      type: object
      required:
        - name
        - mobile_money
      properties:
        type:
          type: string
          default: mobile_money
          readOnly: true
        name:
          allOf:
            - $ref: '#/components/schemas/name'
            - type: object
              required:
                - first
                - last
        mobile_money:
          type: object
          required:
            - network
            - msisdn
          properties:
            network:
              description: recipient network
              type: string
              minLength: 2
              maxLength: 25
              pattern: ^[a-zA-Z0-9]*$
              example: VODAFONE
              x-pattern-message: must only contain alphanumeric characters
            msisdn:
              description: recipient phone number
              type: string
              minLength: 6
              maxLength: 25
              pattern: ^[a-zA-Z0-9]*$
              example: '251911234567'
              x-pattern-message: must only contain alphanumeric characters
    mobile_money_egp_recipient:
      type: object
      required:
        - name
        - mobile_money
        - national_identification
        - address
      properties:
        type:
          type: string
          default: mobile_money
          readOnly: true
        name:
          allOf:
            - $ref: '#/components/schemas/name'
            - type: object
              required:
                - first
                - last
        national_identification:
          description: Recipient government identification
          allOf:
            - $ref: '#/components/schemas/national_identification'
            - type: object
              required:
                - type
                - identifier
        address:
          description: Recipient address
          allOf:
            - $ref: '#/components/schemas/address'
            - type: object
              required:
                - city
                - country
                - line1
                - postal_code
                - state
        mobile_money:
          type: object
          required:
            - network
            - msisdn
          properties:
            network:
              description: recipient network
              type: string
              minLength: 2
              maxLength: 25
              pattern: ^[a-zA-Z0-9]*$
              example: VODAFONE
              x-pattern-message: must only contain alphanumeric characters
            msisdn:
              description: recipient phone number
              type: string
              minLength: 6
              maxLength: 25
              pattern: ^[a-zA-Z0-9]*$
              example: '201234567890'
              x-pattern-message: must only contain alphanumeric characters
    mobile_money_egp_sender:
      type: object
      description: Sender information for EGP mobile money transfers.
      required:
        - name
        - national_identification
        - date_of_birth
        - phone
        - email
        - address
      properties:
        name:
          description: The Sender's full name.
          allOf:
            - $ref: '#/components/schemas/name'
            - type: object
              required:
                - first
                - middle
                - last
        national_identification:
          description: The Sender's official government ID.
          allOf:
            - $ref: '#/components/schemas/national_identification'
            - type: object
              required:
                - type
                - identifier
                - expiration_date
        phone:
          description: The Sender's mobile number.
          allOf:
            - $ref: '#/components/schemas/phone'
            - type: object
              required:
                - country_code
                - number
        date_of_birth:
          description: Sender's date of birth in YYYY-MM-DD.
          type: string
          example: '2000-07-08'
        email:
          allOf:
            - $ref: '#/components/schemas/email'
          description: The Sender's email address.
          example: erik@devxpay.com
        address:
          description: The Sender's residential address.
          allOf:
            - $ref: '#/components/schemas/address'
            - type: object
              required:
                - city
                - country
                - line1
                - postal_code
                - state
    mobile_money_xaf_recipient:
      type: object
      required:
        - name
        - mobile_money
      properties:
        type:
          type: string
          default: mobile_money
          readOnly: true
        name:
          allOf:
            - $ref: '#/components/schemas/name'
            - type: object
              required:
                - first
                - last
        mobile_money:
          type: object
          required:
            - network
            - country
            - msisdn
          properties:
            network:
              description: recipient network
              type: string
              minLength: 2
              maxLength: 25
              pattern: ^[a-zA-Z0-9]*$
              example: VODAFONE
              x-pattern-message: must only contain alphanumeric characters
            country:
              description: recipient country
              type: string
              pattern: ^[A-Z]{2}$
              example: CI
              x-pattern-message: must be a valid country ISO2 format
            msisdn:
              description: recipient phone number
              type: string
              minLength: 6
              maxLength: 25
              pattern: ^[a-zA-Z0-9]*$
              example: '251911234567'
              x-pattern-message: must only contain alphanumeric characters
    date_of_birth:
      type: string
      description: The customer's birthdate in ISO 8601 (YYYY-MM-DD) format.
      pattern: ^(0[1-9]|[12]\d|3[01])-(0[1-9]|1[0-2])-(19|20)\d{2}$
      x-pattern-message: must match YYYY-MM-DD format
    bank:
      type: object
      required:
        - account_number
        - code
      properties:
        account_number:
          description: The Recipient's account number.
          type: string
          pattern: ^[a-zA-Z0-9]*$
        account_type:
          description: The Recipient's account type.
          type: string
          enum:
            - checking
            - savings
            - individual
            - corporate
        code:
          description: The Recipient's bank code.
          type: string
          pattern: ^[a-zA-Z0-9]*$
        branch:
          description: The Recipient's bank branch.
          type: string
        name:
          description: The Recipient's bank name.
          type: string
        routing_number:
          description: The Recipient bank routing number.
          type: string
          pattern: ^[a-zA-Z0-9]*$
        swift_code:
          description: The Recipient bank swift code.
          type: string
          pattern: ^[a-zA-Z0-9]*$
        sort_code:
          description: The Recipient bank sort code.
          type: string
          pattern: ^[a-zA-Z0-9]*$
    wallet:
      type: object
      required:
        - provider
        - identifier
      properties:
        provider:
          type: string
          enum:
            - flutterwave
          description: >-
            Specifies the payment or service provider. Currently, only
            "flutterwave" is supported
        identifier:
          description: >-
            A unique identifier assigned to the merchant by the payment or
            service provider.
          type: string
          example: '00118468'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````