Can an AI agent use Formbricks?
As of 2 Oct 2026, an AI agent gets into Formbricks on its own and does 100% of the core work.
- Find: Docs for agents: llms.txt, an OpenAPI and an MCP server.
- Access: Sign-up in a browser.
- Use: 100% of the work.
- Pay: Reaches the checkout: Stopped at the card form.
- Leave: Leaves on its own: Cancels on its own, deletes its account.
To reach L5 · Autonomous: pay without a person.
What the levels meanDriven 2 Oct 2026New level in the latest driveRules of 15 Oct 2026Claim this page
Written and checked by our agents from this drive's record. How we write.
Who gets in
- Agents on a serverGet in on their own.
- Signed agentsThe sign-up page opens.
- Agents in a person's browserNot measured yet.
Sign-up page checked 12 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from
What an agent can do in Formbricks.
On its own
- Create, edit, publish and delete surveys automatically, including logic branches and personalised text
- Collect and manage survey responses automatically, including marking them done or deleting them
- Trigger surveys from app/website events and target users by their attributes
2 more
- Get notified automatically through webhooks when someone responds
- Add a translated language to a survey and connect AI assistants like Claude directly to the account
What it can't, and why
- Sign up, create the API key, or delete the account without a browserFormbricks only offers these steps through its website, not an API
- Tag responses, build audience segments, invite teammates, or remove branding automaticallyThese only exist in the website, no API for them yet
- Use email follow-ups, workflows, or advanced feedback dashboardsThey need a paid plan beyond the free trial
1 more
- Subscribe or cancel a paid plan automaticallyBilling only works through the website and a hosted payment page
Can an AI agent sign up for Formbricks on its own?
Yes, in a browser, without a human. No documented sign-up API. Email sign-up form at app.formbricks.com/auth/signup worked in our agent's browser; no CAPTCHA or bot check seen
Does Formbricks have an MCP server, and can an agent connect to it?
Yes. Formbricks has an official MCP server.
A new agent can get in on its own: in the drive of 2 Oct 2026, our agent signed up, verified and got its key without a person. Through the MCP server, 5 of our agent's 7 attempts worked.
What the drive found
APIOpenAPIMCP · official–CLISDKllms.txtWebhooks–SandboxHow does an AI agent get a Formbricks API key?
In the drive of 2 Oct 2026, our agent got its Formbricks API key in a browser, without a person. API keys are created only in the UI (Organization Settings > API Keys), workspace-scoped read/write/manage, shown once. MCP uses OAuth with dynamic client registration: discovery and registration headless, consent is one click in the browser
Can an AI agent delete its Formbricks account?
Yes, in a browser, without a human. Account > Profile > Delete account (type email + password) deletes the account and the sole-owned org; the old API key then returns 401 and login fails. No documented headless route
Can an AI agent pay for Formbricks?
Reaches the checkout: stopped at the card form.
- Stripe Checkout
No card needed to start.
What would let agents pay on their own
- Accept x402 or MPP on your API. 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.Step-by-step guide
- List your plans on Stripe Projects. Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev).Step-by-step guide
No 402/x402/MPP/L402, no /.well-known/ucp, not in the x402 Bazaar or mpp.dev, no billing API. Sign-up starts a 14-day Pro trial automatically, no card needed. Upgrading is in-app ('Pay now & unlock', $89/mo) plus a Stripe customer portal at billing.formbricks.com ('Add payment method'). Graded from what we saw: a hosted flow an agent could complete alone. We had no card, so neither checkout completion nor 3DS was tested
From the drive of 2 Oct 2026.
For the team behind Formbricks.
Agents get through Formbricks today. The fixes that keep it that way, highest impact first.
The fixes, highest impact first
- Let agents create API keys headlesslyStep-by-step guide
- Document the survey document schema for API
- Fix followUps date validation on JSON input
3 more fixes
- Serve the v2 OpenAPI file as YAML Step-by-step guide
- Document workspaceId on management create-response
- Add tags and segments to the API
- Claim it free and reply next to the result.
- A Drive, $49: your private report, with where agents stop, the evidence and the fixes that move your level.
- Fixed something? Order a Drive ($49) any time, or the Monthly drive ($29/month).
Details
Your API, MCP server or CLI is the product? An Audit ($299) also checks every documented route, MCP tool and CLI command against your docs. Compare plans.
Already claimed it? Open it in your dashboard.
Rather not be driven? Block AgentDrivesAgent in robots.txt or write to us. We stop driving it ourselves; this page stays, with its date.
Embed the badge on your site
Behind the level.
The part scores and the measures behind them.
Part scores and the measures · level history · paid plans
Part scores
Agent-ready setup
- llms.txt: found
- OpenAPI: found
- MCP server: found
- CLI: not found
Not measured in this drive: Holds up, Docs match (part of an Audit).
The measures
- Work done100
- Reliability86
- Crash test–
Level history
- 2 Oct 2026L3Does the work
- 2 Oct 2026new driveL4Runs on its own
Needs a paid plan
Not counted in the level. Our drive used no-card trial (14-day Pro trial started automatically at sign-up; downgraded to Hobby at the end).
| Capability | Plan |
|---|---|
| Workflows | Scale |
| Email follow-ups | Pro (paid; locked during trial) |
| Spam protection (reCAPTCHA) | Enterprise |
| /30/31 Unify Feedback, dashboards, AI enrichment | Enterprise |
| Teams & access roles | Scale |
| 2FA | Scale |
| SSO | Enterprise |
For agents and builders.
The drive as data, every checkpoint and all 56 attempts.
How an agent connects · 8 tips
/api/tools/formbricks.json/tools/formbricks.mdMCP get_tool {"slug":"formbricks"}
- Use the Management API v1 with header x-api-key; the key is workspace-scoped, so /api/v2/me returns 401 unless the key also has Organization Access
- Webhooks live at /api/v1/webhooks, not /api/v1/management/webhooks (that path returns a 404 HTML page)
- Management POST /responses needs workspaceId in the body even though the docs list only surveyId
- Hidden field id 'source' is reserved; error messages name the offending field, so read details
- MCP uses a different translation dialect: {'en-US': '...'} instead of {'default': '...'}; validate_survey takes {operation, data}
- Survey status 'scheduled' is not settable: set publishOn/closeOn with status draft
- The client API enforces PIN protection and submission limits (403 with clear messages)
- Workspace state is cached for 5 minutes
Every checkpoint, in detail · 9 checkpoints
- DocsHeadlessllms.txt + docs/llms.txt; every API page available as .md with an embedded OpenAPI fragment; MCP setup docs
- Sign upIn a browserNo documented sign-up API. Email sign-up form at app.formbricks.com/auth/signup worked in our agent's browser; no CAPTCHA or bot check seen
- VerifyHeadlessVerification mail arrived in seconds; the GET link worked headless (302 to /auth/login?verified=1)
- KeyIn a browserAPI keys are created only in the UI (Organization Settings > API Keys), workspace-scoped read/write/manage, shown once. MCP uses OAuth with dynamic client registration: discovery and registration headless, consent is one click in the browser
- First callHeadlessGET /api/v1/management/me with x-api-key -> 200
- First actionHeadlessPOST /api/v1/management/surveys created a link survey, read back by GET
- PayIn a browserNo 402/x402/MPP/L402, no /.well-known/ucp, not in the x402 Bazaar or mpp.dev, no billing API. Sign-up starts a 14-day Pro trial automatically, no card needed. Upgrading is in-app ('Pay now & unlock', $89/mo) plus a Stripe customer portal at billing.formbricks.com ('Add payment method'). Graded from what we saw: a hosted flow an agent could complete alone. We had no card, so neither checkout completion nor 3DS was tested
- CancelIn a browserBilling > 'Return to Hobby plan' ended the trial at once (verified: plan Hobby). Without a card the trial would also end on its own (Oct 16). No billing API
- DeleteIn a browserAccount > Profile > Delete account (type email + password) deletes the account and the sole-owned org; the old API key then returns 401 and login fails. No documented headless route
The attempt log · 56 attempts
| Capability | Route | Result | Evidence |
|---|---|---|---|
| Find docs: Read llms.txt, docs llms.txt, API reference, MCP setup | api | done ✓ | formbricks.com/llms.txt and /docs/llms.txt (200, text/plain) list REST v1/v2 reference, MCP setup, generate-key pages as .md |
| Sign up: Create account with email+password | api | failed | No documented signup API; app.formbricks.com/auth/signup is a Next.js UI form only |
| Sign up: Create account with email+password in browser | browser | done ✓ | pw: /auth/signup -> Continue with Email -> name/email/password -> redirected /auth/verification-requested; no CAPTCHA signals |
| Verify email: Open verification link from inbox headless | api | done ✓ | Mail arrived <10s. login then succeeded |
| Log in: Log in with email/password | browser | done ✓ | pw login -> /organizations/{org}/workspaces/new/plan: 'You're on Pro for the next 14 days' (auto no-card trial) |
| Get API key: Create workspace-scoped manage API key in Organization Settings > API Keys | browser | done ✓ | Key fbk_•••• shown once; stored in secrets.env. Permission dropdown is a custom popover (needed coordinate click) |
| First API call: GET /api/v1/management/me | api | done ✓ | 200 {id: workspace cmurg4i0z..., type: production, workspace{name:'My workspace'}} |
| Create a survey: Create a link survey with 2 questions + hidden field via POST /api/v1/management/surveys | api | failed | 400 {code:bad_request, details:{'hiddenFields.fieldIds.0':'Hidden field id is not allowed'}} for hidden field id 'source' (reserved) |
| Create a survey: Retry create with hidden field 'campaign' | api | done ✓ | 200 data.id=cmurgacq02zc301z5avvn43vj status=draft; GET /api/v1/management/surveys/cmurgacq02zc301z5avvn43vj returns 2 blocks [q1open,q2multi] |
| First real action: Create survey via API | api | done ✓ | survey cmurgacq02zc301z5avvn43vj created and read back |
| Edit a survey: PUT name + add 3rd block via blocks array | api | done ✓ | PUT 200; GET shows name 'AgentDrives test survey (edited)' and 3 blocks incl. blk3ocean |
| Recall / hidden fields: Hidden field 'campaign' + recall token '#recall:campaign/fallback:friend#' in Q3 headline | api | partial ✓ | GET shows hiddenFields {enabled:true,fieldIds:[campaign]} and recall text stored; rendered substitution not checked |
| Conditional logic: Add block logic: if q2multi==Sun jump to ending end1 | api | partial ✓ | PUT 200; GET shows blocks[1].logic with condition/action stored as sent |
| Publish a survey: PUT status=inProgress | api | done ✓ | GET survey status=inProgress |
| Share as public link: Fetch https://app.formbricks.com/s/{id} | api | done ✓ | GET /s/cmurgacq02zc301z5avvn43vj 200, HTML contains survey name and first question |
| Submit a response: POST /api/v1/client/{workspaceId}/responses (no auth) | api | done ✓ | 200 data.id=cmurgb5o4cbb301ts6odamusx; GET /api/v1/management/responses/cmurgb5o4cbb301ts6odamusx shows data q1open/q2multi |
| Update/finish response: PUT /api/v1/management/responses/{id} finished=true + extra answer | api | done ✓ | GET shows finished=true, data merged with q3why |
| View results: GET /api/v1/management/responses?surveyId= | api | done ✓ | 200, 1 response listed (matches what we created minus the deleted one) |
| Delete a response: POST mgmt response then DELETE /api/v1/management/responses/{id} | api | done ✓ | First mgmt POST: 400 'workspaceId must be provided' (docs list only surveyId as required); with workspaceId 200; DELETE 200; GET -> 404 not_found |
| Conditional logic: Verify logic path by answering the survey as a respondent | browser | done ✓ | Logic set via API PUT (blocks[1].logic). Respondent: Ocean -> Q3 shown; Sun -> straight to 'Thanks!' ending (screens 024/025) |
| Recall / hidden fields: Render check: /s/{id}?campaign=AgentDrives | browser | done ✓ | Q3 headline rendered 'Why the ocean, AgentDrives?' (recall of hidden field): screenshot 024 |
| Define action class: POST /api/v1/management/action-classes (code action) | api | done ✓ | 200 id=cmurgbzur2zwa01z58wk5407o; GET /action-classes/cmurgbzur2zwa01z58wk5407o returns it |
| Website/app survey via widget: Create type=app survey triggered by the action class; read workspace state | api | done ✓ | First try 400 (trigger needs full actionClass object: name/description/type/key, clear field errors); retry 200 id=cmurgc7ef301801z54s7iqaw5; GET /api/v1/client/{ws}/environment lists the survey with trigger agentdrives_clicked_buy |
| Recontact/cooldown: Set recontactDays=7 + displayOnce on the app survey | api | partial ✓ | GET survey and workspace state show recontactDays 7, displayOption displayOnce |
| Identify user + attributes: POST /api/v1/client/{ws}/user {userId, attributes{plan,email}} | api | done ✓ | 200 contactId=cmurgcbbfy5hg01wopvbstv7q, message 'Created new attribute plan'; GET /api/v1/management/contact-attributes shows value 'trial' |
| Manage contacts: List/get contacts and attributes via mgmt API | api | partial ✓ | GET /api/v1/management/contacts and /contacts/cmurgcbbfy5hg01wopvbstv7q 200 (on Pro trial). Contact object returns only id/timestamps; attributes via /contact-attributes |
| Webhooks: POST /api/v1/webhooks (responseCreated, responseFinished) to a webhook.site bin we own, then submit a response | api | done ✓ | 200 webhook id=cmurgd0we30ct01z5osqcvyhw with whsec_ secret; webhook.site received 2 signed POSTs (event responseCreated, responseFinished) within 1s |
| PIN protection: PUT pin=4821, then submit without PIN | api | done ✓ | GET shows pin 4821; /s/{id} serves PinScreen; client POST response -> 403 'Survey is protected by a PIN' |
| Limit submissions: PUT autoComplete=1, submit one response, then another | api | done ✓ | After 1 finished response GET status=completed; 2nd POST -> 403 'Survey is not accepting submissions' |
| Schedule open/close: PUT publishOn/closeOn | api | partial ✓ | status 'scheduled' rejected (400 lists allowed values draft|inProgress|paused|completed); with status draft GET shows publishOn 2026-10-03T22:00Z, closeOn 2026-10-10T22:00Z (times rounded to local midnight) |
| Styling: PUT styling {overwriteThemeStyling, brandColor #e11d48} | api | partial ✓ | GET shows styling; rendered page payload includes brandColor and input focus ring is red, but buttons stay default blue (screenshot 024) |
| AI assistants via MCP: OAuth (RFC 9728 discovery -> DCR -> PKCE consent) then tools/list + tool calls on https://app.formbricks.com/api/mcp | mcp | done ✓ | 401 with WWW-Authenticate resource_metadata; /.well-known/oauth-protected-resource + oauth-authorization-server JSON; POST /api/auth/oauth2/register 201; consent 'Allow access' in browser (logged-in session); token 200 (expires_in 900, refresh token); tools/list = 30 tools; list_workspaces/list_surveys returned live data |
| Create a survey: MCP create_survey | mcp | done ✓ | First call 400 invalid_params: use locale 'en-US' not 'default' (v3 contract differs from v1 REST); retry created cmurghcc40ub901vrj2nrqrw2; REST GET returned it |
| Edit a survey: MCP patch_survey name + status | mcp | done ✓ | REST GET shows '(patched)' and status inProgress |
| Delete a survey: MCP delete_survey | mcp | done ✓ | delete returned requestId; REST GET /api/v1/management/surveys/cmurghcc40ub901vrj2nrqrw2 -> 404 'Survey not found' |
| Workflows: MCP list_workflows | mcp | plan_gated ✓ | 403 'Workflows are not enabled for this organization' on the 14-day Pro trial; capability map: Scale plan |
| Unify feedback datasets: MCP list_feedback_datasets | mcp | plan_gated ✓ | 403 'Unify Feedback is not enabled for this organization. It requires an Enterprise plan or license' |
| Dashboards from feedback: (depends on Unify Feedback) | none | plan_gated | Unify Feedback 403 Enterprise-only (see) |
| AI enrichment of feedback: (depends on Unify Feedback) | none | plan_gated | Unify Feedback 403 Enterprise-only (see) |
| Multi-language survey: MCP patch_survey: add de-DE language + translated headline (manual translation) | mcp | done ✓ | REST GET shows languages en-US + de-DE and headline {de-DE:'Kontrolltest'}; /s/{id}?lang=de-DE renders 'Kontrolltest' with German UI strings (Erforderlich, Fertig) |
| Email follow-ups: PUT survey followUps (send-email to our own inbox) | api | plan_gated ✓ | 1st: 400 'followUps.0.createdAt: expected date, received Date' (confusing); with ISO dates: 403 'Survey follow ups are not allowed for this organization'. Billing page: 'Some features like follow-ups and custom links stay locked during the trial' |
| Spam protection: PUT recaptcha.enabled=true | api | plan_gated ✓ | 403 'Spam protection is not enabled for this organization'; GET still enabled:false |
| Teams/RBAC: GET /api/v2/organizations/{org}/teams | api | plan_gated | 401 Unauthorized with workspace-only key (needs Organization Access); billing page lists 'Teams & access roles' under Scale |
| 2FA: Check plan | none | plan_gated | Billing page lists 'Two-factor authentication (2FA)' under Scale ($390/mo) |
| SSO: Check plan | none | plan_gated | Enterprise only per capability map/docs; Billing page offers Enterprise via 'Talk to us' |
| Self-host: Install self-hosted edition | none | skipped | Drive sandbox has no Docker; one-click install script / docker compose documented at /docs/self-hosting |
| Pay / upgrade: Probe 402/x402/MPP/L402, well-known, registries, docs text; inspect in-app billing | browser | done | Unauthenticated API -> 401 JSON, no PAYMENT-REQUIRED/WWW-Authenticate Payment; /.well-known/ucp, /auth.md, /SKILL.md 404; x402./mpp./agents. subdomains do not resolve; not in x402 Bazaar or mpp.dev; llms-full.txt has no x402/MPP/ACP terms. In-app Billing: 'Unlock all Pro features' -> modal 'Pay now & unlock, $89/mo, billing starts today'; 'Manage card details & invoices' -> Stripe customer portal billing.formbricks.com ('No payment method. Add payment method'). Sign-up auto-started a 14-day Pro trial with no card. |
| Tag and filter responses: Add tag in Responses > response detail > Add Tag | browser | partial ✓ | Tag 'agentdrives' created and attached; GET /api/v1/management/responses/{id} shows tags[{name:'agentdrives'}] |
| Invite members: Organization Settings > Teams > Invite member, to our second inbox | browser | done ✓ | Members list shows the agent's inbox 'Pending'; invite mail 'You are invited to collaborate on Formbricks!' arrived in our inbox |
| Third-party integrations: Connect Slack/Zapier/Notion etc. | none | skipped | Each needs an account at the third-party vendor (OAuth to Slack/Google/Notion/Airtable/HubSpot); we have none. Webhooks covered the generic route |
| Attribute-based segments: Contacts > Segments > Create segment 'AgentDrives trial users' with filter Plan = trial | browser | done ✓ | Segment listed in Segments table; re-identifying user via POST /api/v1/client/{ws}/user returns the new segment id cmurgouho… in state.segments |
| Remove Formbricks branding: Workspace > Appearance: toggle off 'Show Formbricks Branding in Link surveys' | browser | done ✓ | Rendered /s/{id} no longer shows 'Powered by Formbricks' (before: present, screenshot 024) |
| Delete a survey: DELETE /api/v1/management/surveys/{id} for the 3 REST-created surveys | api | done ✓ | 3x 200, then GET each -> 404 |
| Clean up created objects: DELETE webhook, action class; revoke MCP refresh token | api | done ✓ | DELETE /api/v1/webhooks/{id} 200 -> GET 404; DELETE action-class 200 -> GET 404; POST /api/auth/oauth2/revoke 200 |
| Cancel trial / downgrade: Billing > 'Return to Hobby plan' > confirm | browser | done ✓ | Dialog 'Your free Pro trial will end now'; billing page then shows 'Your plan: Hobby', 0/250 responses |
| Delete account and data: Account > Your Profile > Delete account (type email + password) | browser | done ✓ | Redirected to an optional 'Account Deletion Survey'; afterwards GET /api/v1/management/me with the old key -> 401 'API Key invalid' and email/password login no longer gets in |
Also in Forms.
TallyL4Gets in on its ownFormbricks vs Tally
FilloutL4Gets in on its ownFormbricks vs Fillout
FormspreeL1Can't sign up on its ownFormbricks vs Formspree
JotformL1Can't sign up on its ownFormbricks vs Jotform