SnapForm Documentation
Collect form submissions from any website with one line of HTML. No backend required.
Quick Start
1. Create an Account
Sign up with your email and password. It's free.
2. Create a Form
Click "Create New Form" in your Dashboard and give it a name.
3. Copy the Endpoint
Get your unique form endpoint URL and HTML code snippet.
4. Start Collecting
Add the code to your website. Submissions appear in your Dashboard.
Integration
HTML Form
Add your SnapForm endpoint as the action attribute of any HTML form:
html<form action="https://www.snapform.cc/api/f/YOUR_FORM_ID" 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" required></textarea>
<!-- Honeypot anti-spam field (keep hidden) -->
<input type="text" name="_gotcha" style="display:none"
tabindex="-1" autocomplete="off" />
<button type="submit">Send</button>
</form>
You can use any field names you like. SnapForm automatically collects all form fields.
AJAX / JavaScript
For single-page apps or custom integrations, use fetch:
javascriptconst response = await fetch(
'https://www.snapform.cc/api/f/YOUR_FORM_ID',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
name: 'John',
email: 'john@example.com',
message: 'Hello!'
})
}
);
const result = await response.json();
// { success: true, submissionId: "..." }
SnapForm supports CORS, so you can call it from any domain.
File Uploads
To accept file uploads, add enctype="multipart/form-data" to your form and use <input type="file">:
html<form action="https://www.snapform.cc/api/f/YOUR_FORM_ID"
method="POST" enctype="multipart/form-data">
<input type="text" name="name" placeholder="Your name" required />
<input type="email" name="email" placeholder="Your email" required />
<input type="file" name="resume" />
<input type="text" name="_gotcha" style="display:none"
tabindex="-1" autocomplete="off" />
<button type="submit">Send</button>
</form>
For multiple files, add multiple file inputs with different names:
html<input type="file" name="resume" />
<input type="file" name="cover_letter" />
Supported file types: JPEG, PNG, GIF, WebP, SVG, PDF, TXT, CSV, DOC/DOCX, XLS/XLSX, ZIP
Upload with JavaScript:
javascriptconst form = document.querySelector('form');
const formData = new FormData(form);
const response = await fetch(
'https://www.snapform.cc/api/f/YOUR_FORM_ID',
{ method: 'POST', body: formData }
);
Note: When uploading files via JavaScript, do not set the
Content-Typeheader manually. The browser will set it automatically with the correctmultipart/form-databoundary.
File Upload Limits
| Free | Pro | Business | |
|---|---|---|---|
| Max file size | 2 MB | 10 MB | 10 MB |
| Files per submission | 1 | 5 | 10 |
Uploaded files are stored securely and can be downloaded from the Dashboard or via the download URL included in CSV exports and webhook payloads.
Supported Content Types
application/x-www-form-urlencoded— default HTML form formatmultipart/form-data— forms with file uploadsapplication/json— AJAX / API calls
Features
| Feature | Description |
|---|---|
| Email Notifications | Get notified by email for every new submission. Includes the form name and all submitted data. |
| Webhooks | Receive submission data via POST to integrate with Slack, Zapier, or your own backend. |
| File Uploads | Accept file attachments (images, PDFs, documents) with every submission. Files are stored securely and downloadable from the Dashboard. |
| Spam Protection | Built-in honeypot mechanism filters spam bots. Supported field names: _gotcha, _honeypot, _hp. |
| CSV Export | Download all submissions as a CSV file. Compatible with Excel and Google Sheets. File fields include download URLs. |
| Custom Redirects | Redirect users to a thank-you page after submission. Without a redirect URL, SnapForm returns a JSON response. |
Webhook Payload
json{
"formId": "form-id",
"formName": "Contact Form",
"submissionId": "submission-id",
"data": {
"name": "John Doe",
"email": "john@example.com",
"message": "Hello!",
"resume": {
"__snapform_file": true,
"key": "uploads/formId/submissionId/1709012345-resume.pdf",
"name": "resume.pdf",
"size": 245760,
"type": "application/pdf",
"downloadUrl": "https://www.snapform.cc/api/files/uploads/..."
}
},
"createdAt": "2026-02-27T10:30:00.000Z"
}
API Reference
Submit a Form
/api/f/{formId}
Submit data to a form endpoint.
| Status | Description |
|---|---|
201 | Submission successful |
303 | Submission successful, redirecting to configured URL |
404 | Form ID not found |
429 | Monthly submission limit reached |
500 | Internal server error |
Query API (Pro & Business)
Access your forms and submissions programmatically with API keys. Available on Pro and Business plans.
Authentication
- Go to Dashboard → API Keys to create an API key
- Use the key as a Bearer token in the
Authorizationheader
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Important: Your API key is only shown once when created. Store it securely.
List Forms
/api/v1/forms
Returns all forms belonging to the authenticated user.
bashcurl -H "Authorization: Bearer sk_live_xxx" \
https://www.snapform.cc/api/v1/forms
Response:
json{
"forms": [
{
"id": "clxyz...",
"name": "Contact Form",
"submissionCount": 42,
"createdAt": "2025-06-01T12:00:00.000Z",
"updatedAt": "2025-06-15T08:30:00.000Z"
}
]
}
List Submissions
/api/v1/forms/{formId}/submissions
Returns paginated submissions for a specific form.
| Parameter | Default | Description |
|---|---|---|
page | 1 | Page number |
limit | 20 | Items per page (max 100) |
bashcurl -H "Authorization: Bearer sk_live_xxx" \
"https://www.snapform.cc/api/v1/forms/YOUR_FORM_ID/submissions?page=1&limit=10"
Response:
json{
"submissions": [
{
"id": "clxyz...",
"data": {
"name": "Jane Doe",
"email": "jane@example.com",
"resume": {
"type": "file",
"name": "resume.pdf",
"size": 204800,
"mimeType": "application/pdf",
"url": "https://www.snapform.cc/api/files/uploads/..."
}
},
"createdAt": "2025-06-15T08:30:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 42,
"totalPages": 5
}
}
File fields are automatically converted to objects with type, name, size, mimeType, and url.
Error Codes
| Status | Description |
|---|---|
401 | Missing or invalid API key |
403 | Plan does not include API access, or form belongs to another user |
404 | Form not found |
500 | Internal server error |
Plans & Limits
| Free | Pro — $9/mo | Business — $29/mo | |
|---|---|---|---|
| Forms | 1 | 10 | Unlimited |
| Submissions/mo | 50 | 2,000 | 10,000 |
| File uploads | 1 file, 2 MB | 5 files, 10 MB | 10 files, 10 MB |
| Email Notifications | Yes | Yes | Yes |
| Spam Protection | Yes | Yes | Yes |
| CSV Export | Yes | Yes | Yes |
| Custom Redirects | Yes | Yes | Yes |
| Webhooks | - | Yes | Yes |
| API Access | - | Yes | Yes |
| Priority Support | - | - | Yes |
When limits are exceeded: creating a new form beyond your limit will prompt an upgrade, and submissions beyond your monthly quota will return a 429 error.
FAQ
Can I use SnapForm with React / Vue / other frameworks?
Yes. SnapForm provides a standard HTTP API. Any framework that can send HTTP POST requests can use it. See the AJAX example above.
Are there any restrictions on field names?
No. You can use any field name. Just avoid the reserved honeypot names: _gotcha, _honeypot, _hp.
Where is my data stored?
Your submission data is stored securely in our database. You can view it anytime through the Dashboard or export it as CSV. See our Privacy Policy for details.
How do I cancel or get a refund?
You can cancel your subscription at any time. Refunds are available within 7 days of purchase. See our Refund Policy for details.