- Every payment returned by
GET /paymentsorGET /payments/{payment_id}includes afeeBreakdown. GET /payments/fees/analyticsaggregates completed payments over a date range.
Payment-level fee breakdowns
UsefeeBreakdown.status before reading the amount fields.
For resolved fees:
payerFeeCentsis the portion paid by your organization.recipientFeeCentsis the portion deducted from recipient proceeds.paidByidentifies the fee owner asPAYERorRECIPIENT.feePercentageOfPaymentAmountequalstotalFeeCents ÷ payment.amount × 100.
rail field uses a stable category such as ACH, REAL_TIME_PAYMENT, INTERNAL, WIRE, INTERNATIONAL, CRYPTO, PAYPAL, or OTHER.
Aggregate fee analytics
Request analytics with an inclusive start and end date:- Dates are interpreted as UTC calendar days and returned as normalized UTC timestamps.
- The range includes completed, non-external Karat payments whose completion time falls within the range.
- A request can span at most 366 days.
paymentVolumeCentsis gross completed payment volume, including zero-fee payments and payments whose fee is unresolved.totalFeeCentsincludes resolved fees only.feePercentageOfVolumeequalstotalFeeCents ÷ paymentVolumeCents × 100.averageFeeCentsequals resolved fees divided by all completed payments in the range.payerFeeCentsandrecipientFeeCentsshow who bore the resolved fees.resolvedPaymentCountandunresolvedPaymentCountmake the denominator and any incomplete fee resolution visible without changing payment volume.
rails. Trend points split fees by payer and recipient and also include their combined total.
Fee analytics is released gradually. An organization outside the current rollout receives
403 Forbidden; contact your Karat representative if you need access.Empty ranges
When no completed payments fall in the selected range, the endpoint returns a successful response with zero-value summary metrics, zero-value trend buckets, and an emptyrails array. This lets integrations render a stable empty state without interpreting a 404 as no activity.