Developers › Building on the API
Team roles and permissions
Verified 6 November 2026Explain this to your team →
Everyone on your team has one role. A role is a set of permissions, and every request — from the dashboard or straight to the API with a member’s own sign-in — is checked against it before anything happens. The dashboard hides what your role cannot do; the API refuses it either way.
The roles are Stripe’s, so if you have used Stripe you already know roughly what an analyst or a support account is for. Where we are stricter, it says so below.
The roles
| Permission | Owner | Administrator | Developer | Analyst | Support | Viewer |
|---|---|---|---|---|---|---|
View payments, refunds, disputes and reviewspayments:read | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Refund paymentspayments:refund | ✓ | ✓ | — | — | ✓ | — |
Capture authorised paymentspayments:capture | ✓ | ✓ | — | — | ✓ | — |
View customerscustomers:read | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Create and edit customers and saved cardscustomers:write | ✓ | ✓ | ✓ | — | ✓ | — |
Create and edit products and pricesproducts:write | ✓ | ✓ | ✓ | — | — | — |
Create and edit payment linkspayment_links:write | ✓ | ✓ | ✓ | — | — | — |
Change the payout schedule and request payoutspayouts:manage | ✓ | ✓ | — | — | — | — |
Create, send and void invoices; manage tax ratesinvoices:write | ✓ | ✓ | ✓ | — | ✓ | — |
Write risk rules and lists; approve flagged paymentsrisk:manage | ✓ | ✓ | — | — | — | — |
Create, roll and revoke test API keyskeys:test | ✓ | ✓ | ✓ | — | — | — |
Create, roll and revoke live API keyskeys:live | ✓ | ✓ | ✓ | — | — | — |
View and manage webhook endpointswebhooks:manage | ✓ | ✓ | ✓ | — | — | — |
View eventsevents:read | ✓ | ✓ | ✓ | ✓ | — | ✓ |
Download reports and exportsexports:read | ✓ | ✓ | ✓ | ✓ | — | — |
View the teamteam:read | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Invite peopleteam:invite | ✓ | ✓ | — | — | — | — |
Change roles and remove peopleteam:manage | ✓ | ✓ | — | — | — | — |
Edit business settingssettings:business | ✓ | ✓ | — | — | — | — |
Edit security settingssettings:security | ✓ | ✓ | — | — | — | — |
Fill in the activation application and its documentsactivation:manage | ✓ | ✓ | — | — | — | — |
Transfer ownershipaccount:transfer | ✓ | — | — | — | — | — |
Close the businessaccount:close | ✓ | — | — | — | — | — |
Answer and accept disputesdisputes:manage | ✓ | ✓ | — | — | ✓ | — |
Create and cancel payments and checkout sessionspayments:write | ✓ | ✓ | ✓ | — | ✓ | — |
View the balance, payouts and balance reportsbalance:read | ✓ | ✓ | ✓ | ✓ | — | ✓ |
View connected accounts (in live mode, platforms only)connect:read | ✓ | ✓ | ✓ | ✓ | — | — |
Create connected accounts and send onboarding links (in live mode, platforms only)connect:write | ✓ | ✓ | ✓ | — | — | — |
Give an application fee back to a connected account (in live mode, platforms only)application_fees:refund | ✓ | ✓ | — | — | ✓ | — |
Create Sandboxessandboxes:create | ✓ | ✓ | ✓ | — | — | — |
Use test helpers, such as making a test payout fail (test mode only)test_helpers:write | ✓ | ✓ | ✓ | — | — | — |
Change and delete any Sandboxsandboxes:manage | ✓ | ✓ | — | — | — | — |
Choose your own notifications and read your inboxnotifications:self | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Where we are stricter than Stripe
An analyst changes nothing. They read payments, customers, the balance and events, and they can download reports. They cannot refund, capture, create a payment or a customer, or edit the catalogue.
Support does not see the books. A support account answers one customer at a time: it can refund, capture, take a payment, edit a customer, raise an invoice and answer a dispute. It cannot see the balance, payouts or reports, cannot publish a price or a payment link, and never sees an API key or a webhook.
Only an owner or an admin may write risk rules, change payouts, fill in the activation application (it holds your directors’ identity documents) or manage the team. Only the owner may transfer or close the business.
Actions that ask for your authenticator again
Some actions need a code from your authenticator app from the last ten minutes, not just one from when you signed in. A stolen session would want these first:
keys:live, team:invite, team:manage, payouts:manage, settings:security, risk:manage, account:transfer, account:close, rotating a webhook signing secret, and making a person's declarations on the activation application. Refunds do not: support refunds all day, and a challenge on every one teaches people to approve challenges without reading them.
Two-step verification for live businesses
Once your business is approved for live payments, everyone on the team signs in with an authenticator app as well as their password or passkey. It cannot be turned off while live payments are on. A teammate who has not set one up is asked to when they next sign in.
Changing your password, your email address or your authenticator signs you out on every other device, and so does signing out other devices from your security page — at once, not when the session would have expired.
API keys and permissions
A secret key can do everything the API offers a key — take and refund payments, manage customers, the catalogue, invoices, risk rules, disputes and webhooks, and read the balance, events and reports. It can never create another key, read identity documents or change the team: those are dashboard-only, for a signed-in person.
Nobody can create a key that can do more than they can. A full secret key can refund, so a live one can be created only by an owner or an admin. A developer can create test keys, which move no money. Live keys need a fresh code from your authenticator.
When a request is refused
A request your role or key does not permit is answered with 403, and required_capability names the permission that was missing:
{
"error": {
"type": "permission_error",
"code": "insufficient_permissions",
"message": "Your role (analyst) does not have the payments:refund permission.",
"required_capability": "payments:refund"
}
}x-required-capabilities in the OpenAPI document.