Guide

How to read a NIP transfer narration

Most rows on a Nigerian bank statement are transfers, not card payments. A transfer narration is free text that the bank writes, and each bank writes it in its own shape.

NIP is NIBSS Instant Payment, the rail that moves money between Nigerian banks in real time. This guide tells you what a NIP narration contains, and how Kederi reads each part. The examples are invented. A test runs each one through the engine and compares each answer on this page.

What a narration contains

A transfer narration can hold four things: the other party, a remark that the sender typed, the other bank, and a session id. A bank can leave out any of them. The order also changes from one bank to the next.

The remark is often the most useful part. "rent for august" and "salary for september" tell you why the money moved. Kederi returns the reason as intent, and a category to go with it.

Party, then remark

ShapeNIP/{bank}/{party}/{remark}
ExampleNIP/GTB/ADEBAYO CHUKWU/rent for august

Name Adebayo Chukwu, intent Rent, type transfer.

The same shape, another reason

ShapeNIP/{bank}/{party}/{remark}
ExampleNIP/ACCESS/NGOZI EZE/salary for september

Name Ngozi Eze, intent Salary.

The session id

Many narrations carry a 30 digit session id. Each NIP transfer has one. The id is not random: it has three parts that you can read.

The first 6 digits are the institution code of the bank that started the transfer. The next 12 digits are the date and the time, as YYMMDD HHMMSS. The last 12 digits are a sequence number.

The time is useful because a statement usually prints only a date. Kederi returns it as initiated_at, and it returns the bank as bank.

A session id and a remark only

Shape{session id} {remark}
Example000014260312091544000112934471 School fees term 2

Name Unknown counterparty, bank Access Bank, time 2026-03-12T09:15:44.

This narration names nobody, so the engine says so. It does not guess a name. The confidence is 0.5, lower than for a narration that names a party.

An inbound transfer with every part

ShapeCIP/CR/{sender}/{bank}/{session id}/{remark}/{reference}
ExampleCIP/CR/AMAKA NWOSU/ACCESS/000014240326074735000012345678/School fees/ZMO0012345

Name Amaka Nwosu, intent School fees, bank Access Bank, time 2024-03-26T07:47:35.

Which party the narration names

The account holder is one party to each transfer. The useful answer is the other party. Some shapes name only one party, and some name both.

If a shape names both parties, the direction of the row tells you which one to return. On a credit, the other party is the sender. On a debit, it is the recipient. Send the direction with the row, and Kederi uses it.

If you send no direction with a FROM ... TO narration, Kederi returns the recipient. The GTBank shape below is different: real statements show it only on credits, so Kederi returns the sender.

Both parties, on a debit

ShapeNIP FROM {sender} TO {recipient} {remark}
ExampleNIP FROM TOBI ADEYEMI TO KEMI ALABI rent

With no direction: name Kemi Alabi, the recipient.

Both parties, on a credit

ShapeNIP FROM {sender} TO {recipient} {remark}
Example, sent as a creditNIP FROM TOBI ADEYEMI TO KEMI ALABI rent

Name Tobi Adeyemi, the sender.

Transfer between customers

GTBankTRANSFER BETWEEN CUSTOMERS {reference}-{recipient}-{bank}-{sender}
ExampleTRANSFER BETWEEN CUSTOMERS 0123456789-TUNDE BAKARE-ZENITH-NGOZI EZE

Name Ngozi Eze. On real statements this shape is a credit to the account holder. So the engine returns the sender, which is the last part.

Try it

Read your own narration

Paste a narration into the playground and see each field that the API returns. Remove the names and the account numbers first.