Skip to content

API overview ​

The vendor API uses /api/v1 on this production base URL:

https://redemption.fluxr.co.za

The examples use BASE_URL and TOKEN as placeholders.

Supported voucher providers ​

Providerprovider valueTypeHow it's selected
OTTottRetail voucherAuto-detected from the code
1Voucher (Flash)onevoucherRetail voucherAuto-detected from the code
FNB Voucher (Flash)fnbRetail voucherExplicit provider, or fallback when BluVoucher does not recognise a 16-digit code
BluVoucherbluvoucherRetail voucherAuto-detected from the code
Standard Bank Instant Moneystandard_bankBank cash-outExplicit provider + pin
Nedbank CashOutnedbankBank cash-outExplicit provider + pin
CapiteccapitecBank cash-outExplicit provider + pin

All redemptions settle in ZAR.

Authentication ​

Every endpoint requires a Bearer token:

http
Accept: application/json
Content-Type: application/json
Authorization: Bearer {{TOKEN}}

Create and manage API keys in the Fluxr console under Sign in > API keys. Keys can carry an optional expiry and scoped abilities (redeem, read:wallet, read:redemptions); the plaintext token is shown once at creation.

Keep API keys on your server:

  • Store the token in an environment variable such as FLUXR_API_TOKEN.
  • Do not commit it or ship it in a browser or mobile app.
  • Revoke and replace a key as soon as you suspect it has been exposed.
dotenv
FLUXR_API_BASE_URL=https://redemption.fluxr.co.za
FLUXR_API_TOKEN=your_token_here

Response envelopes ​

Success:

json
{
  "success": true,
  "message": "OK",
  "data": {}
}

Error:

json
{
  "success": false,
  "message": "Human-readable message",
  "errors": {
    "field": ["ERROR_CODE"]
  }
}

For redemption failures, branch on errors.provider[0]. The message contains display text for that response. See error codes.

Validation shape

Request validation that fails before the controller runs returns Laravel's raw validation response. It has message and errors, but no success key. Do not display these validation messages to customers without reviewing them first.

The redemption lifecycle ​

POST /api/v1/redemptions returns one of these outcomes:

OutcomeHTTPWhat to do
Succeeded201 for a new redemption or 200 for a completed re-submissionCredit your customer. Read the updated balance from data.wallet.
Already redeemed422 + ALREADY_REDEEMEDShow the message to the customer; do not retry.
Failed definitively422 + a code from Error CodesShow the message; retry only where the code allows it.
Pending confirmation409 + PENDING_CONFIRMATIONDo not submit the voucher again. Poll GET /api/v1/redemptions/{id} until the status changes.

Fluxr keeps the result for ALREADY_REDEEMED, EXPIRED, and CANCELLED, so a repeat submission does not call the provider. Fluxr checks INVALID_VOUCHER and INACTIVE again on a later submission because those states can change. You can retry PROVIDER_DOWN after a short delay.

Pagination ​

List endpoints return data.items plus a data.meta block:

json
{
  "meta": {
    "current_page": 1,
    "last_page": 4,
    "per_page": 15,
    "total": 52
  }
}

Pass per_page from 1 to 100. The default is 15. Use ?page=N to request the next page.

Getting access ​

Integration is invite-based. Request access on WhatsApp at +263 77 922 2722 and we'll set up your vendor account and console access.