Skip to main content
The Payout API exposes fee reporting in two places: All monetary values are expressed in integer cents unless a field explicitly represents a percentage or average.

Payment-level fee breakdowns

Use feeBreakdown.status before reading the amount fields.
Do not treat a null fee as $0.00. A resolved zero-dollar fee has status: "RESOLVED" and totalFeeCents: 0.
For resolved fees:
  • payerFeeCents is the portion paid by your organization.
  • recipientFeeCents is the portion deducted from recipient proceeds.
  • paidBy identifies the fee owner as PAYER or RECIPIENT.
  • feePercentageOfPaymentAmount equals totalFeeCents ÷ payment.amount × 100.
The 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:
The endpoint uses these rules:
  • 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.
  • paymentVolumeCents is gross completed payment volume, including zero-fee payments and payments whose fee is unresolved.
  • totalFeeCents includes resolved fees only.
  • feePercentageOfVolume equals totalFeeCents ÷ paymentVolumeCents × 100.
  • averageFeeCents equals resolved fees divided by all completed payments in the range.
  • payerFeeCents and recipientFeeCents show who bore the resolved fees.
  • resolvedPaymentCount and unresolvedPaymentCount make the denominator and any incomplete fee resolution visible without changing payment volume.
The same definitions apply to each item in 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 empty rails array. This lets integrations render a stable empty state without interpreting a 404 as no activity.