Knowledge Base

Quick answers to questions about building, sharing, and managing forms.

Getting Started

How do I create my first form?+
Sign up for a free account, then click "New Form" on your dashboard. You can start from a blank canvas, pick from 500+ pre-built templates, or duplicate one of your existing forms. Add elements from the sidebar, then click Share to send it out.
What's the difference between Free and Pro?+
Free covers everything you need to run a form: unlimited forms, unlimited submissions, all 42 element types, conditional logic, and email notifications. Pro ($99/month) removes Fantastic Forms branding, raises file upload limits, unlocks the Address Autocomplete and Voice Recording elements, and gives you API access + webhooks + MCP.
Are there really no submission limits on the Free plan?+
Correct. Free plans include unlimited forms and unlimited submissions. We don't paywall the basics like other form builders do.

Building Forms

What element types are available?+

42 element types, grouped by purpose.

Text & input

  • Short Text, Long Text, Email, Phone, URL, Number
  • Full Name (split into first/last), Address
  • Fill in the Blanks — inline cloze-style inputs in a paragraph

Choice & selection

  • Single Choice, Multiple Choice, Checkboxes, Dropdown, Yes/No
  • Cascading Dropdown — up to 4 chained dropdowns (built-in Country→State→City + Industry & Vehicle presets, or define your own)
  • Ranked List — drag to reorder a list
  • Matrix — grid of rows × columns for multi-question Likert scales

Ratings & scales

  • Star Rating, Linear Scale

Date, time & scheduling

  • Date (single or range), Time, Date + Time
  • Countdown Timer — visible deadline on the form
  • Scheduler — embed Calendly / SavvyCal / Cal.com / zcal directly inside the form

Media, files & signatures

  • File Upload — per-element type/size limits + image aspect-ratio & min/max-dimension rules
  • Signature — draw or upload (PNG, 1 MB cap)
  • Voice Recording (Pro)
  • Audio Embed — auto-resolves Spotify, Apple Music, SoundCloud, Audiomack, Mixcloud, Bandcamp, YouTube, or any raw iframe snippet into a native player
  • Map — let respondents pin a location

Payments, legal & validation

  • Payment — Stripe, PayPal, Paddle, Polar, Creem, Dodo, Lemon Squeezy. Fixed or variable amount, with coupon codes.
  • Clickwrap — opt-in to your terms with timestamp & IP capture
  • Captcha

Calculations & code

  • Dynamic Calculator — live arithmetic on other fields (price * quantity, ternaries, conditional totals), with optional chart output
  • Code Block — syntax-highlighted code answers (50+ languages)
  • Social Media — collect handles for X, Instagram, LinkedIn, GitHub, TikTok, YouTube, Threads, Snapchat, etc.
  • Hidden — invisible field for URL-param / API-injected values (great for attribution)

Layout & content blocks

  • Heading, Paragraph, Statement, Divider
  • Image, Video (YouTube, Vimeo, Rumble)
How do I add conditional logic?+
Open any non-content element's settings panel and click "Add Logic". You can show/hide elements based on previous answers using if/then rules. For example, only show "How can we improve?" if the rating is 3 stars or below.
Can I split my form across multiple pages?+
Yes. Click "Add Page" at the bottom of the canvas. You'll get a Next button between pages and a progress bar at the top of the public form.
How do I customize the look?+
Open Settings (gear icon in the top toolbar) to change theme colors, fonts, and the "Submit" button label. Pro users can also remove the Fantastic Forms attribution at the bottom.
How does the Date Range option work?+
Edit any Date element, toggle "Range" on, and the form will display two date inputs separated by "to". Once both dates are filled, the total day count appears below ("3 days" for May 7 → May 9, inclusive).

Conditional Logic

What is conditional logic and when should I use it?+
Conditional logic lets you show or hide individual elements based on what the respondent has typed or selected earlier in the form. Use it to skip irrelevant questions ("only show shipping address if delivery = yes"), drill into specifics ("show 1-star feedback box only if rating ≤ 2"), or branch entire flows ("show enterprise contact info only if company size > 50"). Forms that adapt to the respondent finish faster and convert better.
How do I add a logic rule?+
Select any non-content element in the FormBuilder canvas, then click "Add Logic" in the right-hand settings panel. A rule needs three things: a source field, an operator, and (for most operators) a value to compare against. The default action is Show; flip it to Hide if you want the inverse.
Which operators are supported?+

We support 11 operators covering every common use case:

  • Equals / Does not equal — exact string or value match.
  • Contains / Does not contain — case-insensitive substring search.
  • Greater than / Less than — numeric comparisons (works on number, rating, and linear-scale fields).
  • Is empty / Is not empty — checks whether the respondent answered the field at all.
  • Is selected — for checkbox arrays, fires when a specific option is checked.
  • Matches regex / Does not match regex — full JavaScript-style RegExp for advanced patterns like ^\d{5}$ (US ZIP) or @yourcompany\.com$ (only company emails).

Invalid regex patterns are caught in the builder with a red border and an "Invalid regex" caption — they fail-closed at runtime, so a typo never breaks the form.

Can I combine multiple conditions in one rule?+
Yes. Each rule lets you add as many conditions as you need and choose between "ALL conditions must match" (logical AND) or "ANY condition can match" (logical OR). Mix them to express things like "show this field if (rating ≤ 2 AND email is provided) OR (free-text contains 'bug')".
Can I stack multiple rules on the same element?+
Yes — each element can have any number of rules. They evaluate in order, and the last rule that matches wins. Use this for tiered logic ("show by default; hide on small screens; force-show for admins").
Does conditional logic run on the server or in the browser?+
Conditional logic is evaluated entirely client-side in the respondent's browser as they fill out the form. There's no server round-trip, so visibility updates are instant. The logic rules themselves are stored as JSON on the form element and travel with the form via export/import.
Will hidden fields still be required?+
No. Once an element is hidden by logic, its "required" flag is suppressed and its value is dropped from the submission. This prevents the classic bug where a respondent gets stuck on a required field they can't see.
Is conditional logic free?+
Yes. Unlike Tally and Typeform, we don't paywall logic. Every rule, every operator (including regex) is available on the Free plan with no per-form or per-rule cap.

A/B Testing

What is whole-form A/B testing?+
A/B testing lets you run two versions (Variant A and Variant B) of the same form simultaneously, with traffic split 50/50. Each respondent gets a sticky variant assignment, so refreshing the page or returning later shows them the same version. When you've collected enough data, "Promote to Live" copies the winning variant's content back to the parent form and archives the loser.
How do I start an experiment?+

Open any form, click the A/B Test button in the toolbar, and Start Experiment. Behind the scenes we:

  1. Duplicate the form into Variant A (your original, untouched) and Variant B (your free space to change anything — question wording, element order, theme, even structure).
  2. Mark the parent form as an "experiment container" — its public URL stays the same, but it now sticky-routes 50% of visitors to A and 50% to B.
  3. Start tracking views, submissions, and conversion rate for each variant independently.

Edit Variant B until you're happy with the alternative. The original Variant A remains your safe baseline.

How is the winner decided?+
On the Experiment dashboard we show side-by-side conversion rates plus a one-tailed statistical-significance calculation (90% / 95% / 99% confidence bands). A variant is considered the winner once we reach the 95% confidence threshold AND have at least 100 sessions per variant — both bars need to clear for the "Promote" button to recommend a clear pick. Below that threshold, the dashboard shows "still gathering data" so you don't promote off random noise.
What does "Promote to Live" do?+
Promoting copies the winning variant's content (elements, settings, theme, logic, integrations) over the parent form, ends the experiment, and archives the losing variant for your records. The parent form keeps its public URL, so any embeds, share links, or marketing campaigns continue to work — only the underlying content changes.
Are visitors sticky-routed?+
Yes. The first time a respondent loads the form, we set a localStorage key scoped to the form ID (something like ff_ab_variant_<formId>) and pin them to either A or B. Refreshing, returning later, or hitting Back-then-Forward all show the same variant. This is critical for honest A/B results — you can't measure variant performance if respondents bounce between versions mid-session.
Can I A/B test individual fields instead of the whole form?+
No — we deliberately scrapped element-level A/B testing in favor of whole-form testing. Element-level splits inflate measurement noise (you can't cleanly attribute conversion to one element when everything around it stays the same) and bury creators in micro-experiments. Whole-form testing forces you to articulate a hypothesis ("a shorter intro + reordered fields will lift conversion") and measure the user-visible outcome.
Is A/B testing free?+
A/B testing is a Pro feature ($99/month). Free users see the A/B Test button in the toolbar but it's gated with an upgrade prompt. This is one of the few features where Pro plans differ meaningfully — the math behind statistical significance is non-trivial to ship for free.
How much traffic do I need to run a meaningful test?+
Practical rule: aim for at least 100 completed submissions per variant before declaring a winner. Below that, the variance is too high and our significance calculation will keep telling you "still gathering data". On a form getting 5 submissions/day, that's ~40 days of data; on one getting 50/day, it's 4. If your form is too low-traffic to wait that long, the honest answer is that A/B testing isn't the right tool — focus on qualitative feedback first.
Can I stop an experiment without promoting a variant?+
Yes — there's a "Cancel experiment" button on the A/B dashboard. It deletes Variant B, returns the parent form to its pre-experiment state, and resets all sticky-variant assignments so the next visitor sees the canonical form.

Fonts

How do I change my form's font?+
Open Settings (gear icon in the builder toolbar) → Font Choice. Pick any of the 35 fonts below. The change applies to all headings and body text in your form, and you'll see a live preview while typing.
Which fonts are available?+

All 35 fonts are loaded from Google Fonts and available on every plan. Click a font to see its name in its own typeface:

Inter
Archivo
Barlow
Bitter
Cabin
Crimson Text
DM Sans
Fira Sans
IBM Plex Sans
IBM Plex Serif
Josefin Sans
Karla
Lato
Libre Baskerville
Lora
Manrope
Merriweather
Montserrat
Mulish
Nunito
Open Sans
Oswald
Outfit
Playfair Display
Plus Jakarta Sans
Poppins
PT Sans
Quicksand
Raleway
Roboto
Rubik
Sora
Source Sans 3
Space Grotesk
Work Sans
Will my chosen font load fast for respondents?+
Yes. Fonts are served from Google Fonts' global CDN with the font-display: swap strategy, so the form renders instantly with a system fallback and swaps in your chosen font as soon as it downloads. No layout shift, no blank screen.

Languages

How do I translate my form?+
Open Settings (gear icon in the builder toolbar) → Language. Pick from the 70 languages below. Built-in UI strings (Submit / Next / Previous / Submitting / "This field is required" / file-upload prompts / signature labels / fallback Thank You / "made with Fantastic Forms" branding) all translate instantly. Right-to-left layout is auto-applied for Arabic, Hebrew, Persian, and Urdu.
Are my question labels and Thank You message translated too?+
No. Those stay owner-controlled. We don't auto-translate the content of your form because machine translation often misses your brand voice and important wording. If you want a multi-language form, the best pattern is to duplicate the form once per language and translate your labels manually. The built-in UI strings (buttons, validation messages) translate automatically based on your Language setting either way.
Which languages are available?+

All 70 languages are available on every plan. The native name is shown first, with the English name in parentheses:

English
Español(Spanish)
Français(French)
Deutsch(German)
Italiano(Italian)
Português(Portuguese)
Shqip(Albanian)
Nederlands(Dutch)
Svenska(Swedish)
Norsk(Norwegian)
Dansk(Danish)
Suomi(Finnish)
Íslenska(Icelandic)
Polski(Polish)
Čeština(Czech)
Slovenčina(Slovak)
Magyar(Hungarian)
Română(Romanian)
Български(Bulgarian)
Ελληνικά(Greek)
Hrvatski(Croatian)
Српски(Serbian)
Slovenščina(Slovenian)
Македонски(Macedonian)
Lietuvių(Lithuanian)
Latviešu(Latvian)
Eesti(Estonian)
Русский(Russian)
Українська(Ukrainian)
Беларуская(Belarusian)
Türkçe(Turkish)
Azərbaycanca(Azerbaijani)
Қазақша(Kazakh)
Кыргызча(Kyrgyz)
Oʻzbekcha(Uzbek)
Հայերեն(Armenian)
ქართული(Georgian)
العربية(Arabic)RTL
עברית(Hebrew)RTL
فارسی(Persian)RTL
اردو(Urdu)RTL
हिन्दी(Hindi)
नेपाली(Nepali)
বাংলা(Bengali)
தமிழ்(Tamil)
తెలుగు(Telugu)
മലയാളം(Malayalam)
मराठी(Marathi)
ગુજરાતી(Gujarati)
ਪੰਜਾਬੀ(Punjabi)
ไทย(Thai)
Tiếng Việt(Vietnamese)
Bahasa Indonesia(Indonesian)
Bahasa Melayu(Malay)
Filipino
日本語(Japanese)
한국어(Korean)
简体中文(Chinese (Simplified))
繁體中文(Chinese (Traditional))
粵語(Cantonese)
Kiswahili(Swahili)
Afrikaans
isiZulu(Zulu)
አማርኛ(Amharic)
Català(Catalan)
Euskara(Basque)
Galego(Galician)
Malti(Maltese)
Cymraeg(Welsh)
Gaeilge(Irish)

Sharing & Embedding

How do I share a form?+
Click the Share button in the top toolbar. You'll get a public link, a QR code, and three embed snippets: inline, popup, and full page. The popup snippet is now a single <script> tag, so you can paste it anywhere on your site.
How do popup embeds work?+
In Share → Popup, choose the trigger style (button, link, side tab, or auto-open after delay), button text, color, and position. Copy the one-line <script> snippet and paste it before </body> on your site. The popup builds itself when the page loads.
Can I track form submissions in Google Analytics or Meta Pixel?+
Yes. Open the form, go to Settings → Attribution Tags → toggle it on, and paste any combination of: Meta Pixel ID, Google Analytics 4 Measurement ID, Google Tag Manager Container ID, LinkedIn Partner ID, or Microsoft Clarity Project ID. The form fires Lead, form_submission, and conversion events to whichever providers you enable — both on the hosted page and on every embed.
Which attribution providers are supported?+
Out of the box: Meta (Facebook) Pixel, Google Analytics 4 (gtag.js), Google Tag Manager, LinkedIn Insight Tag, and Microsoft Clarity for session recordings + heatmaps. You can enable as many as you want per form — IDs are stored per-form so different forms can route to different ad accounts or workspaces.
How do I set up Microsoft Clarity on my forms?+
Create a free project at clarity.microsoft.com, copy your Clarity Project ID (10-character code from the install snippet), then open Settings → Attribution Tags on the form and paste it into the "Microsoft Clarity Project ID" field. Clarity will start recording sessions and field-level heatmaps on the very next form view — no extra script needed.
Where can I find each provider's tracking ID?+
Meta Pixel ID: Meta Events Manager → Data Sources → your pixel (15–16 digit number). GA4 Measurement ID: Google Analytics → Admin → Data Streams → Web (starts with G-). Google Tag Manager: container ID (starts with GTM-). LinkedIn: Campaign Manager → Account Assets → Insight Tag (Partner ID, 6–7 digits). Microsoft Clarity: clarity.microsoft.com → Settings → Setup (10-character Project ID).
Do attribution tags work inside embedded forms?+
Yes. The inline, popup, and full-page embed scripts all load the configured pixels on the parent page, so events are attributed to the visitor's real domain (not ours). That means your existing audiences, conversion campaigns, and Clarity recordings keep working — no extra setup on your site.

Submissions & Analytics

Where do I find responses?+
Click any form in your dashboard, then "Submissions" in the top nav. You'll see a sortable list, plus aggregate stats: total views, total submissions, completion rate, and average completion time.
How do I export submissions?+
On the Submissions page, click Export CSV or Export JSON. Each download contains every submission with proper column labels matching your form. Click any individual response and "Export PDF" for a formatted single-submission download.
How do I get notified of new submissions?+
Settings → Notifications → toggle "Email me on new submissions". You'll get a clean HTML summary at the email address on your account.
Can I see analytics by country/device?+
Yes. The Submissions page shows IP, country, city, browser, OS, device type, and screen resolution for every response. Useful for catching bot traffic and seeing where your audience is coming from.

Pro Plan Features

What unlocks with Pro?+
Removal of Fantastic Forms branding, larger file uploads, the Voice Recording element, the Address Autocomplete element, the Public REST API v1, outbound Webhooks, custom roles & permissions, and priority support.
How do I upgrade?+
Settings → Billing → Upgrade, or click "Upgrade" anywhere a Pro feature is gated. Payment is handled by Stripe; you'll be billed $99/month and can cancel anytime.
Do you offer refunds?+
Yes! We can facilitate a full refund of your last month's payment upon request (post cancellation.)

Integrations

Which apps can I connect Fantastic Forms to?+

We ship 47 native integrations across CRM, project management, marketing, automation, databases, messaging, support, analytics, and scheduling — plus 7 payment processors and 5 tracking pixels. Each one is configured per-form with your own credentials — no shared bottleneck, no middleware layer:

ActiveCampaign

Sync submitters as contacts.

Airtable

Append a record per submission.

Apollo

Push contacts into outreach sequences.

Asana

Create a task in any project.

Attio

Upsert People records by email.

Brevo

Add submitters to a contact list.

Cal.com

Embed a Cal.com booking page.

Calendly

Embed Calendly with prefill.

Circle

Invite submitters into a Space.

ClickUp

Create a task in any list.

Close

Create a Close lead per submission.

Coda

Append rows to any Coda table.

Copper CRM

Create a Copper person per submission.

Discord

Rich embed to any channel.

Drip

Add subscribers with tags.

Flodesk

Add subscribers to a segment.

Folk

Push contacts into Folk groups.

Follow Up Boss

Create real-estate CRM people.

Ghost

Create newsletter members.

GoHighLevel

Push contacts to sub-accounts.

Google Sheets

Auto-append every submission.

HubSpot

Upsert Contacts deduped by email.

Intercom

Upsert Contacts (US/EU/AU).

Kit

Attach submitters to a Kit form.

Less Annoying CRM

Create LACRM contacts with notes.

Mailchimp

Add submitters to an Audience.

Make

Trigger any Make scenario.

Microsoft Teams

Adaptive Card to any channel.

Mixpanel

Track submissions as events.

n8n

Trigger any n8n workflow.

Notion

Create a row in any database.

Nutshell

Create a Nutshell lead with contact.

Omnisend

Upsert subscribed contacts.

Ontraport

Create Ontraport contacts.

Pipedrive

Create or update Pipedrive People.

SavvyCal

Embed your SavvyCal page.

Segment

Forward to all your destinations.

Slack

Block Kit message to any channel.

Smartsheet

Append rows to a Smartsheet sheet.

SmartSuite

Create a record per submission.

Stackby

Append rows to any Stackby table.

Telegram

Bot message to any chat or channel.

Trello

Create a card on any list.

Zapier

Trigger any Zap via Catch Hook.

zcal

Embed your zcal booking page.

Zendesk

Open a ticket per submission.

Zoho CRM

Upsert Leads or Contacts.

Plus 8,700+ apps reachable through the n8n, Make, and Zapier integrations. All three share the same JSON envelope, so a workflow you build in one platform is one-paste-away from running in another.

Payment processors — accept payments inside any form via a hosted checkout you control:

Stripe

Cards, Apple Pay, Google Pay, Link.

PayPal

PayPal balance and credit cards.

Paddle

Merchant-of-record with built-in tax.

Polar

Developer-first checkout for SaaS.

Creem

European MOR alternative to Paddle.

Dodo Payments

MOR checkout for global creators.

Lemon Squeezy

Subscription-friendly digital storefront.

Tracking pixels & analytics — auto-injected on your published form (or hosted on your own domain) to attribute conversions back to your ad campaigns:

Meta Pixel

Facebook & Instagram Ads conversions.

Google Tag (gtag.js)

GA4 + Google Ads conversion events.

LinkedIn Insight Tag

B2B retargeting & conversion tracking.

Microsoft Clarity

Free heatmaps & session recordings.

TikTok Pixel

TikTok Ads conversions and lead capture.

Where do I configure an integration?+
Each integration has its own page at /integrations/{name}, accessible from the Integrations directory in the sidebar of any signed-in account. You bring your own credentials (API token, webhook URL, etc.), paste them once per form, and we save them securely on that form's settings.
Do integrations run in real-time or on a delay?+
Real-time. Every integration fires as a fire-and-forget background task the moment a submission lands, typically delivered within 1 to 3 seconds. If the destination service is down, the submission is still saved to Fantastic Forms and we log the failure on the form so you can retry.
Is the same submission sent to all connected integrations?+
Yes. If you connect a single form to, say, Google Sheets + Slack + HubSpot + Zapier, every new submission triggers all four in parallel. Each integration is independent, so one failing doesn't affect the others.
What's the difference between a native integration and using Zapier/Make/n8n?+

Native (Google Sheets, Slack, HubSpot, Notion, Airtable, etc.): direct, no middleware, no per-task billing, no rate limits on top of the destination's own. Best when the app is on our list.

Zapier / Make / n8n: use these for the long tail of 8,700+ other apps, or when you need branching logic between Fantastic Forms and the destination. You bring your own automation account; we just POST the submission JSON to your webhook.

Can I send the same submission to multiple Slack channels (or multiple sheets)?+
Per-form, each native integration takes one destination (one channel, one sheet, one database). For fan-out, the simplest pattern is to connect a Zapier/Make/n8n workflow that splits to multiple targets.

API, MCP & Webhooks

How do I get an API key?+
Pro users: Settings → API → Generate Key. Treat it like a password; it grants full access to your forms and submissions. The same key works for our REST API, MCP server, and signed webhook payloads.
Where are the API docs?+
Visit /developer (or click "Developer" from your Settings menu). You'll find every REST endpoint, request/response examples, a copy-pasteable MCP client config snippet, and a "Try it" panel that uses your real API key.
What is MCP and how do I connect Claude / Cursor to Fantastic Forms?+

Model Context Protocol (MCP) is an open standard that lets AI assistants — Claude Desktop, Cursor, Windsurf, Zed, and any other MCP-capable client — read and write data on services you authorize. Our MCP server lives at https://fantasticforms.com/api/mcp and exposes tools to list, read, create, and update your forms in plain language.

Example: connect Claude Desktop

Edit claude_desktop_config.json and add:

{
  "mcpServers": {
    "fantastic-forms": {
      "url": "https://fantasticforms.com/api/mcp",
      "headers": {
        "Authorization": "Bearer ff_live_YOUR_KEY"
      }
    }
  }
}

Restart Claude Desktop. Then you can ask things like "List my draft forms", "Create a 3-question customer survey with a 1-10 rating and a comment box", or "Add an email field to the contact form."

Cursor and other MCP clients use the same URL + Bearer header (settings vary; consult their MCP docs). Pro plan only.

How do webhooks work?+
In any form's Settings → Integrations → Webhooks, paste a URL. Every new submission posts to that URL as a JSON body within seconds. Includes a signature header (HMAC-SHA256) you can verify with your webhook secret. Failed deliveries are retried with exponential backoff.
When should I use the REST API vs. MCP vs. Webhooks?+

REST API — pull data on demand from any backend (Node, Python, PHP, Go, etc.). Best for syncing forms or submissions into your own product or running scheduled reports.

MCP — give an AI assistant conversational read/write access to your forms. Best for "build me a form" / "fix this question" workflows inside Claude, Cursor, or other AI clients.

Webhooks — react in real-time to incoming submissions. Best for plugging Fantastic Forms into your own server-side automation without polling.

Payments

Which payment providers can I use?+
Fantastic Forms supports 7 hosted-checkout providers: Stripe, PayPal, Paddle, Polar, Creem, Dodo Payments, and Lemon Squeezy. Pick one per Payment element — your buyer is redirected to that provider's secure checkout and returned to a Thank-you page with their order receipt after a successful payment.
How do I add a Payment element?+
Open your form in the builder → Add Element → Input Fields → Payment. In the right panel choose the provider, pricing mode (Fixed / Variable / Suggested), currency, product name, and (for non-Stripe providers) the product or variant ID from your provider dashboard.
Where do I paste my API keys?+
Open the form → Settings → Payment Provider Credentials → click your provider card → paste the key(s) → click "Test connection" to confirm the key is valid before publishing. Keys are stored on that specific form only.
What's the difference between Fixed, Variable, and Suggested pricing?+
Fixed = one set price (e.g. $29.99). Variable = the buyer enters any amount between your min/max (good for tipping or "name-your-price"). Suggested = same as variable but with suggested-amount chips (e.g. $5 / $10 / $25 / $50) plus a free input below — great for donations, tips, or pay-what-you-want pricing.
What happens if a buyer abandons checkout?+
No submission is recorded. Pending payment rows are auto-deleted after 30 minutes — your analytics and exports only contain successfully completed transactions. This is the "block" behavior the form-builder is designed around.
How are refunds and disputes tracked?+
When a refund or chargeback is initiated in your provider dashboard, our webhook receiver flips the matching submission to status "refunded" or "disputed". The Submissions table shows a colored badge (Paid / Refunded / Disputed) and you can filter by status. Open the submission to see a payment timeline (paid → disputed → resolved → refunded) with exact timestamps.
Does Stripe have a "platform key" I can use without configuring my own?+
No. Every provider — including Stripe — requires you to paste your own Secret Key. That guarantees payments land in YOUR account, not someone else's. Get the key from dashboard.stripe.com → Developers → API Keys (use sk_test_… for testing, sk_live_… for production).
Why does PayPal need both a Client ID and Secret?+
PayPal uses OAuth 2.0 client_credentials — Client ID identifies your app and Secret authenticates it. Both come from developer.paypal.com → My Apps & Credentials → REST API apps. Toggle "Use sandbox" on while testing.
Paddle / Polar / Creem / Dodo / Lemon Squeezy — what extra info do they need?+
Each requires an API key plus a product/variant identifier you create in their dashboard: Paddle = Price ID (pri_…), Polar = Product ID (optional — leave blank for ad-hoc pricing), Creem = Product ID, Dodo = Product ID (pdt_…), Lemon Squeezy = Store ID + Variant ID. The credentials card in Settings shows where to find each one.
Does it work with multi-currency?+
Yes — pick from 17 majors (USD, EUR, GBP, CAD, AUD, JPY, CHF, SEK, NOK, DKK, NZD, SGD, HKD, BRL, MXN, INR, ZAR) per Payment element. The Pay button label updates live with the correct currency symbol and amount.
How do I configure webhooks at the provider end?+
In each provider's dashboard, add a webhook endpoint pointing to https://YOUR-DOMAIN/api/payments/webhooks/{provider} — e.g. /api/payments/webhooks/stripe. Subscribe to `checkout.session.completed`, `charge.refunded`, `charge.dispute.created`, `charge.dispute.closed` (or each provider's equivalent event names — refunds & disputes are auto-detected on the generic webhook endpoint).
Are there fees?+
Fantastic Forms charges no extra payment fees — you only pay what your chosen provider charges (typically 2.9% + $0.30 per successful transaction). All providers above offer test/sandbox modes you can use without real money.

Account & Security

How do I change my password?+
Settings → Profile → Change Password. You'll need your current password to confirm.
How do I enable two-factor authentication?+
Settings → Security → 2FA. Scan the QR code with any authenticator app (1Password, Authy, Google Authenticator) and confirm the 6-digit code.
How do I delete my account?+
Settings → Profile → Delete Account. This permanently removes all forms, submissions, and personal data within 30 days, per our Privacy Policy.
Are my forms and responses encrypted?+
Yes. All traffic is HTTPS-only, data at rest is encrypted (Supabase + AES-256), passwords are bcrypt-hashed, and submission payloads use TLS 1.2+ in transit. We are GDPR and CCPA compliant.

Troubleshooting

My respondents say the form won't submit+
Most often this is a required field that wasn't filled. The page should highlight which one in red. If submitters are seeing a captcha loop, try regenerating the form short link in Share. Still stuck? Use the Contact link in the footer with the form ID.
The popup embed doesn't appear on my site+
Confirm your CSP (Content Security Policy) allows scripts from fantasticforms.com and frames from the same. Most CMS hosts (WordPress, Webflow, Wix, Squarespace) work out of the box. Check the browser console for blocked-resource errors.
I'm getting too many spam submissions+
Add the Captcha element (free), usually the last element on the form. For higher-volume forms, also enable rate limiting in Settings → Spam Protection.
I still need help+
We respond to every message within one business day. Use the to reach us.