Flutterwave · Arazzo Workflow

Flutterwave Bank Directory Then Payout

Version 1.0.0

Look up supported banks for a country, resolve the destination account, then create a recipient and send a payout.

1 workflow 2 source APIs 1 provider
View Spec View on GitHub PaymentsPayoutsMobile MoneyCardsAfricaFintechRemittanceVirtual AccountsChargebacksMulti-CurrencyArazzoWorkflows

Provider

flutterwave

Workflows

bank-directory-then-payout
List banks, resolve an account, create a recipient, and send a payout.
Retrieves supported banks for the country, resolves the destination account, creates a bank_account recipient, then initiates a transfer to it.
4 steps inputs: accessToken, accountNumber, amount, bankId, country, currency, narration outputs: accountName, recipientId, transferId, transferStatus
1
listBanks
listBanks
Retrieve supported banks for the country to validate the chosen bank.
2
resolveAccount
resolveBankAccount
Resolve the destination account name against the chosen bank.
3
createRecipient
createTransferRecipient
Create a bank_account recipient using the resolved account details.
4
createTransfer
createTransfer
Initiate the transfer to the verified recipient.

Source API Descriptions

Arazzo Workflow Specification

flutterwave-bank-directory-then-payout-workflow.yml Raw ↑
arazzo: 1.0.1
info:
  title: Flutterwave Bank Directory Then Payout
  summary: Look up supported banks for a country, resolve the destination account, then create a recipient and send a payout.
  description: >-
    A directory-driven payout flow that starts from reference data. The workflow
    lists the banks supported in a country, resolves the destination account
    name against the chosen bank, creates a bank_account transfer recipient with
    the verified details, and initiates a transfer to it. This is how a payout
    UI populates a bank dropdown and validates the account before disbursing.
    Every step spells out its request inline so the flow can be read and
    executed without opening the underlying OpenAPI description.
  version: 1.0.0
sourceDescriptions:
- name: banksApi
  url: ../openapi/flutterwave-banks-api-openapi.yml
  type: openapi
- name: transfersApi
  url: ../openapi/flutterwave-transfers-api-openapi.yml
  type: openapi
workflows:
- workflowId: bank-directory-then-payout
  summary: List banks, resolve an account, create a recipient, and send a payout.
  description: >-
    Retrieves supported banks for the country, resolves the destination account,
    creates a bank_account recipient, then initiates a transfer to it.
  inputs:
    type: object
    required:
    - accessToken
    - country
    - bankId
    - accountNumber
    - amount
    - currency
    properties:
      accessToken:
        type: string
        description: OAuth2 client-credentials bearer token for the Authorization header.
      country:
        type: string
        description: Country code to list supported banks for (e.g. NG).
      bankId:
        type: string
        description: Identifier of the chosen destination bank.
      accountNumber:
        type: string
        description: Destination account number to resolve and pay out to.
      amount:
        type: number
        description: Amount to transfer in the major currency unit.
      currency:
        type: string
        description: ISO currency code for the transfer.
      narration:
        type: string
        description: Optional narration shown on the payout.
  steps:
  - stepId: listBanks
    description: Retrieve supported banks for the country to validate the chosen bank.
    operationId: listBanks
    parameters:
    - name: Authorization
      in: header
      value: "Bearer $inputs.accessToken"
    - name: country
      in: query
      value: $inputs.country
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      banks: $response.body#/data
  - stepId: resolveAccount
    description: Resolve the destination account name against the chosen bank.
    operationId: resolveBankAccount
    parameters:
    - name: Authorization
      in: header
      value: "Bearer $inputs.accessToken"
    requestBody:
      contentType: application/json
      payload:
        account_number: $inputs.accountNumber
        bank_id: $inputs.bankId
        country: $inputs.country
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      accountName: $response.body#/account_name
  - stepId: createRecipient
    description: Create a bank_account recipient using the resolved account details.
    operationId: createTransferRecipient
    parameters:
    - name: Authorization
      in: header
      value: "Bearer $inputs.accessToken"
    requestBody:
      contentType: application/json
      payload:
        type: bank_account
        country: $inputs.country
        currency: $inputs.currency
        bank_account:
          account_number: $inputs.accountNumber
          bank_id: $inputs.bankId
          account_name: $steps.resolveAccount.outputs.accountName
    successCriteria:
    - condition: $statusCode == 201
    outputs:
      recipientId: $response.body#/id
  - stepId: createTransfer
    description: Initiate the transfer to the verified recipient.
    operationId: createTransfer
    parameters:
    - name: Authorization
      in: header
      value: "Bearer $inputs.accessToken"
    requestBody:
      contentType: application/json
      payload:
        amount: $inputs.amount
        currency: $inputs.currency
        recipient_id: $steps.createRecipient.outputs.recipientId
        narration: $inputs.narration
    successCriteria:
    - condition: $statusCode == 201
    outputs:
      transferId: $response.body#/id
      transferStatus: $response.body#/status
  outputs:
    accountName: $steps.resolveAccount.outputs.accountName
    recipientId: $steps.createRecipient.outputs.recipientId
    transferId: $steps.createTransfer.outputs.transferId
    transferStatus: $steps.createTransfer.outputs.transferStatus