TruPoints is a super-aggregator. One integration, and your loyalty program can earn, lock, switch and burn across FreeByte, Reloadly, SA telcos and retail vouchers — without writing a line of code per rail.
freebyte.airtimeFreeByte airtime · EMEAfreebyte.dataFreeByte data · EMEAreloadly.giftcardReloadly gift cards · 140+ countriesreloadly.airtimeReloadly airtime · 150+ countriesreloadly.dataReloadly data bundles · globalreloadly.payoutReloadly Perq payout linksreloadly.cardReloadly virtual money cardssatelco.airtimeSA telcos · Voda / MTN / Tel / CCretail.voucherRetail vouchers · Shoprite / PnP / TakealotBurn member value to any supported rail. Idempotent. Returns provider-native transaction ID + audit hash.
{
"member_id": "mem_01HF...",
"amount_zar": 50.00,
"rail": "reloadly.giftcard",
"rail_options": {
"product_id": "shoprite_zar",
"denomination": 50
},
"idempotency_key": "burn_2026_06_05_xyz"
}Move member value into regulated escrow with a date or rule-based unlock. Powers stokvel pots, birthday rewards and save-to-burn programmes.
{
"member_id": "mem_01HF...",
"amount_zar": 200.00,
"unlock_at": "2026-12-15T00:00:00Z",
"allowed_rails": ["retail.voucher", "satelco.airtime", "reloadly.giftcard"]
}All outbound events are HMAC-SHA256 signed. Verify before processing — never trust the payload.
// Verify HMAC-SHA256 signature
const expected = createHmac('sha256', process.env.TP_WEBHOOK_SECRET)
.update(rawBody).digest('hex');
if (!timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
return new Response('Invalid signature', { status: 401 });
}The full openapi.json ships once the JV closes and sandbox keys are issued. Email devs@trupoints.co.za for early access.