Skip to content

Selling Wi-Fi access ​

How to take money for Wi-Fi: connect a payment gateway, decide which plans you sell and at what price, put them on a buy panel page or on your captive portal, and then follow every sale through Finance and the Payment report. This page is the walkthrough from start to finish; the pages it links to hold the full field lists.

How selling works in Kiwire ​

Whatever the guest buys, they get the same thing back: an access code. Kiwire creates the code the moment the payment gateway confirms the payment. On the buy panel it is shown on screen and the guest types it on your Wi-Fi login page like any other voucher; on the captive portal Kiwire can sign the guest in with it straight away. The code is an ordinary voucher on Account › Vouchers, on the profile of the plan they bought, so speed, data and time limits all come from that profile.

There are two places to sell:

Buy panelCaptive portal payment
Where the guest buysA web page at its own address, https://<your-kiwire-host>/buy/<slug>, which you can share as a link or a QR codeInside the Wi-Fi login page, as one of the login methods of a journey
PlansPlan groups, each with its own plans and optional zone restrictionOne list of plans
How long the code stays validVoucher Validity on the payment method, 365 days unless you change itValidity (days) on each plan; 0 means it never expires
After payingThe guest sees the code and uses it on the Wi-FiThe guest is signed in automatically, or continues the journey (your choice)
Your own success and failure pagesYes, designed in the buy panel Page DesignerYes, designed in the captive portal Page Designer, or a web address to land on after sign-in
Tax shown on the confirmationYesOn your own success page ({tax_amount}, {tax_rate})
Guest can see codes bought earlier in the same visitYes (Your Purchases)No

Use the buy panel for selling before arrival (a link in a booking email, a QR code at reception) and when guests should be able to buy on mobile data. Use the captive portal payment for someone already standing in range of the Wi-Fi who wants to pay and get online in one go.

Before you start ​

  • A merchant account with your payment gateway, with its sandbox (test) credentials and its live credentials.
  • A profile for each plan you will sell on Account › Profiles — the speed, data allowance and time each plan gives. See Profiles, bandwidth and quotas.
  • Currency and tax on System › Settings, General card: Default Currency and GST/VAT Rate (%). New payment methods start with these values. Use the same currency on your payment methods, because the Finance overview adds up sales in the default currency only.
  • The voucher prefix on System › Settings, Voucher & Topup card: Default Prefix is put in front of every code the buy panel sells (BP when it is blank). Codes sold on the captive portal start with the payment method's own Voucher Prefix (PAY when it is blank). See Settings, card by card.
  • Buy Panel in your licence and role. If the Buy Panel menu or Finance is missing, see Licence and add-ons and the permissions at the end of this page.

Step 1: Connect the payment gateway ​

The gateway is set up once, as a connector, and every payment method then points at it.

  1. Go to Grow › Connectors, click Add Connector and choose Payment Gateway (an existing one opens from its card).
  2. Give it a Name you will recognise in a dropdown, for example Stripe – live or Billplz – lobby.
  3. Choose the Provider and set Mode to Sandbox (test) for now.
  4. Fill in the credentials for that provider (table below).
  5. Copy the URLs shown on the form into the gateway's dashboard where it asks for them (see The URLs to register).
  6. Make sure Active is on and click Save.

There is no test button on this form: the way to test a gateway is a sandbox purchase, described in Test before you go live.

Saved keys and passwords are never shown again. To keep a stored credential when you edit the connector, leave its field blank; type a new value only to replace it.

What each gateway asks for ​

ProviderFields on the formCurrencyWhere to find them, and what to set in the gateway
StripePublishable Key, Secret Key, and the Offer Alipay switchAny your Stripe account acceptsStripe dashboard, Developers → API keys. Offer Alipay shows Alipay next to cards on the Stripe payment page: turn Alipay on in your Stripe dashboard (Settings → Payment methods) first and check it supports your currency, or checkout fails. With the switch off, Stripe shows whatever payment methods your dashboard has switched on.
toyyibPayUser Secret Key, Category CodeMYR onlytoyyibPay dashboard. Create a category there and paste its code. Sandbox accounts at dev.toyyibpay.com have their own key.
BillplzAPI Secret Key, Collection ID, X Signature KeyMYR onlySettings → Keys & Integration for the two keys (make sure X Signature is enabled); Billing → Collections for the Collection ID. Sandbox accounts at billplz-sandbox.com have their own keys.
PayPalClient ID, Secret KeyYour PayPal account's currencies; MYR needs a Malaysian merchant accountThe REST API app in the PayPal Developer dashboard.
senangPayMerchant ID, Secret KeyMYR onlyIn the senangPay dashboard set Hash Type to SHA256 (HMAC) and leave Return URL Parameters empty.
iPay88Merchant Code, Merchant KeyAs agreed with iPay88Issued by iPay88. iPay88 has no public sandbox: in Sandbox mode use the test merchant account iPay88 gives you.
PayfastMerchant ID, Merchant Key, PassphraseZAR onlyPassphrase only if one is set on your Payfast account.
AdyenMerchant Account, API Secret Key, HMAC Key, Live URL Prefix, CountryAs your Adyen account allowsAPI Secret Key: Customer Area → Developers → API credentials, with the Checkout webservice role. Live URL Prefix (Live mode only): Developers → API URLs, the part before -checkout-live.adyenpayments.com. Country decides which payment methods Adyen offers (MY if blank). Set Adyen's standard webhook to the Callback URL, with HMAC enabled.
Alipay (Antom)Client ID, Region, Merchant Private Key, Antom Public Key, Wallet, Settlement CurrencyAs your Antom contract allowsFor taking Alipay without Stripe; needs an Antom merchant account (Antom is Alipay's merchant service). Client ID: Antom Dashboard → Developer → Quick start (sandbox client IDs start with SANDBOX_). Region: Asia, North America or Europe — Asia for Malaysia. Both keys: Developer → Key configuration (upload the public half of your private key there). Wallet: Alipay (China) unless you choose AlipayHK or Touch 'n Go eWallet, which your contract must include. Settlement Currency only if your contract settles in more than one currency. Paste the Callback URL as the payment notification URL in the Antom Dashboard.
Fiuu PayMerchant ID, Secret Key, Verify KeyAs your Fiuu account allowsFiuu merchant portal.

A gateway that only accepts one currency refuses any other: a toyyibPay connector behind a payment method priced in USD shows the guest an error instead of a payment page. Set the payment method's Currency to match.

Wirecard and the old Alipay connector are retired. An existing connector of either kind shows as retired and can no longer take payments: create a new connector with another provider, point your payment methods at it, then delete the old one. A connector that a payment method still uses cannot be deleted.

The URLs to register ​

The connector form shows these addresses, each with a copy button. They are the same for every gateway and every payment method on your tenant.

Field on the formAddressWhat it is for
Return URLhttps://<your-kiwire-host>/buy/payment/returnWhere the gateway sends the guest back after paying.
Callback URLhttps://<your-kiwire-host>/buy/payment/callbackThe gateway telling Kiwire, server to server, that a payment went through. Some gateways call it the IPN, webhook or notification URL.
Notification URLthe same address as the Callback URLShown separately because some dashboards use that name.
Cancel URLhttps://<your-kiwire-host>/buy/payment/cancelWhere the guest lands after cancelling.

Kiwire sends these addresses with every payment, so most gateways need nothing registered. Register them where your gateway's dashboard asks: the Callback URL as the webhook in Adyen and as the notification URL in Antom are required, and if a gateway asks for a return or callback URL during merchant setup, give it these.

The callback matters even when guests come back normally: a guest who closes the browser on the gateway's page still gets their purchase recorded, and the buy panel creates their code, as soon as the callback arrives.

Step 2: Decide what you sell and at what price ​

A plan is what the guest picks: a label such as 1 Day Pass, the profile it buys, a price and an optional one-line description. Plans live on a payment method, which also says which gateway connector takes the money.

  • The price you type is what the guest pays. It includes tax. When a tax rate applies, Kiwire works out the tax part of the price for the confirmation page and Finance; it does not add tax on top.
  • The profile sets what the guest gets — speed, data, time online. The profile's own price is shown in the dropdown as a hint; the plan's price is the one charged.
  • A plan needs a profile and a price above zero to be offered. A plan without one is kept but not shown to guests.
  • Each payment method has one currency (three-letter code such as MYR, USD, SGD).

Selling on the buy panel ​

A buy panel is built from four parts, all under Portals › Buy Panel: a payment method (the plans), page templates, a journey that strings the pages together, and a configuration that publishes the journey at an address. The model is the same as the captive portal's and is explained in Designers and journeys.

1. Create the payment method ​

  1. Go to Portals › Buy Panel › Login Methods, click Add Form Submission and choose Payment Gateway.

  2. Fill in:

    FieldWhat to enter
    ActiveOn.
    NameFor your own use, for example Paid WiFi Access.
    Payment GatewayThe connector from Step 1.
    CurrencyPre-filled with your default currency.
    Reference PrefixStarts each payment reference, so BP gives BP- followed by 12 characters. Use a different prefix per method if you want to tell sales apart at a glance.
    Voucher Validity (days)How long a code stays usable after purchase. 365 if left blank.
  3. Under Plan Groups click Add Group, give the group a name (required — for example Day passes), and click Add Plan for each plan: Plan Label, Profile, Price and Description. Add more groups the same way, for example Weekly and Monthly.

  4. Zone Restriction on a group (optional): codes bought from that group only work in the zones you pick. Every group is still shown on the buy panel; the restriction applies when the code is used.

  5. Under Advanced Configuration:

    • Success Page and Failed Page — the buy panel pages shown after payment (step 2 below). Leave them empty to use Kiwire's standard pages.
    • Tax Rate — pre-filled from GST/VAT Rate (%) in Settings. Set 0 if no tax applies.
  6. Click Save.

The other methods on the same page — registered account, Google, Microsoft Entra, social, WhatsApp and email OTP, Active Directory, SAML and voucher — let a buyer sign in before buying. Signing in is optional: a buy panel can go straight to the plans.

2. Design the pages ​

On Portals › Buy Panel › Page Designer, click New Template and build:

  • A plans page — start from the Payment Page block. Select any element inside its form, click Form Submit in the editor's top bar and choose your payment method. Without this link the page shows No payment method linked. Payment Theme changes the colours of the plan cards.
  • A success page (optional) — start from the Success Page block. These placeholders are replaced with the real values: {voucher_code}, {plan_label}, {amount}, {currency}, {tax_amount}, {tax_rate}, {reference}, {paid_at} and {back_url} (a link back to the plans). Variables in the editor lists them. Make sure the code is prominent — it is what the guest needs to get online.
  • A failed page (optional) — start from the Failed Page block: {error_message}, {plan_label}, {amount}, {currency}, {reference} and {back_url}.

Publish each template. Only published templates can be chosen as the success or failed page, so if you built them after the payment method, go back to the method and select them now.

3. Build and publish the journey ​

On Portals › Buy Panel › Journey, click New Journey, open it in the Editor, and place a Start, your pages and an End on the canvas: for example Start → plans page → End, or Start → sign-in page → plans page → End. Click Publish. The success and failed pages are not part of the journey — the payment method shows them.

4. Publish it at an address ​

  1. Go to Portals › Buy Panel › Configuration and click New.
  2. Enter a Name; the Slug fills itself in (lower-case letters, numbers and hyphens) and becomes the address: https://<your-kiwire-host>/buy/<slug>.
  3. Choose the published Journey, leave Active on, and optionally fill in SEO Title and SEO Description — what search engines and link previews show.
  4. Click Save.

The Slug column has a copy-link button and a QR button. Share Buy Panel shows the QR code with Copy URL and Download QR, ready for a reception card, a room tent card or a booking confirmation email.

The buy panel is served from the same address as your captive portal, so a guest who is connected but not yet signed in can open it, as long as your walled garden allows the gateway's payment pages (see Selling on the captive portal). Guests can also buy on mobile data or before they arrive.

Guest accounts ​

A buyer who signs in to the buy panel with Google, social sign-in, WhatsApp or email OTP gets a buy panel account, listed on Portals › Buy Panel › Guest Accounts with their login source and status. When the payment page asks for contact details, the name, email and phone they type are saved on that account. Suspend stops the account signing in to the buy panel (Reactivate undoes it); Delete removes it. Neither touches access codes already bought — those are vouchers, managed on Account › Vouchers.

Selling on the captive portal ​

  1. Go to Portals › Captive Portal › Login Methods, click Add Method and choose Payment.
  2. Fill in Name, Payment Gateway (the connector) and Currency, then click Add Plan for each plan: Plan Label, Profile, Price, Validity (days) and Description. Validity is how many days the code bought with that plan stays valid from purchase; 0 means it never expires. If no gateway is configured yet, the form says so and links to the connector.
  3. Under Advanced Configuration:
    • After Successful Payment — Login user signs the guest in to the Wi-Fi with their new code as soon as they come back from the gateway. Continue journey returns them to the portal and moves on to the page you connected after the payment button in the journey; they finish signing in with the Continue Login button.
    • Success Page — either a published captive portal page template, shown after payment, or a web address (URL) the guest is sent to once signed in. Placeholders in the template are filled in: {voucher_code}, {plan_label}, {amount}, {currency}, {validity}, {tax_amount}, {tax_rate}, {reference} and {back_url} (back to the portal). Leave it empty for Kiwire's own page with the code.
    • Failed Page — a published page template shown when the payment fails or is cancelled, with {error_message}, {plan_label}, {amount}, {currency}, {reference} and {back_url}. Leave it empty for Kiwire's own message.
    • Zone Restriction limits the zones where this payment method is offered.
    • Tax Rate — the tax included in the plan price, recorded with each sale for your success page and Finance. Pre-filled from GST/VAT Rate (%) in Settings; set 0 if no tax applies.
    • Voucher Prefix — letters and digits (up to 20) put in front of every code this method sells, for example WIFI gives WIFI followed by 8 characters. Leave it blank for PAY.
  4. Click Save.
  5. In Portals › Captive Portal › Page Designer, add the Payment Page block to a page and link its form to the payment method with Form Submit, as on the buy panel.
  6. Also offer Voucher Login in the same journey. A guest whose payment comes back on a different browser session (for example after switching browsers or devices) is shown the code instead of being signed in, and types it there; a guest can also use the code again later until it expires.
  7. Publish the templates and the journey. See Login methods and Designers and journeys.

Payment methods saved before Validity (days) was added show 1 in each plan and keep issuing one-day codes until you change the figure and save.

The walled garden. A guest paying on the captive portal is not online yet, so the controller must let their browser reach the gateway's payment pages before sign-in. For MikroTik and UniFi, System › Device Controller → select the controller → Site Provisioning has an Allow payment gateways before login option that adds the payment pages of toyyibPay, Billplz, senangPay, iPay88, PayPal, Payfast, Adyen and Alipay. For Stripe, Fiuu Pay and any other controller, add the gateway's payment-page domains to the controller's walled garden by hand. See Walled garden and redirect. If the payment page never loads for a guest on the Wi-Fi but loads fine on mobile data, this is the cause.

Test before you go live ​

  1. With the connector in Sandbox (test) mode, open the buy panel address (or connect to the Wi-Fi for a captive portal payment) and buy the cheapest plan with the gateway's test card or test account.
  2. Check that you land on the success page with an access code.
  3. Sign in to the Wi-Fi with that code and check the speed and limits are the ones you expected.
  4. Check the sale on Insight › Reporting › Payment and Grow › Finance › Voucher sales.
  5. Try a cancelled payment and check the guest gets back to the plans.
  6. Then open the connector, change Mode to Live (production), enter the live credentials (sandbox and live keys are different for most gateways), and Save. Make one small real purchase to confirm.

What the guest sees ​

On the buy panel

  1. They open the link or scan the QR code. If the journey starts with a sign-in page, they sign in first.
  2. They see the plans, with one tab per plan group when there is more than one, and a Search plans... box.
  3. They tap a plan. With toyyibPay, Billplz, senangPay, iPay88 and Fiuu Pay an Order Summary asks for Your Contact Information — name, email and phone, filled in already if they signed in — and a Pay button with the amount. With the other gateways they go straight to the gateway.
  4. They pay on the gateway's own page (card, FPX, wallet — whatever your gateway account offers).
  5. They come back to your success page, or Kiwire's Payment Successful! page, showing Your Access Code, the plan, the amount, the tax (when a tax rate applies), the reference and the time paid, with a reminder to save the code. Back to Plans returns to the buy panel.
  6. Back on the buy panel, a Your Purchases button lists the codes bought in this browser during the visit, in case they lose the success page.
  7. They connect to the Wi-Fi and enter the code on the login page.

On the captive portal

  1. They connect to the Wi-Fi and the login page shows the plans as buttons.
  2. They tap a plan and go to the gateway's page — no contact form.
  3. They pay on the gateway's page.
  4. Back on the Wi-Fi, with Login user they are signed in at once and land on your success page (or web address), or on Kiwire's Payment Successful page with the code to keep for signing in again. With Continue journey they go on through the portal and tap Continue Login to finish.
  5. If Kiwire can't sign them in automatically — the gateway sent them back in a different browser, for example — they see Payment Successful — Here is your voucher code — with a Copy button, the plan and the amount, and Back to login, where they enter the code.

While the gateway is still confirming the payment, the guest sees Confirming your payment, with a note not to pay twice and a Check again button; the page also re-checks by itself. As soon as the gateway confirms, the code appears.

If they cancel or the payment fails, they see Payment was cancelled. or Payment was not successful. Please try again or use another payment method. (or your failed page, if you set one) and can choose a plan again. Nothing is charged and no code is created.

Receipts ​

Kiwire does not email a receipt. The guest's record of the purchase is the success page — code, plan, amount, tax, reference and time paid — so design your buy panel success page to be worth a screenshot. Any receipt email comes from the payment gateway, under the gateway's own settings.

To send something of your own — a thank-you email, a row in a spreadsheet, a message to staff — use the Payment received event of a Webhook connector, which fires for every completed online payment. See Automation tools.

Following the money ​

Finance ​

Grow › Finance has three tabs:

  • Overview — pick a month: Revenue by source (Voucher sales (online), Plan purchases (online), and ISP subscriptions if you use ISP) and by payment method, Refunds, Expenses and Profit, with the last 12 months side by side. Click a month's bar to open it. Refunds includes online sales you marked as refunded (see Refunds), in the month of the sale. Export 12 months downloads the figures as CSV for your accountant; it needs export-finance.
  • Voucher sales — every voucher created in the date range with its payment: code, profile, plan, Price, Payment status, whether the code is Unused, Active or Expired, and the gateway. Filter by Start Date, End Date and Payment Provider, then Apply. The cards at the top — Total Revenue, Total Payments, Vouchers Sold, Vouchers Activated, Pending and Failed / cancelled — also filter the list when clicked. Click a row for the full Payment Detail, including the gateway's own reference and a Manage Voucher link. Export downloads the list (needs export-finance).
  • Plan purchases — paid online purchases that are not tied to a voucher code (refunded ones are left out). Online sales normally create a code, so a row here usually means the code was deleted afterwards; open it on the Payment report to check.

Vouchers you generate by hand on Account › Vouchers also appear under Voucher sales, with no payment, so you can see sold and printed codes side by side. Only sales in your default currency are added up on the Overview. More on the page itself: Finance.

Payment report ​

Insight › Reporting › Payment is the plain list of every payment attempt. Click Load Report, set From Date, To Date, Status (Paid, Pending, Failed, Cancelled, Refunded) and Provider, and load. It shows Total Transactions, Paid Transactions and Revenue (Paid), and a row per attempt with date and time, reference, the access code, plan, amount, provider, status and when it was paid. Click a row for the Transaction Detail: gateway reference, connector, the tax included in the price (when a tax rate applied, for example MYR 0.17 (6%)), device MAC (captive portal purchases) and the linked account with its status, profile, expiry, login count and last login, plus View Account, and Mark as refunded on a paid payment (see Refunds). The report can be exported, and scheduled by email on Insight › Reporting › Scheduled Reports. See Payment.

This is the place to answer "I paid but got nothing": search the reference or the time of the payment, and the row tells you whether the gateway confirmed it and which code was issued.

Alerts ​

Failing paid Wi-Fi checkouts are one of the things Insight › Monitoring › Alerts watches. See Alerts.

Failed, pending and cancelled payments ​

StatusWhat it meansWhat to do
PaidThe gateway confirmed the payment and a code was created.Nothing. A paid payment is never changed back, even if a late failure message arrives.
PendingThe guest started paying and the gateway has given no answer yet — they may still be on the gateway's page, or closed it.Usually nothing: it turns Paid when the gateway's callback arrives. If it stays pending and the guest says they were charged, check the payment in the gateway's dashboard using the reference, and make sure the Callback URL is registered where your gateway needs it.
FailedThe gateway declined or the payment could not be started.The guest can try again. If every attempt fails, check the connector's credentials and mode, and the method's currency.
CancelledThe guest cancelled on the gateway's page.Nothing.
RefundedAn administrator marked a paid payment as refunded.Nothing more in Kiwire; the money is returned through the gateway.

A guest paid but has no code. Look the payment up on the Payment report. If it is Paid, the row shows the code — read it to the guest, or find it on Account › Vouchers. If the gateway shows the money taken but Kiwire still shows Pending, the confirmation never reached Kiwire: compare the reference in the gateway's dashboard and, if the payment is genuine, give the guest a voucher by hand from Account › Vouchers on the same profile.

Refunds ​

Gateways don't tell Kiwire about refunds, so you make the refund at the gateway and then record it in Kiwire. To refund a guest:

  1. Refund the payment in your gateway's dashboard, using the reference from the Payment report.
  2. On Insight › Reporting › Payment, find the payment and click it to open the Transaction Detail.
  3. Click Mark as refunded and type a Reason (required).
  4. To stop the code being used, tick Also suspend the voucher and disconnect the guest. The code (or account) is suspended and anyone online with it is disconnected. Leave it unticked and the voucher keeps working; you can still suspend it later on Account › Vouchers (open All vouchers, find the code and click Suspend).
  5. Confirm. The status becomes Refunded.

What changes once a payment is marked refunded:

  • Grow › Finance › Overview still counts the sale in revenue, and counts it again under Refunds in the month of the sale, so net revenue and profit no longer include it. The Plan purchases tab leaves it out.
  • The Payment report shows it as Refunded; Revenue (Paid) no longer includes it.
  • The Audit Trail records who marked it, the amount, the reason and whether the voucher was suspended (event payment.refunded).
  • It can't be undone, and a late "paid" message from the gateway won't turn it back into paid.

Only Paid online payments can be marked refunded. A payment of an ISP invoice is refunded from the invoice under ISP instead, so the subscriber's statement stays right (see Running a small ISP).

Top-up codes ​

Top-up codes add time or data to an account a guest already has, rather than giving them a new one. They are not sold through a gateway: you generate them on Account › Topup Code — with a plan name, price, minutes, data and expiry — and sell or hand them out yourself, and the guest redeems one with the Top-up login method on the captive portal. See Vouchers and top-up codes and Account, voucher and top-up fields.

Who can do what ​

TaskPermission
Set up the payment gateway connectormanage-connector-payment-gateway
See buy panel payment methods / add or change themview-buy-panel-login-method / edit-buy-panel-login-method
Buy panel templates and the Configuration pageview-buy-panel-designer, plus create-, edit-, delete- and publish-buy-panel-designer
Buy panel journeysview-buy-panel-journey, create-, edit-, delete-buy-panel-journey
See Guest Accounts / suspend or delete themview-buy-panel-user / delete-buy-panel-user
Captive portal payment methodview-signin-method, edit-signin-method
Financeview-finance
Finance exports (Export 12 months, Voucher sales Export)export-finance — Admin, Manager and Viewer have it; tick it on a custom role
Payment report and its exportview-report-payment-transactions
Mark as refunded on the Payment reportrefund-payment-transactions — Admin only by default
Suspend a sold codedelete-vouchers

The full list by licence module is in Permissions.

Common problems ​

What you seeWhy, and what to do
This buy panel is currently inactive.The configuration's Active switch is off.
This buy panel is not yet published.The journey on the configuration is a draft. Publish it.
No entry page configured for this buy panel. or Entry page template not found.The journey's first page has no template, or the template is unpublished.
The plans area says No payment method linked.The plans page's form is not linked to a payment method. Use Form Submit in the Page Designer.
The plans area says No plans configured.Every plan is missing a profile or has a price of 0, or the payment method is switched off.
Payment gateway not configured. when a plan is chosenThe connector is switched off, deleted, or retired. Point the payment method at an active connector.
Payment gateway error. Please try again.The gateway refused to start the payment: wrong credentials, live keys in sandbox mode or the other way round, or a currency the gateway does not accept (toyyibPay, Billplz and senangPay take MYR only, Payfast ZAR only).
The gateway's page never loads for a guest on the Wi-FiThe controller's walled garden does not allow the gateway. See Selling on the captive portal.
This service has reached its monthly login limit.The buy panel stops selling when your licence's monthly login allowance is used up, because a code bought then could not be used. See Licence and add-ons.
The code does not work on the Wi-FiCheck it on Account › Vouchers: expired (check the plan's validity), suspended, or bought from a plan group restricted to other zones.
Captive portal codes last only one dayThe plan's Validity (days) is 1 — methods saved before the field existed keep 1 until edited. Change it and Save.
The guest paid on the captive portal but wasn't signed in automaticallyTheir browser came back from the gateway without their portal session (another browser or app). They were shown the code; they enter it with Voucher Login.
Export / Export 12 months is missing on FinanceYour role lacks export-finance.
A sale is missing from the Finance overviewIt was in a different currency from your Default Currency. It is still on the Voucher sales tab and the Payment report.

Last updated:

Kiwire platform documentation