Skip to main content

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:

ResourcePermissionNeeded for
ChargesReadcharges.list, charges.read
CustomersReadcustomers.list, customers.read
InvoicesReadinvoices.list
SubscriptionsReadsubscriptions.list
BalanceReadbalance.read
RefundsWriterefunds.create
PaymentIntentsWritepayment_intents.capture
PayoutsWritepayouts.create
CustomersWritecustomers.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

ActionWhat it doesOn by default
charges.listList charges, paged with limit and starting_afterYes
charges.readRetrieve one charge by idYes
customers.listList customersYes
customers.readRetrieve one customer by idYes
invoices.listList invoicesYes
subscriptions.listList subscriptionsYes
balance.readRead the account balanceYes
refunds.createRefund a chargeNo — approval required
payment_intents.captureCapture a payment intentNo — approval required
payouts.createCreate a payoutNo — approval required
customers.deleteDelete a customerNo — 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, phone and client_secret from 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-Reason header. Stripe also meters read volume against your transaction count over a rolling 30 days, so an agent polling charges.list on 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.