
Picture a traveller in a Dakar hotel room booking a tour for the next morning. She has picked a time, typed her name and pressed the button to pay. The site then sends her to another page with a different look and a different address, and asks for her card again. Many people carry on without thinking about it. Some stop to wonder whether they are still in the right place, and a few of those close the tab and go to bed.
Every business that sends customers away to pay loses a little in this way, and it rarely shows up anywhere, because people who give up halfway do not write in to complain. The surest way to stop that loss is to let the customer pay on the page they are already on. That is the job we built lomi. Payment Elements to do.
With Payment Elements, the card form sits inside your own checkout. The fields for the card number, expiry date and security code come from us, but they appear in your layout, beside your basket and under your own button. You can choose a light, dark or flat style and set the corner radius so the fields match the rest of the page. The card number the customer types never passes through your server, or through our API either.
The setup uses two keys, one for your server and one for your page. Your server uses the secret key to create a card charge, in CFA francs, euros or dollars, and gets back a short-lived client secret. Your page uses the publishable key to load the fields and confirm the payment with that secret. The secret key never leaves your server. In Safari, Apple Pay can appear above the card fields on the same page, and we register your domain for you when the fields load.
Mobile money works differently, because there is no card number to type. In Côte d'Ivoire, your server can start a Wave or MTN charge from your own checkout. With Wave, the customer approves the payment in the Wave app on their phone; with MTN, they confirm a prompt with their PIN. Until they do, the payment is pending, and your page should say so rather than announce success.
Whichever method the customer uses, we send your server a webhook when the payment completes, and you can check the transaction through the API. Deliver on that signal rather than on what the browser reports, since a customer can close the tab or lose signal halfway through.
Payment Elements suits teams who already have a site or an app and care how their checkout feels, such as a software company with its own sign-up flow or a ticketing site with a seat map. It works in native iOS and Android apps too, through our React Native SDK. If you would rather not build a payment screen at all, hosted checkout is still the quickest start, and our embedded widget can show that same checkout inside your page.
To try it, create test keys in the dashboard and follow the Payment Elements guide in our documentation. The sandbox accepts test cards, so you can watch the whole flow on your own page before a real customer does.
lomi. is payment infrastructure for francophone West Africa. Accept payments, send payouts, and automate financial workflows with ease. To learn more about what drives our product roadmap, read our blog, visit our GitHub, connect your AI agent to our services, or just create an account.