Get fee analytics
curl --request GET \
--url https://payouts.api.trykarat.com/payments/fees/analytics \
--header 'Authorization: Bearer <token>'import requests
url = "https://payouts.api.trykarat.com/payments/fees/analytics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://payouts.api.trykarat.com/payments/fees/analytics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://payouts.api.trykarat.com/payments/fees/analytics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://payouts.api.trykarat.com/payments/fees/analytics"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://payouts.api.trykarat.com/payments/fees/analytics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://payouts.api.trykarat.com/payments/fees/analytics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"startDate": "2026-08-01T00:00:00.000Z",
"endDate": "2026-08-31T23:59:59.999Z",
"dateBasis": "COMPLETED_AT",
"timezone": "UTC",
"summary": {
"totalFeeCents": 350,
"paymentVolumeCents": 35000,
"paymentCount": 3,
"payerFeeCents": 100,
"recipientFeeCents": 250,
"resolvedPaymentCount": 2,
"unresolvedPaymentCount": 1,
"feePercentageOfVolume": 1,
"averageFeeCents": 116.6666666667
},
"trend": [
{
"bucketStart": "2026-08-04T00:00:00.000Z",
"label": "Aug 4",
"payerFeeCents": 100,
"recipientFeeCents": 250,
"totalFeeCents": 350
}
],
"rails": [
{
"rail": "ACH",
"paymentCount": 3,
"paymentVolumeCents": 35000,
"payerFeeCents": 100,
"recipientFeeCents": 250,
"unresolvedPaymentCount": 1,
"totalFeeCents": 350,
"feePercentageOfVolume": 1
}
]
}
}{
"error": {
"message": "amount: amount must be positive"
}
}{
"error": {
"message": "Invalid api key"
}
}{
"error": {
"message": "Fee analytics are not enabled for this organization"
}
}Get fee analytics
Returns fee totals, payment volume, fee ownership, trends, and payment-rail breakdowns for completed Karat payments in an inclusive UTC date range. The range can span at most 366 days. Resolved fee totals exclude payments whose authoritative fee is not yet available, while payment counts and volume include them.
GET
/
payments
/
fees
/
analytics
Get fee analytics
curl --request GET \
--url https://payouts.api.trykarat.com/payments/fees/analytics \
--header 'Authorization: Bearer <token>'import requests
url = "https://payouts.api.trykarat.com/payments/fees/analytics"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://payouts.api.trykarat.com/payments/fees/analytics', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://payouts.api.trykarat.com/payments/fees/analytics",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://payouts.api.trykarat.com/payments/fees/analytics"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://payouts.api.trykarat.com/payments/fees/analytics")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://payouts.api.trykarat.com/payments/fees/analytics")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"startDate": "2026-08-01T00:00:00.000Z",
"endDate": "2026-08-31T23:59:59.999Z",
"dateBasis": "COMPLETED_AT",
"timezone": "UTC",
"summary": {
"totalFeeCents": 350,
"paymentVolumeCents": 35000,
"paymentCount": 3,
"payerFeeCents": 100,
"recipientFeeCents": 250,
"resolvedPaymentCount": 2,
"unresolvedPaymentCount": 1,
"feePercentageOfVolume": 1,
"averageFeeCents": 116.6666666667
},
"trend": [
{
"bucketStart": "2026-08-04T00:00:00.000Z",
"label": "Aug 4",
"payerFeeCents": 100,
"recipientFeeCents": 250,
"totalFeeCents": 350
}
],
"rails": [
{
"rail": "ACH",
"paymentCount": 3,
"paymentVolumeCents": 35000,
"payerFeeCents": 100,
"recipientFeeCents": 250,
"unresolvedPaymentCount": 1,
"totalFeeCents": 350,
"feePercentageOfVolume": 1
}
]
}
}{
"error": {
"message": "amount: amount must be positive"
}
}{
"error": {
"message": "Invalid api key"
}
}{
"error": {
"message": "Fee analytics are not enabled for this organization"
}
}Authorizations
Pass your API key as a bearer token: Authorization: Bearer <API_KEY>.
Query Parameters
First UTC calendar day to include, in ISO 8601 format.
Last UTC calendar day to include, in ISO 8601 format.
Response
Fee analytics for the requested completion-date range.
Show child attributes
Show child attributes