# Create a transfer

Creates a direct transfer using only the recipient and sender IDs. Before calling this endpoint, make sure you have already created both the recipient and the sender via their respective endpoints and obtained their IDs.

# OpenAPI definition

```json
{
  "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": {
    "/transfers": {
      "post": {
        "operationId": "transfers_post",
        "tags": [
          "Transfers"
        ],
        "summary": "Create a transfer",
        "description": "Creates a direct transfer using only the recipient and sender IDs. Before calling this endpoint, make sure you have already created both the recipient and the sender via their respective endpoints and obtained their IDs.",
        "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/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"
                }
              }
            }
          }
        }
      }
    }
  },
  "webhooks": {
    "charge.completed": {
      "post": {
        "tags": [
          "charge.completed"
        ],
        "summary": "Send charge completion webhook",
        "operationId": "charge_completed_webhook",
        "requestBody": {
          "required": true,
          "description": "Notification about a completed charge",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/charge_completed_webhook_payload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 status to indicate that the webhook was received successfully"
          }
        }
      }
    },
    "transfer.disburse": {
      "post": {
        "tags": [
          "transfer.disburse"
        ],
        "summary": "Send disbursed transfer webhook",
        "operationId": "transfer_disburse_webhook",
        "requestBody": {
          "required": true,
          "description": "Notification about a disbursed transfer",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/transfer_disburse_webhook_payload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 status to indicate that the webhook was received successfully"
          }
        }
      }
    },
    "transfer.reversal": {
      "post": {
        "tags": [
          "transfer.reversal"
        ],
        "summary": "Send transfer reversal webhook",
        "operationId": "transfer_reversal_webhook",
        "requestBody": {
          "required": true,
          "description": "Notification about a transfer reversal",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/transfer_reversal_webhook_payload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 status to indicate that the webhook was received successfully"
          }
        }
      }
    },
    "order.authorization": {
      "post": {
        "tags": [
          "order.authorization"
        ],
        "summary": "Send order authorization webhook",
        "operationId": "order_authorization_webhook",
        "requestBody": {
          "required": true,
          "description": "Notification about an order authorization",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/order_authorization_webhook_payload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 status to indicate that the webhook was received successfully"
          }
        }
      }
    },
    "refund.completed": {
      "post": {
        "tags": [
          "refund.completed"
        ],
        "summary": "Send refund completion webhook",
        "operationId": "refund_completed_webhook",
        "requestBody": {
          "required": true,
          "description": "Notification about a completed refund",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/refund_completed_webhook_payload"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Return a 200 status to indicate that the webhook was received successfully"
          }
        }
      }
    }
  },
  "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"
              }
            }
          }
        }
      },
      "status": {
        "type": "string",
        "nullable": false,
        "enum": [
          "success",
          "failed"
        ]
      },
      "customer_id": {
        "type": "string",
        "description": "ID of the customer.",
        "example": "cus_3XarBILKQS"
      },
      "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"
          }
        }
      },
      "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"
      },
      "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."
          }
        }
      },
      "phone": {
        "type": "object",
        "description": "The customer's mobile number.",
        "required": [
          "number",
          "country_code"
        ],
        "example": {
          "country_code": "234",
          "number": "08012345678"
        },
        "properties": {
          "country_code": {
            "description": "The dialling country code e.g. 234 for NG.",
            "type": "string",
            "pattern": "^[0-9]{1,3}$",
            "example": "234",
            "x-pattern-message": "must be a valid 3 digit 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 valid 7 to 10 digit phone number"
          }
        }
      },
      "meta": {
        "type": "object",
        "additionalProperties": {
          "type": "string"
        }
      },
      "customer": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/customer_id"
          },
          "address": {
            "$ref": "#/components/schemas/address"
          },
          "email": {
            "$ref": "#/components/schemas/email"
          },
          "name": {
            "$ref": "#/components/schemas/name"
          },
          "phone": {
            "$ref": "#/components/schemas/phone"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "created_datetime": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "amount": {
        "type": "number",
        "format": "decimal",
        "description": "The payment amount in decimals.",
        "example": 12.34,
        "minimum": 0.01
      },
      "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",
          "USDC",
          "USDT",
          "RLUSD"
        ]
      },
      "payment_method_id": {
        "type": "string",
        "description": "ID of the payment method.",
        "example": "pmd_WRq7L4TM8p"
      },
      "base_payment_method": {
        "required": [
          "id",
          "type"
        ],
        "properties": {
          "id": {
            "$ref": "#/components/schemas/payment_method_id"
          },
          "type": {
            "type": "string",
            "description": "The type of the payment method.",
            "example": "card"
          },
          "customer_id": {
            "description": "ID of the customer.",
            "type": "string",
            "example": "cus_3XarBILKQS"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "device_fingerprint": {
            "description": "The customer's device fingerprint.",
            "type": "string",
            "example": "62wd23423rq324323qew1"
          },
          "client_ip": {
            "description": "The customer's device IP.",
            "type": "string",
            "example": "154.123.220.1"
          },
          "created_datetime": {
            "type": "string",
            "format": "date-time",
            "description": "The date and time when the virtual account was created.",
            "example": "2024-12-03T13:54:21.546559974Z"
          }
        }
      },
      "card_network": {
        "type": "string",
        "description": "The card network.",
        "example": "MASTERCARD",
        "enum": [
          "MASTERCARD",
          "VISA",
          "AMERICAN EXPRESS",
          "DISCOVER",
          "VERVE",
          "AFRIGO",
          "UNKNOWN"
        ]
      },
      "credential_on_file": {
        "type": "object",
        "required": [
          "enabled"
        ],
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "Indicates whether the recurring card charge with Credential-on-File (COF) is enabled.",
            "example": true
          },
          "agreement_id": {
            "type": "string",
            "description": "A unique reference generated by Flutterwave during the initial Customer Initiated Transaction (CIT).",
            "example": "Agreement00w02W1"
          },
          "recurring_amount_variability": {
            "type": "string",
            "description": "This indicates whether the amount charged for subsequent payments remains the same, or differs.",
            "example": "VARIABLE",
            "enum": [
              "VARIABLE"
            ]
          },
          "agreement_type": {
            "type": "string",
            "definition": "This indicates the type of charge agreement with Flutterwave.",
            "example": "UNSCHEDULED",
            "enum": [
              "UNSCHEDULED"
            ]
          },
          "trace_id": {
            "type": "string",
            "description": "A reference generated by the card scheme during the initial Customer Initiated Transaction (CIT).",
            "example": "123456789"
          }
        }
      },
      "card": {
        "type": "object",
        "required": [
          "expiry_month",
          "expiry_year",
          "first6",
          "last4",
          "network"
        ],
        "properties": {
          "expiry_month": {
            "type": "integer",
            "description": "Expiry month of the card.",
            "example": "09"
          },
          "expiry_year": {
            "type": "integer",
            "description": "Expiry year of the card.",
            "example": "32"
          },
          "first6": {
            "type": "string",
            "description": "Bank identification number (BIN) of the card.",
            "minLength": 6,
            "maxLength": 6,
            "example": "123412"
          },
          "last4": {
            "type": "string",
            "description": "The last four digits of the card number.",
            "minLength": 4,
            "maxLength": 4,
            "example": "1234"
          },
          "network": {
            "$ref": "#/components/schemas/card_network"
          },
          "billing_address": {
            "$ref": "#/components/schemas/address"
          },
          "cof": {
            "$ref": "#/components/schemas/credential_on_file"
          },
          "card_holder_name": {
            "type": "string",
            "description": "Name on the card",
            "example": "Alex James"
          }
        }
      },
      "card_payment_method": {
        "allOf": [
          {
            "$ref": "#/components/schemas/base_payment_method"
          }
        ],
        "type": "object",
        "required": [
          "type",
          "card"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "The type of the payment method.",
            "default": "card",
            "readOnly": true
          },
          "card": {
            "$ref": "#/components/schemas/card"
          }
        }
      },
      "bank_account": {
        "type": "object"
      },
      "bank_account_payment_method": {
        "allOf": [
          {
            "$ref": "#/components/schemas/base_payment_method"
          }
        ],
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "The type of the payment method.",
            "default": "bank_account",
            "readOnly": true
          },
          "bank_account": {
            "$ref": "#/components/schemas/bank_account"
          }
        }
      },
      "mobile_money": {
        "type": "object",
        "required": [
          "network",
          "phone_number",
          "country_code"
        ],
        "properties": {
          "network": {
            "type": "string",
            "description": "The mobile network of the customer's phone number.",
            "example": "MTN"
          },
          "country_code": {
            "type": "string",
            "description": "The dialling country code e.g. 233 for GH.",
            "example": "233"
          },
          "phone_number": {
            "type": "string",
            "description": "The phone number of customer.",
            "example": "9012345678"
          },
          "qr_code": {
            "type": "string"
          }
        }
      },
      "mobile_money_payment_method": {
        "allOf": [
          {
            "$ref": "#/components/schemas/base_payment_method"
          }
        ],
        "type": "object",
        "required": [
          "type",
          "mobile_money"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "The type of the payment method.",
            "default": "mobile_money",
            "readOnly": true
          },
          "mobile_money": {
            "$ref": "#/components/schemas/mobile_money"
          }
        }
      },
      "opay": {
        "type": "object"
      },
      "opay_payment_method": {
        "allOf": [
          {
            "$ref": "#/components/schemas/base_payment_method"
          }
        ],
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "The type of the payment method.",
            "default": "opay",
            "readOnly": true
          },
          "opay": {
            "$ref": "#/components/schemas/opay"
          }
        }
      },
      "applepay": {
        "type": "object",
        "properties": {
          "card_holder_name": {
            "type": "string",
            "description": "The cardholder name.",
            "example": "Yohan Blake"
          }
        }
      },
      "applepay_payment_method": {
        "allOf": [
          {
            "$ref": "#/components/schemas/base_payment_method"
          }
        ],
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "The type of the payment method.",
            "default": "applepay",
            "readOnly": true
          },
          "applepay": {
            "$ref": "#/components/schemas/applepay"
          }
        }
      },
      "googlepay": {
        "type": "object",
        "properties": {
          "card_holder_name": {
            "type": "string",
            "description": "The cardholder name.",
            "example": "Yohan Blake"
          }
        }
      },
      "googlepay_payment_method": {
        "allOf": [
          {
            "$ref": "#/components/schemas/base_payment_method"
          }
        ],
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "The type of the payment method.",
            "default": "googlepay",
            "readOnly": true
          },
          "googlepay": {
            "$ref": "#/components/schemas/googlepay"
          }
        }
      },
      "ussd": {
        "type": "object",
        "properties": {
          "account_bank": {
            "type": "string",
            "description": "The bank code of the USSD string to generate.",
            "example": "050"
          }
        }
      },
      "ussd_payment_method": {
        "allOf": [
          {
            "$ref": "#/components/schemas/base_payment_method"
          }
        ],
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "The type of the payment method.",
            "default": "ussd",
            "readOnly": true
          },
          "ussd": {
            "$ref": "#/components/schemas/ussd"
          }
        }
      },
      "pwbt_type": {
        "type": "string",
        "description": "The type of virtual account.",
        "example": "static",
        "enum": [
          "static",
          "dynamic"
        ]
      },
      "pwbt": {
        "type": "object",
        "required": [
          "account_type"
        ],
        "properties": {
          "account_expires_in": {
            "type": "integer",
            "description": "The expiry time of the virtual account.",
            "example": 360,
            "maximum": 432000
          },
          "account_display_name": {
            "type": "string",
            "description": "The name that is shown to the customer when the account is resolved to a name.",
            "example": "Alex James",
            "minLength": 3,
            "maxLength": 256
          },
          "account_type": {
            "$ref": "#/components/schemas/pwbt_type"
          },
          "originator_bank_name": {
            "type": "string",
            "description": "The sender's Bank name",
            "example": "Mock Bank"
          },
          "originator_account_number": {
            "type": "string",
            "description": "The Sender's masked account number",
            "example": "002*******78"
          },
          "originator_name": {
            "type": "string",
            "description": "The sender's name",
            "example": "Jane Doe"
          }
        }
      },
      "pwbt_payment_method": {
        "allOf": [
          {
            "$ref": "#/components/schemas/base_payment_method"
          }
        ],
        "type": "object",
        "required": [
          "type",
          "bank_transfer"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "The type of the payment method.",
            "default": "bank_transfer",
            "readOnly": true
          },
          "bank_transfer": {
            "$ref": "#/components/schemas/pwbt"
          }
        }
      },
      "payment_method": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/card_payment_method"
          },
          {
            "$ref": "#/components/schemas/bank_account_payment_method"
          },
          {
            "$ref": "#/components/schemas/mobile_money_payment_method"
          },
          {
            "$ref": "#/components/schemas/opay_payment_method"
          },
          {
            "$ref": "#/components/schemas/applepay_payment_method"
          },
          {
            "$ref": "#/components/schemas/googlepay_payment_method"
          },
          {
            "$ref": "#/components/schemas/ussd_payment_method"
          },
          {
            "$ref": "#/components/schemas/pwbt_payment_method"
          }
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "card": "#/components/schemas/card_payment_method",
            "bank_account": "#/components/schemas/bank_account_payment_method",
            "mobile_money": "#/components/schemas/mobile_money_payment_method",
            "opay": "#/components/schemas/opay_payment_method",
            "applepay": "#/components/schemas/applepay_payment_method",
            "googlepay": "#/components/schemas/googlepay_payment_method",
            "ussd": "#/components/schemas/ussd_payment_method",
            "bank_transfer": "#/components/schemas/pwbt_payment_method"
          }
        }
      },
      "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"
      },
      "processor_response": {
        "type": "object",
        "required": [
          "type",
          "code"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "code": {
            "type": "string",
            "pattern": "\\d{2}",
            "x-pattern-message": "must be two digits"
          }
        },
        "enum": [
          {
            "type": "approved",
            "code": "00"
          },
          {
            "type": "refer_to_issuer",
            "code": "01"
          },
          {
            "type": "refer_to_issuer_special_condition",
            "code": "02"
          },
          {
            "type": "invalid_merchant",
            "code": "03"
          },
          {
            "type": "pick_up_card_no_fraud",
            "code": "04"
          },
          {
            "type": "do_not_honor",
            "code": "05"
          },
          {
            "type": "error",
            "code": "06"
          },
          {
            "type": "pick_up_card_fraud",
            "code": "07"
          },
          {
            "type": "partial_approval",
            "code": "10"
          },
          {
            "type": "invalid_transaction",
            "code": "12"
          },
          {
            "type": "invalid_amount",
            "code": "13"
          },
          {
            "type": "invalid_account_number",
            "code": "14"
          },
          {
            "type": "no_such_issuer",
            "code": "15"
          },
          {
            "type": "reenter_transaction",
            "code": "19"
          },
          {
            "type": "no_action_taken",
            "code": "21"
          },
          {
            "type": "unable_to_locate_record_in_file",
            "code": "25"
          },
          {
            "type": "file_temporarily_not_available",
            "code": "28"
          },
          {
            "type": "lost_card_pick_up",
            "code": "41"
          },
          {
            "type": "stolen_card_pick_up",
            "code": "43"
          },
          {
            "type": "insufficient_funds",
            "code": "51"
          },
          {
            "type": "no_checking_account",
            "code": "52"
          },
          {
            "type": "no_savings_account",
            "code": "53"
          },
          {
            "type": "expired_card",
            "code": "54"
          },
          {
            "type": "incorrect_pin",
            "code": "55"
          },
          {
            "type": "transaction_not_permitted_card",
            "code": "57"
          },
          {
            "type": "transaction_not_permitted_terminal",
            "code": "58"
          },
          {
            "type": "suspected_fraud",
            "code": "59"
          },
          {
            "type": "exceeds_approval_amount_limit",
            "code": "61"
          },
          {
            "type": "invalid_restricted_service_code",
            "code": "62"
          },
          {
            "type": "security_violation",
            "code": "63"
          },
          {
            "type": "transaction_does_not_fulfill_aml_req",
            "code": "64"
          },
          {
            "type": "exceeds_withdrawal_limit",
            "code": "65"
          },
          {
            "type": "pin_data_required",
            "code": "70"
          },
          {
            "type": "pin_entry_tries_exceeded",
            "code": "75"
          },
          {
            "type": "unsolicited_reversal",
            "code": "76"
          },
          {
            "type": "blocked_first_use",
            "code": "78"
          },
          {
            "type": "already_reversed",
            "code": "79"
          },
          {
            "type": "negative_cvv_result",
            "code": "82"
          },
          {
            "type": "no_reason_to_decline",
            "code": "85"
          },
          {
            "type": "cannot_verify_pin",
            "code": "86"
          },
          {
            "type": "issuer_unavailable",
            "code": "91"
          },
          {
            "type": "unable_to_route_transaction",
            "code": "92"
          },
          {
            "type": "cannot_complete_violation_of_law",
            "code": "93"
          },
          {
            "type": "system_error",
            "code": "96"
          },
          {
            "type": "invalid_cvv",
            "code": "97"
          }
        ]
      },
      "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"
          }
        }
      },
      "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"
            ]
          }
        }
      },
      "provider_response": {
        "type": "object",
        "required": [
          "type",
          "code"
        ],
        "description": "Represents payout error codes. The `type` and `code` fields are separate enums where:\n- `type` indicates the nature of the error.\n- `code` provides the specific error code associated with the error type.\n- `message` explains the meaning of the `type-code` pair\n",
        "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.\n",
            "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.\n",
            "pattern": "\\d{4}"
          }
        }
      },
      "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"
          }
        }
      },
      "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]*$"
          }
        }
      },
      "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": {
        "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"
          }
        }
      },
      "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": [
              "provider"
            ],
            "properties": {
              "provider": {
                "description": "cashpickup provider",
                "type": "string"
              }
            }
          }
        }
      },
      "crypto": {
        "type": "object",
        "required": [
          "network",
          "address"
        ],
        "properties": {
          "network": {
            "description": "recipient crypto network",
            "type": "string",
            "minLength": 3,
            "maxLength": 25,
            "pattern": "^[a-zA-Z0-9-_]+$",
            "example": "POLYGON",
            "x-pattern-message": "must only contain alphanumeric characters"
          },
          "address": {
            "description": "recipient crypto address",
            "type": "string",
            "minLength": 26,
            "maxLength": 64,
            "pattern": "^[a-zA-Z0-9]+$",
            "example": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
            "x-pattern-message": "must only contain alphanumeric characters"
          }
        }
      },
      "crypto_recipient": {
        "type": "object",
        "properties": {
          "id": {
            "description": "ID of the transfer recipient",
            "type": "string"
          },
          "type": {
            "type": "string",
            "default": "crypto",
            "readOnly": true
          },
          "name": {
            "$ref": "#/components/schemas/name",
            "readOnly": true
          },
          "currency": {
            "allOf": [
              {
                "$ref": "#/components/schemas/currency"
              }
            ]
          },
          "crypto": {
            "$ref": "#/components/schemas/crypto"
          }
        }
      },
      "recipient": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/bank_recipient"
          },
          {
            "$ref": "#/components/schemas/mobile_money_recipient"
          },
          {
            "$ref": "#/components/schemas/wallet_recipient"
          },
          {
            "$ref": "#/components/schemas/cashpickup_recipient"
          },
          {
            "$ref": "#/components/schemas/crypto_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",
            "crypto": "#/components/schemas/crypto_recipient"
          }
        }
      },
      "sender": {
        "type": "object",
        "properties": {
          "id": {
            "description": "ID of the transfer sender",
            "type": "string"
          },
          "name": {
            "description": "The Sender's full name.",
            "$ref": "#/components/schemas/name"
          },
          "national_identification": {
            "allOf": [
              {
                "$ref": "#/components/schemas/national_identification"
              }
            ],
            "description": "The Sender's government identification."
          },
          "phone": {
            "description": "The Sender's mobile number.",
            "$ref": "#/components/schemas/phone"
          },
          "date_of_birth": {
            "description": "The Sender's date of birth.",
            "type": "string"
          },
          "email": {
            "description": "The Sender's email address.",
            "$ref": "#/components/schemas/email"
          },
          "address": {
            "description": "The Sender's residential address.",
            "$ref": "#/components/schemas/address"
          }
        }
      },
      "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",
              "crypto"
            ],
            "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
              }
            }
          },
          "extra_information": {
            "type": "object",
            "properties": {
              "amount_credited": {
                "type": "string",
                "description": "The exact amount credited to the recipient's account after the transfer is processed, which may differ from the original transfer amount due to fees, exchange rates, or other adjustments.",
                "example": "USDT 100"
              }
            },
            "description": "Additional information about the transfer, which may include details such as the amount credited or any other relevant information that may be useful for the transfer."
          },
          "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."
          },
          "transfer_purpose": {
            "description": "The reason for the transfer.",
            "type": "string",
            "example": "personal",
            "enum": [
              "family_maintenance",
              "personal",
              "education",
              "medical",
              "donation",
              "business",
              "salary_payment",
              "investment",
              "loan_repayment",
              "bill_payment",
              "travel",
              "gift",
              "other"
            ]
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "created_datetime": {
            "type": "string",
            "description": "The date and time when the transfer was submitted for processing.",
            "format": "date-time"
          }
        }
      },
      "transfer-post-response": {
        "type": "object",
        "properties": {
          "status": {
            "$ref": "#/components/schemas/status"
          },
          "message": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/transfer"
          }
        }
      },
      "transfers_instruction": {
        "type": "object",
        "required": [
          "recipient_id",
          "source_currency",
          "amount"
        ],
        "properties": {
          "source_currency": {
            "allOf": [
              {
                "$ref": "#/components/schemas/currency"
              }
            ]
          },
          "amount": {
            "$ref": "#/components/schemas/transfer_amount"
          },
          "recipient_id": {
            "description": "The ID of the recipient receiving the payment.",
            "type": "string",
            "example": "rcb_atNyZLK4f9"
          },
          "sender_id": {
            "description": "The ID of the sender.",
            "type": "string",
            "example": "sdr_DJOWzrFT6V"
          }
        }
      },
      "transfer_in": {
        "type": "object",
        "required": [
          "action",
          "payment_instruction"
        ],
        "properties": {
          "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/transfers_instruction"
          }
        }
      },
      "refund": {
        "description": "A refund of a previously created charge",
        "type": "object",
        "properties": {
          "id": {
            "description": "ID of the refund",
            "type": "string"
          },
          "amount_refunded": {
            "allOf": [
              {
                "$ref": "#/components/schemas/amount"
              }
            ],
            "description": "Amount of the refund"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          },
          "reason": {
            "type": "string",
            "enum": [
              "duplicate",
              "fraudulent",
              "requested_by_customer",
              "expired_uncaptured_charge"
            ],
            "description": "Reason for the refund",
            "example": "requested_by_customer"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "requires_action",
              "succeeded",
              "failed",
              "cancelled",
              "completed",
              "new"
            ],
            "description": "Status of the refund",
            "example": "new"
          },
          "charge_id": {
            "type": "string",
            "description": "ID of the charge tied to this refund",
            "example": "chg_VnUihmASmF"
          },
          "created_datetime": {
            "type": "string"
          }
        }
      },
      "base_webhook_payload": {
        "type": "object",
        "description": "Base webhook payload schema",
        "required": [
          "data",
          "type",
          "timestamp",
          "webhook_id"
        ],
        "properties": {
          "webhook_id": {
            "type": "string",
            "description": "Webhook event identifier"
          },
          "timestamp": {
            "type": "integer",
            "format": "int64",
            "description": "Webhook event timestamp"
          },
          "type": {
            "type": "string",
            "description": "Webhook event type",
            "enum": [
              "charge.completed",
              "transfer.disburse",
              "transfer.reversal",
              "order.authorization"
            ]
          },
          "data": {
            "type": "object"
          }
        }
      },
      "charge_completed_webhook_payload": {
        "type": "object",
        "description": "Charge completion webhook payload",
        "allOf": [
          {
            "$ref": "#/components/schemas/base_webhook_payload"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "readOnly": true,
                "default": "charge.completed"
              },
              "data": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID of the charge"
                  },
                  "amount": {
                    "$ref": "#/components/schemas/amount"
                  },
                  "currency": {
                    "$ref": "#/components/schemas/currency"
                  },
                  "customer": {
                    "$ref": "#/components/schemas/customer"
                  },
                  "description": {
                    "type": "string",
                    "description": "Description of the charge."
                  },
                  "meta": {
                    "$ref": "#/components/schemas/meta"
                  },
                  "payment_method": {
                    "$ref": "#/components/schemas/payment_method"
                  },
                  "redirect_url": {
                    "type": "string",
                    "description": "Specifies the URL to redirect to."
                  },
                  "reference": {
                    "$ref": "#/components/schemas/reference"
                  },
                  "status": {
                    "type": "string",
                    "description": "The status of the charge"
                  },
                  "processor_response": {
                    "$ref": "#/components/schemas/processor_response"
                  },
                  "created_datetime": {
                    "type": "string",
                    "format": "date-time"
                  }
                }
              }
            }
          }
        ]
      },
      "base_transfer_webhook": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The unique identifier for the transfer"
          },
          "type": {
            "type": "string",
            "default": "bank",
            "readOnly": true
          },
          "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": {
            "description": "Amount to be sent to the recipient. This is a positive integer in the smallest currency unit",
            "type": "integer",
            "format": "decimal",
            "minimum": 1,
            "example": 3000.44
          },
          "reference": {
            "$ref": "#/components/schemas/reference"
          },
          "proof": {
            "type": "string",
            "description": "Transfer proof"
          },
          "status": {
            "description": "The status of the transfer.",
            "type": "string",
            "enum": [
              "FAILED",
              "SUCCESSFUL"
            ]
          },
          "disburse_datetime": {
            "type": "string",
            "format": "date-time"
          },
          "bank": {
            "type": "object",
            "properties": {
              "account_number": {
                "description": "recipient account number",
                "type": "string",
                "example": "0690000031",
                "minLength": 10
              },
              "code": {
                "description": "recipient bank code",
                "type": "string",
                "example": "044",
                "minLength": 2,
                "maxLength": 10
              },
              "branch": {
                "description": "recipient bank branch",
                "type": "string",
                "example": "1812051EPC",
                "minLength": 2
              },
              "name": {
                "description": "recipient bank name",
                "type": "string",
                "example": "Commonwealth Bank of Australia"
              },
              "routing_number": {
                "description": "recipient bank routing number",
                "type": "string",
                "example": "110000",
                "minLength": 2
              },
              "swift_code": {
                "description": "recipient bank swift code",
                "type": "string",
                "example": "CTBAAU2S",
                "minLength": 2
              }
            }
          },
          "mobile_money": {
            "type": "object",
            "properties": {
              "network": {
                "description": "recipient network",
                "type": "string"
              },
              "country": {
                "description": "recipient country",
                "type": "string",
                "minLength": 2,
                "maxLength": 25,
                "pattern": "^[a-zA-Z0-9]*$",
                "example": "MTN"
              },
              "msisdn": {
                "description": "recipient phone number",
                "type": "string",
                "minLength": 6,
                "maxLength": 25,
                "pattern": "^[a-zA-Z0-9]*$",
                "example": "251911234567"
              }
            }
          },
          "wallet": {
            "type": "object",
            "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]*$"
              }
            }
          },
          "cash_pickup": {
            "type": "object",
            "properties": {
              "network": {
                "description": "cashpickup network",
                "type": "string"
              }
            }
          },
          "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"
              }
            }
          },
          "provider_response": {
            "$ref": "#/components/schemas/provider_response"
          },
          "meta": {
            "$ref": "#/components/schemas/meta"
          }
        }
      },
      "transfer_disburse_webhook_payload": {
        "type": "object",
        "description": "Disbursed Transfer webhook payload",
        "allOf": [
          {
            "$ref": "#/components/schemas/base_webhook_payload"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "readOnly": true,
                "default": "transfer.disburse"
              },
              "data": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/base_transfer_webhook"
                  }
                ]
              }
            }
          }
        ]
      },
      "transfer_reversal_webhook_payload": {
        "type": "object",
        "description": "Transfer Reversal webhook payload",
        "allOf": [
          {
            "$ref": "#/components/schemas/base_webhook_payload"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "readOnly": true,
                "default": "transfer.reversal"
              },
              "data": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/base_transfer_webhook"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "reversal": {
                        "type": "object",
                        "properties": {
                          "reversal_datetime": {
                            "type": "string",
                            "format": "date-time"
                          },
                          "initial_status": {
                            "type": "string",
                            "example": "SUCCESSFUL"
                          },
                          "reconciliation_status": {
                            "type": "string",
                            "example": "REVERSED"
                          },
                          "reconciliation_type": {
                            "type": "string",
                            "enum": [
                              "D",
                              "C"
                            ]
                          }
                        }
                      }
                    }
                  }
                ]
              }
            }
          }
        ]
      },
      "order_authorization_webhook_payload": {
        "type": "object",
        "description": "Order authorization webhook payload",
        "allOf": [
          {
            "$ref": "#/components/schemas/base_webhook_payload"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "readOnly": true,
                "default": "order.authorization"
              },
              "data": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID of the order"
                  },
                  "amount": {
                    "$ref": "#/components/schemas/amount"
                  },
                  "currency": {
                    "$ref": "#/components/schemas/currency"
                  },
                  "customer": {
                    "$ref": "#/components/schemas/customer"
                  },
                  "description": {
                    "type": "string",
                    "description": "Description of the order."
                  },
                  "meta": {
                    "$ref": "#/components/schemas/meta"
                  },
                  "payment_method": {
                    "$ref": "#/components/schemas/payment_method"
                  },
                  "redirect_url": {
                    "type": "string",
                    "description": "Specifies the URL to redirect to."
                  },
                  "reference": {
                    "$ref": "#/components/schemas/reference"
                  },
                  "status": {
                    "type": "string",
                    "description": "The status of the order"
                  },
                  "processor_response": {
                    "$ref": "#/components/schemas/processor_response"
                  },
                  "created_datetime": {
                    "type": "string",
                    "format": "date-time"
                  }
                }
              }
            }
          }
        ]
      },
      "refund_completed_webhook_payload": {
        "type": "object",
        "description": "Refund completion webhook payload",
        "allOf": [
          {
            "$ref": "#/components/schemas/base_webhook_payload"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "readOnly": true,
                "default": "refund.completed"
              },
              "data": {
                "$ref": "#/components/schemas/refund"
              }
            }
          }
        ]
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    }
  },
  "x-readme": {
    "explorer-enabled": true,
    "proxy-enabled": true
  },
  "_id": {
    "buffer": {
      "0": 102,
      "1": 126,
      "2": 178,
      "3": 152,
      "4": 33,
      "5": 232,
      "6": 98,
      "7": 0,
      "8": 59,
      "9": 50,
      "10": 178,
      "11": 253
    }
  }
}
```