Moniepoint · Arazzo Workflow

Moniepoint KYC Verified Virtual Account

Version 1.0.0

Match a customer BVN to their bank account, then reserve a KYC-bound virtual account and confirm it.

1 workflow 2 source APIs 1 provider
View Spec View on GitHub AfricaNigeriaPaymentsBankingFintechAcquiringPoint-of-SaleCollectionDisbursementsVirtual AccountsDirect DebitBills PaymentSMBWorking CapitalUnicornArazzoWorkflows

Provider

moniepoint

Workflows

kyc-reserve-account
Verify a customer BVN, then reserve a KYC-bound virtual account when the match passes.
Match the customer BVN to their bank account and branch: when the BVN matches, reserve a permanent NUBAN virtual account carrying the verified BVN and confirm it; when it does not match, end the workflow.
3 steps inputs: accountName, accountReference, bankCode, bvn, bvnAccountNumber, contractCode, currencyCode, customerEmail, customerName outputs: accountReference, accounts, matchStatus, status
1
matchBvn
Verify the customer BVN belongs to the owner of the supplied bank account.
2
reserveAccount
Reserve a permanent NUBAN virtual account carrying the verified BVN.
3
confirmAccount
Read the reserved account back to confirm it is ACTIVE and surface the issued NUBAN details.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
arazzo: 1.0.1
info:
  title: Moniepoint KYC Verified Virtual Account
  summary: Match a customer BVN to their bank account, then reserve a KYC-bound virtual account and confirm it.
  description: >-
    Run a KYC check before provisioning a customer virtual account. This
    workflow matches the customer's BVN against a bank account they own, and
    only when the match succeeds reserves a permanent NUBAN virtual account
    carrying the verified BVN, then reads the account back to confirm it is
    ACTIVE. 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
  x-realizes-capability-ids:
  - BC-1300.20
  x-capability-derivation:
    method: 'deterministic join: sourceDescriptions -> per-tag OpenAPI -> tag/capability edge. No classification at this step.'
    min_confidence: 0.7
    sources:
    - capability_id: BC-1300.20
      capability_name: KYC & Customer Due Diligence Management
      spec: moniepoint-verification-api-openapi.yml
      confidence: 0.78
    model: Turbo EA Capabilities by Vincent Verdet — Turbo EA, https://github.com/vincentmakes/turbo-ea-capabilities, CC BY 4.0
sourceDescriptions:
- name: reservedAccountsApi
  url: ../openapi/moniepoint-reserved-accounts-api-openapi.yml
  type: openapi
- name: verificationApi
  url: ../openapi/moniepoint-verification-api-openapi.yml
  type: openapi
workflows:
- workflowId: kyc-reserve-account
  summary: Verify a customer BVN, then reserve a KYC-bound virtual account when the match passes.
  description: >-
    Match the customer BVN to their bank account and branch: when the BVN
    matches, reserve a permanent NUBAN virtual account carrying the verified BVN
    and confirm it; when it does not match, end the workflow.
  inputs:
    type: object
    required:
    - bvn
    - bankCode
    - bvnAccountNumber
    - accountReference
    - accountName
    - currencyCode
    - contractCode
    - customerEmail
    properties:
      bvn:
        type: string
        description: Customer BVN to verify.
      bankCode:
        type: string
        description: Bank code of the account the BVN should own.
      bvnAccountNumber:
        type: string
        description: Bank account number to match the BVN against.
      accountReference:
        type: string
        description: Unique merchant reference for the reserved account.
      accountName:
        type: string
        description: Display name for the reserved account.
      currencyCode:
        type: string
        description: ISO currency code for the account (e.g. NGN).
      contractCode:
        type: string
        description: Monnify contract code the account is created under.
      customerEmail:
        type: string
        description: Email of the customer the account is reserved for.
      customerName:
        type: string
        description: Name of the customer the account is reserved for.
  steps:
  - stepId: matchBvn
    description: >-
      Verify the customer BVN belongs to the owner of the supplied bank account.
    operationId: matchBvnToAccount
    requestBody:
      contentType: application/json
      payload:
        bvn: $inputs.bvn
        bankCode: $inputs.bankCode
        accountNumber: $inputs.bvnAccountNumber
    successCriteria:
    - condition: $statusCode == 200
    - condition: $.requestSuccessful == true
      context: $response.body
      type: jsonpath
    outputs:
      matchStatus: $response.body#/responseBody/matchStatus
    onSuccess:
    - name: bvnMatched
      type: goto
      stepId: reserveAccount
      criteria:
      - context: $response.body
        condition: $.responseBody.matchStatus == 'MATCHED'
        type: jsonpath
  - stepId: reserveAccount
    description: >-
      Reserve a permanent NUBAN virtual account carrying the verified BVN.
    operationId: reserveAccountV2
    requestBody:
      contentType: application/json
      payload:
        accountReference: $inputs.accountReference
        accountName: $inputs.accountName
        currencyCode: $inputs.currencyCode
        contractCode: $inputs.contractCode
        customerEmail: $inputs.customerEmail
        customerName: $inputs.customerName
        bvn: $inputs.bvn
    successCriteria:
    - condition: $statusCode == 200
    - condition: $.requestSuccessful == true
      context: $response.body
      type: jsonpath
    outputs:
      accountReference: $response.body#/responseBody/accountReference
      status: $response.body#/responseBody/status
  - stepId: confirmAccount
    description: >-
      Read the reserved account back to confirm it is ACTIVE and surface the
      issued NUBAN details.
    operationId: getReservedAccountV2
    parameters:
    - name: accountReference
      in: path
      value: $steps.reserveAccount.outputs.accountReference
    successCriteria:
    - condition: $statusCode == 200
    - condition: $.responseBody.status == 'ACTIVE'
      context: $response.body
      type: jsonpath
    outputs:
      status: $response.body#/responseBody/status
      accounts: $response.body#/responseBody/accounts
  outputs:
    matchStatus: $steps.matchBvn.outputs.matchStatus
    accountReference: $steps.reserveAccount.outputs.accountReference
    status: $steps.confirmAccount.outputs.status
    accounts: $steps.confirmAccount.outputs.accounts

Work with this as data

Every workflow here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for arazzo workflows

4 MCP tools reach this
  • find_arazzoBrowse and filter every workflow in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This workflow
curl "https://apis.io/api/v1/arazzo/moniepoint-kyc-reserve-account-workflow"
All arazzo workflows
curl "https://apis.io/api/v1/arazzo?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.