Build your first Mage Intake integration
Follow the quick start or explore the API, form, security, and submission-management guides.
API Endpoints
Each form you create gets a unique POST endpoint that accepts validated JSON payloads.
Endpoint Structure
Every form has a unique submission URL:
https://api.mageintake.com/submit/<form-id>
Request Format
Send a POST request with a JSON body:
{
"name": "Jane Smith",
"email": "jane@example.com",
"message": "Hello!"
}
Response Format
Successful submissions return HTTP 200 with:
{
"success": true,
"message": "Submission received"
}
Form Builder
Generate embeddable HTML forms directly tied to your API endpoints — no code required.
Supported Field Types
- Text fields
- Email fields
- Number fields
- Textarea fields
- Dropdown menus
- Checkboxes
- Radio buttons
Validation Rules
- Required fields with custom error messages
- Minimum and maximum length
- Regular expression patterns
- Type-based validation (email format, numeric ranges)
Submission Management
All submissions are stored in the dashboard — searchable, filterable, and exportable.
Dashboard Features
- Clean submission list with full field data
- Search and filter by any field value
- Export to CSV or JSON at any time
- Email notifications for new submissions
Submission Data
Each submission record includes:
- Timestamp of submission
- All submitted field values
- Submitter IP address
- User agent string
Security
Multiple layers of protection — configured once, enforced automatically.
Authenticated Requests
Include your write-only key in the Authorization header:
curl -X POST https://api.mageintake.com/submit/<form-id> \
-H "Authorization: Bearer <write-key>" \
-H "Content-Type: application/json" \
-d '{"name":"Jane","email":"jane@example.com"}'
Domain Restrictions
- Allowlist specific origins for each endpoint
- Blocks submissions from unauthorized domains
- Protects against external abuse
Rate Limiting
- Per-endpoint submission limits
- Per-IP throttling
- Automatic — no configuration needed
Authentication Keys
Two key types with separate read and write permissions keep your data secure.
Write Keys
- Safe to embed in client-side JavaScript
- Can only submit data — cannot read submissions
- Scoped per form endpoint
Read Keys
- Server-side only — never expose publicly
- Used to fetch submission data via API
- Cannot submit new data
Error Responses
Standard HTTP status codes indicate what happened with a submission.
Common Status Codes
- 400 Bad Request — the submission failed validation
- 401 Unauthorized — the write key is missing or invalid
- 403 Forbidden — the request came from a domain not on the endpoint's allowlist
- 429 Too Many Requests — the endpoint's rate limit was exceeded
- 500 Internal Server Error — an unexpected error occurred
Error Body
Error responses include a JSON body describing what went wrong:
{
"success": false,
"error": "Validation failed",
"fields": {
"email": "Must be a valid email address"
}
}
Code Examples
Copy-paste examples to get your first form submission working.
Basic HTML Form
<form id="contact-form">
<input type="text" name="name" placeholder="Name" required>
<input type="email" name="email" placeholder="Email" required>
<textarea name="message" placeholder="Message" required></textarea>
<button type="submit">Send</button>
</form>
JavaScript Submission
document.getElementById('contact-form')
.addEventListener('submit', async function(e) {
e.preventDefault();
const data = Object.fromEntries(new FormData(this));
const res = await fetch(
'https://api.mageintake.com/submit/<form-id>',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer <write-key>'
},
body: JSON.stringify(data)
}
);
const result = await res.json();
console.log(result); // { success: true }
});
Ready to Build?
View plans and order Mage Intake to have your first form live in minutes.