API Reference · Payouts
Initiate a payout
Not available through the API at the moment: send payouts from the dashboard (Transactions → Payouts), where they are checked against and debited from your wallet. API pay-ins do not credit that wallet. Dashboard payouts are not working on production at the moment either: no payout gateway is configured, so they stop before reaching a provider. Calls to this endpoint from outside Klustar are refused with 403. The request and signing below are kept for reference; the same signing applies to Query payout status and Account enquiry.
https://payment.klustar.io/payment/merchant-api/payoutHeaders
X-Tenant-IDThe environment of this call: test or live, ignoring case and surrounding spaces. It is not an account identifier, nothing issues it, and it is not signed. On Create a payin and Query payin status a missing or mistyped value means test, with no error. Account enquiry and Query payout status refuse a missing value and treat a mistyped one as test. live needs approval: until then a correctly signed live request gets 403 LIVE_NOT_ENABLED.
X-API-KEYPublic API key from the merchant dashboard. The same key serves test and live.
X-Merchant-IDYour App ID, shown beside your API key on Profile & Settings → API Keys.
X-NonceA new value on every request (UUID recommended), including a retry after a failure. A nonce is recorded before the signature is checked and stays used, so a refused request burns it.
X-TimestampUnix epoch seconds when the request is signed, digits only. Must be within ±300s of server time.
X-SignatureLowercase hex HMAC-SHA256 of the signature base string, using your secret key.
Content-TypeMust be application/json. Any other type gets a 502.
Defaults to application/json
Body params
amountPayout amount as a string decimal.
currencyCurrency code. Currently NGN.
beneficiaryAccountBeneficiary NUBAN account number.
beneficiaryNameAccount name returned from account enquiry.
beneficiaryBankCodeBank code from List banks.
beneficiaryPhoneBeneficiary phone number.
referenceUnique payout reference from your system.
notifyUrlDoes not set your webhook: payout webhooks go only to the URL saved in Profile & Settings → API Keys. Leave this out.
narrationTransfer narration.
Request body
{
"amount": "10000",
"currency": "NGN",
"beneficiaryAccount": "ACCOUNT_NUMBER",
"beneficiaryName": "JANE DOE",
"beneficiaryBankCode": "KBC-0007",
"beneficiaryPhone": "08012345678",
"narration": "Vendor settlement",
"reference": "PO-<new UUID for every attempt>"
}Responses
Every call from outside Klustar gets this, as plain text.
ForbiddenForbidden