Get payment analytics

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Returns what an app earned: the totals for a window, and a day-by-day series you can chart.

Money is reported in the smallest unit of the currency, so 125000 is 1,250.00 where the currency has two decimal places. Read net_revenue for what the app actually kept, since gross_revenue counts refunded and disputed payments too.

Set the window with start_date and end_date, which you must send together. With neither, period picks the last 7, 30 or 90 whole UTC days including today, and 30 is the default. Sending only one of the two dates falls back to period and silently ignores the date you sent, so send both or neither.

<Warning>Read summary.currency before you read any amount. It is null when the app took money in more than one currency in the window, and the amounts are then sums across currencies, which is not a number you can show anyone. Use available_currencies to see which ones are present and pass currencies to narrow to one.</Warning>

<Note>An unknown or malformed currency code in currencies is dropped rather than rejected, and if every code you send is unusable the response comes back as zeros rather than an error. Send lowercase three-letter codes taken from available_currencies.</Note>

Only live money is counted. Payments an app took while its payment provider was still in test mode are excluded.

<Note>This reads an analytics store rather than the payment provider, so the last few minutes of activity can be missing, and a window with no transactions is reported as zeros rather than as an error.</Note>

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>

get/api/apps/{app_id}/payments/analytics

Path parameters

app_idstring required

ID of the app whose payments to read.

ID of the app whose payments to read.

Query parameters

start_datestring date-time nullable

First moment of the window, as an ISO 8601 timestamp. Send it together with end_date, because sending only one falls back to period and ignores the one you sent.

First moment of the window, as an ISO 8601 timestamp. Send it together with end_date, because sending only one falls back to period and ignores the one you sent.

end_datestring date-time nullable

Last moment of the window, as an ISO 8601 timestamp. Send it together with start_date.

Last moment of the window, as an ISO 8601 timestamp. Send it together with start_date.

period'7d' | '30d' | '90d'

Window to use when you send no dates, counted back over whole UTC days including today. Either 7d, 30d or 90d.

Window to use when you send no dates, counted back over whole UTC days including today. Either 7d, 30d or 90d.

currenciesstring nullable

Narrow the totals to these currencies, as a comma-separated list of three-letter ISO 4217 codes. Case does not matter. For example, usd,eur reports only those two. Take the values from available_currencies.

Narrow the totals to these currencies, as a comma-separated list of three-letter ISO 4217 codes. Case does not matter. For example, usd,eur reports only those two. Take the values from available_currencies.

Response

The app's payment totals and daily series.

available_currenciesstring[]

Every currency the app took money in during the window, as lowercase three-letter ISO 4217 codes. Pass one or more of these back in currencies to narrow the totals to a single currency.

Example response

{
  "summary": {
    "gross_revenue": 125000,
    "total_refunds": 4500,
    "net_revenue": 120500,
    "transaction_count": 64,
    "refund_count": 3,
    "unique_customers": 51,
    "currency": "usd"
  },
  "daily": [
    {
      "date": "2026-08-25",
      "payment_count": 4,
      "payments": 8200,
      "unique_customers": 4
    }
  ],
  "available_currencies": [
    "usd",
    "eur"
  ]
}

Changes

No recorded changes to this endpoint across all 1 revision of this API.