Stripe payments in FormNode forms

Add a Payment field when a form should collect a fixed-amount payment before downstream automation runs. FormNode creates a server-side Stripe Checkout Session, redirects the respondent to Stripe, and updates the submission after Stripe sends a signed webhook.

FormNode does not collect card dataPayment fields use Stripe-hosted Checkout. FormNode does not collect, process, or store card numbers, CVC codes, bank account numbers, or payment credentials. Those details are entered on Stripe pages and are handled by Stripe.
Generally available for every workspaceStripe Payment fields are no longer a beta feature. Any workspace can use them after an administrator connects that workspace's Stripe account. Payments remain isolated to the workspace that created the Checkout Session, and an unconfigured workspace cannot create a charge.

How the flow works

  1. A workspace admin connects that workspace's Stripe account in Settings.
  2. A form builder adds a Payment field with a fixed amount and currency.
  3. The respondent fills out the form and submits it in FormNode.
  4. FormNode stores the form submission with payment status checkout_pending.
  5. FormNode creates a Stripe Checkout Session using the workspace's encrypted Stripe secret key.
  6. The browser redirects to Stripe Checkout so the respondent can pay or apply an eligible promotion code.
  7. Stripe sends a signed webhook to FormNode after payment completes.
  8. FormNode verifies the webhook signature and workspace metadata, records the Stripe event for idempotency, marks the submission paid, and then sends the normal form webhook to n8n or the configured endpoint. If delivery fails, Stripe can safely retry it without creating a second payment or downstream fulfillment.

What FormNode stores

FormNode stores only operational payment metadata needed to connect a payment back to the correct workspace, form, organization, and submission.

DataStored by FormNode?Why
Form submission answersYesThe normal encrypted submission record.
Stripe Checkout Session IDYesReconciliation and webhook matching.
Stripe PaymentIntent IDYesReconciliation and support lookup in Stripe.
Payment status, amount, currencyYesSubmission status, reporting, and workflow handoff.
Card number, CVC, bank account, wallet credentialNoEntered and processed on Stripe-hosted Checkout.

Connect Stripe

  1. Open Settings → Integrations.
  2. Enter the Stripe publishable key, secret key, and webhook signing secret for the current workspace.
  3. Copy the displayed FormNode webhook URL into Stripe as an endpoint.
  4. Subscribe the Stripe endpoint to Checkout completion events.
  5. Save the connection in FormNode.

Stripe credentials are workspace-scoped. A form in one workspace cannot use another workspace's Stripe connection.

Add a Payment field

  1. Open a form in the builder.
  2. Add Payment from the Input field group.
  3. Set the amount, currency, item name, and Stripe description.
  4. Publish the form.

The first version is fixed-amount Checkout. Eligible Stripe promotion codes may reduce that amount, including to zero. Do not use respondent-entered text or number fields as payment amounts unless a future release adds an explicit server-side pricing model for that use case.

The respondent sees the configured item name, description, currency, and final discounted total on Stripe Checkout before confirming payment.

Webhook behavior

Payment-required forms delay fulfillment-style webhooks until payment is confirmed. That means your n8n workflow receives the normal form.submitted payload after Stripe confirms payment, with apayment object that includes provider, status, amount, currency, and Checkout Session ID.

{
  "eventType": "form.submitted",
  "formId": "form_123",
  "organizationId": "org_123",
  "submissionId": "sub_123",
  "payment": {
    "provider": "stripe",
    "status": "paid",
    "checkoutSessionId": "cs_live_...",
    "amountCents": 5000,
    "currency": "usd"
  },
  "data": {
    "customer_name": "Acme Co"
  }
}

Security model

  • Stripe secret keys and webhook secrets are encrypted at rest.
  • Checkout Sessions are created server-side, never from browser-supplied Stripe credentials.
  • Each browser submission attempt carries a stable idempotency key, and the workspace/form/organization-scoped uniqueness check prevents spam clicks from creating a second Checkout Session.
  • Payment metadata includes workspace, form, organization, and submission IDs.
  • Stripe webhooks must pass signature verification before FormNode trusts the event.
  • Stripe event IDs are recorded so retries do not duplicate downstream fulfillment webhooks.
  • FormNode revalidates that the submitted Stripe metadata matches a submission inside the same workspace before updating payment status.
  • Hidden or conditionally hidden Payment fields do not create Checkout Sessions.

Operational implications

  • Refunds, disputes, failed payments, tax settings, receipts, and Stripe account reviews are handled in Stripe.
  • FormNode records payment status for workflow and support visibility, but Stripe remains the payment source of truth.
  • Use Stripe test keys and a test webhook endpoint while configuring a new workspace, then switch to matching live keys before accepting real payments.
  • Keep webhook endpoints configured for the same FormNode environment that creates the Checkout Session.
  • Use a clear item name and description so respondents understand what they are paying for on Stripe Checkout.

Related docs