Sender information
Some merchant accounts must include the identity of the person who originated a payout. When your account has this requirement turned on, every payout you create through the API must include a sender block. This applies to all currencies, including NGN, and to all payment rails.
When it applies
This requirement is set by Technest for merchants that operate as money services or remittance businesses, in line with CBN rules for licensed operators. It is set per environment, so sandbox and live are independent, and it applies only to payouts created through the API. Payouts created from the dashboard are not affected.
You do not turn this on yourself. If your account is configured this way, your API calls are held to it. To ask whether your account should have this requirement, contact your Technest account manager.
What to send
Add a sender object to the payout body:
| Field | Required | Notes |
|---|---|---|
first_name | yes | Originator’s legal first name |
last_name | yes | Originator’s legal last name |
id_type | yes | One of Passport, Driver’s License, National-ID, Residence Card |
id_number | yes | Identity document number |
date_of_birth | yes | DDMMYYYY |
country | yes | Originator’s country, ISO 3166-1 alpha-2 (two uppercase letters) |
id_expiry is accepted and stored if you send it, but it is not required.
An NGN payout that includes the sender block:
curl https://api.swappr.me/api/v1/payouts \
-H "Authorization: Bearer sk_test_..." \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"amount_minor": "500000",
"currency": "NGN",
"recipient": {
"account_number": "0690000032",
"bank_code": "044"
},
"sender": {
"first_name": "EMILY",
"last_name": "ASHWORTH",
"id_type": "Passport",
"id_number": "A1234567",
"id_expiry": "31122030",
"date_of_birth": "15081990",
"country": "GB"
},
"merchant_reference": "ORDER_001"
}'If it is missing
If your account requires sender information and any field above is missing or blank, the payout is rejected with 422 sender_info_required. The response includes a missing_fields array naming exactly which fields to add. Add them and retry.
How you supply it
The requirement is the same everywhere. What differs is how you hand us the details.
Inline, on each payout. Send the sender block shown above. This works on every currency and every rail, and it is the only option on NGN.
From a stored customer. On a foreign-currency payout that leaves a customer’s own account, send sender_customer_id and we read that customer’s stored KYC to satisfy the requirement. See International accounts.
The two are complementary, not alternatives. If you send both, each inline field wins and the stored KYC fills in whatever you left out.
Two things to know before you rely on the stored route:
- It is not available on every payout. NGN strips
sender_customer_id, and a foreign-currency payout that leaves your own account has no per-payout customer to read. On those, send thesenderblock inline. - It only helps if the stored customer is a person. A business customer holds a business name and no first or last name, so the backfill returns nothing and the payout still needs the inline block.
sender_customer_id also decides which account the funds leave from. See sender attribution.