Skip to content
NOSTREL
Glossary

31 words,
defined properly.

Kenyan payments has a dialect. Somebody arriving from a card background knows what an acquirer is and has never met a paybill. Somebody who has run a shop for ten years knows exactly what a till is and has never heard of an idempotency key.

They end up in the same meeting, and most of the confusion in that meeting is vocabulary rather than disagreement. So: short definitions, written by people who implement the thing, with the part that actually trips people up included rather than left out for being inconvenient.

01M-Pesa

The rails themselves, and the words Safaricom uses for them.

B2B

Also: business to business, business paybill

A payment from one business shortcode into another, which is how money reaches a bank account.

Most Kenyan banks publish an M-Pesa paybill that credits an account at that bank. A withdrawal to a bank is therefore a B2B payment to the bank's shortcode with your account number as the reference, which is also why getting that shortcode right matters so much: the money arrives somewhere, and no callback tells you it was the wrong bank.

B2C

Also: business to customer, disbursement

A payment from a business to a customer's M-Pesa account. How payouts leave.

Salaries, supplier payments, rider earnings, refunds and farmer payments all ride this. It requires its own credentials and its own permissions, which is why sending money is a separate piece of setup from receiving it.

How payouts work

Daraja

Safaricom's developer API for M-Pesa. The thing a payment aggregator is talking to on your behalf.

Daraja means "bridge" in Swahili. Working with it directly is entirely possible and is mostly an exercise in handling its failure modes, which is the part an aggregator is actually selling.

MSISDN

The telecoms term for a phone number in full international form, such as 254712345678.

It appears in payments documentation because that is the format the network uses. The practical note: no plus sign and no leading zero. A number in local form is the most common reason a first integration produces no prompt at all.

Paybill

Also: C2B, business number

A business shortcode that customers pay into, quoting an account reference that tells the business which of its customers paid.

The account reference is the whole mechanism and the whole problem: it is typed by a person on a phone keypad, so it arrives wrong often enough to matter. Anything built on paybill needs a plan for a payment whose reference matches nothing.

Shortcode

The five or six digit number that identifies a business on M-Pesa. A paybill and a till are both shortcodes.

STK push

Also: Lipa na M-Pesa Online, express checkout, push payment

A payment request that makes a prompt appear on a customer's phone, which they accept by entering their M-Pesa PIN.

The name comes from the SIM Toolkit, which is the part of the handset that draws the menu. It matters commercially because the customer never types a business number or a reference, and mistyped references are where a large share of failed and unmatched payments come from. The trade is that it depends on a person finding their phone, which is the slowest step in any payment and not one you can engineer away.

How collections work

Till number

Also: Buy Goods, buy goods and services

A shortcode for paying over a counter, with no account reference to type.

Faster and less error-prone than a paybill at the point of sale, which is exactly why it suits a queue. The cost is that nothing in the payment says what it was for, so reconciling a day of till payments against a day of sales is manual unless something is recording the two together.

02Money and books

What an accountant means, which is not always what an engineer means.

Double entry

An accounting method where every movement of money is written twice, once as a debit and once as a credit, so the books have to balance.

It is five hundred years old and it is still the answer, because it turns "is this balance right" from a matter of trust into a matter of arithmetic. A system that stores a balance as a number it updates is a system where a bug silently changes the truth. A system that derives the balance from postings cannot do that without the imbalance being visible.

Float

Money held on your behalf that has not yet been settled out to you.

The question worth asking any platform is whether your float is tracked as yours specifically, as a liability against a settlement account, or whether it is one pooled number that gets apportioned later. The second is how a shortfall somewhere else becomes your problem.

Ledger

The record of every posting, from which balances are derived rather than stored.

The distinction matters. If your balance is a column somebody updates, then the balance is an assertion. If it is the sum of the postings, it is a conclusion, and you can always show the working.

Minor units

Also: cents, integer amounts

Money stored as a whole number of the smallest unit, so 1,850 shillings is 185000.

This exists because a floating-point number cannot represent most decimal fractions exactly, so 0.1 + 0.2 is famously not 0.3. In a money column that is a rounding error that compounds silently across millions of rows. Integers remove the entire class of bug.

Reconciliation

Checking that two independent records of the same money agree, and investigating every case where they do not.

In practice: our ledger against the provider's record of the same window. Done daily, by a job, with a queue of exceptions that a person closes. Done at month end, by hand, in a spreadsheet, it is the single most hated task in small-business finance in Kenya.

Reserve

Also: hold, held funds

Setting money aside when a payout is created, so it cannot be spent twice while the payout waits for approval.

Your available balance drops immediately; the debit becomes real only when the payment settles. Without this, two payouts created on the same afternoon can both be covered by the same shillings and one of them will fail at the worst possible moment.

Reversal

A completed payment undone at the provider, recorded as a new posting rather than by editing the original.

The distinction is the whole of good bookkeeping. Editing the original makes the history a lie; posting the reversal keeps both facts, which is what an auditor is going to ask for.

Settlement

Moving collected money out of the platform and into your own bank account or shortcode.

Separate from a collection succeeding. A payment can be confirmed, posted and visible in your balance while the settlement of it is still a day away, and conflating the two is how a cash-flow projection goes wrong.

03Building on it

The words that appear in an integration and nowhere else in your life.

Callback

The provider's webhook to us, telling us what happened to a payment.

Worth distinguishing from our webhook to you. The important property of the provider's callback is that it is unsigned, which means it proves nothing about who sent it, which is why a well-built platform does not credit anything on a callback alone.

Dead letter

Where a webhook delivery goes when it has run out of retries, so it is visible and replayable rather than lost.

HMAC

A signature computed from a message and a shared secret, which proves the message came from someone holding the secret and has not been altered.

Two things people get wrong. It must be computed over the exact bytes received, not a re-serialised copy, because re-serialising changes whitespace and key order. And it must be compared in constant time, because a normal comparison leaks how much of a guess was correct.

Idempotency key

A string you choose that lets you send the same request twice without it happening twice.

The scenario it exists for: your HTTP client times out, you cannot tell whether the request arrived, and the choices are to retry and maybe charge twice, or not retry and maybe not charge at all. With a key, the second request returns the first result. Use something from your own domain, such as an order number, because a random value generated at the call site changes on retry and so defeats the point.

How it works here

Sandbox

A test environment where payments behave realistically and no real money moves.

Worth asking whether a given sandbox is the provider's own or a mock. A mock reproduces the failure modes its author thought of, which by definition excludes the ones that catch people out.

Six failures to rehearse

Scope

A permission attached to an API key, limiting what that key can do.

A key that can read balances and not move money changes what a leaked environment variable costs you. Give your monitoring the read-only one.

Transactional outbox

Writing an event into the same database transaction as the thing it describes, then delivering it from there.

It removes the window where a payment is recorded and the notification about it is not, because there is no separate step that could fail between the two. Unglamorous, and the difference between a system that loses events occasionally and one that does not.

Webhook

An HTTP request we send to your server when something happens, rather than you asking us repeatedly.

The thing nobody says out loud: your webhook endpoint is a public URL that credits orders. Anyone can POST to it. The signature is what separates a real event from an invented one, and verifying it correctly is fiddlier than it looks.

Verifying one properly

04Rules

The vocabulary of the people who decide whether you are allowed to do this.

AML

Also: anti-money laundering, CFT

The obligations on a financial business to detect and report money being moved to disguise its origin.

In practice it means customer due diligence, screening against sanctions lists, monitoring for suspicious patterns, reporting what you find and keeping records long enough for somebody to check later.

Audit trail

A record of who did what and when, kept so that it can be checked afterwards by somebody who was not there.

The useful version is tamper-evident: each entry commits to the one before it by hash, so altering an old entry breaks every entry after it. That is a weaker claim than tamper-proof and it is the honest one.

Data Protection Act, 2019

Also: DPA, ODPC

Kenya's data protection law, which governs how personal data is collected, held, shared and deleted, and gives people rights over their own.

It applies whether or not a company is licensed for anything else, which is why it is the one framework that binds a pre-launch payments company today rather than at launch.

KYC

Also: know your customer, customer due diligence, CDD

Establishing who a customer actually is, before letting them move money, because the law requires it.

For a business it means the registered identity, the documents behind it and the people who ultimately control the company. It is tedious and it is the reason financial crime is harder than it would otherwise be, which is a reasonable trade even on the afternoon you are assembling the documents.

How ours works

Maker and checker

Also: four eyes, dual control

A rule that the person who creates a money movement cannot be the person who releases it.

Older than computers and still the single most effective control against both fraud and expensive mistakes, because it means one compromised laptop is not enough. The argument against it is always that it is slower, and that is true and is the point.

PEP

Also: politically exposed person

Someone holding a prominent public function, who is screened more carefully because of the bribery and corruption risk attached to the role.

Being a PEP is not an accusation and does not block anyone. It raises the level of diligence applied, and a match has to be reviewed by a person rather than acted on automatically, because name matching produces false positives constantly.

PSP

Also: payment service provider

A regulated category of business that provides payment services, which in Kenya generally requires authorisation from the Central Bank.

Running an aggregator on a shared shortcode almost certainly falls inside it. Worth asking any platform you are evaluating where they stand on this, and worth noticing whether the answer is specific.

Where we stand

A word we have missed?

If you had to look something up to read our documentation, that is a gap here and probably a gap in the documentation too. Tell us the word.