{
 "slug": "fillout",
 "name": "Fillout",
 "url": "https://fillout.com",
 "domain": "fillout.com",
 "category": "forms",
 "category_name": "Forms",
 "tested_at": "2026-10-02",
 "run": "20261002T212026Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261002T060114Z",
   "date": "2026-10-02",
   "level": 3,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": null,
    "robots": "start"
   }
  },
  {
   "run": "20261002T212026Z",
   "date": "2026-10-02",
   "level": 4,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": null,
    "robots": "start"
   },
   "why": "product"
  }
 ],
 "level": 4,
 "level_name": "Runs on its own",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 2,
  "tries": 2,
  "self_start": true
 },
 "badges": [
  "agent-can-leave"
 ],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up in a browser"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "yes",
   "text": "Work done: 83% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "part",
   "text": "Reaches the checkout: stopped at the card form",
   "value": "ready",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "left": "deleted"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up in a browser",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "yes",
   "text": "Work done: 83% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "part",
   "text": "Reaches the checkout: stopped at the card form",
   "value": "ready",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "left": "deleted",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "browser_signup",
   "label": "Sign-up in a browser",
   "routes": [],
   "minutes": 5.7,
   "core": "10/12"
  }
 ],
 "minutes": 5.7,
 "next": {
  "to": 5,
  "text": "Next: pay without a person"
 },
 "stop": null,
 "core": "10/12",
 "scores": {
  "coverage": 55,
  "reliability": 100,
  "resilience": null,
  "setup": 90,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 90,
  "security": null,
  "standards": []
 },
 "reliability_method": "first-try",
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": 83,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": null,
  "kb_version": null,
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": null,
  "robots": "start"
 },
 "same_level_drives": 1,
 "drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": {
  "rung": "signup",
  "vendor": "reCAPTCHA (invisible, v3-style)",
  "signed": true
 },
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt, llms-full.txt and an OpenAPI file (8 operations) at fillout.com/help; the MCP server is documented only on developers.zite.com, not in the Fillout help center."
  },
  "signup": {
   "status": "browser",
   "note": "Email + password + name at build.fillout.com/fillout/signup (now app.zite.com). Invisible reCAPTCHA let our agent's browser through. No signup API."
  },
  "verify": {
   "status": "browser",
   "note": "Mail arrived in under a minute; the link opens a page where you must click Verify email (a plain GET does not verify)."
  },
  "credentials": {
   "status": "browser",
   "note": "Settings > Developer > Enable API, then Copy (the key is masked). MCP: OAuth with dynamic client registration and PKCE worked headless except for one Authorize click on the consent page.",
   "via": ""
  },
  "first_call": {
   "status": "headless",
   "note": "GET https://api.fillout.com/v1/api/forms -> 200."
  },
  "first_action": {
   "status": "browser",
   "note": "Forms can only be created in the web builder. The first headless write was POST /forms/{id}/submissions."
  },
  "pay": {
   "status": "browser",
   "grade": "P2",
   "rails": [
    "Stripe Payment Element (card)"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "No 402/x402/MPP/L402, well-known payment files or payment text in the docs. Upgrading goes through the app.zite.com/billing/plan-builder page with an embedded Stripe Payment Element (card). The Zite Build API returns a plain 402 when its 14-day window ends. We did not pay or enter a card, and did not check the registries (web search was down)."
  },
  "cancel": {
   "status": "n/a",
   "note": "Nothing to cancel: our agent used the free plan.",
   "docs_note": "No plan was started. According to the docs you cancel under Settings > Billing > Cancel in the web UI. There is no billing API.",
   "docs_grade": "",
   "nothing": "free_plan"
  },
  "delete": {
   "status": "browser",
   "note": "Settings > General > Delete organization (type a confirmation phrase). Removed the forms, database and submissions in one step. Afterwards the API key and MCP token were rejected. No API for this.",
   "left": "deleted",
   "account": true
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-02",
  "source": "drive",
  "options": [
   {
    "id": "stripe-elements",
    "name": "Stripe card form",
    "kind": "checkout",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": true
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": false,
  "sdk": false,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST, 8 operations: list forms, form metadata, submissions list/get/create/delete, webhook create/delete. No form create/edit, workflows, export or account endpoints.",
  "openapi": "Matched what we saw. Not-found returns 400, not 404.",
  "mcp": "Zite MCP (official, documented on developers.zite.com, also answers at mcp.fillout.com). 35 tools for databases and app building, none for forms or submissions, although the consent screen says 'Your Fillout forms and submissions'.",
  "webhooks": "REST create/delete. Fires on real form submissions, not on API-created ones. No list endpoint.",
  "llms_txt": "fillout.com/help/llms.txt and llms-full.txt (760 KB)"
 },
 "can_do": [
  "List forms and read form metadata (questions, calculations) over the REST API",
  "Create submissions in bulk (up to 10 per call) over the REST API",
  "List, search, sort and page through submissions, and get edit links",
  "Delete a submission over the REST API",
  "Subscribe a webhook to a form's submissions over the REST API",
  "Query form responses stored in the linked workspace database with SQL through the Zite MCP",
  "Build and edit a form (fields, conditional logic, calculations) by prompting Fillout's in-app Form Agent in a browser",
  "Publish a form, add a webhook workflow, duplicate a form and download a CSV in the web app"
 ],
 "cannot_do": [
  {
   "what": "Create or edit a form headless",
   "why": "The REST API and MCP have no form create/update tools; building is only possible in the web builder."
  },
  {
   "what": "Send an email from a workflow",
   "why": "The Send email action needs a connected Gmail/Outlook/SMTP account or a manually reviewed account verification, even for self-email."
  },
  {
   "what": "Collect payments or book meetings",
   "why": "Needs a Stripe account or a Google/Outlook calendar, which our agent does not have."
  },
  {
   "what": "Sign up, get an API key or delete the account headless",
   "why": "These steps exist only in the web UI."
  },
  {
   "what": "Rely on API-created submissions behaving like real ones",
   "why": "They get no calculation values, do not fire webhooks and are not written to the linked database."
  }
 ],
 "blockers": [
  "No API or MCP tool to create or edit forms, so the core builder works only in a browser",
  "Workflow email actions need a third-party mailbox connection or a human-reviewed account verification"
 ],
 "tips_for_owner": [
  "Add form create/update endpoints and MCP tools",
  "Expose the Form Agent as an MCP tool",
  "Make API submissions behave like real ones",
  "Document the MCP server in the Fillout help",
  "Let agents mint API keys via OAuth",
  "Add a list-webhooks endpoint and 404s",
  "Add workflow and export endpoints"
 ],
 "tips_for_agents": [
  "Use https://api.fillout.com/v1/api with Authorization: Bearer <key>; the EU server is eu-api.fillout.com. The limit is 5 requests/second.",
  "Read question ids from GET /forms/{id} before POSTing submissions; unknown ids give a clear 400.",
  "API-created submissions do not run calculations, webhooks or database sync; use the public form link if you need those.",
  "Form responses are also rows in the linked Zite database; the Zite MCP (mcp.zite.com/mcp, OAuth DCR) can run SQL over them.",
  "There is no headless way to build forms. In a browser, the Form Agent panel adds fields, logic and calculations from one prompt.",
  "The app now lives on app.zite.com; build.fillout.com redirects there. Use /fillout/signup to get the Fillout-branded flow."
 ],
 "selfhost": null,
 "summary": "An agent can sign up and get a key in a browser, then handle submissions headless (create, list, search, delete, webhooks) through a small, accurate REST API. The Zite MCP connects through OAuth DCR but has no form tools, so building forms (fields, logic, calculations, publish, workflows) takes the web builder, where Fillout's own Form Agent made those edits from a single prompt. Payments and scheduling need Stripe or a Google/Outlook calendar, which we did not have. Upgrading uses an embedded Stripe card form.",
 "wall": "",
 "plan_scope": "free plan",
 "robots_stop": null,
 "robots": null,
 "plain": null,
 "plan_gated": [
  {
   "capability": "View analytics (drop-off, trends, device)",
   "plan": "Business",
   "evidence": "Results > Analytics shows only headline counters and an 'Upgrade now' Business upsell"
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Form building",
   "capability": "Create a form, survey or quiz",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "app.fillout.com form builder, from scratch, AI prompt, or template"
   },
   "check": "GET /v1/api/forms (list forms) shows the new formId and name",
   "source": "https://www.fillout.com; https://fillout.com/help/make-a-form; https://fillout.com/help/api-reference/get-forms"
  },
  {
   "id": "cap-02",
   "group": "Form building",
   "capability": "Add question/field pages (50+ field types)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Form page type"
   },
   "check": "GET /v1/api/forms/{formId} (form metadata) lists the added questions",
   "source": "https://fillout.com/help/question-types; https://fillout.com/help/api-reference/get-form-metadata"
  },
  {
   "id": "cap-03",
   "group": "Form building",
   "capability": "Use AI Form Agent to build/edit a form from a prompt",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Form Agent panel"
   },
   "check": "form builder reflects fields/pages/logic the agent added, visible in form metadata",
   "source": "https://fillout.com/help/form-agent; https://fillout.com/help/ai-forms"
  },
  {
   "id": "cap-04",
   "group": "Form building",
   "capability": "Add conditional logic (show/hide, branching, condition groups)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Logic panel"
   },
   "check": "form metadata/preview shows field visibility changes based on prior answers",
   "source": "https://fillout.com/help/logic; https://fillout.com/help/condition-logic-groups"
  },
  {
   "id": "cap-05",
   "group": "Form building",
   "capability": "Add calculations and scoring (quiz/order totals)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Calculations panel"
   },
   "check": "submitted response shows computed calculation/variable value in results",
   "source": "https://fillout.com/help/calculations"
  },
  {
   "id": "cap-06",
   "group": "Distribution",
   "capability": "Share/publish a form (link, embed, QR code, email)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Share tab"
   },
   "check": "visiting the published share link renders the live form",
   "source": "https://fillout.com/help/distribute; https://fillout.com/help/sharing; https://fillout.com/help/qr"
  },
  {
   "id": "cap-07",
   "group": "Responses",
   "capability": "Submit a response to a form",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/api/forms/{formId}/submissions",
    "mcp": null,
    "cli": null,
    "ui": "public form share link"
   },
   "check": "GET /v1/api/forms/{formId}/submissions/{submissionId} returns the new submission",
   "source": "https://fillout.com/help/api-reference/create-submissions"
  },
  {
   "id": "cap-08",
   "group": "Responses",
   "capability": "View/filter/sort form responses",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /v1/api/forms/{formId}/submissions",
    "mcp": null,
    "cli": null,
    "ui": "form Results tab"
   },
   "check": "GET /v1/api/forms/{formId}/submissions returns the expected filtered/sorted list",
   "source": "https://fillout.com/help/view-responses; https://fillout.com/help/api-reference/get-all-submissions"
  },
  {
   "id": "cap-09",
   "group": "Responses",
   "capability": "Edit or delete a form submission",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "DELETE /v1/api/forms/{formId}/submissions/{submissionId}",
    "mcp": null,
    "cli": null,
    "ui": "Results tab, submission detail"
   },
   "check": "GET /v1/api/forms/{formId}/submissions/{submissionId} returns 404/not-found after delete",
   "source": "https://fillout.com/help/edit-submissions; https://fillout.com/help/delete-a-form-submission; https://fillout.com/help/api-reference/delete-submission-by-id"
  },
  {
   "id": "cap-10",
   "group": "Distribution",
   "capability": "Collect payments via a payment page (Stripe)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Payment page type"
   },
   "check": "a completed form submission shows a captured Stripe charge linked to the submission",
   "source": "https://fillout.com/help/payment-page; https://www.fillout.com/pricing"
  },
  {
   "id": "cap-11",
   "group": "Scheduling",
   "capability": "Book a meeting via a scheduling page (Fillout/Calendly/Cal.com)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Scheduling page type"
   },
   "check": "connected Google/Outlook calendar shows the new booked event",
   "source": "https://fillout.com/help/scheduling-page; https://fillout.com/help/fillout-scheduling-intro"
  },
  {
   "id": "cap-12",
   "group": "Automation",
   "capability": "Build a workflow (automation) triggered by form events",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Workflows tab"
   },
   "check": "triggering the form event causes the configured workflow action to run (e.g. email sent, integration synced)",
   "source": "https://fillout.com/help/workflows; https://fillout.com/help/automations"
  },
  {
   "id": "cap-13",
   "group": "Integrations",
   "capability": "Sync form submissions to a connected database/CRM (Airtable, Notion, Salesforce, HubSpot, Monday, etc.)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Integrations panel"
   },
   "check": "the external service (e.g. Airtable base) shows a new/updated record matching the submission",
   "source": "https://fillout.com/help/integrations; https://fillout.com/help/airtable; https://fillout.com/help/salesforce"
  },
  {
   "id": "cap-14",
   "group": "Integrations",
   "capability": "Send submissions to a custom webhook",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/api/webhook/create",
    "mcp": null,
    "cli": null,
    "ui": "form builder, Integrations > Webhook"
   },
   "check": "webhook endpoint receives an HTTP POST with the submission payload",
   "source": "https://fillout.com/help/webhook; https://fillout.com/help/api-reference/create-a-webhook; https://fillout.com/help/api-reference/remove-a-webhook"
  },
  {
   "id": "cap-15",
   "group": "Automation",
   "capability": "Generate a PDF from a form submission",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Workflows > PDF action"
   },
   "check": "submission's workflow output includes a downloadable PDF matching the submitted answers",
   "source": "https://fillout.com/help/pdfs"
  },
  {
   "id": "cap-16",
   "group": "Automation",
   "capability": "Collect e-signatures in a form",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Signature field"
   },
   "check": "submission detail shows the captured signature image",
   "source": "https://fillout.com/help/esignatures"
  },
  {
   "id": "cap-17",
   "group": "Responses",
   "capability": "View analytics and summary of form responses",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form Results > Analytics/Summary tab"
   },
   "check": "analytics tab displays view/completion counts and per-question summary charts matching recorded submissions",
   "source": "https://fillout.com/help/analytics; https://fillout.com/help/summary"
  },
  {
   "id": "cap-18",
   "group": "Responses",
   "capability": "Export form responses to CSV",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Results tab, Export button"
   },
   "check": "downloaded CSV file contains rows matching the submissions shown in Results",
   "source": "https://fillout.com/help/view-responses"
  },
  {
   "id": "cap-19",
   "group": "Form building",
   "capability": "Style/theme a form (colors, fonts, layout, images)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Design/Theme tab"
   },
   "check": "published form share link renders with the selected theme styling",
   "source": "https://fillout.com/help/styling; https://fillout.com/help/themes"
  },
  {
   "id": "cap-20",
   "group": "Form building",
   "capability": "Pre-fill form fields via URL parameters or hidden fields",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, field default value settings"
   },
   "check": "opening the form share link with a query parameter shows the field pre-populated",
   "source": "https://fillout.com/help/prefill-fields; https://fillout.com/help/url-parameters"
  },
  {
   "id": "cap-21",
   "group": "Form building",
   "capability": "Require login/OTP verification before submitting",
   "weight": "secondary",
   "plan": "starter",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Login page type"
   },
   "check": "attempting to submit without completing login/OTP step is blocked",
   "source": "https://fillout.com/help/login-page; https://fillout.com/help/email-sms-otp; https://www.fillout.com/pricing"
  },
  {
   "id": "cap-22",
   "group": "Responses",
   "capability": "Allow respondents to save and resume a partial submission",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form settings, Partial submissions"
   },
   "check": "Results page shows a partial/in-progress submission before the respondent finishes",
   "source": "https://fillout.com/help/partial-submissions"
  },
  {
   "id": "cap-23",
   "group": "Responses",
   "capability": "Let respondents edit their own past submission",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form settings, respondent edit link"
   },
   "check": "respondent edit link updates the same submission record in Results instead of creating a new one",
   "source": "https://fillout.com/help/edit-form-submissions"
  },
  {
   "id": "cap-24",
   "group": "Form building",
   "capability": "Comment on a submission and tag teammates",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Results tab, submission detail comments"
   },
   "check": "submission detail shows the posted comment and tagged teammate receives a notification",
   "source": "https://fillout.com/help/comment"
  },
  {
   "id": "cap-25",
   "group": "Form building",
   "capability": "Import an existing form or export a form",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form list, Import/Export options"
   },
   "check": "exported file re-imported into another account recreates an equivalent form",
   "source": "https://fillout.com/help/importing-and-exporting-forms"
  },
  {
   "id": "cap-26",
   "group": "Form building",
   "capability": "Duplicate a form",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form list, Duplicate action"
   },
   "check": "GET /v1/api/forms shows a new form with copied name/questions",
   "source": "https://fillout.com/help/duplicate-a-form"
  },
  {
   "id": "cap-27",
   "group": "Form building",
   "capability": "Save a form as a reusable template",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Save as template"
   },
   "check": "template library shows the new template available for reuse",
   "source": "https://fillout.com/help/make-a-form-template; https://fillout.com/help/form-templates"
  },
  {
   "id": "cap-28",
   "group": "Collaboration",
   "capability": "Invite teammates/collaborators and manage form access",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Organization settings, Members"
   },
   "check": "invited teammate's account shows access to the shared form",
   "source": "https://fillout.com/help/invite-collaborators; https://fillout.com/help/manage-form-access"
  },
  {
   "id": "cap-29",
   "group": "Form building",
   "capability": "Restrict/limit form access (expiration date, submission cap, open date)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form settings, Manage access"
   },
   "check": "visiting the share link after expiration/cap shows the form closed message",
   "source": "https://fillout.com/help/manage-form-access"
  },
  {
   "id": "cap-30",
   "group": "Form building",
   "capability": "Restore a previous form version",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, version history"
   },
   "check": "after restore, form metadata reflects the earlier version's fields",
   "source": "https://fillout.com/help/restore-previous-version"
  },
  {
   "id": "cap-31",
   "group": "Branding",
   "capability": "Remove Fillout branding from forms",
   "weight": "peripheral",
   "plan": "pro",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form settings, Branding"
   },
   "check": "published form page no longer displays the Fillout footer badge",
   "source": "https://fillout.com/help/remove-fillout-branding; https://www.fillout.com/pricing"
  },
  {
   "id": "cap-32",
   "group": "Branding",
   "capability": "Use a custom domain for form links",
   "weight": "peripheral",
   "plan": "pro",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Organization settings, Custom domains"
   },
   "check": "form share URL resolves under the configured custom subdomain",
   "source": "https://fillout.com/help/custom-domains; https://www.fillout.com/pricing"
  },
  {
   "id": "cap-33",
   "group": "Branding",
   "capability": "Add custom CSS and custom code to a form",
   "weight": "peripheral",
   "plan": "pro",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "form builder, Advanced designer / Custom code"
   },
   "check": "rendered form page reflects the injected CSS/script changes",
   "source": "https://fillout.com/help/custom-css; https://fillout.com/help/custom-code; https://www.fillout.com/pricing"
  },
  {
   "id": "cap-34",
   "group": "Admin",
   "capability": "View organization audit logs",
   "weight": "peripheral",
   "plan": "business",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Organization settings, Audit logs"
   },
   "check": "audit log list shows an entry for a recent login/permission-change/security event",
   "source": "https://fillout.com/help/audit-logs; https://fillout.com/help/audit-log-events"
  },
  {
   "id": "cap-35",
   "group": "Admin",
   "capability": "Set granular member permissions and user groups",
   "weight": "peripheral",
   "plan": "business",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Organization settings, User Groups / Permissions"
   },
   "check": "a member in a view-only group cannot edit a restricted form in the UI",
   "source": "https://fillout.com/help/granular-permissions; https://fillout.com/help/user-groups"
  },
  {
   "id": "cap-36",
   "group": "Admin",
   "capability": "Create an OAuth 3rd-party app integration",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Organization settings, OAuth applications"
   },
   "check": "the created OAuth app can authenticate and call the Fillout REST API on the user's behalf",
   "source": "https://fillout.com/help/oauth-applications"
  },
  {
   "id": "cap-37",
   "group": "Admin",
   "capability": "Enable two-factor authentication (2FA)",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Account settings, Security"
   },
   "check": "subsequent login prompts for a 2FA code",
   "source": "https://fillout.com/help/2fa"
  }
 ],
 "attempts": [
  {
   "t": "04:17",
   "cap": "docs",
   "capability": "docs",
   "task": "Find API docs, OpenAPI, llms.txt, MCP",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "llms.txt + llms-full.txt at fillout.com/help; OpenAPI at /help/openapi.json (8 ops: forms list/metadata, submissions list/get/create/delete, webhook create/delete).",
   "notes": "No form-create/update endpoint in the REST API.",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "04:17",
   "cap": "signup",
   "capability": "signup",
   "task": "Create account with test email",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "build.fillout.com/fillout/signup -> app.zite.com/fillout/signup; email, password, first/last name; invisible reCAPTCHA (v3) on page passed; landed at app.zite.com/new",
   "notes": "No headless signup route. Fillout app is now hosted under app.zite.com."
  },
  {
   "t": "04:48",
   "cap": "verify",
   "capability": "verify",
   "task": "Confirm email from verification mail",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Mail from security@mail.fillout.com (Zite branded) arrived in <1 min; link opens SPA page with a Verify email button (plain GET does nothing); clicked -> app.zite.com/home"
  },
  {
   "t": "05:39",
   "cap": "credentials",
   "capability": "credentials",
   "task": "Create API key",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Settings > Developer (app.zite.com/home/settings/developer) > Enable API; key sk_prod_•••• copied via Copy button (masked in UI). No API for key creation.",
   "notes": "Key is a Zite-wide key (forms + Zite tables/apps)."
  },
  {
   "t": "05:39",
   "cap": "first_call",
   "capability": "The first call",
   "task": "GET /v1/api/forms",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET https://api.fillout.com/v1/api/forms -> 200 []",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "09:32",
   "cap": "cap-01",
   "capability": "Create a form",
   "task": "Create a blank form with a theme",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "app.zite.com/new > Blank form > Navy Pop > Create form; GET /v1/api/forms lists formId sxQKL1SueRus name My form",
   "notes": "No API/MCP route to create forms; REST API is read + submissions only.",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "09:32",
   "cap": "first_action",
   "capability": "The first action",
   "task": "Create first object (form)",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Form sxQKL1SueRus created in the web builder, visible via GET /v1/api/forms. First headless create: submission via POST (see )."
  },
  {
   "t": "09:32",
   "cap": "cap-02",
   "capability": "Add question fields",
   "task": "Add short answer, email, multiple choice, phone fields",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Clicked field buttons in builder sidebar; GET /v1/api/forms/sxQKL1SueRus lists ShortAnswer, EmailInput, MultipleChoice, PhoneNumber",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "09:32",
   "cap": "cap-03",
   "capability": "AI Form Agent",
   "task": "Ask Form Agent to rename fields, set options, add conditional logic, number field and calculation",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Agent panel ~60s: edited labels, options Yes/No, phone conditional, added NumberInput num_seats and calculation Total price; GET metadata shows all except form rename (agent said it cannot rename the form).",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear"
   }
  },
  {
   "t": "12:00",
   "cap": "cap-06",
   "capability": "Share/publish a form",
   "task": "Publish the form and open the share link",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Publish > (Responses go to: New database) > Publish; GET /v1/api/forms isPublished:true; https://forms.fillout.com/t/sxQKL1SueRus returns 200 and renders the questions. Embed options Standard/Popup/Full screen/Slider and QR shown.",
   "notes": "Publishing also created a Zite database that then appears in GET /v1/api/forms as a second entry named My form with tags [] (formId a23c373566f182b6).",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "12:00",
   "cap": "cap-04",
   "capability": "Conditional logic",
   "task": "Show Phone number only when callback = Yes (set by Form Agent), check on live form",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Live form: tel inputs after No=1, after Yes=2 (phone field shown/hidden by answer); submission with No stored Phone number null.",
   "notes": "Logic itself not exposed in form metadata API."
  },
  {
   "t": "12:00",
   "cap": "cap-05",
   "capability": "Calculations",
   "task": "Total price = seats x 25, verify on submitted response",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Browser submission with 3 seats -> GET submissions calculations Total price value 75.",
   "notes": "Submissions created through the API get calculation value null (not computed server-side).",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "12:00",
   "cap": "cap-07",
   "capability": "Submit a response",
   "task": "POST a submission via REST API and read it back",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/api/forms/sxQKL1SueRus/submissions 200 submissionId 008f11fd...; GET /submissions/008f11fd... returns it. Bad question id -> 400 Question not found for ID: nope.",
   "notes": "Calculations are null on API-created submissions; logic/required not enforced.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "docs_match": "match",
    "recoverable": "yes"
   }
  },
  {
   "t": "12:00",
   "cap": "cap-08",
   "capability": "View/filter/sort responses",
   "task": "List submissions with search, sort, limit, includeEditLink",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET ?search=api&sort=desc -> 1 match; ?sort=asc -> browser then api order with editLink; limit=500 -> 400 zod message max 150.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "docs_match": "match"
   }
  },
  {
   "t": "12:00",
   "cap": "cap-09",
   "capability": "Edit or delete a submission",
   "task": "DELETE the API-created submission and confirm it is gone",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "DELETE /submissions/008f11fd... -> 200 {success:true}; GET -> 400 submission does not exist; second DELETE -> 400 Could not find that submission.",
   "notes": "Not-found returns 400 rather than 404 (map check expected 404). No API to edit a submission; edit only via respondent editLink.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "idempotent": "no",
    "docs_match": "match"
   }
  },
  {
   "t": "13:04",
   "cap": "cap-14",
   "capability": "Webhook",
   "task": "Create webhook via API to our own webhook.site bin and receive a submission",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/api/webhook/create -> 200 {id:168797}; a browser submission arrived at the bin as POST JSON {formId, formName, submission{...}} within seconds.",
   "notes": "Submissions created through POST /submissions did NOT fire the webhook (0 requests after 15s); only real form submissions do. Not documented either way. No API to list webhooks.",
   "quality": {
    "verify_route": "no",
    "docs_match": "match"
   }
  },
  {
   "t": "20:04",
   "cap": "cap-12",
   "capability": "Workflow on form events",
   "task": "Thank-you email workflow, then a Blank workflow: Form submitted -> Send webhook to our bin; publish and submit the form",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Workflow fa504041 published; browser submission 5e2bcf91 arrived at webhook.site/.../workflow as POST JSON at 21:40:09.",
   "notes": "The Send email action (Thank you email template) cannot be saved: Send email from is required and only offers Connect Gmail/Outlook/SMTP or verify your account (manual review form per docs), even for Self-email to our own address. No workflow API/MCP.",
   "quality": {
    "verify_route": "no"
   }
  },
  {
   "t": "20:27",
   "cap": "cap-13",
   "capability": "Sync submissions to a database/CRM",
   "task": "Verify submissions land in the connected Zite workspace database; external CRMs",
   "route": "mcp",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Publishing connected the form to Zite database a23c373566f182b6, table My form submissions; MCP execute_sql returns the 3 browser submissions (names + seats).",
   "notes": "Submissions created through REST POST /submissions do NOT appear in the database (the webhook-test API submission is missing). Airtable/Notion/Salesforce/HubSpot need accounts at those vendors that we do not have: not tested. MCP route is the Zite-documented server (mcp.zite.com); we used the mcp.fillout.com alias.",
   "quality": {
    "verify_route": "yes",
    "docs_match": "undocumented"
   }
  },
  {
   "t": "21:59",
   "cap": "cap-18",
   "capability": "Export responses to CSV",
   "task": "Download CSV from Results",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Results > download icon -> Fillout My form results.csv; rows include submission 5e2bcf91 (workflow) with Total price 50, matching Results table (4 submissions).",
   "notes": "No CSV/export endpoint in the API; GET /submissions JSON is the headless equivalent."
  },
  {
   "t": "22:25",
   "cap": "cap-17",
   "capability": "Analytics",
   "task": "Open Results > Analytics",
   "route": "browser",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "Analytics tab shows headline counters (Unique visitors/Started/Finished, Completion rate 133.33%) behind a Business upsell: drop-off, completion over time, device breakdown -> Upgrade now.",
   "notes": "Completion rate 133.33% looks wrong (API/agent submissions counted without views). No analytics API."
  },
  {
   "t": "22:25",
   "cap": "cap-10",
   "capability": "Collect payments (Stripe)",
   "task": "Add a payment page",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Docs (help/payment-page): payment page requires Connect to Stripe (OAuth into a Stripe account). We have no Stripe account and may not create payment flows; no API/MCP to add a payment page.",
   "notes": "Third-party account prerequisite, not a Fillout bot wall."
  },
  {
   "t": "22:25",
   "cap": "cap-11",
   "capability": "Scheduling page",
   "task": "Add a scheduling page and book a slot",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Docs (help/fillout-scheduling-intro): Connect your calendar step requires a Google or Outlook calendar; we have neither for our agent. No API/MCP for scheduling setup.",
   "notes": "Third-party account prerequisite."
  },
  {
   "t": "24:07",
   "cap": "pay",
   "capability": "pay",
   "task": "Probe agent payment rails and checkout",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "No 402/x402/MPP/L402 on api.fillout.com (400 auth missing), x402./mpp./agents.fillout.com 404 HTML, no /.well-known/ucp, auth.md, SKILL.md; no x-payment-info in OpenAPI; nothing in llms-full.txt. Settings > Billing > Upgrade -> app.zite.com/billing/plan-builder (Team plan $300/mo default) > Continue to Payment -> embedded Stripe Payment Element (js.stripe.com, pk_live). Free plan exists; no card-free trial of paid tiers seen. Zite Build API returns 402 after a 14-day free window (docs), plain HTTP 402 not a payment protocol.",
   "notes": "Not paid; card not entered. Registries not checked (web search unavailable)."
  },
  {
   "t": "25:36",
   "cap": "cap-26",
   "capability": "Duplicate a form",
   "task": "Duplicate the form from the home list",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Home row menu > Duplicate > name My form (copy) > Duplicate; GET /v1/api/forms lists kDVUS4HpGzus My form (copy).",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "25:36",
   "cap": "cleanup",
   "capability": "cleanup",
   "task": "Remove API webhook and submissions",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /webhook/delete {webhookId:168797} -> 200 {} (and 200 {} again on repeat: no not-found error, no list endpoint to confirm); DELETE each of 4 submissions -> 200; GET submissions -> []",
   "notes": "Deleting submissions via API leaves the 3 rows in the linked Zite database (MCP SQL count 3).",
   "quality": {
    "verify_route": "no",
    "error_legibility": "silent",
    "idempotent": "yes"
   }
  },
  {
   "t": "27:39",
   "cap": "delete",
   "capability": "delete account",
   "task": "Delete organization with all forms, databases, submissions",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Settings > General > Delete organization, typed DELETE ALL AgentDrives Test's organization -> logged out to /login. Afterwards GET /v1/api/forms -> 400 API Key invalid; MCP -> invalid_token; forms.fillout.com/t/sxQKL1SueRus shows not found (HTTP 200 soft 404).",
   "notes": "Docs say forms/apps/databases and trash must be emptied first; in practice the dialog deleted everything in one step. No API for account deletion. Email login afterwards did not advance to a password step (not further investigated).",
   "quality": {
    "verify_route": "yes",
    "docs_match": "drift"
   }
  },
  {
   "t": "27:39",
   "cap": "cancel",
   "capability": "cancel plan",
   "task": "Cancel/downgrade plan",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No paid plan was started (free plan). Docs (help/cancel-plan): Settings > Billing > Cancel in the web UI; no billing API.",
   "notes": "Grade from docs only:."
  }
 ],
 "stale": false,
 "icon": "/logos/fillout.png",
 "monitored": false,
 "verdict": "L4 · Runs on its own: our agent got in on its own and worked the API without getting stuck on any checkpoint. Signup, email verification and the key page in Settings > Developer all passed, and an invisible reCAPTCHA let our agent's browser through. Through the API it listed forms and created, searched and deleted submissions on its own; building the forms themselves (fields, logic, calculations, publish) still needs the web builder, since the MCP server has no form tools. Upgrading runs through an embedded Stripe card form, and deleting the organization removed the forms, database and submissions in one step, after which the key and MCP token were rejected.",
 "page": "https://agentdrives.com/tools/fillout?via=api"
}