Form Backend API

Point any HTML form at /f/{id}: submissions are stored, e-mailed to you and forwarded to a webhook, with spam honeypot, Turnstile and origin allow-list.

GETPOSTPATCHDELETEhttps://apibox.io.vn/v1/form-endpoint
Web & SEO

POST /v1/form-endpoint creates a form and returns its public endpoint_url (https://apibox.io.vn/f/{id}) and a ready HTML snippet. Put that URL in <form action> on any static site or landing page: the receiver accepts application/x-www-form-urlencoded, multipart/form-data (file fields are dropped and noted) and JSON (fetch with CORS), up to 128 KB and 100 fields. Browser posts are redirected to your redirect_url (or a _next field on an allowed origin) or get a bilingual thank-you page; JSON / XHR calls get {"ok": true, "id"}. _subject sets the e-mail subject.

Spam protection: a hidden honeypot field (_gotcha by default; filled in = silently dropped and counted), an optional Cloudflare Turnstile check with your own secret key (turnstile_secret; add the widget to your form), allowed_origins (exact origins or https://*.example.vn), required_fields, and rate limits per form and per IP. Each stored submission is e-mailed to your verified account address (notify_email, sharing the daily e-mail caps of uptime monitors) and / or POSTed as JSON to your webhook_url ({"event": "form.submission", "form", "submission"}).

GET /v1/form-endpoint/{id}/submissions lists submissions newest first (limit, before cursor, since), format=csv exports them for Excel (UTF-8 BOM), DELETE removes one or all. PATCH /v1/form-endpoint/{id} changes settings (paused=true stops accepting). Forms belong to an account; each accepted submission counts one request of the owner’s quota. Plans: Free 2 forms, newest 100 submissions kept per form; Starter 20 forms, 2,000; Pro 100 forms, 10,000.

Parameters

NameInTypeRequiredDefault
namebodystringnoDisplay name (max 100 characters).
allowed_originsbodyarraynoOrigins allowed to post, e.g. https://example.com, https://*.example.vn (empty = any).
redirect_urlbodystringnoThank-you page for browser submissions (303 redirect).
honeypot_fieldbodystringno_gotchaHidden field name; a filled-in value marks the submission as spam.
required_fieldsbodyarraynoFields that must be present and non-empty.
turnstile_secretbodystringnoYour Cloudflare Turnstile secret key; submissions then need a valid cf-turnstile-response (empty to remove). Never returned.
notify_emailbodybooleannotrueE-mail each submission to the verified account address.
webhook_urlbodystringnoURL receiving a JSON POST per submission; empty to remove.
pausedbodybooleannofalseStop accepting submissions.
idpathstringno/{id} (GET, PATCH, POST, DELETE), /{id}/submissions (GET list / CSV, DELETE all), /{id}/submissions/{sid} (GET, DELETE).
formatquerystringnojson/{id}/submissions: json or csv.
limitquerynumberno50/{id}/submissions: 1–500 (CSV up to 10,000).
beforequerystringno/{id}/submissions: cursor (next_before of the previous page).

Example

curl -X POST "https://apibox.io.vn/v1/form-endpoint" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Liên hệ","allowed_origins":["https://shop.example.com","https://*.example.vn"],"redirect_url":"https://shop.example.com/cam-on","required_fields":["email"],"webhook_url":"https://hooks.example.net/form"}'

Response

{
  "id": "0rwawcx0zfofbpnsuu1e",
  "name": "Liên hệ",
  "endpoint_url": "https://apibox.io.vn/f/0rwawcx0zfofbpnsuu1e",
  "allowed_origins": [
    "https://shop.example.com",
    "https://*.example.vn"
  ],
  "redirect_url": "https://shop.example.com/cam-on",
  "honeypot_field": "_gotcha",
  "required_fields": [
    "email"
  ],
  "turnstile": false,
  "notify_email": true,
  "webhook_url": "https://hooks.example.net/form",
  "paused": false,
  "submission_count": 0,
  "spam_count": 0,
  "last_submission_at": null,
  "created_at": "2026-11-11T03:21:15.000Z",
  "html_example": "<form action=\"https://apibox.io.vn/f/0rwawcx0zfofbpnsuu1e\" method=\"POST\">\n  <input type=\"email\" name=\"email\" required>\n  <textarea name=\"message\"></textarea>\n  <input type=\"text\" name=\"_gotcha\" style=\"display:none\" tabindex=\"-1\" autocomplete=\"off\">\n  <button type=\"submit\">Send</button>\n</form>"
}

Use cases

  • Collect contact or order forms on a landing page without a server
  • Receive leads from a static site in your inbox and CRM webhook
  • Export campaign sign-ups to Excel as CSV
  • Protect a public form with honeypot, Turnstile and an origin allow-list

FAQ

Do I need JavaScript on my page?

No. A plain <form action="https://apibox.io.vn/f/{id}" method="POST"> works; JSON with fetch() is supported too, with CORS for your allowed origins.

Can visitors upload files?

Not yet: file fields are dropped and their names are listed in _files_ignored. Link to a file instead.

Which e-mail receives submissions?

The verified e-mail address of the form owner’s account. E-mails share the daily caps of monitor alerts; the dashboard and the API always have every stored submission.

Related APIs

Start with 1,000 free requests every month. Get free API key →