arazzo: 1.0.1 info: title: Flutterwave Direct Orchestrator Transfer And Verify summary: Initiate a one-call Orchestrator transfer with inline sender and recipient, then verify the payout status. description: >- The fastest path to a cross-border payout. The workflow uses the Orchestrator transfer helper to combine sender, recipient, and movement details in a single request, then retrieves the resulting transfer to confirm whether it succeeded, is still processing, or failed. 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: direct-orchestrator-transfer-verify summary: Initiate an Orchestrator transfer in one call and verify the payout status. description: >- Packages sender, recipient, and movement into a single Orchestrator transfer call, then retrieves the transfer and branches on whether it succeeded or failed. inputs: type: object required: - accessToken - amount - currency properties: accessToken: type: string description: OAuth2 client-credentials bearer token for the Authorization header. amount: type: number description: Amount to transfer in the major currency unit. currency: type: string description: ISO currency code for the transfer. senderId: type: string description: Optional existing sender id to attach to the transfer. recipientId: type: string description: Optional existing recipient id to attach to the transfer. narration: type: string description: Optional narration shown on the payout. meta: type: object description: Optional metadata for the transfer. steps: - stepId: initiateTransfer description: Initiate the transfer in a single Orchestrator call. operationId: initiateOrchestratorTransfer parameters: - name: Authorization in: header value: "Bearer $inputs.accessToken" requestBody: contentType: application/json payload: amount: $inputs.amount currency: $inputs.currency sender_id: $inputs.senderId recipient_id: $inputs.recipientId narration: $inputs.narration meta: $inputs.meta successCriteria: - condition: $statusCode == 201 outputs: transferId: $response.body#/id initialStatus: $response.body#/status - 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.initiateTransfer.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: transferId: $steps.initiateTransfer.outputs.transferId transferStatus: $steps.verifyTransfer.outputs.transferStatus