Improvement

Public Form Endpoint at formtorch.com/f/{id}

January 28, 2026

We moved the public form ingestion endpoint to a cleaner URL.

Before: https://app.formtorch.com/f/{formId} After: https://formtorch.com/f/{formId}

The new URL is shorter, more memorable, and removes the app. subdomain from places where it doesn't make sense, like an HTML action attribute or a fetch call in a README.

HTML form

Drop the endpoint directly into your action attribute. No JavaScript required.

index.html
<form action="https://formtorch.com/f/your-form-id" method="POST">
  <input type="text" name="name" placeholder="Your name" required />
  <input type="email" name="email" placeholder="Email address" required />
  <textarea name="message" placeholder="Message"></textarea>

  <!-- Optional: redirect after submission -->
  <input type="hidden" name="_redirect" value="https://yoursite.com/thanks" />

  <button type="submit">Send message</button>
</form>

Fetch / AJAX

For single-page apps, send JSON and handle the response in JavaScript.

index.js
const res = await fetch("https://formtorch.com/f/your-form-id", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Requested-With": "XMLHttpRequest",
  },
  body: JSON.stringify({
    name: "Jane Smith",
    email: "jane@example.com",
    message: "Hello from the contact form.",
  }),
});

const data = await res.json();
// { ok: true, submissionId: "abc1234567" }

What changed under the hood

formtorch.com now proxies all /f/* requests to the backend on app.formtorch.com using Next.js rewrites(). This means zero latency overhead and no additional hops. It's handled at the edge by Vercel.

CORS and OPTIONS handling

Cross-origin form submissions from any domain continue to work. The CORS preflight (OPTIONS) is handled directly in middleware before any authentication logic runs, which prevents the 307→405 redirect issue that plagued earlier versions.

Backwards compatibility

The old app.formtorch.com/f/{id} URLs still work. Nothing breaks if you haven't updated your forms yet, but we recommend updating to the canonical URL going forward.

Supported submission formats

The endpoint accepts HTML form submissions, JSON payloads, file uploads (multipart/form-data), and AJAX/fetch() calls with or without X-Requested-With.

We’d love to hear from you

Have feedback on this update, or an idea for a feature you’d like to see? We read every message and genuinely take them into account as we build.

hello@formtorch.com