Skip to main content
You can move funds between any two wallets on your account using an intra-transfer. This is useful when you want to top up a working wallet from your settlement wallet — for example, loading your payroll wallet before sending disbursements. Both wallets must belong to your business and must be in the same currency. Intra-transfers are not for cross-currency movements; for that, use forex exchange.
The source wallet must have sufficient available_balance to cover the transfer amount. Funds that are still clearing do not count toward your available balance.

Transfer funds

Send a POST request to /api/v1/wallets/{source-wallet-id}/intra_transfer/ where {source-wallet-id} is the wallet_id of the wallet you want to debit.
{
  "wallet_id": "<destination-wallet-id>",
  "amount": "10000",
  "narrative": "Moving funds to payroll wallet"
}
FieldTypeRequiredDescription
wallet_idstringYesThe wallet_id of the destination wallet.
amountstringYesThe amount to transfer. Must be greater than zero.
narrativestringYesA description for this transfer. Appears in both wallet statements.
curl --request POST \
  --url https://app.kulmipay.com/api/v1/wallets/wlt_abc123/intra_transfer/ \
  --header "Authorization: Bearer <your-token>" \
  --header "Content-Type: application/json" \
  --data '{
    "wallet_id": "wlt_def456",
    "amount": "10000",
    "narrative": "Moving funds to payroll wallet"
  }'
A successful response returns the updated state of both wallets:
{
  "origin": {
    "wallet_id": "wlt_abc123",
    "label": "default",
    "can_disburse": true,
    "currency": "KES",
    "wallet_type": "SETTLEMENT",
    "current_balance": "110000.00",
    "available_balance": "110000.00",
    "updated_at": "2024-11-01T10:00:00Z"
  },
  "destination": {
    "wallet_id": "wlt_def456",
    "label": "Payroll Wallet",
    "can_disburse": true,
    "currency": "KES",
    "wallet_type": "WORKING",
    "current_balance": "60000.00",
    "available_balance": "60000.00",
    "updated_at": "2024-11-01T10:00:00Z"
  }
}

View a wallet statement

To retrieve transactions for a specific wallet, send a GET request to /api/v1/wallets/{wallet_id}/transactions/.
GET /api/v1/wallets/wlt_abc123/transactions/
Each transaction in the response includes:
FieldDescription
transaction_idUnique identifier for the transaction.
valueThe amount. Negative values are debits.
running_balanceThe wallet balance immediately after this transaction.
narrativeA description of the transaction.
trans_typeThe type: SALE, PAYOUT, EXCHANGE, CHARGE, ADJUSTMENT, or DEPOSIT.
statusOne of AVAILABLE, CLEARING, ON-HOLD, CANCELLED, REFUNDED, or ADJUSTMENT.
created_atWhen the transaction was created.

Filter by date range or transaction type

Append query parameters to narrow your results:
# Transactions from November 2024
GET /api/v1/wallets/wlt_abc123/transactions/?created_at__gte=2024-11-01&created_at__lte=2024-11-30

# Only payouts
GET /api/v1/wallets/wlt_abc123/transactions/?trans_type=PAYOUT
To retrieve transactions across all your wallets at once, use GET /api/v1/wallets/transactions/ instead.