curl --request POST \
--url https://api.jenzy.com/v1/fees/quote \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"direction": "payout",
"rail": "momo",
"amount_mwk": 50000
}
'import requests
url = "https://api.jenzy.com/v1/fees/quote"
payload = {
"direction": "payout",
"rail": "momo",
"amount_mwk": 50000
}
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({direction: 'payout', rail: 'momo', amount_mwk: 50000})
};
fetch('https://api.jenzy.com/v1/fees/quote', 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.jenzy.com/v1/fees/quote",
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([
'direction' => 'payout',
'rail' => 'momo',
'amount_mwk' => 50000
]),
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.jenzy.com/v1/fees/quote"
payload := strings.NewReader("{\n \"direction\": \"payout\",\n \"rail\": \"momo\",\n \"amount_mwk\": 50000\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.jenzy.com/v1/fees/quote")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"direction\": \"payout\",\n \"rail\": \"momo\",\n \"amount_mwk\": 50000\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jenzy.com/v1/fees/quote")
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 \"direction\": \"payout\",\n \"rail\": \"momo\",\n \"amount_mwk\": 50000\n}"
response = http.request(request)
puts response.read_body{
"currency": "MWK",
"amount_mwk": "10000.00",
"direction": "payout",
"rail": "momo",
"fees": {
"convenience_fee": "200.00",
"transaction_fee": "80.00",
"levy": "0.00",
"vat": "49.00"
},
"total_fee": "329.00",
"total_debit": "10329.00",
"amount_received": null
}Quote the fees on a transfer
What a transfer would cost, before you make it. Priced from fee schedule, so the same transfer is always quoted the same amount for you, so this is the figure to check against rather than a percentage from the docs. It is not a commitment and reserves nothing.
The four fee lines always sum to total_fee. Fee amounts are exact decimal strings at two decimal places (kwacha fees are not whole kwacha) — parse them with a decimal library, never a float. A payout returns total_debit (the amount plus the fee: your beneficiary still receives the full amount) and a collection returns amount_received (the amount less the fee, which may be negative on a transfer smaller than its own fee).
curl --request POST \
--url https://api.jenzy.com/v1/fees/quote \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"direction": "payout",
"rail": "momo",
"amount_mwk": 50000
}
'import requests
url = "https://api.jenzy.com/v1/fees/quote"
payload = {
"direction": "payout",
"rail": "momo",
"amount_mwk": 50000
}
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({direction: 'payout', rail: 'momo', amount_mwk: 50000})
};
fetch('https://api.jenzy.com/v1/fees/quote', 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.jenzy.com/v1/fees/quote",
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([
'direction' => 'payout',
'rail' => 'momo',
'amount_mwk' => 50000
]),
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.jenzy.com/v1/fees/quote"
payload := strings.NewReader("{\n \"direction\": \"payout\",\n \"rail\": \"momo\",\n \"amount_mwk\": 50000\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.jenzy.com/v1/fees/quote")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"direction\": \"payout\",\n \"rail\": \"momo\",\n \"amount_mwk\": 50000\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jenzy.com/v1/fees/quote")
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 \"direction\": \"payout\",\n \"rail\": \"momo\",\n \"amount_mwk\": 50000\n}"
response = http.request(request)
puts response.read_body{
"currency": "MWK",
"amount_mwk": "10000.00",
"direction": "payout",
"rail": "momo",
"fees": {
"convenience_fee": "200.00",
"transaction_fee": "80.00",
"levy": "0.00",
"vat": "49.00"
},
"total_fee": "329.00",
"total_debit": "10329.00",
"amount_received": null
}Authorizations
Your Jenzy API key: Authorization: Bearer jz_live_…
Body
Which way the money moves: payout to pay a beneficiary, collection to take money in. The two are priced differently.
payout, collection "payout"
The path the transfer takes. Pricing depends only on this, never on the institution — every bank costs the same, as does every mobile-money operator.
momo, bank "momo"
What the transfer would move. Either a JSON integer of whole kwacha, or an exact decimal string with up to 2 decimal places ("1000.55"). Fees are quoted on top of it. Must be positive and no greater than 1000000000000 MWK.
50000
Response
The quote.
MWK The amount quoted against, echoed back — exact decimal string.
"10000.00"
payout, collection bank, momo Show child attributes
Show child attributes
Every line above, summed. Always equal to their sum.
"329.00"
Payouts only: the amount plus the total fee — the full cost of the transfer. Your beneficiary still receives the full amount. Null on a collection.
"10329.00"
Collections only: the amount less the total fee — what you are credited. Negative if the fee exceeds the transfer. Null on a payout. (Shown here for a 10,000 collection, whose fee is 150.00 — a collection carries no flat fee, no VAT and no levy.)
"9850.00"