Payflow Docs

Fees and Total Debit

Quote customer-paid service fees, understand provider-cost recovery, and use total debit fields returned by Payflow client APIs.

Payflow client APIs now return fee snapshots for card and ACH flows. The fee model separates the principal payment amount from the customer debit amount, so your app can display a clear service fee before a customer confirms.

Key fields

FieldMeaning
amountMinorPrincipal payment or transfer amount in the smallest currency unit.
platformFeeMinorPayflow provider-cost recovery fee for the selected provider/channel.
organizationFeeMinorOrganization-configured service fee for the selected provider/channel.
feeMinorCombined service fee: platform fee plus organization fee.
totalDebitMinorTotal amount charged or debited from the customer: principal plus fees.
fee / breakdownVersioned fee breakdown used to audit how the fee was calculated.

For customer-facing checkout screens, show both the principal amount and service fee. Charge or debit totalDebitMinor, but keep amountMinor as the underlying payment, invoice, or transfer amount in your own records.

Quote fees before preparing payment

Use POST /client/v1/fees/quote when you need to show the fee before creating a payment preparation.

curl -X POST "$PAYFLOW_CLIENT_API_URL/fees/quote" \
  -H "Authorization: Bearer $PAYFLOW_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amountMinor": "2500",
    "currency": "USD",
    "paymentMethod": "web_card",
    "flow": "payment_component",
    "metadata": {
      "cartId": "cart_789"
    }
  }'

The endpoint requires a secret key because it evaluates routing and fee configuration for the application environment.

Response:

{
  "success": true,
  "data": {
    "amountMinor": "2500",
    "currency": "USD",
    "platformFeeMinor": "103",
    "organizationFeeMinor": "50",
    "feeMinor": "153",
    "totalDebitMinor": "2653",
    "breakdown": {
      "version": 1,
      "provider": "stripe",
      "paymentMethod": "web_card",
      "currency": "USD",
      "channel": "none",
      "layers": [
        {
          "scope": "platform",
          "enabled": true,
          "fixedFeeMinor": "30",
          "percentFeeBps": 290,
          "minimumFeeMinor": null,
          "capFeeMinor": null,
          "feeMinor": "103"
        },
        {
          "scope": "organization",
          "enabled": true,
          "fixedFeeMinor": "0",
          "percentFeeBps": 200,
          "minimumFeeMinor": null,
          "capFeeMinor": null,
          "feeMinor": "50"
        }
      ]
    },
    "routing": {
      "provider": "stripe",
      "channel": "web_card",
      "matchedRuleId": null,
      "matchedConditionIds": [],
      "fallback": true
    }
  },
  "message": null
}

Flow selection

For web_card quotes, set flow to:

FlowUse when
payment_componentYou will prepare an embedded card component.
hosted_checkoutYou will create a hosted checkout session.

If omitted, Payflow treats the quote as payment_component.

Payment preparation snapshots

Hosted checkout and payment component preparation responses include the same fee fields returned by the quote endpoint. Quote responses call the versioned detail object breakdown; payment preparation responses expose that same detail as fee. Payflow also stores the fee snapshot with the preparation and resulting transaction, so later provider callbacks and support investigations can reconcile the original amount, fee, and total debit.

For card flows, Stripe or Square is asked to charge totalDebitMinor; the Payflow transaction still records amountMinor as the principal amount.

ACH preview and transfer fees

ACH transfer preview returns fee details under a nested fee object:

{
  "success": true,
  "data": {
    "amountMinor": "12500",
    "currency": "USD",
    "fee": {
      "platformFeeMinor": "25",
      "organizationFeeMinor": "100",
      "feeMinor": "125"
    },
    "totalDebitMinor": "12625"
  },
  "message": null
}

The transfer creation response includes the same values on data.transaction. Always show the previewed fee and total debit before creating the ACH transfer, then reuse the same idempotencyKey if you retry the same business action.

Configuration behavior

Fees are selected by environment, currency, provider, payment method, and channel. Card fees are configured once per provider and shared by hosted checkout and payment component flows. ACH fees can differ by provider and channel, such as Standard ACH, Same Day ACH, or instant/RTP-style rails.

On this page