Skip to main content

P2P Transfer

POST/wallet/transfer-p2pOpen in the API playground →
Info

Person-to-person transfer using the recipient's card serial number. Requires sender PIN verification.

Request

Authorizationstringheaderrequired

Bearer olive_live_xxx or Bearer eyJ... (JWT)

Body Parameters

sender_idstringbodyrequired

Sender subscriber UUID

recipient_card_serialstringbodyrequired

Recipient's card serial (e.g., OLIV0002)

amountstringbodyrequired

Amount to transfer (e.g., 500.00 or 500)

pinstringbodyrequired

Sender's 4-digit PIN

memostringbody

Optional note/description


Response

successboolean

Whether transfer succeeded

transaction_idstring

Unique transaction ID

sender_new_balancestring

Sender's balance after transfer

fee_amountstring

Fee charged to sender


Examples

Request
cURL
curl -X POST "https://demo.api.vultlocal.com/api/v1/wallet/transfer-p2p" \
-H "Authorization: Bearer olive_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"sender_id": "sub_abc123",
"recipient_card_serial": "OLIV0002",
"amount": "500.00",
"pin": "1234",
"memo": "Payment for lunch"
}'
Response
200 Success
{
"success": true,
"message": "Transfer successful",
"transaction_id": "txn_abc123",
"amount": "500.00 SLE",
"fee_amount": "7.50 SLE",
"sender_new_balance": "49,492.50 SLE",
"recipient": {
"name": "Jane Smith",
"card_serial": "OLIV0002"
}
}
400 Insufficient Balance
{
"success": false,
"error": "Insufficient balance",
"code": "INSUFFICIENT_FUNDS",
"available": 30000,
"required": 50750
}
404 Recipient Not Found
{
"error": "Recipient card not found",
"code": "CARD_NOT_FOUND"
}

Transfer Flow

Validate Request
  • Verify sender PIN
  • Check sender balance >= amount + fee
  • Validate recipient card exists and is active
Compliance Check

Run transaction against fraud detection rules

Execute Transfer

Atomic operation - debit sender, credit recipient

Notify

WhatsApp notifications to both parties


Fee Calculation

Amount RangeFee
0 - 50,000 SLE1.5%
50,001 - 500,000 SLE1.0%
500,001+ SLE0.5%
Info

Fees are configured in Fee Settings and may vary.


Errors

StatusCodeDescription
400INVALID_AMOUNTAmount format invalid
400INSUFFICIENT_FUNDSBalance too low
400INVALID_PINPIN verification failed
400SELF_TRANSFERCannot transfer to self
403SENDER_BLOCKEDSender account blocked
403RECIPIENT_BLOCKEDRecipient account blocked
403COMPLIANCE_REJECTEDTransaction exceeds limits
404SENDER_NOT_FOUNDSender not found
404CARD_NOT_FOUNDRecipient card not found
500INTERNAL_ERRORServer error