POST
/api/merchant-to-merchant/transfer

Send Transaction

Initiate a fund transfer to another merchant's account. The sender's balance is debited and the receiver's balance is credited immediately.

Overview

The Merchant-to-Merchant Transfer API allows an active merchant to securely transfer funds directly to another active merchant account within the platform. The transaction is processed atomically and isolated using database-level locking to prevent race conditions or negative balance issues.

Authentication

Authorization: Bearer <YOUR_SECRET_KEY>

Headers

Request Headers
Authorization
required

Bearer <YOUR_SECRET_KEY> (your merchant API secret key)

Content-Type
required

application/json

Request Body

Body Parameters
application/json
receiverMerchantId
required
String (UUID)

The UUID of the target merchant receiving the transfer.

amount
required
String

Amount to transfer. Must be a positive value with up to 2 decimal places (e.g. "1500.00").

currency
optional
String

Currency code (e.g. "PKR", "THB"). Defaults to the sender's currency if omitted.

Code Examples

curl -X POST "https://api.panel.Luxkgate.ca/api/merchant-to-merchant/transfer" \
  -H "Authorization: Bearer YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "receiverMerchantId": "23e7a99f-8211-4b00-855e-0646e991118d",
  "amount": "500.00",
  "currency": "PKR"
}'

Response

Status Codes

201
Transfer executed successfully.
400
Invalid request data, non-positive amount, or transfer to oneself.
401
Authentication failed (missing or invalid Bearer secret).
403
Insufficient balance or inactive merchant status.
404
Receiver merchant not found.
Success Response
Example response for a successful request
{
  "id": "e93ab3f9-7159-4f51-bfa0-5d6614ae4ebc",
  "type": "transfer",
  "status": "success",
  "amount": "500.00",
  "fee_amount": "0.00",
  "net_amount": "500.00",
  "currency": "PKR",
  "merchant_id": "8c08ec66-c23b-4d80-86d5-261b2e994c1f",
  "receiver_merchant_id": "23e7a99f-8211-4b00-855e-0646e991118d",
  "createdAt": "2026-06-02T09:12:41.000Z",
  "updatedAt": "2026-06-02T09:12:41.000Z",
  "senderName": "Sender Merchant Ltd",
  "receiverName": "Receiver Merchant Ltd",
  "direction": "sent",
  "isSender": true
}