Docs
Contact Module
Capture leads from any website form via API. Submissions land in your dashboard with email notifications — no backend required.
Overview
The Contact module gives you a complete lead-capture system via REST APIs. Create forms with custom fields in the dashboard, then POST submissions from any React, Vue, Next.js, or plain HTML site. Each submission is stored in your dashboard inbox with email notifications, optional auto-replies, Turnstile bot protection, and honeypot filtering. Export submissions as CSV at any time.
Quick Start
1. Create a form in the dashboard
Define your fields (name, email, message, etc.) and copy your API key and form ID.
2. POST submissions from your site
Send a JSON payload to the public submission endpoint with your Bearer key.
3. View submissions in your dashboard
Leads appear instantly. Filter by status, add notes, or export as CSV.
API Endpoints
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /v1/contact/forms | Bearer | List all forms for your tenant |
| POST | /v1/contact/forms | Bearer | Create a new contact form |
| GET | /v1/contact/forms/:id | Bearer | Get a single form with field definitions |
| PATCH | /v1/contact/forms/:id | Bearer | Update form fields or settings |
| GET | /v1/contact/forms/:id/submissions | Bearer | List submissions for a form |
| GET | /v1/contact/submissions/:id | Bearer | Get a single submission |
| PATCH | /v1/contact/submissions/:id | Bearer | Update submission status or notes |
| POST | /v1/public/contact/forms/:id/submissions | API Key | Public endpoint — submit a form from your site |
Create a Form
Create a form with custom fields via the dashboard or API. Each field has a name, type, and optional label.
POST /v1/contact/forms
Authorization: Bearer nk_live_...
{
"name": "Website Contact",
"fields": [
{ "name": "name", "type": "text", "label": "Full Name" },
{ "name": "email", "type": "email", "label": "Email Address" },
{ "name": "message", "type": "textarea", "label": "How can we help?" }
]
}Submit from Your Site
POST form data from any frontend. The public endpoint requires only a Bearer API key — no session or login needed.
const res = await fetch(
'https://api.nexus-kit.com/v1/public/contact/forms/abc123/submissions',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer nk_live_...'
},
body: JSON.stringify({
locale: 'en',
turnstileToken: '...',
payload: {
name: 'Jane Doe',
email: '[email protected]',
message: 'Interested in your services'
}
})
}
);
const data = await res.json();
// { "id": "...", "status": "new" }Email Notifications
Configure one or more notification email addresses per form in the dashboard. When a new submission arrives, all configured addresses receive an alert with the submission details. You can also enable auto-reply to send a confirmation email to the submitter automatically.
Turnstile Captcha
Optional Cloudflare Turnstile integration blocks bots without annoying CAPTCHAs. Enable it per form in the dashboard.
<!-- Include Turnstile on your page -->
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<form id="contact-form">
<div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>
<button type="submit">Send</button>
</form>
<script>
document.getElementById('contact-form').addEventListener('submit', async (e) => {
e.preventDefault();
const token = document.querySelector('.cf-turnstile-response').value;
await fetch('/v1/public/contact/forms/{formId}/submissions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer nk_live_...'
},
body: JSON.stringify({
locale: 'en',
turnstileToken: token,
payload: { name: '...', email: '...', message: '...' }
})
});
});
</script>Honeypot Protection
A hidden "website" field is included in forms with honeypot protection enabled. Real users never see it, but bots that fill it out are silently discarded. Enable honeypot per form in the dashboard — zero friction for real visitors.
CSV Export
Download all submissions as a CSV file from the dashboard or via the API. Filter by status (new, read, archived) before exporting. The export includes all field values, timestamps, and source IP (truncated).
Rate Limits
API Rate Limit
120 RPM
Per IP address
Monthly Submissions
5,000
Per tenant
Email Notifications
5,000/mo
Alerts + auto-reply combined
FAQ
How do I connect a React contact form to NexusKit?
Create a form in the dashboard, copy your API key and form ID into .env, then POST to /v1/public/contact/forms/:id/submissions with the Bearer key and Turnstile token. See our step-by-step React guide for the full walkthrough.
Is NexusKit Contact free?
Yes. Core services are free for life within fair-use rate and volume limits — 5,000 submissions per month, 120 requests per minute.
Where is form data stored?
On ZAHA GLOBAL infrastructure (vioflare_server). Tenants share one database with row-level tenant_id isolation. Source IPs are truncated before storage for privacy.
Can I use it with WordPress or other CMS?
Yes. NexusKit Contact works via REST APIs, so you can integrate with any CMS or framework that supports HTTP requests.
Ready to capture leads?
Start free. No credit card. Ship a working contact form in minutes.
