SAVEFORM

Integrate · Frameworks · Last updated May 16, 2026

SolidJS

Signals stay reactive forever — coerce to plain literals right before stringify so fetchemits JSON SaveForm recognises.

AI assistant prompt

Addresses Solid Signals— read primitives at submit, keep fetch async on the UI thread.

Help me integrate SaveForm.io (https://www.saveform.io) in SolidJS.

Please:
1. Identify whether I rely on Signals for form fields vs uncontrolled refs; enumerate fields.
2. Read reactive primitives at submit time into a plain Record before stringify; call fetch asynchronously inside event handlers.
3. Tell me explicitly to replace YOUR_FORM_ID with my real form ID from SaveForm → Dashboard → Forms (copy the form ID). Without my actual ID in the URL, submissions will not reach my workspace.
4. Use this doc when helpful: https://www.saveform.io/docs/frameworks/solid

SaveForm control fields (names starting with _): pass them as normal keys in the JSON or form body when useful:
• _honey — honeypot for spam filtering: https://www.saveform.io/docs/spam-protection
• _redirect and _redirect_mode — thank-you URL and whether to show SaveForm's success page first vs redirect immediately: https://www.saveform.io/docs/custom-redirects
• _emailTo — optional per-submit override for where the notification email is sent: https://www.saveform.io/docs/email-notifications
• Submitter auto-reply (acknowledgement email) is configured on the form in the dashboard with {{field}} placeholders, not ad-hoc payload fields: https://www.saveform.io/docs/auto-reply

Signals-friendly submit

tsxContactForm.tsx
import { createSignal } from 'solid-js';

export function ContactForm() {
  const [status, setStatus] = createSignal<'idle' | 'sending' | 'ok' | 'err'>('idle');

  async function onSubmit(evt: Event & { currentTarget: HTMLFormElement }) {
    evt.preventDefault();
    setStatus('sending');
    const payload = Object.fromEntries(new FormData(evt.currentTarget).entries());

    const res = await fetch('https://saveform.io/api/submit/YOUR_FORM_ID', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(payload),
    });

    setStatus(res.ok ? 'ok' : 'err');
  }

  return (
    <form onSubmit={onSubmit}>
      <input name="name" required />
      <input type="email" name="email" required />
      <textarea name="message" required />
      <button type="submit" disabled={status() === 'sending'}>Send</button>
      {status() === 'ok' && <p>Thanks!</p>}
      {status() === 'err' && <p>Something broke.</p>}
    </form>
  );
}
Optional SaveForm control fields use normal payload keys: _honey (spam honeypot), _redirect / _redirect_mode (redirect after submit), _emailTo (notification recipient). Submitter replies use dashboard auto-reply. Supported fields →

Tips

Submit forms with SolidJS | SaveForm.io