home/veldform/docs

Veldform / Docs

Payments

Veldform can take payments through Stripe and Mollie. Both use the provider's hosted checkout page and support one-time payments. Developers can add other gateways — see Action and filter hooks.

Connecting a provider

Credentials are stored as a connection. Go to Veldform -> Connections, click Add connection and pick Stripe or Mollie:

  • Stripe — fill in your Secret key (sk_live_... or sk_test_...). Optionally add the Webhook signing secret (whsec_...).
  • Mollie — fill in your API key (live_... or test_...).

You don't need to configure a webhook URL at the provider — Veldform passes it along automatically when a payment is created.

There is no separate test mode toggle: whether you're in test or live mode is determined by the key you use. To go live, update the connection with your live key.

Currency

The default currency and price formatting live under Veldform -> Settings -> Currency & prices. A form can override the currency under its own Settings -> Currency.

Setting up a payment form

A payment form usually consists of two parts: product fields, and the payment action.

Product fields

Add a Product / price field for each thing you're selling. A product field has two pricing modes:

  • Fixed price — one unit price
  • Choice of priced options — the visitor picks an option, each with its own price

Optionally let the buyer choose a quantity, with a minimum and maximum. Add an Order total field to show the running total — it updates live as the visitor picks options.

Prices are always recomputed on the server from the saved form, so buyers can never manipulate what they pay.

The payment action

On the Actions tab, add the Take payment action. It has the following settings:

  • Payment provider — Stripe or Mollie
  • Connection — the connection with your API credentials
  • Amount — where the amount comes from:
    • Fixed price — a fixed amount
    • From product fields — the computed order total (recommended for sales)
    • Amount the payer enters — for donations; point it to a number field and optionally set a minimum
  • Description — the payment description at the provider, merge tags allowed (e.g. {{ form.title }} #{{ entry.id }})

The payment flow

When the visitor submits the form, they are redirected to the Stripe or Mollie checkout. After paying they return to the page the form is on:

  • Paid — your form's confirmation message is shown
  • Pending — a "your payment is being processed" notice is shown; the entry is updated once the provider confirms
  • Failed, canceled or expired — a notice is shown and the form is rendered again, so the visitor can retry

Payment confirmation always comes from the provider's webhook (or a direct status check) — never from the redirect alone. Abandoned checkouts are automatically marked expired after 24 hours.

After payment

Any other action can be set to run After payment instead of On submit. That's how you send a receipt: add a Send notification action and set its Run setting to After payment. It will run exactly once, when the payment is confirmed.

Payment statuses on entries

The entry status follows the payment: Awaiting payment, Paid, Payment failed, Payment expired or Payment canceled. If the payment succeeded but a required after-payment action failed, the status is Paid — action failed — the details will be in the entry timeline and the log.

Refunds you issue at the provider are picked up too, and show up in the revenue tiles on the form's Stats tab.

For developers: an action hook fires on every payment status change, e.g. veldform/payment/paid — see Action and filter hooks.