> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.runpayments.io/docs/guides/payments/card-present/surcharging-on-device/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.runpayments.io/_mcp/server. # Surcharging on Device Surcharging is supported through the [Merchant Surcharge Program](/docs/guides/payments/merchant-surcharge-program), which lets eligible merchants add a percentage-based checkout fee to qualified credit card transactions to help offset their card processing costs. This page covers what integrators need to know to surcharge card-present credit transactions with the Terminal API. > **Enrollment required** > > Merchants must be enrolled in the Surcharge Pricing structure to use these features. ## How it works For enrolled merchants, the gateway automatically determines whether the card presented is eligible for a surcharge, based on: * **Card type** — if the card is not a credit card, the surcharge is waived. * **Surcharge rate** — the credit card surcharge rate configured on the merchant account. No additional request fields are needed on `read-card` or `charge-card`; eligibility and the surcharge amount are determined by the gateway. > **Surcharging applies at the merchant ID level** > > When a MID is enrolled in the Merchant Surcharge Program, **all terminals and transactions** under that MID are subject to credit card surcharging. ### Receipts On **Clover Flex** and **Clover Mini**, receipts printed by the terminal include surcharge line items showing the **subtotal**, **surcharge**, and **total** amounts. ### Refunds To make sure the correct amount is returned to the cardholder, always pass the `trans_id` from the **original** transaction to the void or refund endpoint. ## Surcharge response fields The following fields are returned in `result` when polling `charge-card` interactions. | Field | Max length | Type | Description | | -------------- | ---------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `fee_format` | 7 | AN | The surcharge format configured for the merchant account. Always `"percent"` when a surcharge is applied. Empty (`""`) if the surcharge was waived or bypassed. | | `fee_value` | 3 | N | The surcharge rate applied, in basis points — for example, `"300"` for a 3.0% surcharge. `"0"` if the surcharge was waived or bypassed. | | `fee_type` | 13 | AN | The type of fee applied. Always `"SURCHRG"` when a surcharge is applied; `"SURCHRG_WAIVED"` if it was waived or bypassed. | | `fee_amount` | 14 | N | The surcharge amount applied, in dollars and cents. `"0.00"` if the surcharge was waived or bypassed. | | `fee_authcode` | 6 | AN | Duplicate of the `authcode` field. | | `fee_mid` | 16 | — | Not applicable for surcharge transactions; returns an empty value (`""`). | | `fee_txn` | 14 | — | Not applicable for surcharge transactions; returns an empty value (`""`). | > **Tip** > > To detect a waived surcharge, check `fee_type` for `"SURCHRG_WAIVED"` (or `fee_amount` of `"0.00"`) rather than relying on a missing field — all fee fields are always returned. ## Example: successful charge with surcharge A \$19.99 sale on a credit card with a 3.0% surcharge. `fee_amount` is `"0.60"` and `amount` is the total charged, including the surcharge (`"20.59"`). `"result": "A"` indicates the charge was approved. ```json { "interaction_id": "3a325f66-a111-4437-b707-ba4af4f48f4f", "status": "succeeded", "result": { "amount": "20.59", "fee_value": "300", "resp_text": "Approval", "comm_card": "N", "fee_type": "SURCHRG", "resp_code": "000", "avs_resp": "Y", "mid": "800000001780", "emv": "8A023030910A7344A67B24F6578F3030", "resp_proc": "RPCT", "bin_type": "", "bin_info": { "country": "USA", "product": "M", "bin": "222300", "purchase": false, "prepaid": false, "issuer": "B 2 16Test Mastercard2", "cardusestring": "True credit, No PIN/Signature capability", "gsa": false, "corporate": false, "fsa": false, "subtype": "", "binlo": "222300", "binhi": "222360" }, "expiration": "0426", "trans_id": "267622540813", "result": "A", "fee_mid": "", "fee_authcode": "PPS184", "cvv_resp": "P", "batch_id": "919", "pos_entry": "EMV Contact", "account_token": "9224538728824137", "authcode": "PPS184", "emv_tag_data": "{\"TVR\":\"0440008000\",\"PIN\":\"None\",\"ARC\":\"00\",\"Signature\":\"false\",\"Mode\":\"Issuer\",\"Network Label\":\"MASTERCARD\",\"TSI\":\"E800\",\"AID\":\"A0000000041010\",\"IAD\":\"0014A00003220000000000000000000000FF\",\"Entry method\":\"Chip Read\",\"Application Label\":\"Mastercard\"}", "fee_amount": "0.60", "fee_format": "percent", "fee_txn": "", "card_number": "9224538728824137", "order_id": "3976260924152012", "card_brand": "mastercard", "trans_date": "09/24/2026 15:20:13", "trans_type": "Sale" }, "updated_at": "2026-09-24T15:20:15+00:00" } ``` > **Surcharge is applied at the charge stage** > > If you're using the two-step path (`read-card` + the Payments API's charge endpoint), the `amount` returned by `read-card` does **not** include the surcharge — pass it through to the Payments API's charge call as-is, and the surcharge will be added there when the charge is processed. > Apply the Merchant Surcharge Program to card-present credit transactions.