Skip to main content
Dynamic accounts are short-lived, one-time-use bank account numbers. They are designed to streamline payments by ensuring the funds received match a specific, expected amount. They automatically expire after a time limit you define. This is ideal for invoicing, one-time checkouts, or any scenario where you need to tie a payment directly to a specific transaction.

Supported Corridors

meCash Dynamic accounts currently support:
  • Nigeria (NGN)
  • Malawi (MWK)

How it Works: The Transaction Flow

This diagram shows the complete lifecycle of a dynamic virtual account, from creation to successful payment.

Common Use Cases

Dynamic accounts are highly effective for managing one-to-one payments.
  • E-commerce Checkouts: Generate a unique account for every customer’s cart. This provides a secure, one-time payment channel and simplifies reconciliation, as each successful payment maps directly to an order.
  • Invoice Payments: When issuing an invoice to a client, attach a dynamic account for the exact invoice amount. You’ll get an instant webhook when it’s paid, automating your accounts receivable.
  • Event Ticketing: Create a unique account for each ticket reservation. The account can expire after 15 minutes, automatically releasing the ticket back into the pool if not paid.
  • Top-ups & Credits: Assign a dynamic account for a user’s wallet top-up request. Once paid, you can be certain the funds are for that specific user and credit their wallet automatically.

API Reference: Create Dynamic Virtual Account

Explore the API Reference for POST /v1/virtual-account/dynamic, including schema definitions and testing tools.

Request examples

Custom naming behavior

If you provide a accountName, the same string is applied to the newly created dynamic account. When the field is not supplied, we automatically use the workspace’s registered business name. The accountName must be alphabetical.
When expiry time elapses, data.status changes to INACTIVE

Standard currency-specific examples

Successful response

copy

Response fields

Error responses

Webhooks

Payments to the dynamic account trigger webhooks:
  • virtualaccount.completed — deposit succeeded and the wallet was credited.
  • virtualaccount.failed — payment attempt failed or expired.
Check webhooks-event for payload schemas and signature verification instructions.

Best practices

  • Pass accountName when you need customer-facing labeling (campaigns, store fronts). Skip it to fall back to your registered business name automatically.
  • Use a unique reference per transaction to keep your ledger idempotent.
  • Expire accounts as soon as the invoice is paid by deleting or ignoring them once you receive the webhook.
  • Display a countdown timer in your UI using the expiryTime so payers know when the account will close.