Guides · Updated October 17, 2026

Which permissions does a Stripe restricted key need for read-only auditing?

Billing audits, reconciliation tools and AI agents all ask for Stripe access. The safe answer is a restricted key with Read on just the resources the job needs. Here's what each permission is for when the goal is a read-only audit of subscriptions, payments and webhooks, and what you can leave at None.

Restricted keys in one paragraph

A restricted API key (rk_live_ or rk_test_) can only do what you allow. For each resource you choose None, Read or Write, and Write implies Read. Stripe recommends restricted keys instead of secret keys wherever possible, especially for third parties and AI agents, because a leaked restricted key is limited to its permissions (Stripe: Restricted API keys). Stripe maps GET requests to Read and POST/DELETE requests to Write, so an audit that only reads needs no Write permission at all.

Permissions for a read-only billing audit

Resource (Read)What it lets an audit seeNeeded for
CustomersCustomer IDs, emails, metadata (for example your user ID)Matching Stripe customers to users in your app
SubscriptionsStatus (active, trialing, past_due, unpaid, canceled), prices, item quantitiesWho should have access; seat counts
ChargesPayments, amounts, refund statusDouble charges, refunds, one-time payments
EventsRecent events, including ones not delivered to your webhooks (List events)Failed webhook deliveries
Webhook EndpointsEndpoint URLs, status, subscribed events (List webhook endpoints)Disabled endpoints, missing event subscriptions
Checkout Sessions (optional)Completed sessions, mode (payment or subscription), line itemsOne-time purchases and lifetime deals
Invoices (optional)Invoices and invoice paymentsLinking charges to billing periods; one-time charges with no invoice
Entitlements (optional)Active entitlements per customer (Entitlements)Access granted through Stripe features

Everything else can stay at None: payouts, balance, transfers, payment methods, products you don't sell, Connect, Issuing and so on. If a tool asks for more than this for a read-only audit, ask why.

Live vs test keys

Keys exist per mode: rk_test_ keys only see test or sandbox data, and rk_live_ keys see real data (Stripe: API keys). Try a new tool with a test key first, then create a separate live key with the same permissions.

Good hygiene

Check a key in seconds

The free Stripe restricted key checker tests each of the resources above with a read-only request and tells you which permissions are missing. It refuses secret keys and stores nothing. It can't detect Write access, because it never attempts a write.

FAQ

Does Read on Customers expose card numbers?

No. Stripe never returns full card numbers through the API. Read on Customers does expose customer details such as email, name and metadata, so only grant it to tools you trust with that data.

Do I need Write on anything for an audit?

No. An audit only lists and reads objects, which are GET requests. Stripe maps GET requests to Read and POST/DELETE to Write, so a read-only audit key needs no Write permissions at all.

Should I use a live or a test key?

Use a test (sandbox) key to try a tool safely. An audit of real customers needs a live key, because test keys only see test data.

How do I know which permission is missing?

If a restricted key lacks a permission, Stripe rejects the request with an error, and the message usually names the missing permission. You can also see the key's failed requests in its request logs in the Dashboard, or paste the key into PaidCheck's restricted key checker.