Moniepoint · Arazzo Workflow

Moniepoint Recurring Mandate Debit

Version 1.0.0

Create a direct-debit mandate, activate it, debit it, then read the mandate back.

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

Provider

moniepoint

Workflows

recurring-mandate-debit
Create, activate, and debit a direct-debit mandate, then confirm it.
Create a direct-debit mandate, activate it with the activation code, debit a configured amount against it, and read the mandate back to confirm its status.
4 steps inputs: activationCode, customerAccountNumber, customerBankCode, customerName, debitAmount, debitReference, endDate, mandateAmount, mandateDescription, narration, startDate outputs: debitStatus, mandateCode, mandateStatus, transactionReference
1
createMandate
createMandate
Create a direct-debit mandate against the customer's bank account; it is returned pending activation.
2
activateMandate
activateMandate
Submit the activation code to move the mandate from PENDING to ACTIVATED.
3
debitMandate
debitMandate
Debit the configured amount against the now-active mandate.
4
confirmMandate
getMandate
Read the mandate back to confirm its activated status after debiting.

Source API Descriptions

Arazzo Workflow Specification

moniepoint-recurring-mandate-debit-workflow.yml Raw ↑
arazzo: 1.0.1
info:
  title: Moniepoint Recurring Mandate Debit
  summary: Create a direct-debit mandate, activate it, debit it, then read the mandate back.
  description: >-
    Set up and exercise a recurring NIBSS direct-debit mandate. This workflow
    creates a mandate against a customer's bank account, activates it from
    PENDING to ACTIVATED with an activation code, debits a configured amount
    against the active mandate, and reads the mandate back to confirm its
    ACTIVATED status. 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: directDebitApi
  url: ../openapi/monnify-direct-debit-api-openapi.yml
  type: openapi
workflows:
- workflowId: recurring-mandate-debit
  summary: Create, activate, and debit a direct-debit mandate, then confirm it.
  description: >-
    Create a direct-debit mandate, activate it with the activation code, debit a
    configured amount against it, and read the mandate back to confirm its
    status.
  inputs:
    type: object
    required:
    - mandateDescription
    - mandateAmount
    - customerName
    - customerAccountNumber
    - customerBankCode
    - startDate
    - endDate
    - activationCode
    - debitAmount
    - debitReference
    - narration
    properties:
      mandateDescription:
        type: string
        description: Description of the mandate.
      mandateAmount:
        type: number
        description: Maximum mandate amount.
      customerName:
        type: string
        description: Name of the customer the mandate is against.
      customerAccountNumber:
        type: string
        description: Customer bank account number to debit.
      customerBankCode:
        type: string
        description: Customer bank code.
      startDate:
        type: string
        description: Mandate start date (YYYY-MM-DD).
      endDate:
        type: string
        description: Mandate end date (YYYY-MM-DD).
      activationCode:
        type: string
        description: Activation code used to activate the mandate.
      debitAmount:
        type: number
        description: Amount to debit against the active mandate.
      debitReference:
        type: string
        description: Unique merchant reference for the debit.
      narration:
        type: string
        description: Narration for the debit.
  steps:
  - stepId: createMandate
    description: >-
      Create a direct-debit mandate against the customer's bank account; it is
      returned pending activation.
    operationId: createMandate
    requestBody:
      contentType: application/json
      payload:
        mandateDescription: $inputs.mandateDescription
        mandateAmount: $inputs.mandateAmount
        customerName: $inputs.customerName
        customerAccountNumber: $inputs.customerAccountNumber
        customerBankCode: $inputs.customerBankCode
        startDate: $inputs.startDate
        endDate: $inputs.endDate
    successCriteria:
    - condition: $statusCode == 200
    - condition: $.requestSuccessful == true
      context: $response.body
      type: jsonpath
    outputs:
      mandateCode: $response.body#/responseBody/mandateCode
      status: $response.body#/responseBody/status
  - stepId: activateMandate
    description: >-
      Submit the activation code to move the mandate from PENDING to ACTIVATED.
    operationId: activateMandate
    requestBody:
      contentType: application/json
      payload:
        mandateCode: $steps.createMandate.outputs.mandateCode
        activationCode: $inputs.activationCode
    successCriteria:
    - condition: $statusCode == 200
    - condition: $.responseBody.status == 'ACTIVATED'
      context: $response.body
      type: jsonpath
    outputs:
      status: $response.body#/responseBody/status
  - stepId: debitMandate
    description: >-
      Debit the configured amount against the now-active mandate.
    operationId: debitMandate
    requestBody:
      contentType: application/json
      payload:
        mandateCode: $steps.createMandate.outputs.mandateCode
        amount: $inputs.debitAmount
        debitReference: $inputs.debitReference
        narration: $inputs.narration
    successCriteria:
    - condition: $statusCode == 200
    - condition: $.requestSuccessful == true
      context: $response.body
      type: jsonpath
    outputs:
      transactionReference: $response.body#/responseBody/transactionReference
      debitStatus: $response.body#/responseBody/status
  - stepId: confirmMandate
    description: >-
      Read the mandate back to confirm its activated status after debiting.
    operationId: getMandate
    parameters:
    - name: mandateCode
      in: path
      value: $steps.createMandate.outputs.mandateCode
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      status: $response.body#/responseBody/status
  outputs:
    mandateCode: $steps.createMandate.outputs.mandateCode
    debitStatus: $steps.debitMandate.outputs.debitStatus
    transactionReference: $steps.debitMandate.outputs.transactionReference
    mandateStatus: $steps.confirmMandate.outputs.status