MonCash and NatCash
Accept MonCash and NatCash payments: create the payment, redirect the customer, handle the return and confirm on your server.
MonCash and NatCash use the same flow. You create a payment, redirect the customer to payment_url, they pay on the provider's screen, and they come back to your site.
Create the payment
/api/gateway/v1/paymentscurl https://api.tranzak.co/api/gateway/v1/payments \
-H "X-Api-Key: $TRANZAK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 500,
"currency": "HTG",
"payment_method": "natcash",
"customer_name": "Jean Dupont",
"reference": "ORDER-4821",
"description": "Order #4821"
}'
const res = await fetch('https://api.tranzak.co/api/gateway/v1/payments', {
method: 'POST',
headers: { 'X-Api-Key': process.env.TRANZAK_API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
amount: 500,
currency: 'HTG',
payment_method: 'natcash', // or 'moncash'
customer_name: 'Jean Dupont',
reference: 'ORDER-4821',
}),
});
const payment = await res.json();
// Redirect the customer's browser to payment.payment_url
import os, requests
payment = requests.post(
"https://api.tranzak.co/api/gateway/v1/payments",
headers={"X-Api-Key": os.environ["TRANZAK_API_KEY"]},
json={
"amount": 500,
"currency": "HTG",
"payment_method": "natcash", # or "moncash"
"customer_name": "Jean Dupont",
"reference": "ORDER-4821",
},
).json()
# Redirect the customer's browser to payment["payment_url"]
$ch = curl_init('https://api.tranzak.co/api/gateway/v1/payments');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-Api-Key: ' . getenv('TRANZAK_API_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'amount' => 500,
'currency' => 'HTG',
'payment_method' => 'natcash', // or 'moncash'
'customer_name' => 'Jean Dupont',
'reference' => 'ORDER-4821',
]),
]);
$payment = json_decode(curl_exec($ch), true);
header('Location: ' . $payment['payment_url']);
The response is 201 Created:
{
"success": true,
"transaction_id": "17843268616389",
"amount": "500.00",
"currency": "HTG",
"status": "processing",
"created_at": "2026-10-04T14:00:00.000000Z",
"payment_url": "https://…"
}
Save the transaction_id against your order, then redirect the browser to payment_url. See Create a payment for every field.
Rules by method
| MonCash | NatCash | |
|---|---|---|
| Currency | HTG (USD is converted to HTG) | HTG (USD is converted to HTG) |
| Minimum | Set by Tranzak | 20 HTG. Below it the API answers 400 amount_too_low. |
| Live access | Open | Open, no access request |
| Instant notification | Yes | No. See below. |
Paying in US dollars
MonCash and NatCash are paid in gourdes. If you send "currency": "USD", Tranzak converts the amount to HTG at its rate, rounded up to the next gourde, then charges in HTG. The response shows what happened. Always read currency from the response. See Currencies and exchange rate.
NatCash has no instant notification
If a customer pays and closes the tab, NatCash does not tell Tranzak immediately. Tranzak checks NatCash every 2 minutes, then fires your webhook as soon as the payment is confirmed. Never assume a NatCash payment failed because the customer did not come back. Poll the payment or wait for the webhook.
A payment that is never settled is marked failed after 15 minutes.
After the customer pays
The customer is sent to your website's return URL. That redirect is for the customer experience only. Confirm the payment on your server with the webhook or a read of the payment: