Stripe

A revenue dashboard for Stripe

Stripe shows you one account at a time. If you run several, or sell through another provider as well, nothing at Stripe adds them up.

What connecting a Stripe account gives you

Paylytics pulls charges, subscriptions, customers and products out of Stripe and keeps its own copy. Every figure the dashboard draws is then a query against that copy rather than a request to Stripe, which is what makes reading six accounts at once instant instead of six times slower than reading one.

It is a mirror, so it is only ever as current as the last refresh — and refreshing is a button, not a background job you have to trust. Nothing is written back to Stripe at any point.

Restricted keys only, and why a secret key is refused

A full secret key is rejected on sight, because it could move money — not warned about, not stored and flagged, refused before it reaches Stripe or our database. That is a real boundary, and Stripe is the one enforcing it.

What it does not prove is that the restricted key you did paste is read-only. Its read and write toggles are yours to set, so create it with read access to Charges, Subscriptions, Customers and Products and leave every write toggle alone. Those four are the whole of what the dashboard draws from.

Credential
Restricted API key, beginning rk_live_ or rk_test_
Where
Developers, API keys
Permissions to grant
Charges (read), Subscriptions (read), Customers (read), Products (read)
Refused outright
A secret key (sk_), because it could move money

What we cannot prove, and will not claim

Stripe exposes no endpoint that reports what a restricted key is permitted to do. Its own documentation lists four ways to find out, and all four are human: hover the info icon in the dashboard, read the key's request logs, audit your code, or start broad and remove.

So Paylytics does the two things that are actually available. It refuses any credential that is not a restricted key. And it probes what the key can read by requesting each of the four resources and recording which come back 403 — only a 403, never a rate limit or an outage, because recording those as a missing permission would raise a false alarm on the very next refresh.

The one thing it deliberately does not do is send a write request to find out whether one would be refused. That works, and it would also mean this product issues write requests against your payment provider, which contradicts the only promise it is built on.

What Stripe reports, and how it is read

Stripe's succeeded, refunded and captured flags are mapped onto the same three words every other provider's statuses are mapped onto, so a refund taken on Stripe and a refund taken on Paddle land in the same column and count the same way in the same total.

A restricted key often has no permission to read the account endpoint, which is entirely legitimate — so a Stripe account may arrive with no name filled in, and you name it yourself. For the same reason its logo is not fetched: Stripe reports a branding icon as a file id rather than a URL, and resolving it needs a second call whose permission a restricted key routinely lacks. The account gets Stripe's own mark and a colour of its own instead.

Stripe plus everything else you sell through

A Stripe dashboard tells you about Stripe. If you also take money somewhere else — a second Stripe account, or an account at another provider entirely — nothing at Stripe adds the two together, and nothing at the other provider does either.

Paylytics normalises every provider onto one shape at the point it reads them: amounts in minor units, one shared vocabulary for paid, refunded and partially refunded, one customer identified across accounts by a keyed fingerprint of their email rather than by the address itself. After that, merging is not a special case — a total across all 4 providers is the same query as a total across one.

The other providers

Connect any mix of them. A total across all 4 providers is the same query as a total across one.

Read-only, and nothing written back

Keys are encrypted before they touch the database and decrypted only to read. What that guarantee rests on differs per provider, and each page here says which.