# BootForm — Full Reference Condensed, LLM-optimized reference. Covers the same REST + MCP surface as https://bootform.com/openapi.json (auto-generated from the real API — if the two ever disagree, openapi.json is the source of truth). See https://bootform.com/llms.txt for a shorter overview. Conventions: all bodies are JSON unless noted. Errors: `{"ok": false, "error": "...", "code": "..."}`. Success responses include `"ok": true`. Pagination: `page` (1-based), `per_page` (default 50, max 200). Timestamps are ISO 8601 UTC. Auth on every endpoint below except the submission endpoint: `Authorization: Bearer {api_key}` (a Dashboard UI session JWT or an account API key — both use the same Bearer scheme, validated differently server-side). --- ## Submission Endpoint (unauthenticated) ### `POST https://f.bootform.com/{form_id}` The only public, unauthenticated endpoint. `form_id` is a UUID or vanity slug (Pro+ plan). Body: `application/x-www-form-urlencoded` or `application/json` (`multipart/form-data` for file uploads isn't implemented yet). Special fields, stripped before storage: `_redirect` (or `_next` alias), `_replyto`, `_subject`, `_format=json`, `_honeypot` (must stay empty). `_language` is parsed but currently has no effect — reserved for future use, don't rely on it. Responses: - `200 {"ok": true}` — accepted (AJAX/JSON) or a browser redirect to the referring page/`_redirect` - `200 {"ok": true, "status": "pending_claim", "claim_url": "https://app.bootform.com/claim/{id}"}` — accepted, form not yet claimed - `422 {"ok": false, "error": "...", "code": "CAPTCHA_FAILED"}` — CAPTCHA failed (if configured) - `422` with a per-field `errors` array — field validation failed (`REQUIRED_FIELD_MISSING`, `TYPE_EMAIL`/`TYPE_URL`/`TYPE_TEL`/`TYPE_NUMBER`/`TYPE_DATETIME`, `FIELD_TOO_SHORT`/`FIELD_TOO_LONG`, `WORK_EMAIL_REQUIRED`). A classic (non-AJAX) form post gets the same rejection as a redirect with `?bootform_error=CODE&bootform_field=name` instead of a JSON body. - `429 {"code": "QUOTA_EXCEEDED"}` — monthly submission quota reached - `403 {"code": "FORM_DISABLED"}` or `{"code": "ORIGIN_NOT_ALLOWED"}` --- ## Forms — base `https://api.bootform.com` ### `GET /forms` — list forms Query: `page`, `per_page`, `workspace_id` (omit to list across every workspace). Response: `{"ok": true, "forms": [...], "total", "page", "per_page"}`. Each form: `id`, `workspace_id`, `name`, `enabled`, `endpoint`, `submission_count`, `monthly_usage`, `monthly_quota`, `created_at`, `updated_at`. ### `POST /forms` — create a form Body: `{"name": "...", "redirect_url"?, "allowed_origins"?: [...], "subject_template"?, "slug"? (Pro+ only, 403 PLAN_LIMIT otherwise), "workspace_id"?}`. `201` response includes `html_snippet` — a ready-to-paste `