Skip to content

Stripe node

The Stripe node creates a Stripe Checkout Session and hands back its URL — so a flow can take a payment. The visitor pays on Stripe's own hosted page; no card data ever passes through your flow.

Component id: flowrunner/stripe.

IMPORTANT

This node is an installable component, not part of the engine. Every workspace gets it installed automatically; if it has been removed, the node passes straight through at run time and the editor marks it Not installed in the Add panel. Open Components in the project header to reinstall it.

How it works

The node calls the Stripe API with your secret key (a secret reference) and creates a checkout session for a single line item you describe inline — no need to pre-create a product in Stripe. It returns:

text
refs.<resultVar> = { id: "cs_test_...", url: "https://checkout.stripe.com/c/pay/cs_..." }

The typical flow: a form submits → the Stripe node creates the session → you redirect the visitor to ${checkout.url}. When they finish (or cancel), Stripe returns them to your success / cancel URL.

Redirecting to checkout

Wire this node into a form's onSubmit flow, then give the End node a redirect field bound to ${checkout.url}:

text
Stripe → End   responseBody: { redirect: "${checkout.url}" }

On submit, the form sends the visitor straight to Stripe's payment page — see Redirecting after submit. Because the amount and product are flow references, the same flow charges a different amount per submission (e.g. ${start.total}).

Amounts

amount is in the smallest unit of the currency — cents for USD/EUR/GBP. 2000 means $20.00. A fractional value (19.99) is rejected before the request, so a typo can't silently drop the pennies. Zero-decimal currencies (JPY) use the whole number.

Safety

  • The secret key resolves from ${secrets.*} / ${env.*} only — never flow input.
  • All requests go to the fixed host api.stripe.com — no SSRF surface.
  • Because creating a session never charges (the charge happens later on Stripe's page), a network error or a transient 429 / 5xx is safely retried when you set retries. A client rejection (400 bad amount, 401 bad key) is not retried; wire the error port to handle it.

Config

FieldRequiredDescription
secretKeyYesStripe secret key, as a secret reference (${secrets.STRIPE_SECRET_KEY}).
modeNo (default payment)payment for a one-time charge, subscription for a monthly recurring charge.
productNameYesWhat the customer is buying (shown on the Stripe page). May be a flow reference.
amountYesPrice in the smallest currency unit (2000 = $20.00). May be a flow reference.
currencyNo (default usd)ISO currency code.
quantityNo (default 1)Number of units.
successUrlYesWhere Stripe returns the visitor after payment.
cancelUrlYesWhere Stripe returns the visitor if they cancel.
resultVarNo (default checkout)The variable the { id, url } result is written to.

Ports

next and error.

Examples

Charge a fixed price for a product:

text
Stripe  secretKey: ${secrets.STRIPE_SECRET_KEY}
        productName: "Pro plan"
        amount: 2000            # $20.00
        currency: usd
        successUrl: https://mysite.com/thanks
        cancelUrl: https://mysite.com/pricing
        resultVar: checkout
# → redirect the visitor to refs.checkout.url

Charge a dynamic amount taken from the form:

text
Stripe  productName: "Donation from ${start.name}"
        amount: ${start.cents}   # the form sends an integer number of cents
        currency: usd
        successUrl: https://mysite.com/thanks
        cancelUrl: https://mysite.com/

TIP

Test with a Stripe test-mode key (sk_test_...) and card 4242 4242 4242 4242. Store the live key under Secrets as STRIPE_SECRET_KEY and never paste it into a flow field directly.

Confirming payment

Creating the session doesn't mean the visitor paid — they pay on Stripe's page afterward. To act on a completed payment (fulfil an order, send a receipt), receive Stripe's checkout.session.completed webhook: add a webhook endpoint in the Stripe dashboard pointing at a second flow, and set that flow's Start node to Webhook Signature → Stripe auth with the endpoint's signing secret. FlowRunner verifies the signature, then the flow reads the event (${start.type}, ${start.data}). See Webhook signatures → Stripe.

See also

FlowRunner — the no-code platform for small businesses.