Skip to content

Interactive proof

Four things you can check yourself, instead of taking our word for it.

Everything below runs the platform's own code. The QR is minted in your browser by the package the merchant app calls; the settlement comparison uses the discount rate the ledger books; the advance is priced by the credit gateway and disclosed by the merchant app's own disclosure builder; the catalogue is read straight out of the VAS SDK. Where something is illustrative — a hypothetical shop's turnover, a hypothetical sale — it is the input that is hypothetical. None of the arithmetic is.

Nothing here talks to a live system, and there is nothing to sign in to. These are pure functions from the platform's shared packages, executed at build time or in your browser.

EMVCo merchant-presented QR

Mint a real payment QR, and watch it expire.

This is not a picture of a QR code. Choose an amount and the payload is assembled in your browser against your own clock — TLV-encoded, CRC-16 sealed, and valid for the ninety seconds the platform allows a dynamic code to live. Scan it with any QR reader and you will read the merchant name, the city, the amount and the reference; scan it with a South African bank app and it resolves as a payable merchant QR, because everything WynkPay-specific is confined to tag 26, which other schemes are required to ignore.

Computed by @wynkpay/qr — buildDynamicQr, decodeTlv, crc16Hex, parseQr

Static counter QR — reusable, no amount, no expiry
Amount to request

Changing the amount re-mints the payload and re-seals the checksum.

Without JavaScript this stays the static counter QR, which is a complete and scannable payload. With JavaScript, the amount selector mints a fresh dynamic code in your browser and counts down its expiry.

EMVCo payload 129 characters

00020101021126570013ZA.CO.WYNKPAY01364d7f1b02-9c3a-4d18-8f61-0a2e5b7c91d45204541153037105802ZA5913Nomsa's Spaza6006Soweto63048048

The merchant is fictional and the id is a fixed demo value, so nothing here is payable. A merchant-presented QR carries no secret in any case: it is designed to be printed and stuck to a counter.

Where a card fee goes

The same sale, on a card rail and on the closed loop.

Most of what a South African merchant pays to accept a card is not the acquirer's margin — it is interchange, the toll the scheme charges to move money between two banks. When the person paying and the shop being paid are both WynkPay accounts, that leg does not exist: the payment is a double-entry posting inside one database transaction, and there is no bank to pay for crossing between. This is the platform's own discount rate, per rail, applied to the sale you choose.

Computed by @wynkpay/types — Money · MDR_BY_RAIL from the API accept service

R100.00

Card present

2.75%

Interchange and acquiringR2.75
Merchant is creditedR97.25

The scheme's interchange and the acquirer's cost, withheld before the merchant is credited.

Closed loop

0.00%

Interchange and acquiringR0.00
Merchant is creditedR100.00

Both parties are WynkPay accounts. There is no interbank leg, so there is no interchange to withhold.

Scheme cost that stops existingR2.752.75% of the sale

This is the interchange leg only, not your bill. WynkPay's own published acceptance fee on this sale is R0.75 (0.75%, capped at R7.50 — see the fee schedule). What the closed loop removes is the scheme's cut, not ours.

Rounding is half-up on the absolute value, in integer cents, which is what makes a fee and its refund exact mirrors.

Merchant cash advance

A priced offer, with the disclosure the Act requires.

Move the slider to a monthly turnover and the platform's credit gateway prices an offer against it: the eligibility rules, the Regulation 42 initiation fee, the Regulation 43 service fee, the Regulation 44 short-term interest cap, and an annual cost rate solved as an internal rate of return from the actual daily repayments. The table below is the merchant app's own disclosure block, in the app's order, with the app's labels.

Computed by @wynkpay/credit-ports — getOffer · @wynkpay/merchant-sdk — buildAdvanceDisclosure

R120 000.00 / month

The offer is sized on settlement we can already see — no application form, no bank statement, no guarantor.

You receiveR48 000.00
You repay in totalR56 672.00
Cost of creditR8 672.00over 90 days
Annual cost rate (NACR)293.70%disclosed under the NCA

The annual cost rate is high and is meant to be visible. A 90-day advance carries a fixed initiation fee and three months of service fee, and it is repaid a little every day rather than at the end — so the same rand cost annualises to a large percentage. The figure a shopkeeper decides on is the rand cost; the figure the National Credit Act insists they also see is the rate. Both are above.

What this credit costs — the NCA disclosure block
You receiveR48 000.00
Term90 days
Daily deduction16% of daily takings
Initiation feeR1 265.00
Service feeR207.00
InterestR7 200.00
Cost of creditR8 672.00
Total repayableR56 672.00
Annual cost rate (NACR)293.70% a year
Effective from2026-08-03

Outstanding balance, day by day

Repaid at 16% of each day's settlement — about R629.69 on an average trading day, clearing on day 90. A quiet day is a smaller instalment; nothing accrues and nothing bounces.

The rules the engine applied

Qualifying turnover
R5 000.00 settled over the trailing 30 days
Advance range
R500.00 to R150 000.00, and never more than 40% of trailing turnover
Affordability ceiling
The daily deduction may not exceed 25% of an average day’s settlement
Term
90 days
Also required
3 months trading, 20 trading days in the window, no arrears, and FICA tier T2
Offer validity
72 hours

The turnover is hypothetical and the merchant profile is a fixture — three months' trading, 26 trading days in the window, no arrears, FICA tier 2. Every number derived from it is computed by the production credit path, not estimated.

Value-added services

The catalogue the tills actually sell from.

There is one VAS catalogue for the whole platform, and this is it — eight tiers, every product, the denominations each one accepts, the aggregator that carries it and the commission the merchant earns on it. The merchant app's vend screen and the consumer app's buy screen read this same structure, which is why the price at the counter and the price in the app cannot disagree.

Computed by @wynkpay/vas-sdk — VAS_CATEGORIES, VAS_PRODUCTS, cacheableProducts

Filter by tier
T1 · Airtime4 products
ProductDenominationsYou earnOn a typical sale
Vodacom Airtime offlineflash · Cellphone numberR5.00 · R10.00 · R20.00 · R29.00 · R50.00 · R100.00 · R250.003.50%R1.02on a R29.00 sale
MTN Airtime offlineflash · Cellphone numberR5.00 · R10.00 · R20.00 · R29.00 · R50.00 · R100.00 · R250.003.50%R1.02on a R29.00 sale
Cell C Airtime offlinekazang · Cellphone numberR5.00 · R10.00 · R20.00 · R50.00 · R100.004.00%R0.80on a R20.00 sale
Telkom Airtime offlinekazang · Cellphone numberR5.00 · R10.00 · R20.00 · R50.00 · R100.004.00%R0.80on a R20.00 sale
T2 · Data3 products
ProductDenominationsYou earnOn a typical sale
Vodacom Data Bundle offlineflash · Cellphone numberR29.00 · R49.00 · R99.00 · R199.00 · R349.00 · R599.003.00%R2.97on a R99.00 sale
MTN Data Bundle offlineflash · Cellphone numberR29.00 · R49.00 · R99.00 · R199.00 · R349.00 · R599.003.00%R2.97on a R99.00 sale
Telkom Data Bundle offlineprepaid24 · Cellphone numberR29.00 · R49.00 · R99.00 · R199.00 · R349.00 · R599.003.00%R2.97on a R99.00 sale
T3 · Electricity2 products
ProductDenominationsYou earnOn a typical sale
Eskom Prepaid Electricitykazang · Meter numberAny amount R10.00–R5 000.001.20%R30.06on a R2 505.00 sale
Municipal Prepaid Electricityflash · Meter numberAny amount R10.00–R5 000.001.20%R30.06on a R2 505.00 sale
T4 · Water2 products
ProductDenominationsYou earnOn a typical sale
Municipal Prepaid Waterkazang · Meter numberAny amount R20.00–R2 000.001.00%R10.10on a R1 010.00 sale
Municipal Account Paymentflash · Account numberAny amount R50.00–R10 000.001.00%R50.25on a R5 025.00 sale
T5 · DStv and streaming4 products
ProductDenominationsYou earnOn a typical sale
DStv Easy Viewkazang · Smartcard numberR35.001.50%R0.53on a R35.00 sale
DStv Subscriptionkazang · Smartcard numberAny amount R29.00–R2 500.001.50%R18.98on a R1 265.00 sale
Showmax Voucher offlineprepaid24 · Nothing — it is a voucherR39.00 · R69.00 · R99.005.00%R3.45on a R69.00 sale
Netflix Gift Card offlineprepaid24 · Nothing — it is a voucherR150.00 · R250.00 · R500.005.00%R12.50on a R250.00 sale
T6 · Insurance2 products
ProductDenominationsYou earnOn a typical sale
Funeral Cover Premiumprepaid24 · Policy numberAny amount R50.00–R600.008.00%R26.00on a R325.00 sale
Device Insurance Micro-premiumprepaid24 · Policy numberAny amount R29.00–R199.008.00%R9.12on a R114.00 sale
T7 · Government and transport3 products
ProductDenominationsYou earnOn a typical sale
Traffic Fine (eNaTIS)flash · Notice numberAny amount R100.00–R20 000.000.80%R80.40on a R10 050.00 sale
Gautrain Card Top-upkazang · Account numberAny amount R20.00–R1 000.002.00%R10.20on a R510.00 sale
Taxi Association Fare Voucher offlinekazang · Nothing — it is a voucherR15.00 · R30.00 · R50.00 · R100.00 · R300.002.50%R1.25on a R50.00 sale
T8 · Gaming and social3 products
ProductDenominationsYou earnOn a typical sale
Steam Wallet Voucher offlineprepaid24 · Nothing — it is a voucherR100.00 · R250.00 · R500.00 · R1 000.006.00%R15.00on a R250.00 sale
Roblox Gift Card offlineprepaid24 · Nothing — it is a voucherR100.00 · R200.00 · R400.006.00%R12.00on a R200.00 sale
WhatsApp Business Bundle offlineflash · Cellphone numberR10.00 · R25.00 · R50.00 · R100.003.00%R0.75on a R25.00 sale

Catalogue version 2026-07-27.1 · 23 products · 13 available offline · commission 0.80% to 8.00%

Commission is the rate carried by that specific product. The fee schedule quotes category bands; where a band and a product differ, the product is what gets sold and the product is what is shown here.

Next

The rest of the platform is built the same way.

Every figure on this site traces to a package, a constant or a test. Where something is not yet live — a licence, a certification, a bank relationship — the trust register says so plainly rather than implying otherwise.

See what is live and what is not