Can an AI agent use Twenty (twenty.com)?

As of 2 Oct 2026, an AI agent gets into Twenty on its own and does 80% of the core work.

Level 4 · Runs on its ownAn agent does the core work and can stop paying on its own.
  • Find: Docs for agents: llms.txt, an OpenAPI and an MCP server.
  • Access: Sign-up in a browser.
  • Use: 80% of the work.
  • Pay: Payment not reached.
  • Leave: Leaves on its own: Cancels on its own, deletes its account.

To reach L5 · Autonomous: pay without a person.

What the levels mean

Driven 2 Oct 2026Same level in 2 drives in a rowRules 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 site opens.
  • Agents in a person's browserNot measured yet.

Sign-up page checked 13 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from

What an agent can do in Twenty (twenty.com).

On its own

  • Create, update, link and delete contacts, companies and deals
  • Add new custom record types and fields and use them right away
  • Build filtered views like kanban boards
3 more
  • Build and run multi-step automations, including one that calls an AI model
  • Build a chart dashboard
  • Log in on behalf of a user without a password using a secure login flow

What it can't, and why

  • Sign up, verify the email and create the workspace without opening a browserSign-up only exists as a web form; the company intentionally keeps it browser-only
  • Get the first developer key without a browserThe key is only shown once inside the web settings page
  • Buy a paid planClicking 'Add credit card' did nothing in the automated browser and there is no other way to pay
2 more
  • Remove the workspace via an API callDeletion is a web-only settings action
  • Sync a Google or Microsoft inboxThe tester had no such email account to connect, not a product limit
On its own, in a browser

Can an AI agent sign up for Twenty on its own?

Yes, in a browser, without a human. Email + password on app.twenty.com in our agent's browser. Invisible reCAPTCHA let our signed agent through, no visible challenge. There is no headless sign-up API; llms.txt says this is deliberate. Onboarding (workspace name/subdomain, skip mailbox sync, apps, invites, choose plan) is browser only.

Official server · 7 of 12 calls worked

Does Twenty (twenty.com) have an MCP server, and can an agent connect to it?

Yes. Twenty has an official MCP server. The server is hosted, lists 324 tools and signs an agent in with OAuth.

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, 7 of our agent's 12 attempts worked.

What the drive found

APIOpenAPIMCP · officialCLI–SDKllms.txtWebhooks–Sandbox
On its own, in a browser

How does an AI agent get a Twenty (twenty.com) API key?

In the drive of 2 Oct 2026, our agent got its Twenty API key in a browser, without a person. API key created under Settings > MCP & APIs > API (Admin role, never expires). It is shown once; to capture it we had to regenerate it. OAuth 2.1 with dynamic client registration also works headless, apart from one consent click in a logged-in browser.

On its own, in a browser

Can an AI agent delete its Twenty account?

Yes, in a browser, without a human. Settings > General > Delete workspace, type your email to confirm. Afterwards the API returned 401 WORKSPACE_NOT_FOUND. No documented API route for deleting the workspace or account.

Not tested in this drive: paying. Every checkpoint, in detail

For the team behind Twenty.

Where agents stop in Twenty (twenty.com) today, and the fixes that get them further, highest impact first.

Payment not reached

The fixes, highest impact first

  1. Let an MCP OAuth login create the workspaceStep-by-step guide
  2. Fix trigger variable syntax in workflow tool docs
  3. Make workflow step creation atomic and validated
3 more fixes
  1. Offer a billing link or API for agents Step-by-step guide
  2. Fix the misleading email verification error page
  3. Add an API route to delete a workspace
  • 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).
See the example report
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

Driven · L4 · Runs on its own badge

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: found

Not measured in this drive: Holds up, Docs match (part of an Audit).

The measures

  1. Work done80
  2. Reliability88
  3. Crash test–

Level history

  1. 1 Oct 2026L4Runs on its own
  2. 2 Oct 2026L4Runs on its own

Needs a paid plan

Not counted in the level. Our drive used no-card trial (Pro plan, 7 days).

Needs a paid plan
CapabilityPlan
Row-level permissionsOrganization ($19/user/month)
Audit logsOrganization
SAML/OIDC SSOOrganization
Custom domainOrganization
SCIMEnterprise (from $50k/year)
IP allow-listingEnterprise

For agents and builders.

The drive as data, every checkpoint and all 45 attempts.

How an agent connects · 7 tips
  • Use the MCP server at https://{workspace}.twenty.com/mcp with 'Authorization: Bearer <api key>'. tools/list only shows 7 meta-tools: call get_tool_catalog once, then learn_tools for schemas and execute_tool to run.
  • MCP find_many_* needs an explicit select parameter.
  • Workflow step ids must be UUIDs. In database-event triggers, read fields as {{trigger.properties.after.<field>}}, not {{trigger.object.<field>}}.
  • AI_AGENT steps: create_workflow_version_step, then update_agent, then update_workflow_version_step. Active versions are read-only, so use create_draft_from_workflow_version.
  • After create_workflow_version_step, check the step's settings: CREATE_RECORD defaulted to company, which can loop on a company.created trigger.
  • company.domainName is unique per workspace; a duplicate returns 400 with a constraint name.
  • The API key is shown once; copy it at creation or you will have to regenerate it.
Every checkpoint, in detail · 9 checkpoints
  1. DocsHeadlesstwenty.com/llms.txt and docs.twenty.com/llms.txt (plain text), MCP server card at /.well-known/mcp/server-card.json, RFC 9727 API catalog at /.well-known/api-catalog. llms.txt explicitly allows agent-driven sign-up (ToS section 10).
  2. Sign upIn a browserEmail + password on app.twenty.com in our agent's browser. Invisible reCAPTCHA let our signed agent through, no visible challenge. There is no headless sign-up API; llms.txt says this is deliberate. Onboarding (workspace name/subdomain, skip mailbox sync, apps, invites, choose plan) is browser only.
  3. VerifyIn a browserThe verification mail arrived within a minute. Opening the link showed 'Email Verification Failed: You must be authenticated' anyway, but signing in afterwards went straight on to workspace creation, so the address had been accepted.
  4. KeyIn a browserAPI key created under Settings > MCP & APIs > API (Admin role, never expires). It is shown once; to capture it we had to regenerate it. OAuth 2.1 with dynamic client registration also works headless, apart from one consent click in a logged-in browser.
  5. First callHeadlessGET /rest/companies with Bearer key -> 200; per-workspace OpenAPI (322 core + 27 metadata paths); MCP initialize + tools/list over streamable HTTP.
  6. First actionHeadlessCreated a company through MCP execute_tool create_one_company and read it back through REST.
  7. PayNot reachedNo agent payment rail: x402./mpp./agents. subdomains 404, no 402 anywhere, no /.well-known/ucp, no billing API in docs. A 7-day Pro trial starts without a card (a 30-day trial needs billing details). The only purchase path is in the web app: Settings > Billing > Subscribe Now > 'Add credit card'. Clicking that in our agent's browser did nothing: no page change, no popup, no Stripe request (an hCaptcha script was on the page). So a person has to add the card.
  8. CancelIn a browser'Cancel Plan' button under Settings > Billing; deleting the workspace also ended the trial. No billing API. Nothing recurring was ever started (no card).
  9. DeleteIn a browserSettings > General > Delete workspace, type your email to confirm. Afterwards the API returned 401 WORKSPACE_NOT_FOUND. No documented API route for deleting the workspace or account.
The attempt log · 45 attempts
Attempt log
CapabilityRouteResultEvidence
find docs: Find agent docsapidone ✓twenty.com/llms.txt and docs.twenty.com/llms.txt 200 text/plain; describe MCP at /mcp, REST /rest, GraphQL, per-workspace OpenAPI, explicit agent-signup policy (ToS sec 10), signup CAPTCHA-protected via app.twenty.com
sign up: Create account with email+password on app.twenty.combrowserdone ✓After Sign up page shows Check your Emails: verification email sent to the agent's inbox
verify email: Open verification link from inboxbrowserdone ✓Mail arrived <1 min. Opening link in the profile showed Email Verification Failed: You must be authenticated to perform this action; signing in with email+password afterwards went straight to Create workspace, so the account counted as verified
workspace onboarding: Create workspace, skip sync/apps/invite, choose planbrowserdone ✓Workspace agentdrives-drive015.twenty.com created; plan-required screen offered Upgraded (30 days, card) or Basic without credit card 7 days; chose Basic no-card, landed on Companies list with 5 seed companies
API key: Create API key in Settings > MCP & APIs > APIbrowserdone ✓Key agentdrives (Admin role, never expires) created; shown once, regenerated with typed yes confirmation to capture; GET /rest/companies with Bearer returned 200
first API call: GET /rest/companies?limit=2 and fetch per-workspace OpenAPIapidone ✓200 with seed companies; /rest/open-api/core 200 (322 paths), /rest/open-api/metadata 200 (27 paths)
first real action: Create a company via MCP execute_tool create_one_companymcpdone ✓MCP returned id 49f2f6f5-...; GET /rest/companies/{id} returns it
CRUD CRM record: Create company via MCP, update its name via MCP update_one_company, create person+opportunity via REST POST, PATCH opportunity stagemcpdone ✓GET /rest/companies/49f2f6f5... name=AgentDrives Test Co (updated); PATCH /rest/opportunities/d2a8fe19... returned stage MEETING
MCP client read/write: Connect to /mcp with API key Bearer, initialize, tools/list, create a companymcpdone ✓initialize 200 (Twenty MCP Server 0.1.0, streamable-http SSE); tools/list = 7 meta tools; get_tool_catalog lists 324 tools (235 CRUD, 22 workflow, 22 view, 13 metadata, 7 dashboard, 7 role, 4 webhook); create_one_company via execute_tool reflected in REST
relations: Create person and opportunity with companyId, read company with depth=1apidone ✓GET /rest/companies/{id}?depth=1 shows people [AgentDrives Test] and opportunities [AgentDrives pilot 1000 EUR]
custom object + fields: POST /rest/metadata/objects testDrive, POST /rest/metadata/fields agentScore NUMBER and company MANY_TO_ONE relation, create a record at /rest/testDrivesapidone ✓GET /rest/metadata/objects lists testDrive; POST /rest/testDrives worked immediately; GraphQL testDrives returns agentScore 42 and company relation
metadata API: Create object/fields programmaticallyapidone ✓same as object b15b2995... active, new REST/GraphQL endpoints live within seconds
REST/GraphQL per tenant: GraphQL query on custom object testDrives with nested companyapidone ✓POST /graphql {testDrives{edges{node{name agentScore company{name}}}}} returned Drive 015, 42, AgentDrives Test Co (updated)
bulk via API: POST /rest/batch/people with 3 recordsapidone ✓Response returned 3 ids; GET /rest/people?filter=name.firstName[eq]:Batch totalCount 3
notes: POST /rest/notes with bodyV2.markdown, link via POST /rest/noteTargets to companyapidone ✓GET /rest/noteTargets?filter=noteId[eq]:20617a08... shows targetCompanyId 49f2f6f5...
tasks: Create task assigned to workspace member, link to person, mark DONEapidone ✓GET /rest/tasks/ee16c808...?depth=1 status DONE, assigneeId c4dbca74..., taskTargets person e5a01198...
saved view: MCP create_view KANBAN on opportunity grouped by stage, add filter amount>=500 and sort amount DESCmcpdone ✓get_view_query_parameters returns filter amountMicros gte 500000000, orderBy amount DescNullsLast; GET /rest/metadata/views/938e3664... returns the view
build workflow: MCP create_complete_workflow: person.created -> create task -> create note, activatemcpfailed ✓First call rejected: Step configuration is invalid - id: Invalid UUID (tool schema does not say step ids must be UUIDs); the failed call still left an orphan DRAFT workflow 2d93651a... behind
build workflow: Retry with UUID step idsmcpdone ✓Workflow 1be92d1b... ACTIVE with 2 steps per GET /rest/workflows; run #1 COMPLETED
trigger workflow: Create a person via REST to fire DATABASE_EVENT person.createdapidone ✓GET /rest/workflowRuns: #1 - AgentDrives welcome COMPLETED, trigger result recordId cfbf18a0... (the person just created), started 1s after creation
chain actions: Two chained CREATE_RECORD steps using trigger variablesmcppartial ✓Both steps SUCCESS in run state, task and note created in order, but title is Welcome undefined (wf): the variable syntax {{trigger.object.name.firstName}} given in the MCP tool description resolves to undefined; the actual trigger output is under properties.after.name.firstName
webhooks: MCP create_webhook for person.created to our agent.agentdrives.com URL, create a person to fire itmcppartialWebhook 2add6f79... listed by GET /rest/metadata/webhooks with a signing secret; delivery could not be confirmed because we had no readable receiver
roles: MCP create_role Agent read-only (read all, no update/delete/settings)mcppartial ✓GraphQL /metadata getRoles lists Agent read-only with canUpdateAllObjectRecords false
dashboard: MCP create_complete_dashboard with a GRAPH AGGREGATE_CHART COUNT of peoplemcpdone ✓Dashboard bbd8aca0... renders People count = 11 in the browser; GET /rest/people totalCount 11
AI chatbot: Ask AI in the web UI: how many people have first name Batch, list last namesbrowserdone ✓Chat answered 3 matches: One, Three, Two - same as GET /rest/people?filter=name.firstName[eq]:Batch totalCount 3
OAuth: Dynamic client registration at /oauth/register, PKCE authorize (consent click in browser), token exchange, call REST and MCP with the tokenapidone ✓RFC 8414 metadata at /.well-known/oauth-authorization-server; DCR returned client_id; consent screen Connect AgentDrives drive to your account; token scope api profile expires_in 1800; GET /rest/companies with OAuth token 200; MCP call authenticated (returned a tool validation error Select is required, not an auth error)
pay step: Probe agent payment rails and the in-app purchase pathbrowserblocked ✓x402./mpp./agents.twenty.com 404 JSON; /.well-known/ucp, /auth.md, /SKILL.md 404 HTML; unauthenticated /rest/companies 403 Missing authentication token (no 402); developer docs only mention app credits, no billing API. In-app: Settings > Billing shows Pro plan Trial, $12/seat/month, Subscribe Now -> modal Add your credit card -> Add credit card; clicking it in our agent's browser opened nothing (no navigation, no popup, no Stripe request seen); hCaptcha script present on the page
Row-level permissions: Check availability on the trial plannoneplan_gated ✓twenty.com/pricing comparison table: Row-level permissions not in Pro, included in Organization ($19/user/month); our workspace is on the Pro plan trial (Settings > Billing)
Audit logs: Check availability on the trial plannoneplan_gated ✓twenty.com/pricing comparison table: Audit logs not in Pro, included in Organization; our workspace is on the Pro plan trial (Settings > Billing)
SAML/OIDC SSO: Check availability on the trial plannoneplan_gated ✓twenty.com/pricing comparison table: SAML/OIDC SSO not in Pro, included in Organization; our workspace is on the Pro plan trial (Settings > Billing)
Custom domain: Check availability on the trial plannoneplan_gated ✓twenty.com/pricing comparison table: Custom domain not in Pro, included in Organization; our workspace is on the Pro plan trial (Settings > Billing)
SCIM provisioning: Check availability on the trial plannoneplan_gated ✓twenty.com/pricing comparison table: SCIM provisioning not in Pro, included in Enterprise (from $50k/year); our workspace is on the Pro plan trial (Settings > Billing)
IP allow-listing: Check availability on the trial plannoneplan_gated ✓twenty.com/pricing comparison table: IP allow-listing not in Pro, included in Enterprise; our workspace is on the Pro plan trial (Settings > Billing)
AI agent in workflow: Workflow company.created -> AI_AGENT classify -> create note with the response, all via MCPmcpfailed ✓create_complete_workflow with an AI_AGENT step refused: AI_AGENT steps cannot be created via create_complete_workflow ... Use create_workflow_version_step instead, then call update_agent
AI agent in workflow: Retry: create_workflow_version_step AI_AGENT, update_agent prompt, update_workflow_version_step, add CREATE_RECORD step, activate, create a companymcpdone ✓Run #1 - AgentDrives AI summary COMPLETED; AI step response Likely an AI research and software company...; GET /rest/notes shows note AI: Likely an AI research...
connect Google/Microsoft mailbox: Connect a mailbox during onboardingbrowserblockedOnboarding /sync/emails offers only Continue with Google / Continue with Microsoft OAuth
CSV import: CSV importnoneskipped
Export view to CSV: Export view to CSVnoneskipped
Two-factor authentication: Two-factor authenticationnoneskipped
Custom app package via CLI: Custom app package via CLInoneskipped
Self-host via Docker: Self-host via Dockernoneskipped
Multiple environments: Multiple environmentsnoneskipped
delete record: DELETE /rest/people/{id} then GETapidone ✓DELETE 200; GET /rest/people/e5a01198... 404 Record not found
cancel plan: Cancel the trialbrowserdone ✓Settings > Billing shows Cancel Plan (Your workspace will be disabled); we removed the trial by deleting the workspace: afterwards the API returns 401 WORKSPACE_NOT_FOUND
delete account: Settings > General > Delete workspace, type email to confirmbrowserdone ✓Redirected to app.twenty.com/welcome; GET /rest/companies with the old key -> 401 Workspace not found. Signing in again afterwards led to the sign-up path (Check your Emails), suggesting the user was removed with its only workspace