A surcharge passes the cost of accepting a credit card on to the cardholder. Card networks allow it within strict rules, and OrderCard applies them on every charge.
The rules OrderCard enforces
- Credit and charge cards only. Debit, prepaid and unidentified cards are never surcharged. The card type comes from the card’s BIN, its first 6 to 11 digits.
- At most 3% of the amount.
- Never in states that ban surcharges: Connecticut, Massachusetts, Maine and Puerto Rico, by the billing address.
- Never on recurring charges unless you turn that on for the gateway.
- Refunds return the surcharge in proportion: refunding half the payment refunds half the surcharge, and the last refund takes whatever surcharge is left.
- The surcharge is not taxed. It is a percentage of
amount, which already includes any tax.
You must also tell customers about the surcharge before they pay. The gateway’s surcharge.disclosure has suitable wording, and your card brand agreements may require registering with the networks first.
Who decides the amount
| Gateway | How it works |
|---|---|
| Fortis | Fortis decides, from the surcharge settings of your Fortis location. Sync the gateway to read them; OrderCard then asks Fortis’s surcharge calculator on every charge. The state rule above still applies, and so does the card type: a card OrderCard knows to be debit or prepaid is not surcharged, whatever the calculator would say. |
| Converge | Your Converge terminal adds the surcharge itself. Tell OrderCard its rate so quotes match; OrderCard checks Converge’s own card lookup before charging and records the surcharge Converge reports. |
| NMI, Authorize.net, Deluxe, Test | OrderCard adds it, from the rate on the gateway (Gateways → Edit → Surcharging, or settings.surcharge in the API). |
Showing the surcharge at checkout
Quote it before you charge, so the customer sees the total:
curl -X POST https://api.ordercard.io/v1/gateways/gw_…/surcharge \
-H "Authorization: Bearer $ORDERCARD_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{ "card_type": "credit", "amount": 10000, "billing": { "state": "GA", "country": "US" } }'Before the card is tokenized, send the type from the hosted fields cardMeta event as card_type. It is pending until the customer has typed enough digits; quote credit until then, the most a card can be surcharged. After tokenizing, send the payment_method_token instead. Pages without hosted fields can send the card’s first 6 to 8 digits as first6. The answer has surcharge_amount, total_amount, and waived_reason when there is none (disabled, recurring, state, debit, prepaid, unknown_card or gateway).
Never charging more than you showed
Send the total you displayed as max_total. If the final surcharge would make the total higher (for example Fortis’s calculator answers differently), nothing is charged and you get 409 surcharge_changed with the new figures to show the customer.
{ "payment_method_token": "tok_…", "amount": 10000, "max_total": 10300 }Controlling it per charge
surcharge.mode |
Effect |
|---|---|
auto (default) |
The gateway’s set-up decides, as above. |
none |
No surcharge on this charge. On Fortis the required fields are sent with a zero surcharge; a Converge terminal may still add its own. |
amount |
You send surcharge.amount, the figure you worked out. The rules above still apply, and it cannot exceed 3%. Not available on Fortis or Converge. |
The transaction records subtotal_amount, surcharge_amount, and surcharge.rate, surcharge.source and surcharge.waived_reason.
