arazzo: 1.0.1 info: title: Flutterwave Reuse Recipient Payout summary: Retrieve a saved recipient to confirm it exists, then send a transfer to it and verify the payout. description: >- A repeat-payout flow for recipients that were saved on a previous run. The workflow retrieves an existing transfer recipient to confirm it is still valid, initiates a transfer to that recipient, and retrieves the transfer to confirm its final status. Reusing a stored recipient avoids re-resolving and re-creating destination details on every disbursement. Branching on the transfer status lets the caller mark the payout complete or surface a failure. 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: transfersApi url: ../openapi/flutterwave-transfers-api-openapi.yml type: openapi workflows: - workflowId: reuse-recipient-payout summary: Confirm a saved recipient, send a transfer to it, and verify the payout. description: >- Retrieves the existing recipient, initiates a transfer to it, then branches on the verified transfer status. inputs: type: object required: - accessToken - recipientId - amount - currency properties: accessToken: type: string description: OAuth2 client-credentials bearer token for the Authorization header. recipientId: type: string description: Identifier of the saved recipient to reuse. 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: getRecipient description: Retrieve the saved recipient to confirm it still exists. operationId: getTransferRecipient parameters: - name: Authorization in: header value: "Bearer $inputs.accessToken" - name: id in: path value: $inputs.recipientId successCriteria: - condition: $statusCode == 200 outputs: recipientType: $response.body#/type recipientCurrency: $response.body#/currency - stepId: createTransfer description: Initiate a transfer to the confirmed 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: $inputs.recipientId narration: $inputs.narration successCriteria: - condition: $statusCode == 201 outputs: transferId: $response.body#/id - stepId: verifyTransfer description: Retrieve the transfer to confirm its final status. operationId: getTransfer parameters: - name: Authorization in: header value: "Bearer $inputs.accessToken" - name: id in: path value: $steps.createTransfer.outputs.transferId successCriteria: - condition: $statusCode == 200 outputs: transferStatus: $response.body#/status onSuccess: - name: transferSucceeded type: end criteria: - context: $response.body condition: $.status == "succeeded" type: jsonpath - name: transferFailed type: end criteria: - context: $response.body condition: $.status == "failed" type: jsonpath outputs: recipientType: $steps.getRecipient.outputs.recipientType transferId: $steps.createTransfer.outputs.transferId transferStatus: $steps.verifyTransfer.outputs.transferStatus