Paying bills from your ChariPay payment account: phone, water, electricity, road tax
Pay phone, water, electricity or road-tax bills from your ChariPay payment account balance: five steps, two one-time codes, SMS receipt, no extra fees.
Paying bills from your payment account means settling a phone, water, electricity or road-tax bill directly with the money you have collected, without waiting for it to reach your bank. On ChariPay, every successful payment is available instantly in your payment account; from the portal, you pick the biller, enter the reference printed on the notice, select the unpaid bills found, confirm with two one-time codes and get a receipt. The amount is debited from your available balance, with no extra fees. This article walks through the five steps, what you can pay, who in your organization is allowed to do it, and how each paid bill lands in your books.
Paying a bill from the money you collect, without going through the bank
The usual routine of a merchant has three beats: collect, wait for the money to be paid out to the bank, then pay the bills from the bank. Between the first beat and the third, an electricity bill can fall due while the money to pay it has already been collected — but is not yet available.
The ChariPay payment account removes that wait. It is a payment account held by Chari Money, a payment institution licensed by Bank Al-Maghrib, with a RIB in your company's name and a downloadable PDF certificate. Every successful payment — by card or in cash at an agency — is available there instantly, and this payment account works like a real account: you can pay your bills without going through your bank. The page on the payment account in Morocco describes this account in detail, what it is and what it is not.
Bill payment is one of the ways money leaves the account, alongside a bank transfer from the payment account to a Moroccan bank account and telecom top-ups through the API. The payout to your bank remains a separate operation, triggered on demand or run automatically every night once a settlement account is configured; the Wallet and payouts page explains how it works. The payment account complements your bank; it does not replace it. It simply spares you from routing every dirham through the bank before you can use it.
You can explore the portal and this flow before committing a single real dirham: Start in test mode. Three fields — name, work e-mail, company — then an activation link sent by e-mail to set your password; you then create your test key from the portal and make a first payment with the test card. It is free, with no time limit and no approval to wait for: the verification of your company (KYB) only gates the move to production.
Which billers
From the portal, you settle bills and receivables with the referenced billers: phone, water, electricity, road tax and more. The list of available billers is displayed right in the portal's bill-payment screen — that list is the authoritative one, not a static list in an article.
What you need in order to pay is the reference printed on the payment notice or on the biller's invoice. That reference identifies your contract or file with the biller; it is what the portal uses to look up your unpaid bills. There is nothing else to type: neither the amount nor the due date — both come back from the biller.
This service is designed for your company's bills: the office phone lines, the water and electricity of the premises, the road tax of company vehicles. It is not a consumer bill-payment service; it is one of the uses of your company's payment account, just like a bank transfer.
The five-step flow
The flow is the same for every biller. It takes place in the merchant portal, in the payment-account area.
- 1Choose the biller. In the bill-payment screen, select the referenced biller you want to pay.
- 2Enter the reference. Type the reference printed on the notice or invoice. The portal queries the biller and displays the unpaid bills found for that reference.
- 3Select the bills. Tick one or more bills among those found. The total to be paid is displayed before any confirmation.
- 4Confirm with the two codes. This is an outgoing operation: the portal shows the amount and asks you to enter the two one-time codes you received. The codes are valid for five minutes.
- 5Collect the receipt. Once the payment is executed, the portal shows the operation's authorization code, and the receipt is sent by SMS to the payer.
Nothing is debited before the confirmation in step 4. Up to that point you can abandon the flow at any time without any money leaving the account.
What it costs
The portal states it in one line, under the unpaid bills found: debited from your available balance · no extra fees. What leaves your payment account is the amount of the bill, and nothing else.
What matters, then, is the available balance. Before paying a large bill, check that it covers the amount; if you are expecting payments, remember that they become available the instant a payment succeeds, and that you can also fund the account through the API with POST /v1/wallet/cash-ins. Bill payment requires no option or subscription: it comes with the payment account, like the RIB and the certificate.
Receipt, support, bookkeeping
The receipt. Every bill paid produces a receipt sent by SMS to the payer. It carries the operation's authorization code. Keep that code with the bill: it is what you will be asked for if a question comes up.
Support. If a biller has not registered your payment, or for any question about a bill you paid, biller support is reachable on 115, with the authorization code printed on the receipt. That is exactly what the code is for: finding the operation on the biller's side without any argument about dates or amounts.
Bookkeeping. A bill payment is an outgoing movement of your account, traced with its reference and date, just like a transfer or a refund. It appears in the account history with the biller and the reference paid, in the CSV export of transactions, and through the API in the transaction list with the type BILL_PAYMENT. Your accountant has no slip to reconstruct: the line already carries everything needed to match it to the bill. The article on reconciling your payments with your books explains how these outgoing movements fit into the daily reconciliation, next to the incoming ones.
Roles: who can pay a bill
Paying a bill sends money out of the account. The portal therefore applies the same separation as for a transfer: an owner or authorized profile triggers the operation, an accountant profile reads everything without being able to trigger anything, and a cashier profile only collects — no balance, no transfer, no refund, no bill.
That separation becomes useful as soon as you are not alone on the account. The person running the shop collects from customers; the person running the business pays the bills; the person keeping the books views and exports. Every action is recorded with its author and date in the audit log, and sensitive actions require re-authentication. The two confirmation codes come on top of that: even an authorized profile cannot send money out without entering them.
From the portal or through the API
A bill payment is started from the portal: that is where the biller list, the unpaid-bill lookup and the two-code confirmation live. The API comes in before and after, in three places.
Before: the balance. The Wallet module of the API documentation exposes GET /v1/wallet, which returns the payment account balance in MAD for the key's environment. It is the call that lets your own back office show what you can commit today.
curl 'https://api-psp.charipay.ma/v1/wallet' \
-H 'X-CHARI-PAY-API-KEY: chari_sk_test_...'During: the webhook. Three events accompany a bill payment: bill_payment.pending, bill_payment.succeeded and bill_payment.failed. They reach your signed endpoint like any other event, with the Chari-Event-Type header to route them and Chari-Event-Id to deduplicate them. Declare them explicitly in your endpoint's event list.
app.post('/webhooks/charipay', express.raw({ type: '*/*' }), async (req, res) => {
const raw = req.body.toString('utf8');
if (!verify(raw, req.get('X-CHARI-SIGNATURE'), req.get('X-CHARI-TIMESTAMP'), secret)) {
return res.status(401).end();
}
const eventId = req.get('Chari-Event-Id');
if (await db.events.exists(eventId)) return res.status(200).end();
const type = req.get('Chari-Event-Type');
if (type === 'bill_payment.succeeded') {
await ledger.recordOutgoing('bill', JSON.parse(raw)); // the bill is settled
} else if (type === 'bill_payment.failed') {
await alerts.notifyFinance('bill-payment-failed', eventId);
}
await db.events.insert({ eventId });
return res.status(200).end();
});After: the statement. The transaction list accepts a type=BILL_PAYMENT filter, with a from / to period in ISO-8601; the same filter applies to the CSV export.
curl 'https://api-psp.charipay.ma/v1/transactions?type=BILL_PAYMENT&from=2026-10-01T00:00:00Z&to=2026-10-31T23:59:59Z' \
-H 'X-CHARI-PAY-API-KEY: chari_sk_test_...'The base URL is the same in sandbox and in production: the key picks the environment, and you can try these calls with a chari_sk_test_… key.
Frequently asked questions
Which bills can I pay?
The bills and receivables of the billers referenced in the portal: phone, water, electricity and road tax, among others. The exact list is the one displayed in the bill-payment screen, and that list is authoritative. For each biller, the reference printed on the notice or invoice is what lets the portal find your unpaid bills and offer them for payment.
Are there any fees?
The amount is debited from your available balance with no extra fees: what leaves the payment account is the amount of the bill. There is no option to subscribe to; bill payment is part of the account. The only practical condition is that your available balance must cover the amount when you confirm with the two codes.
Why two codes?
Because a bill payment is an outgoing operation, like a transfer: money leaves your account toward a third party. The portal shows the amount and asks for the two one-time codes you received, valid for five minutes. This double confirmation, on top of roles and re-authentication, protects your balance against a typing mistake as much as against unauthorized access.
Where do I find the receipt?
The receipt is sent by SMS to the payer as soon as the payment is executed, and the operation appears in your account history with its reference. The receipt carries the operation's authorization code: that is the code to give biller support, on 115, if a question arises about whether the payment was registered.
Can I pay a personal bill?
The payment account is opened in your company's name, and every bill paid leaves it as a company expense, traced in its history and exports. The service is designed for business bills: keep it for your company's, and ask your accountant before settling anything else from this account.
What if the reference cannot be found?
First check that you chose the right biller and copied the reference exactly as printed on the notice. If the biller returns no unpaid bill, it usually means there is nothing to pay for that reference right now — the bill is already paid or not yet issued. For a reference the biller does not recognize at all, the biller is the one to contact.
Next step
Open your test account with Start in test mode and explore the payment account, its RIB and the bill-payment screen. From there, the Wallet and payouts page describes everything this account allows, and the payment account in Morocco explains why a wallet with a RIB changes the way a business manages its cash.
Written by ChariPay team.