Built for developer velocity.
Test live requests in the sandbox, inspect payload formats, verify HTTP error codes, and copy production-ready code for your stack.
Interactive API Explorer
Test endpoints, inspect request headers, simulate validation errors, test honeypot behavior, and observe live API responses in a safe sandbox.
{
"form_id": "contact",
"name": "Taylor Morgan",
"email": "taylor@startup.io",
"message": "Can we schedule an architecture review for our team?"
}{
"status": "Ready. Click Execute Request to test endpoint."
}From form to API in minutes.
Copy and paste production-ready snippets into your codebase. No proprietary SDKs, bloated dependencies, or complex setup steps.
1"use client";2import { useState } from "react";34export default function ContactForm() {5 const [status, setStatus] = useState<{6 loading: boolean;7 success: boolean;8 error: string | null;9 }>({ loading: false, success: false, error: null });1011 async function handleSubmit(e: React.FormEvent<HTMLFormElement>) {12 e.preventDefault();13 setStatus({ loading: true, success: false, error: null });1415 const form = e.currentTarget;16 const formData = new FormData(form);17 const data = Object.fromEntries(formData.entries());1819 try {20 const response = await fetch("https://api.formlynk.io/api/v1/forms/submit", {21 method: "POST",22 headers: {23 "Content-Type": "application/json",24 "X-API-Key": process.env.NEXT_PUBLIC_FORM_API_KEY!,25 },26 body: JSON.stringify({27 form_id: "contact",28 ...data,29 }),30 });3132 const result = await response.json();33 if (response.ok && result.success) {34 setStatus({ loading: false, success: true, error: null });35 form.reset();36 } else {37 setStatus({38 loading: false,39 success: false,40 error: result.error?.message || "Submission failed. Please try again.",41 });42 }43 } catch (err) {44 setStatus({ loading: false, success: false, error: "Network connection error." });45 }46 }4748 return (49 <form onSubmit={handleSubmit} className="space-y-4">50 {/* Honeypot field (hidden from real users, traps automated bots) */}51 <input52 type="text"53 name="_gotcha"54 style={{ display: "none" }}55 tabIndex={-1}56 autoComplete="off"57 />5859 <div>60 <label htmlFor="name" className="block text-sm font-medium text-slate-700">Name</label>61 <input id="name" type="text" name="name" required className="w-full border px-3 py-2 rounded" />62 </div>6364 <div>65 <label htmlFor="email" className="block text-sm font-medium text-slate-700">Email</label>66 <input id="email" type="email" name="email" required className="w-full border px-3 py-2 rounded" />67 </div>6869 <div>70 <label htmlFor="message" className="block text-sm font-medium text-slate-700">Message</label>71 <textarea id="message" name="message" required rows={4} className="w-full border px-3 py-2 rounded" />72 </div>7374 {status.error && <p className="text-sm text-red-600">{status.error}</p>}75 {status.success && <p className="text-sm text-green-600">Thank you! Your message was received.</p>}7677 <button78 type="submit"79 disabled={status.loading}80 className="px-5 py-2.5 bg-ink text-white font-medium rounded hover:bg-black transition"81 >82 {status.loading ? "Sending..." : "Send Message"}83 </button>84 </form>85 );86}
Built for developers. Simple enough for everyone else.
From signing up to receiving your first live form submission in production takes less than three minutes.
Create Project
Group forms and domains by client or application in isolated workspaces.
Add Allowed Domains
Whitelist development and production hostnames for strict CORS defense.
Configure Form & Email
Set notification recipients, reply-to routing, and optional submitter auto-replies.
Generate API Key
Get your Browser Public key (pk_live_) with one-click token generation.
Copy Integration Code
Paste the clean fetch request or static HTML form into your frontend repo.
Deploy Anywhere
Ship to Vercel, Netlify, Cloudflare Pages, or static S3 hosting. Ready instantly.