Version
GET

Earnings report

/v1/analytics/earnings in the Analytics API.

The full earnings breakdown (gross, fees, net, transaction count) plus a timeseries bucketed by granularity: day (the default), week or month.

curl "https://api.subscriby.net/v1/analytics/earnings?granularity=week" \  -H "Authorization: Bearer $SUBSCRIBY_TOKEN"

Every money figure is USD-normalised so buckets in different currencies add up; totals.currency says so.

GET
/v1/analytics/earnings

Requires ability

The token must hold this ability, or the call is refused with 403.

Runs the same action from an agent, behind the same ability.

Authorization

bearerToken
AuthorizationBearer <token>

A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.

In: header

Query Parameters

project_id?string

Scope the figures to one project the token may see; omit for every project visible to it. A project outside the token's scope:project: allow-list is 404 TENANT_MISMATCH, an unknown one 404 RESOURCE_NOT_FOUND.

Formatuuid
period?string

The preset window: 7d, 14d, 30d (the default), 60d, 90d, mtd, qtd, ytd, 1y or all. Ignored when both from and to are given; an unknown value falls back to the default rather than failing.

Default"30d"
from?string

The first day of an explicit window, YYYY-MM-DD. Both from and to are needed to override period.

Formatdate
to?string

The last day of an explicit window, YYYY-MM-DD. Both from and to are needed to override period.

Formatdate
granularity?string

The bucket size of the timeseries: day (the default), week or month. Anything else is 422 VALIDATION_FAILED.

Default"day"
plan_ids[]?array<string>

Count only these plans. Send it as plan_ids[]=a&plan_ids[]=b or as one comma-separated string.

statuses[]?array<string>

Count only payments in these states: successful, failed, pending, refunded. Send them as statuses[]=a&statuses[]=b or as one comma-separated string.

payment_method_ids[]?array<string>

Count only payments taken through these payment methods. Send them as payment_method_ids[]=a&payment_method_ids[]=b or as one comma-separated string.

Responses

200OK

Gross, fees and net per bucket.

401Unauthorized

The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).

403Forbidden

The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.

422Validation failed

When granularity is not day, week or month, or project_id is not a UUID.

429Too many requests

The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.

How is this guide?

Last updated on