Skip to main content

Documentation Index

Fetch the complete documentation index at: https://developers.kotanipay.com/llms.txt

Use this file to discover all available pages before exploring further.

The settlements API lets you request, track, and manage the movement of your Kotani Pay balance to an external account. You can submit individual requests, group them into batches, merge existing requests, and configure saved beneficiaries for faster reuse. All endpoints require a valid API key — see API Keys.

Schedule & Limits

Before submitting a settlement, check the active schedule to understand allowed days, cutoff times, and amount limits.

GET /api/v3/integrator/settlements/schedule

See Settlement Schedule.
FieldTypeDescription
enabledbooleanWhether settlements are currently open for requests
allowedDaysnumber[]Days of the week accepted (0 = Sunday … 6 = Saturday)
cutoffEnabledbooleanWhether a daily cutoff time is enforced
cutoffTimestringCutoff in HH:MM format — requests after this are queued to the next allowed day
timezonestringIANA timezone for cutoff evaluation (e.g. "Africa/Nairobi")
minAmountnumberMinimum settlement amount in USD
maxAmountnumberMaximum settlement amount in USD

Fee Preview

Preview the fee before submitting.

GET /api/v3/integrator/settlements/fee-preview

See Settlement Fee Preview. Query parameters: amount (required), walletId (required).
FieldTypeDescription
amountnumberThe queried amount in local currency
feenumberFee amount in local currency
feePercentagenumberFee as a percentage of amount
netAmountnumberAmount received after fee (amount - fee)
currencystringLocal currency code
usdRatenumberExchange rate used to convert to USD
usdAmountnumberamount in USD
usdNetAmountnumbernetAmount in USD

Single Settlement Requests

POST /api/v3/integrator/settlements

See Request Settlement.
FieldTypeRequiredDescription
walletIdstringYesFiat wallet to settle from
amountnumberYesAmount in the wallet’s local currency
balanceSourcestringYesPAYOUT or DEPOSIT
beneficiaryDetailsobjectConditionalInline beneficiary — required if savedBeneficiaryId is omitted
savedBeneficiaryIdstringConditionalSaved beneficiary ID — required if beneficiaryDetails is omitted
integratorNotestringNoInternal memo
callbackUrlstringNoURL to receive webhook on status change

GET /api/v3/integrator/settlements

See List Settlements. Query: limit, offset, status, from, to.

GET /api/v3/integrator/settlements/:id

See Get Settlement.

DELETE /api/v3/integrator/settlements/:id

See Cancel Settlement. Only PENDING settlements can be cancelled.

Batch Settlements

Group multiple wallet settlements into one operation under a single admin approval.

POST /api/v3/integrator/settlements/batch

See Create Batch Settlement.
FieldTypeRequiredDescription
requestsobject[]YesArray of settlement sub-requests. Each accepts walletId, amount, balanceSource, and optionally beneficiaryDetails or savedBeneficiaryId
batchReferencestringNoYour own idempotency reference for the batch
integratorNotestringNoInternal memo for the batch

GET /api/v3/integrator/settlements/batch

See List Settlement Batches.

GET /api/v3/integrator/settlements/batch/:batchId

See Get Settlement Batch.

DELETE /api/v3/integrator/settlements/batch/:batchId

See Cancel Settlement Batch. Cancels all children still in PENDING.

Merge Into Batch

Convert two or more existing settlements into a batch after the fact.

POST /api/v3/integrator/settlements/merge

See Merge Settlements into Batch.
FieldTypeRequiredDescription
settlementIdsstring[]YesIDs to merge. Minimum 2. All must be PENDING or UNDER_REVIEW and not already in a batch
integratorNotestringNoInternal memo for the resulting batch

Notification Preferences

PATCH /api/v3/integrator/settlements/notification-preferences

See Update Notification Preferences.
FieldTypeDescription
settlementNotificationEmailstringEmail address for settlement notifications
settlementNotificationsEnabledbooleanToggle email notifications
settlementSlackWebhookUrlstringSlack incoming webhook URL
settlementSlackEnabledbooleanToggle Slack notifications

Saved Beneficiaries

Store destination account details once and reuse with savedBeneficiaryId.

GET /api/v3/integrator/settlement-config/beneficiaries

See List Beneficiaries.

POST /api/v3/integrator/settlement-config/beneficiaries

See Create Beneficiary.

PATCH /api/v3/integrator/settlement-config/beneficiaries/:id

See Update Beneficiary.

DELETE /api/v3/integrator/settlement-config/beneficiaries/:id

See Delete Beneficiary.

Settlement Flow

Lifecycle states, batch flow, webhooks, and schedule rules

Balances & Settlement

How deposit and payout balances work

Webhook Notifications

How to verify and handle signed webhook events

Transaction Statuses

All status codes used across the API