Stripe
The Stripe connector pins your gateway to https://api.stripe.com/v1 and exposes the reads a finance or support agent needs — charges, customers, invoices, subscriptions and account balance — plus four money-moving actions that arrive switched off and, once enabled, still stop for a human. It is the connector where Permaura's approval ladder earns its keep: an agent can answer "why was this customer charged twice?" without ever being able to quietly refund them.
What you need
A restricted API key (rk_live_… or rk_test_…). Stripe recommends these over unrestricted secret keys specifically when handing a key to an agent, because the key itself carries the permission list.
Create one at Developers → API keys → Create restricted key. Every permission defaults to None; set only these:
| Resource | Permission | Needed for |
|---|---|---|
| Charges | Read | charges.list, charges.read |
| Customers | Read | customers.list, customers.read |
| Invoices | Read | invoices.list |
| Subscriptions | Read | subscriptions.list |
| Balance | Read | balance.read |
| Refunds | Write | refunds.create |
| PaymentIntents | Write | payment_intents.capture |
| Payouts | Write | payouts.create |
| Customers | Write | customers.delete — Write on Customers replaces the Read above |
Write implies Read in Stripe, so a resource set to Write does not also need Read ticked. If you only want the reads, leave the bottom four rows at None — that key then physically cannot refund, capture, pay out or delete, whatever anyone switches on later.
Stripe shows the key once. Copy it, and complete the two-factor prompt it asks for.
Add the connection
Open Access → Connections → Add connection, choose Stripe from the catalog, and paste the restricted key into the credential field. It is sealed on your gateway and never displayed again. The gateway sends it as HTTP Basic auth with the key as the username and an empty password, which is Stripe's documented scheme — you do not need to encode anything yourself.
An agent still cannot use it until a grant allows it.
What the agent can do
| Action | What it does | On by default |
|---|---|---|
charges.list | List charges, paged with limit and starting_after | Yes |
charges.read | Retrieve one charge by id | Yes |
customers.list | List customers | Yes |
customers.read | Retrieve one customer by id | Yes |
invoices.list | List invoices | Yes |
subscriptions.list | List subscriptions | Yes |
balance.read | Read the account balance | Yes |
refunds.create | Refund a charge | No — approval required |
payment_intents.capture | Capture a payment intent | No — approval required |
payouts.create | Create a payout | No — approval required |
customers.delete | Delete a customer | No — approval required |
All four writes are classified critical and carry a standing approval requirement, so even after you switch one on, each call stops and waits for a human on a paired device before Stripe sees it.
Good to know
- The API version is pinned in the manifest. Every request carries
Stripe-Version: 2026-07-29.dahlia, Stripe's current release, so responses keep that shape regardless of your account's default version in Workbench. Your own integration can sit on an older version without affecting this connector; the pin only applies to calls the gateway makes. - Sensitive fields are redacted on the way back. The connector strips
number,cvc,exp_month,exp_year,address,email,phoneandclient_secretfrom responses before the agent sees them. Useful, and worth knowing if an agent reports a customer record looking oddly empty — that is the redaction, not Stripe. - Sandbox versus live is decided by the key. An
rk_test_key reaches sandbox data,rk_live_reaches real money. The connector is identical either way, so if you want both, make two connections with different names and grant them separately. - Rate limits. 100 requests per second in live mode, 25 in a sandbox, and 25 per second on most individual endpoints. Exceeding them returns 429 with a
Stripe-Rate-Limited-Reasonheader. Stripe also meters read volume against your transaction count over a rolling 30 days, so an agent pollingcharges.liston a low-volume account can hit an allocation limit rather than a rate limit. - No OAuth. Stripe Connect OAuth is not part of this connector; the restricted key is the whole story, and it works end to end today.
- Rotating is cheap. Replace the connection's credential with a freshly created restricted key at any time; Stripe's own rotation flow keeps the old key alive for up to seven days so you can swap without downtime.