Moniepoint · Arazzo Workflow

Moniepoint Single Transfer With OTP

Version 1.0.0

Initiate a single transfer, branch on whether OTP authorization is required, authorize it, and confirm.

1 workflow 1 source API 1 provider
View Spec View on GitHub AfricaNigeriaPaymentsBankingFintechAcquiringPOSCollectionsDisbursementsVirtual AccountsDirect DebitBills PaymentSMBWorking CapitalUnicornArazzoWorkflows

Provider

moniepoint

Workflows

single-transfer-otp
Initiate a single transfer and authorize it with an OTP when required.
Validate the beneficiary, initiate the transfer, and branch on the returned status: authorize with an OTP when the transfer is pending authorization, otherwise confirm the settled status directly.
4 steps inputs: amount, authorizationCode, currency, destinationAccountNumber, destinationBankCode, narration, reference, sourceAccountNumber outputs: finalStatus, reference
1
validateBeneficiary
validateBankAccount
Resolve the beneficiary account name via Name Inquiry before initiating the transfer.
2
initiateTransfer
initiateSingleTransfer
Initiate the single transfer carrying the verified beneficiary account name.
3
authorizeOtp
authorizeSingleTransferOtp
Submit the OTP authorization code to authorize the pending transfer.
4
confirmStatus
getSingleTransferStatus
Confirm the final status of the transfer by querying its summary.

Source API Descriptions

Arazzo Workflow Specification

moniepoint-single-transfer-otp-workflow.yml Raw ↑
arazzo: 1.0.1
info:
  title: Moniepoint Single Transfer With OTP
  summary: Initiate a single transfer, branch on whether OTP authorization is required, authorize it, and confirm.
  description: >-
    Single transfers can require two-factor authorization with an OTP dispatched
    to the merchant. This workflow validates the beneficiary account, initiates
    the transfer, and branches: when the transfer comes back awaiting OTP it
    submits the authorization code and then confirms the final status, and when
    the transfer is already settled it skips straight to confirmation. 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: disbursementsApi
  url: ../openapi/monnify-disbursements-api-openapi.yml
  type: openapi
workflows:
- workflowId: single-transfer-otp
  summary: Initiate a single transfer and authorize it with an OTP when required.
  description: >-
    Validate the beneficiary, initiate the transfer, and branch on the returned
    status: authorize with an OTP when the transfer is pending authorization,
    otherwise confirm the settled status directly.
  inputs:
    type: object
    required:
    - destinationAccountNumber
    - destinationBankCode
    - amount
    - reference
    - narration
    - currency
    - sourceAccountNumber
    - authorizationCode
    properties:
      destinationAccountNumber:
        type: string
        description: Beneficiary bank account number to pay out to.
      destinationBankCode:
        type: string
        description: NIP bank code of the beneficiary bank.
      amount:
        type: number
        description: Amount to transfer.
      reference:
        type: string
        description: Unique merchant reference for the transfer.
      narration:
        type: string
        description: Narration shown on the transfer (max 100 chars).
      currency:
        type: string
        description: ISO currency code for the transfer (e.g. NGN).
      sourceAccountNumber:
        type: string
        description: Merchant disbursement wallet account number to debit.
      authorizationCode:
        type: string
        description: OTP authorization code dispatched to the merchant.
  steps:
  - stepId: validateBeneficiary
    description: >-
      Resolve the beneficiary account name via Name Inquiry before initiating
      the transfer.
    operationId: validateBankAccount
    parameters:
    - name: accountNumber
      in: query
      value: $inputs.destinationAccountNumber
    - name: bankCode
      in: query
      value: $inputs.destinationBankCode
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      accountName: $response.body#/responseBody/accountName
  - stepId: initiateTransfer
    description: >-
      Initiate the single transfer carrying the verified beneficiary account
      name.
    operationId: initiateSingleTransfer
    requestBody:
      contentType: application/json
      payload:
        amount: $inputs.amount
        reference: $inputs.reference
        narration: $inputs.narration
        destinationBankCode: $inputs.destinationBankCode
        destinationAccountNumber: $inputs.destinationAccountNumber
        destinationAccountName: $steps.validateBeneficiary.outputs.accountName
        currency: $inputs.currency
        sourceAccountNumber: $inputs.sourceAccountNumber
    successCriteria:
    - condition: $statusCode == 200
    - condition: $.requestSuccessful == true
      context: $response.body
      type: jsonpath
    outputs:
      reference: $response.body#/responseBody/reference
      status: $response.body#/responseBody/status
    onSuccess:
    - name: needsAuthorization
      type: goto
      stepId: authorizeOtp
      criteria:
      - context: $response.body
        condition: $.responseBody.status == 'PENDING_AUTHORIZATION' || $.responseBody.status == 'OTP_EMAIL_DISPATCH'
        type: jsonpath
    - name: alreadySettled
      type: goto
      stepId: confirmStatus
      criteria:
      - context: $response.body
        condition: $.responseBody.status == 'SUCCESS' || $.responseBody.status == 'PENDING'
        type: jsonpath
  - stepId: authorizeOtp
    description: >-
      Submit the OTP authorization code to authorize the pending transfer.
    operationId: authorizeSingleTransferOtp
    requestBody:
      contentType: application/json
      payload:
        reference: $steps.initiateTransfer.outputs.reference
        authorizationCode: $inputs.authorizationCode
    successCriteria:
    - condition: $statusCode == 200
    - condition: $.requestSuccessful == true
      context: $response.body
      type: jsonpath
    outputs:
      status: $response.body#/responseBody/status
  - stepId: confirmStatus
    description: >-
      Confirm the final status of the transfer by querying its summary.
    operationId: getSingleTransferStatus
    parameters:
    - name: reference
      in: query
      value: $steps.initiateTransfer.outputs.reference
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      status: $response.body#/responseBody/status
      amount: $response.body#/responseBody/amount
  outputs:
    reference: $steps.initiateTransfer.outputs.reference
    finalStatus: $steps.confirmStatus.outputs.status