Getting Started
FlowForm provides free HTTP endpoints for processing HTML form submissions. There are two modes: Generic (free email forwarding) and Flow (CRM lead creation).
action attribute to point to a FlowForm URL and set method="POST". That's it!
Generic Mode
Generic Mode forwards form submissions to an email address. No signup required.
URL Patterns
| Pattern | Purpose | Example |
|---|---|---|
https://flowform.to/{email} |
Email in URL | https://flowform.to/user@example.com |
https://flowform.to/submit |
Email in form field | Use _to hidden field |
Basic Example
<form action="https://flowform.to/user@example.com" method="POST">
<input type="text" name="name" placeholder="Your name" required>
<input type="email" name="email" placeholder="Your email" required>
<textarea name="message" placeholder="Your message"></textarea>
<button type="submit">Send</button>
</form>
Flow Mode
Flow Mode creates leads directly in your FoxFlow CRM pipeline. Requires a FoxFlow account.
URL Pattern
https://flowform.to/f/{token}
Get your token from FoxFlow → Flow Settings → FlowForm tab.
Flow Mode Example
<form action="https://flowform.to/f/YOUR_TOKEN_HERE" method="POST">
<input type="text" name="firstName" placeholder="First Name" required>
<input type="text" name="lastName" placeholder="Last Name">
<input type="email" name="email" placeholder="Email" required>
<input type="tel" name="phone" placeholder="Phone">
<textarea name="message" placeholder="Message"></textarea>
<button type="submit">Submit</button>
</form>
Special Fields
Fields prefixed with underscore (_) control FlowForm behavior, not included in submission data.
| Field | Mode | Description | Example |
|---|---|---|---|
_to |
Generic | Recipient email | user@example.com |
_cc |
Both | Additional recipients | boss@company.com,team@company.com |
_subject |
Both | Custom email subject | New Contact Form |
_next |
Both | Redirect URL after submit | https://mysite.com/thanks |
_replyto |
Generic | Reply-to address | support@company.com |
File Uploads (Pro/Unlimited)
Accept file uploads with form submissions. Requires Pro plan and enctype="multipart/form-data".
File Upload Example
<form action="https://flowform.to/f/YOUR_TOKEN" method="POST"
enctype="multipart/form-data">
<!-- Regular fields -->
<input type="text" name="name" placeholder="Your name" required>
<input type="email" name="email" placeholder="Email" required>
<!-- File upload fields -->
<label>Insurance Card (Front):</label>
<input type="file" name="insurance_front" accept="image/*,.pdf">
<label>Supporting Documents:</label>
<input type="file" name="documents" accept="image/*,.pdf" multiple>
<button type="submit">Submit</button>
</form>
AJAX Submissions
Submit forms without page refresh using JavaScript.
JavaScript Example
async function submitForm(form) {
const formData = new URLSearchParams(new FormData(form));
const response = await fetch('https://flowform.to/user@example.com', {
method: 'POST',
body: formData,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/x-www-form-urlencoded'
}
});
const data = await response.json();
if (data.success) {
console.log('Form submitted successfully');
form.reset();
}
}
URLSearchParams for the request body, not raw FormData.
Error Handling
FlowForm returns standard HTTP status codes for different error conditions.
| Status Code | Error | Description |
|---|---|---|
400 |
Bad Request | Missing recipient email or invalid token |
404 |
Not Found | Flow not found or FlowForm disabled |
405 |
Method Not Allowed | Used GET instead of POST |
500 |
Internal Server Error | Server issue - try again later |
Complete Examples
Contact Form
<form action="https://flowform.to/contact@company.com" method="POST">
<input type="hidden" name="_subject" value="New Website Inquiry">
<input type="hidden" name="_next" value="https://company.com/thank-you">
<input type="text" name="name" placeholder="Full Name" required>
<input type="email" name="email" placeholder="Email Address" required>
<input type="tel" name="phone" placeholder="Phone Number">
<select name="subject" required>
<option value="">Select a topic</option>
<option value="sales">Sales Inquiry</option>
<option value="support">Support</option>
<option value="other">Other</option>
</select>
<textarea name="message" placeholder="Your message" required></textarea>
<button type="submit">Send Message</button>
</form>
Lead Generation Form
<form action="https://flowform.to/f/YOUR_TOKEN_HERE" method="POST">
<input type="hidden" name="_cc" value="team@company.com">
<input type="hidden" name="_subject" value="New Lead from Landing Page">
<input type="text" name="firstName" placeholder="First Name" required>
<input type="text" name="lastName" placeholder="Last Name">
<input type="email" name="email" placeholder="Work Email" required>
<input type="tel" name="phone" placeholder="Phone Number">
<input type="text" name="company" placeholder="Company Name">
<select name="employees">
<option value="">Company Size</option>
<option value="1-10">1-10 employees</option>
<option value="11-50">11-50 employees</option>
<option value="51-200">51-200 employees</option>
<option value="200+">200+ employees</option>
</select>
<textarea name="message" placeholder="Tell us about your needs"></textarea>
<button type="submit">Get Started</button>
</form>
API Reference
Request Format
- Method: POST (GET requests return 405)
- Content-Type: application/x-www-form-urlencoded (or multipart/form-data for file uploads)
- Protocol: HTTPS only
Response Format
When requesting JSON (via Accept header), responses include:
{
"success": true,
"message": "Form submitted successfully",
"leadId": "abc123", // Flow Mode only
"filesUploaded": 2 // File uploads only
}
Rate Limits
FlowForm implements reasonable rate limits to prevent abuse. Contact support for higher limits.