curl -X POST "https://api.onekhusa.com/sandbox/v1/collections/requestToPay/addFakeTransaction" \
--header "Authorization: Bearer your-jwt-token" \
--header "Content-Type: application/json" \
--header "Accept-Language: en" \
--header "X-Idempotency-Key: your-idempotency-key" \
-d '{
"merchantAccountNumber": 12345678,
"transactionAmount": 8375000.00,
"connectorId": 212188,
"timedAccountNumber": "11005533",
"currencyCode": "MWK",
"capturedBy": "username@onekhusa.com"
}'import requests
url = "https://api.onekhusa.com/sandbox/v1/collections/requestToPay/addFakeTransaction"
payload = {
"merchantAccountNumber": 12345678,
"transactionAmount": 8375000,
"connectorId": 212188,
"timedAccountNumber": "11005533",
"currencyCode": "MWK",
"capturedBy": "username@onekhusa.com"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
merchantAccountNumber: 12345678,
transactionAmount: 8375000,
connectorId: 212188,
timedAccountNumber: '11005533',
currencyCode: 'MWK',
capturedBy: 'username@onekhusa.com'
})
};
fetch('https://api.onekhusa.com/sandbox/v1/collections/requestToPay/addFakeTransaction', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.onekhusa.com/sandbox/v1/collections/requestToPay/addFakeTransaction",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'merchantAccountNumber' => 12345678,
'transactionAmount' => 8375000,
'connectorId' => 212188,
'timedAccountNumber' => '11005533',
'currencyCode' => 'MWK',
'capturedBy' => 'username@onekhusa.com'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.onekhusa.com/sandbox/v1/collections/requestToPay/addFakeTransaction"
payload := strings.NewReader("{\n \"merchantAccountNumber\": 12345678,\n \"transactionAmount\": 8375000,\n \"connectorId\": 212188,\n \"timedAccountNumber\": \"11005533\",\n \"currencyCode\": \"MWK\",\n \"capturedBy\": \"username@onekhusa.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.onekhusa.com/sandbox/v1/collections/requestToPay/addFakeTransaction")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"merchantAccountNumber\": 12345678,\n \"transactionAmount\": 8375000,\n \"connectorId\": 212188,\n \"timedAccountNumber\": \"11005533\",\n \"currencyCode\": \"MWK\",\n \"capturedBy\": \"username@onekhusa.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.onekhusa.com/sandbox/v1/collections/requestToPay/addFakeTransaction")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"merchantAccountNumber\": 12345678,\n \"transactionAmount\": 8375000,\n \"connectorId\": 212188,\n \"timedAccountNumber\": \"11005533\",\n \"currencyCode\": \"MWK\",\n \"capturedBy\": \"username@onekhusa.com\"\n}"
response = http.request(request)
puts response.read_body{
"beneficiary": {
"accountNumber": 12346198,
"accountName": "MERCHANT SANDBOX",
"amountReceived": 49500,
"currencyCode": "MWK"
},
"source": {
"accountNumber": "5271306",
"customerName": "ANGEL BAULENI",
"amountSent": 50000,
"currencyCode": "MWK",
"sourceReferenceNumber": "JF260209114N",
"connectorId": 212188,
"connectorName": "National Bank of Malawi"
},
"transaction": {
"transactionReferenceNumber": "CBPC73IQ5U2E",
"transactionFee": 500,
"transactionDescription": "Payment Transaction",
"transactionDate": "2026-02-09T15:12:52.8020476+02:00",
"valueDate": "2026-02-09T15:12:52.8020476+02:00",
"transactionCode": "BAM",
"transactionTypeName": "Account To Merchant",
"transactionStatusCode": "S",
"transactionStatusName": "Success",
"bridgeReferenceNumber": "019c4288-9342-7ebd-a947-6d97d4da77ed",
"responseCode": "S100",
"responseMessage": "Successful transaction",
"dateCreated": "2026-02-09T15:12:52.8020476+02:00"
}
}Simulate Accept Direct Transfer Payment (DTP)
This feature allows the merchant to simulate as if the customer is paying through a bank or MNO digital platform using the Direct Transfer feature to accept the payment. This requires that the transaction was already initiated through the Direct Transfer API feature; otherwise, you will get an error indicating that the transaction does not exist.
curl -X POST "https://api.onekhusa.com/sandbox/v1/collections/requestToPay/addFakeTransaction" \
--header "Authorization: Bearer your-jwt-token" \
--header "Content-Type: application/json" \
--header "Accept-Language: en" \
--header "X-Idempotency-Key: your-idempotency-key" \
-d '{
"merchantAccountNumber": 12345678,
"transactionAmount": 8375000.00,
"connectorId": 212188,
"timedAccountNumber": "11005533",
"currencyCode": "MWK",
"capturedBy": "username@onekhusa.com"
}'import requests
url = "https://api.onekhusa.com/sandbox/v1/collections/requestToPay/addFakeTransaction"
payload = {
"merchantAccountNumber": 12345678,
"transactionAmount": 8375000,
"connectorId": 212188,
"timedAccountNumber": "11005533",
"currencyCode": "MWK",
"capturedBy": "username@onekhusa.com"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
merchantAccountNumber: 12345678,
transactionAmount: 8375000,
connectorId: 212188,
timedAccountNumber: '11005533',
currencyCode: 'MWK',
capturedBy: 'username@onekhusa.com'
})
};
fetch('https://api.onekhusa.com/sandbox/v1/collections/requestToPay/addFakeTransaction', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.onekhusa.com/sandbox/v1/collections/requestToPay/addFakeTransaction",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'merchantAccountNumber' => 12345678,
'transactionAmount' => 8375000,
'connectorId' => 212188,
'timedAccountNumber' => '11005533',
'currencyCode' => 'MWK',
'capturedBy' => 'username@onekhusa.com'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.onekhusa.com/sandbox/v1/collections/requestToPay/addFakeTransaction"
payload := strings.NewReader("{\n \"merchantAccountNumber\": 12345678,\n \"transactionAmount\": 8375000,\n \"connectorId\": 212188,\n \"timedAccountNumber\": \"11005533\",\n \"currencyCode\": \"MWK\",\n \"capturedBy\": \"username@onekhusa.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.onekhusa.com/sandbox/v1/collections/requestToPay/addFakeTransaction")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"merchantAccountNumber\": 12345678,\n \"transactionAmount\": 8375000,\n \"connectorId\": 212188,\n \"timedAccountNumber\": \"11005533\",\n \"currencyCode\": \"MWK\",\n \"capturedBy\": \"username@onekhusa.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.onekhusa.com/sandbox/v1/collections/requestToPay/addFakeTransaction")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"merchantAccountNumber\": 12345678,\n \"transactionAmount\": 8375000,\n \"connectorId\": 212188,\n \"timedAccountNumber\": \"11005533\",\n \"currencyCode\": \"MWK\",\n \"capturedBy\": \"username@onekhusa.com\"\n}"
response = http.request(request)
puts response.read_body{
"beneficiary": {
"accountNumber": 12346198,
"accountName": "MERCHANT SANDBOX",
"amountReceived": 49500,
"currencyCode": "MWK"
},
"source": {
"accountNumber": "5271306",
"customerName": "ANGEL BAULENI",
"amountSent": 50000,
"currencyCode": "MWK",
"sourceReferenceNumber": "JF260209114N",
"connectorId": 212188,
"connectorName": "National Bank of Malawi"
},
"transaction": {
"transactionReferenceNumber": "CBPC73IQ5U2E",
"transactionFee": 500,
"transactionDescription": "Payment Transaction",
"transactionDate": "2026-02-09T15:12:52.8020476+02:00",
"valueDate": "2026-02-09T15:12:52.8020476+02:00",
"transactionCode": "BAM",
"transactionTypeName": "Account To Merchant",
"transactionStatusCode": "S",
"transactionStatusName": "Success",
"bridgeReferenceNumber": "019c4288-9342-7ebd-a947-6d97d4da77ed",
"responseCode": "S100",
"responseMessage": "Successful transaction",
"dateCreated": "2026-02-09T15:12:52.8020476+02:00"
}
}Authorizations
Bearer authentication header of the form Bearer Token, Where accessToken is the access token used to authenticate the request.
Body
An active account number for the merchant used to initiate a request-to-pay transaction.
12345678
The total transaction (checkout) amount the customer is supposed to pay for the initiated transaction.
8375000
The unique number representing the institution (bank/MNO) a customer used to pay for the merchant goods/services.
212188
The generated temporary (short-lived) account number tied to an initiated request-to-pay transaction.
"11005533"
The currency code associated with a transaction and should match with merchant account currency defined.
"MWK"
The user registered under the merchant account being used.
"username@onekhusa.com"
Response
Success Response (200)
Details of the beneficiary receiving the funds
Show child attributes
Show child attributes
Details of the source sending the funds
Show child attributes
Show child attributes
Core transaction details and metadata
Show child attributes
Show child attributes
Overall API response status code
0