API · Money movement

QR codes

Generate EMVCo-compliant merchant-presented QR payloads. Static QRs sit on your shopfront and accept any amount; dynamic QRs encode a specific PaymentIntent. Any compliant wallet (Waafi, SabaPay, D-Money) can scan.

EMVCo MPM2 endpoints

Endpoints

POST/v1/qr/static

Generate a static merchant-presented QR (any amount).

POST/v1/qr/dynamic

Generate a dynamic QR tied to a specific PaymentIntent.

Static QR

One QR per outlet, printed once, accepts any amount the customer types in. Best for shopfronts, taxi cabs, market stalls.

NameTypeDescription
outlet_idstringOptional — link payments to a specific outlet for reporting.
merchant_namestringDisplay name on the customer wallet (defaults to your trade name).
currency
required
ISO 4217"DJF" typical.
metadatamapFree-form key/value.

Dynamic QR

One QR per checkout — typically displayed on a POS screen. Encodes the amount, merchant, and a reference to the PaymentIntent. Customer scans, confirms, the intent settles.

NameTypeDescription
payment_intent
required
pi_Must be in requires_action status.
expires_atdatetimeWhen the QR stops being valid. Default: 5 minutes.

Sample · dynamic QR

bashbash
# 1) Create the intent (any provider that supports QR — waafi, sabapay, dmoney)
curl -X POST https://api.merashub.com/v1/payment_intents \
  -H "Authorization: Bearer sk_test_..." \
  -d '{ "amount": 50000, "currency": "DJF", "provider": "waafi" }'
# → "id": "pi_..."

# 2) Wrap it in a QR
curl -X POST https://api.merashub.com/v1/qr/dynamic \
  -H "Authorization: Bearer sk_test_..." \
  -d '{ "payment_intent": "pi_...", "expires_at": "2026-05-25T10:20:30Z" }'
201 Createdjson
{
  "id": "qr_01HZ...",
  "payload": "00020101021229...6304ABCD",
  "image_url": "https://api.merashub.com/v1/qr/qr_01HZ.../image.png",
  "expires_at": "2026-05-25T10:20:30Z",
  "payment_intent": "pi_..."
}

EMVCo MPM compliance

The payload is a standard EMVCo Merchant-Presented Mode (MPM) string. Any wallet implementing MPM (Waafi, SabaPay, D-Money, and global MPM-compatible wallets) can scan it. Render it as a QR code on your side via any QR library.