Developers
Bwiser Tapless Checkout
Add Bwiser to a station website, kiosk, POS web view, or forecourt platform. Start simple with one line of JavaScript, then graduate to signed server-to-server APIs when you need deeper control.
Choose your integration path
One-line checkout
Best for station websites, kiosk pages, or POS browser screens. Paste the script and Bwiser opens a secure checkout panel.
Signed partner API
Best for aggregators and native POS systems that need direct intent creation, authorization, redemption and reconciliation.
Station-scoped order
Every payment intent is tied to one approved station, so Johannesburg and Kroonstad can use the same POS reference without colliding.
Merchant queue
Station staff see incoming checkout requests on their merchant dashboard and process the correct request by reference, pump and amount.
One-line checkout
Use a public checkout key in the browser. Keep secret API credentials on your server only.
<script
src="https://bwiser.co.za/js/bwiser-checkout.js"
data-bwiser-public-key="bw_pk_live_xxxxx"
data-bwiser-station="12"
data-bwiser-reference="POS-10001"
data-bwiser-amount="250.00"
data-bwiser-pump="P3">
</script>
Production rule
Ask Bwiser to add your website or POS domain to the partner allowlist before going live. This prevents another site from reusing your public key.
Signed Partner API
Use this when your server needs to create, authorize, redeem and reconcile tapless payment intents directly.
https://bwiser.co.za/api/v1/partner/tapless
Authentication headers
X-Bwiser-Key your partner public key
X-Bwiser-Timestamp current unix timestamp
X-Bwiser-Signature HMAC_SHA256(timestamp + "." + raw_body, secret)
Credentials are issued by Bwiser
Each partner is mapped to approved stations and can only act within that assigned retail footprint.
Endpoints
GET /health
Confirm partner auth and available capabilities.
GET /stations
List the stations assigned to your partner account.
POST /intents
Create a tapless payment intent with station, reference, and voucher input.
GET /intents/{publicId}
Read the latest payment intent state and voucher payload.
POST /intents/{publicId}/authorize
Run voucher, geofence, and station checks before redemption.
POST /intents/{publicId}/redeem
Complete redemption and return the settled voucher result.
Quick start
1. Bwiser approves the station
A Bwiser admin links your partner account to the exact station or station group that may accept tapless payments.
2. Create an intent
Send station_id, external_reference, and one voucher identifier such as scan_input, code, or voucher_id.
3. Authorize the payment
Bwiser confirms the voucher is valid, belongs to the station, is not expired, and passes any active geofence rule.
4. Redeem and reconcile
Redeem the authorized intent and store the returned voucher payload as your source of truth for completion.
Example request
curl -X POST "https://bwiser.co.za/api/v1/partner/tapless/intents" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Bwiser-Key: YOUR_PUBLIC_KEY" \
-H "X-Bwiser-Timestamp: 1713388800" \
-H "X-Bwiser-Signature: YOUR_HMAC_SIGNATURE" \
-d '{
"station_id": 12,
"external_reference": "agg-forecourt-10001",
"voucher_id": 8451,
"device_latitude": -26.2041,
"device_longitude": 28.0473,
"pump_number": "P3"
}'
Operational notes
Ordering at busy stations
Use a unique external_reference from the POS and include pump_number where possible. The merchant dashboard shows newest open requests first with reference, pump, amount and partner name.
Webhooks
Configure a webhook URL to receive checkout intent events. Verify the X-Bwiser-Signature header with your webhook secret before trusting the payload.
Browser safety
Only public checkout keys belong in JavaScript. Signed API secrets must stay on your backend and should be rotated if exposed.