Agent Operations
For merchants who also act as InnBucks cash points β tuck shops, agents, retail counters. Two tools: withdrawal codes (customer takes cash out at your till) and bank change (send small change straight to a customer's wallet).
Withdrawal codes β customer cash-out
The customer wants cash from their InnBucks wallet; you have cash in the drawer. The flow:
You create a code
POST /v1/agent/withdrawal_codes for the amount the customer wants.
Customer claims it
They enter the code (or scan the QR) in their InnBucks app β their wallet is debited.
You hand over cash
Status flips to redeemed; your platform balance is credited the same amount.
curl https://omniway.online/v1/agent/withdrawal_codes \
-H "Authorization: Bearer sk_live_..." -H "Content-Type: application/json" \
-H "Idempotency-Key: till3-cashout-0611-001" \
-d '{"amount_cents": 2000, "currency": "USD"}'
# β { "id":"β¦", "status":"pending", "code":"794104062",
# "qr_png_data_url":"data:image/png;base64,β¦", "expires_at":"β¦" }
Track it with GET /v1/agent/withdrawal_codes/:id (statuses: pending β redeemed,
or expired after the 10-minute window) β or just wait for the
withdrawal.redeemed webhook and release the cash when it arrives.
redeemedThe claim in the customer's app is what debits their wallet. Until your system sees
status: "redeemed" (poll or webhook), no money has moved β don't open the drawer.
Bank change β change to wallet, instantly
Cash purchase, no coins for change? Push the change straight to the customer's InnBucks wallet by phone number. Instant (2β10 s), no code, no inquiry; capped at USD 5.00 per InnBucks rules.
curl https://omniway.online/v1/agent/bank_changes \
-H "Authorization: Bearer sk_live_..." -H "Content-Type: application/json" \
-H "Idempotency-Key: till3-change-0611-014" \
-d '{
"amount_cents": 150,
"currency": "USD",
"destination_msisdn": "263772000111",
"narration": "Change β till 3"
}'
# β { "status": "sent", β¦ } debited from your platform balance
destination_msisdnmust be the full international format:263XXXXXXXXX.- Amounts above 500 cents USD are rejected before anything moves (
bank_change_limit). - The debit comes off your balance under the same no-overdraft guarantees as payouts; if the gateway refuses, the debit is automatically compensated.
Look up a customer first
Confirm you're sending to the right person before bank change or any wallet operation:
curl "https://omniway.online/v1/account/lookup?msisdn=263772000111" \
-H "Authorization: Bearer sk_live_..."
# β { "first_name":"Farai", "last_name":"Gumbo",
# "accounts":[{"account_number":"3007720001110","currency":"USD"}] }
Show the name to the cashier (βsend $1.50 to Farai G.?β) β the same check the platform performs before your own payouts.