Docs
Everything you need to wire JustForms into your site, app, or service. Skim time: 5 minutes.
Quickstart
Three steps. Total time: under 5 minutes.
- Sign up → verify email → land in dashboard with one form pre-created
- Copy the embed snippet from the form's detail panel
- Paste anywhere on your HTML site. Test by submitting.
Embed snippet
<form data-justforms="YOUR_FORM_ID" data-redirect="/thanks"> <input name="name" required> <input name="email" type="email" required> <textarea name="message" required></textarea> <button>Send</button> </form> <script src="https://justforms.rightnode.workers.dev/embed.js" defer></script>
Optional data-* attributes
data-justforms— (required) form ID from dashboarddata-redirect— URL to redirect on successdata-success— inline success messagedata-error— inline error messagedata-turnstile-key— Cloudflare Turnstile site key
Conversion tracking
On every successful submit the embed auto-detects analytics platforms on your page and fires the right event. No setup needed if your pixels are already installed.
- Google Analytics 4 —
gtag('event', 'generate_lead', ...) - Meta Pixel —
fbq('track', 'Lead', ...) - Google Tag Manager — pushes
form_submitto dataLayer - TikTok / LinkedIn / Reddit / X / Pinterest / Bing UET / Plausible — auto-fired
- Custom —
document.addEventListener('justforms:success', e => ...)
Configure event name + conversion value per form in the dashboard.
Iframe embed (zero setup)
If you can't add JavaScript, use the iframe drop-in. Fully styled, auto-resizing.
<iframe src="https://justforms.rightnode.workers.dev/iframe/YOUR_FORM_ID" width="100%" height="600" style="border:0"></iframe>
POST /submit (web3forms-compatible)
Submit without a pre-created form. Recipient is locked to your access key's verified list.
<form action="https://justforms.rightnode.workers.dev/submit" method="POST"> <input type="hidden" name="access_key" value="jf_live_..."> <input type="hidden" name="subject" value="New lead"> <input name="name" required> <input name="email" type="email" required> <button>Send</button> </form>
Access keys
Mint keys in the dashboard. Each key has:
- Default recipient (where emails go)
- Verified recipients list (additional allowed
to) - Origin allowlist
- Rate limit + monthly quota
- Scopes:
submitonly,formsonly, or both
Manage forms via REST
curl -X POST https://justforms.rightnode.workers.dev/api/v1/forms \ -H "Authorization: Bearer jf_live_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"name":"Contact","recipient_email":"you@yourdomain.com"}'
Returns { id, embed: { js, iframe, submit_url } } — ready-to-paste embed code.
Webhooks
Set webhook_url per form. JustForms POSTs JSON on every submission. With WEBHOOK_SIGNING_KEY set, requests include X-JustForms-Signature header (HMAC-SHA256 hex).
File uploads
Add enctype="multipart/form-data" and any type="file" input. Files go to a private R2 bucket. Max size: Starter 25 MB, Pro 100 MB, Business 500 MB.
Cloudflare Turnstile
Free, privacy-friendly CAPTCHA. Add data-turnstile-key="YOUR_SITE_KEY" to your form — the embed auto-renders the widget and loads the script.