The Headless Form Backend for React Developers.
Stop building form infrastructure from scratch. Bring your own UI components and let our API handle validation, spam protection, CORS, and webhooks.
Robust Webhooks
HMAC-signed payloads, automatic retries with exponential backoff for up to 7 days, and a dedicated Dead Letter Queue for failed events you can replay manually.
Framework Agnostic
Works natively with Next.js Server Actions, React Hook Form, Vue, Svelte, or vanilla HTML forms. Zero vendor lock-in — you own the UI.
Secure Data Layer
End-to-end encryption at rest with AES-256. GDPR compliant infrastructure. Instant CSV/JSON/XLSX export from dashboard or API.
CORS Handled
Configure allowed origins per form. No more preflight debugging. Works from localhost, staging, and production domains simultaneously on paid plans.
Full TypeScript Types
The @forge/react SDK ships with complete TypeScript definitions for every API response, error type, and hook option. Zero any types.
Server Actions Native
Submit forms server-side with Next.js Server Actions. Your API keys never touch the client bundle. Full tutorial in our docs.
Production-ready in minutes
Real, working code. Copy and paste to get started.
import { useForgeForm } from "@forge/react";
import { zodResolver } from "@hookform/resolvers/zod";
import { z } from "zod";
const schema = z.object({
email: z.string().email(),
name: z.string().min(1),
});
export function ContactForm() {
const { register, handleSubmit, formState } =
useForgeForm({
formId: process.env.NEXT_PUBLIC_FORM_ID!,
resolver: zodResolver(schema),
});
return (
<form onSubmit={handleSubmit}>
<input {...register("email")} />
<input {...register("name")} />
<button disabled={formState.isSubmitting}>
Submit
</button>
</form>
);
}// app/actions/submit.ts
"use server";
export async function submitForm(fd: FormData) {
const res = await fetch(
`https://api.useforge.cloud/f/${
process.env.FORGE_FORM_ID
}/submit`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${
process.env.FORGE_API_KEY
}`,
},
body: JSON.stringify({
email: fd.get("email"),
name: fd.get("name"),
}),
}
);
if (!res.ok) return { error: "Failed" };
return { success: true };
}Core API Endpoints
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/forms | Create a new form schema |
| GET | /api/forms/{id} | Read form schema and settings |
| POST | /api/forms/{id}/submit | Submit form data (public endpoint) |
| GET | /api/forms/{id}/submissions | Read all submissions (authenticated) |
| POST | /api/forms/{id}/webhooks | Configure webhook endpoint |
Plan Limits for Developers
| Plan | Price | API Rate | Webhook Retry | DLQ Events | CORS |
|---|---|---|---|---|---|
| Start | Free | 100 req/min | 3 attempts | 50 | Default |
| Standard | $9/mo | 500 req/min | 7 attempts (3 days) | 500 | Custom |
| Plus | $29/mo | 2,000 req/min | 7 attempts (3 days) | 2,000 | Custom |
| Max | $79/mo | 10,000 req/min | 10 attempts (7 days) | Unlimited | Custom + Wildcard |
All plans include HMAC-signed webhooks and TypeScript SDK. View full pricing →
What engineers are saying
“I replaced 800 lines of custom form infrastructure with 40 lines of Forge integration. The DLQ alone saved us during a 6-hour AWS outage — every submission was replayed automatically.”
Marcus Webb
Senior Platform Engineer · Meridian Health
“The HMAC webhook verification is exactly right. Every payload is signed, our receiver validates the signature before processing, and suspicious requests get logged to the audit trail automatically.”
Priya Nataraj
Lead Backend Engineer · Sprout Analytics
“We migrated from a hand-rolled form backend in a weekend. The TypeScript types are excellent. Zero runtime errors in production since the migration.”
Dmitri Volkov
CTO · Stacklane
Start building today
Free tier includes 4 forms, 100 submissions/month, full API access, and TypeScript SDK. No credit card required.