Pass on fees
How to pass processing fees to the customer — via API and dashboard.
Overview
Pass on Fees lets you incorporate PayMongo's transaction processing costs into the final price the customer pays. Instead of absorbing the processing fee on your end, you calculate an adjusted selling price that covers it — so your net received amount equals your original selling price.
How it works
PayMongo charges a Merchant Discount Rate (MDR) plus a fixed fee per transaction. These vary by payment method. When you pass on fees, you calculate a higher selling price before submitting the transaction, so that after fees are deducted, you receive your intended amount.
Formula
Standard PHP transaction
SP = (OP + Fixed Fee) / (1 - MDR)
Where:
- SP = Adjusted selling price (what the customer pays)
- OP = Your original selling price (what you want to receive)
- MDR = Merchant Discount Rate for the payment method (as a decimal — e.g., 0.035 for 3.5%)
- Fixed Fee = Flat per-transaction fee (in centavos)
Foreign card transaction
If the customer is paying with an internationally-issued card, add the 1% foreign card fee:
SP = (OP + Fixed Fee) / (1 - MDR - FF)
Where FF = 0.01 (the 1% foreign fee).
Example calculation
You want to receive PHP 1,000.00 (OP = 100000 centavos). Your card MDR is 3.5% and the fixed fee is PHP 15.00 (1500 centavos):
SP = (100000 + 1500) / (1 - 0.035)
SP = 101500 / 0.965
SP ≈ 105181 centavos = PHP 1,051.81
You charge the customer PHP 1,051.81. After PayMongo deducts (PHP 1,051.81 × 3.5%) + PHP 15.00 ≈ PHP 51.81 in fees, you receive PHP 1,000.00.
MDR and fixed fee by payment method
MDR and fixed fees vary per payment method (cards, e-wallets, direct online banking). See the PayMongo pricing page for current rates, or contact support for custom pricing.
Pass fees to the customer
Calculate the adjusted selling price
# Python
def calculate_pass_on_fee(op, fixed_fee, mdr):
return round((op + fixed_fee) / (1 - mdr), 2)
# Example: card payment, OP = PHP 30.00 (3000 centavos), MDR = 3.5%, fixed fee = PHP 0.15 (15 centavos)
sp = calculate_pass_on_fee(3000, 15, 0.035)// JavaScript
function calculatePassOnFee(op, fixedFee, mdr) {
return (op + fixedFee) / (1 - mdr);
}
const sp = calculatePassOnFee(3000, 15, 0.035);// PHP
function calculatePassOnFee($op, $fixedFee, $mdr) {
return round(($op + $fixedFee) / (1 - $mdr), 2);
}
$sp = calculatePassOnFee(3000, 15, 0.035);Submit the SP as the Payment Intent amount
{
"data": {
"attributes": {
"amount": 312435,
"payment_method_allowed": ["card"],
"currency": "PHP",
"capture_type": "automatic"
}
}
}You are responsible for the calculation. PayMongo does not compute or apply Pass on Fees automatically in the Payment Intent workflow.
One payment method per request: When using Pass on Fees, include only one
payment_method_allowedvalue so the correct MDR is applied. The MDR differs per method — mixing methods in one Payment Intent creates ambiguity in the fee calculation.
Requirements
- Always test your Pass on Fees implementation using test API keys before going live
- The formula varies by payment method — use the correct MDR for each method you offer
- Display fees transparently to customers; do not present the adjusted price without disclosing the fee
- Comply with applicable consumer protection regulations regarding fee disclosure in the Philippines
Updated about 4 hours ago