Documentation

Integrate in minutes

Add a form backend to any static site — HTML, React, Vue, or plain JavaScript. No server required.

How it works

01

Create an endpoint

Sign in and click "New Endpoint". Configure your rate limit and get a unique API key.

02

Add form to your site

Point your HTML form action at the gateway URL with your API key. Add the honeypot field.

03

Receive submissions

Every submission is stored securely. Rate limiting and bot detection happen automatically.

Code examples

Add any fields you want — name, phone, company — everything is stored. Max 50 KB per submission.

HTML formhtml
<form action="https://unstatic.dev/message/YOUR_API_KEY" method="POST">
  <input type="text"  name="name"     placeholder="Your name"  required />
  <input type="email" name="email"    placeholder="Your email" required />
  <textarea           name="message"  placeholder="Message"    required></textarea>

  <!-- Add any custom fields you need -->
  <input type="text" name="company"  placeholder="Company" />
  <input type="text" name="phone"    placeholder="Phone" />

  <!-- Honeypot: leave this hidden -->
  <input type="text" name="_honeypot" style="display:none" tabindex="-1" />
  <button type="submit">Send</button>
</form>
JavaScript / fetchjs
const res = await fetch("https://unstatic.dev/message/YOUR_API_KEY", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    name: "John",
    email: "john@example.com",
    message: "Hello!",
    // Add any custom fields — all are stored
    company: "Acme Inc",
    phone: "+91 9876543210",
    _honeypot: "",
  }),
});
const data = await res.json();
// data.success, data.request_id

API responses

200 OKSubmission accepted
{ "success": true, "request_id": "uuid", "message": "Message accepted" }
429 Too Many RequestsRate limit exceeded
{ "message": "Too many requests. Please try again later." }
403 ForbiddenInvalid API key
{ "message": "Invalid API key" }

Bot protection

Always include the honeypot field

Add a hidden input named _honeypot to every form. Humans never see it — bots fill it. When filled, the IP is silently blocked.

<input type="text" name="_honeypot" style="display:none" tabindex="-1" />

After submission

When creating an endpoint, you choose what happens after a form is submitted:

Default page

UnStatic shows a hosted thank-you page at unstatic.dev/thank-you. On error (rate limit), the user sees an error message with a back button. No setup needed.

Best for: quick setup, no custom pages

Custom redirect

After submission, the user is redirected to your own URL (e.g. yoursite.com/thank-you). On error, they're redirected with ?error=message so you can handle it.

Best for: branded experience, full control

No redirect (API only)

Always returns JSON — success or error. Use this when submitting via fetch/axios in JavaScript and handling the response yourself.

Best for: React, Vue, custom JS handling

Free plan limits

Endpoints3
Submissions/month100
Rate limit25 req/hr per IP (configurable up to 50)
Max payload size50 KB per submission
Custom fieldsUnlimited — any field name works
Bot protectionIncluded
Auto IP blockingIncluded