Can an AI agent use DocuSeal?
As of 6 Oct 2026, an AI agent gets into DocuSeal on its own and does 100% of the core work.
- Find: Some docs for agents: llms.txt and an OpenAPI.
- Access: Key by API.
- Use: 100% of the work.
- Pay: Reaches the checkout: Stopped at the card form.
- Leave: Leaves on its own: Nothing to cancel, deletes its account.
To reach L5 · Autonomous: pay without a person.
What the levels meanDriven 6 Oct 20261 drive so farRules 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 13 Oct 2026. Signed agents: the ones Cloudflare verifies. Where agents come from
What an agent can do in DocuSeal.
On its own
- Sign up for a free account and get an API key without any human help
- Create, edit, clone, merge, organize and archive document templates
- Send documents for signature with custom email text, track and update them, and download the signed file and its audit trail
1 more
- In its own browser: sign, decline, fill a public signing link, upload an attachment, and add a witness
What it can't, and why
- Sign or act as the person signing, through the APIsigning is only available on the signing web page, by design
- Use production features like webhooks, reminders, bulk sending or team accountsthese require a paid plan; the free plan is a developer sandbox
- Upgrade to the paid plan on its ownpayment only works through a checkout page needing a human's credit card
1 more
- Delete the account through an API callaccount deletion is only available via the website's settings page
Can an AI agent sign up for DocuSeal on its own?
Yes, over the API, without a browser. web sign-up form submitted headless: no CAPTCHA, no phone, logged in at once
Does DocuSeal have an MCP server, and can an agent connect to it?
DocuSeal's docs have an MCP server for searching them. The drive found no MCP server that works the product itself. The server lists 2 tools and speaks the older 18 Jun 2025 MCP spec.
A new agent can get in on its own: in the drive of 6 Oct 2026, our agent signed up and got its key without a person.
What the drive found
APIOpenAPIMCP · docsCLISDKllms.txtWebhooksSandboxHow does an AI agent get a DocuSeal API key?
In the drive of 6 Oct 2026, our agent got its DocuSeal API key over the API, without a browser or a person. API key shown in the console after an emailed 6-digit code
Can an AI agent delete its DocuSeal account?
Yes, over the API, without a browser. Settings > Account > Delete My Account web form posted with curl, no password asked; account scheduled for deletion within 2 months, API key 401 afterwards. No API/CLI route
Can an AI agent pay for DocuSeal?
Reaches the checkout: stopped at the card form.
- Stripe Checkout
It has a free plan.
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/UCP, no registry listing; console Upgrade to Pro opens Stripe Checkout with card fields ($20/user/month). Not completed: no card
From the drive of 6 Oct 2026.
For the team behind DocuSeal.
Where agents stop in DocuSeal today, and the fixes that get them further, highest impact first.
The fixes, highest impact first
- Add an API route to delete the account
- Label Basic keys as Developer Sandbox keys
- Return 404 and problem+json with rate-limit headers
3 more fixes
- Upgrade MCP to the 28 Jul 2026 spec with account tools
- Expose template recipient preferences in the API
- Offer a machine payment path for Pro Step-by-step guide
- 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 · paid plans
Part scores
Agent-ready setup
- llms.txt: found
- OpenAPI: found
- MCP server: not found
- CLI: found
Not measured in this drive: Holds up, Docs match (part of an Audit).
The measures
- Work done100
- Reliability100
- Crash test–
Needs a paid plan
Not counted in the level. Our drive used free plan (Basic; API runs as the free Developer Sandbox).
| Capability | Plan |
|---|---|
| Automated reminders | Pro |
| SMS phone verification | Pro |
| ID card / KBA | Pro |
| QeS/AeS | Pro |
| Bulk send | Pro |
| Private templates | Pro |
| Webhooks | Pro |
| Embedding | Pro |
| Users and roles | Pro |
| Teams/tenants | Pro |
| SAML SSO | Pro |
| Company logo | Pro |
| Gmail/Outlook sender | Pro |
| Custom domain | Pro annual |
For agents and builders.
The drive as data, every checkpoint and all 54 attempts.
How an agent connects · 5 tips
/api/tools/docuseal.json/tools/docuseal.mdMCP get_tool {"slug":"docuseal"}
- Start at www.docuseal.com/llms.txt and console.docuseal.com/openapi.json; auth is one header, X-Auth-Token
- Reveal the API key in console with the email code; send X-CSRF-Token and Origin with the form posts
- Use {{Name;role=Signer;type=text}} tags in PDFs; give HTML field tags an explicit width/height or they get no position
- Signer steps need a browser: run the whole signing flow in one script, the form resets on reload; a share link accepts one submission per email
- A missing id returns 403 Not authorized, not 404
Every checkpoint, in detail · 9 checkpoints
- DocsHeadlesswww.docuseal.com/llms.txt, .md for every page, Accept: text/markdown honoured, OpenAPI 3.1.0 at console.docuseal.com/openapi.json
- Sign upHeadlessweb sign-up form submitted headless: no CAPTCHA, no phone, logged in at once
- VerifyNot neededno email verification required; the account worked immediately
- KeyHeadlessAPI key shown in the console after an emailed 6-digit code
- First callHeadlessGET https://api.docuseal.com/templates with X-Auth-Token -> 200
- First actionHeadlessPOST /templates/html created a template with fields
- PayNot triedNo 402/x402/MPP/UCP, no registry listing; console Upgrade to Pro opens Stripe Checkout with card fields ($20/user/month). Not completed: no card
- CancelNot neededNothing to cancel: our agent used the free plan.
- DeleteHeadlessSettings > Account > Delete My Account web form posted with curl, no password asked; account scheduled for deletion within 2 months, API key 401 afterwards. No API/CLI route
The attempt log · 54 attempts
| Capability | Route | Result | Evidence |
|---|---|---|---|
| robots/aipref: Read robots.txt on docuseal.com and www | none | done ✓ | robots.txt: User-agent: * / Allow: / (www adds Sitemap). No Content-Usage or Content-signal lines; no Content-Usage response header on www.docuseal.com |
| llms.txt: Fetch llms.txt | none | done ✓ | https://www.docuseal.com/llms.txt 200 text/plain, H1 # DocuSeal, extensive sections; https://docuseal.com/llms.txt 404 |
| markdown docs: Accept: text/markdown on docs page and .md URL | none | done ✓ | GET https://www.docuseal.com/docs/api with Accept: text/markdown -> 200 content-type text/markdown, vary: Accept-Encoding (no Vary: Accept). /docs/api.md -> 200 text/markdown |
| OpenAPI: Fetch OpenAPI spec | api | done ✓ | https://console.docuseal.com/openapi.json 200 application/json, openapi: 3.1.0, 17 paths/23 operations, servers api.docuseal.com and api.docuseal.eu; includes POST /submissions/emails |
| MCP version: POST server/discover to https://mcp.docuseal.com, then initialize | mcp | done ✓ | server/discover -> HTTP 400 JSON-RPC -32601 Unknown method (legacy). initialize offering 2026-07-28 -> protocolVersion 2025-06-18, serverInfo docuseal-mcp-server 1.0.0, capabilities tools. tools/list: search, load_resource (docs only, no account actions). No auth. /server-card 404, PRM 404 |
| cards: Agent card, AI catalog, MCP server card | none | done ✓ | https://www.docuseal.com/.well-known/agent-card.json 200 JSON, protocolVersion 1.0, supportedInterfaces url https://mcp.docuseal.com protocolBinding JSONRPC (that endpoint is an MCP server, not A2A). www ai-catalog.json 404. docuseal.com/.well-known/{ai-catalog.json,agent-card.json,agent.json,mcp/server-card.json} 200 application/json but empty body (no card) |
| oauth metadata: OAuth AS / PRM metadata | none | done ✓ | docuseal.com/.well-known/oauth-authorization-server: issuer https://docuseal.com/, authorization_code+refresh_token, client_secret_post; no registration_endpoint, no CIMD, no device flow, no agent_auth. /.well-known/oauth-protected-resource 200 text/plain empty |
| find docs: Find API docs, OpenAPI, llms.txt | none | done ✓ | llms.txt lists API reference (.md), OpenAPI 3.1 at console.docuseal.com/openapi.json, SDKs, CLI, MCP |
| sign up: Sign up with inbox via the web form, headless (curl) | api | done ✓ | Web sign-up form (first/last name, company, password, server US) submitted headless; logged in at once (/settings/account 200). No CAPTCHA or bot check on the form |
| verify email: Wait for verification mail | none | done ✓ | No verification mail required: account usable immediately after sign-up; only mails received were API key access codes |
| get API key: Reveal API key in console.docuseal.com/api headless | api | done ✓ | console.docuseal.com/api: key masked; revealing it asks for the password or an emailed code. The 'API key access code' mail arrived in seconds; entering the code revealed the key |
| first API call: GET /templates with X-Auth-Token | api | done ✓ | GET https://api.docuseal.com/templates -> 200, data[0] Sample Document id 6242063. Bad key -> 401 {"error":"Not authenticated"} application/json (not problem+json) |
| first real action: Create a template from HTML | api | done ✓ | POST /templates/html -> 200 id 6242096 with fields Company (text), Sig (signature); GET /templates/6242096 returns it |
| Create a fillable template from a PDF, DOCX or HTML file: Create templates from HTML and from a PDF with {{tag}} text tags | api | done ✓ | POST /templates/html -> 6242096; POST /templates/pdf (base64 PDF with {{Full Name;role=Signer;type=text}} and {{Signature;...}}) -> 6242098 with 2 detected fields each with 1 area; GET /templates/{id} confirms |
| Edit template fields and signer roles: Rename template, rename role, add a date field via a new document | api | done ✓ | PUT /templates/6242098 {name, roles:[Client], folder_name} -> GET shows role Client owning both fields; PUT /templates/6242096/documents (html with date-field) -> GET shows fields Company, Sig, Date and docs AD Test NDA.pdf, Annex.pdf |
| Organize templates into folders: Move template into folder AgentDrives | api | done ✓ | PUT /templates/6242098 folder_name=AgentDrives -> GET /templates shows folder_name AgentDrives (clone inherited it) |
| Clone an existing template: Clone template 6242098 | api | done ✓ | POST /templates/6242098/clone {name: AD Clone} -> id 6242100; GET /templates lists it with 2 fields, same folder |
| Merge multiple templates: Merge 6242096 and 6242098 | api | done ✓ | POST /templates/merge {template_ids:[6242096,6242098]} -> id 6242101 with 3 documents and 5 fields from both; GET /templates confirms fields 5, docs 3 |
| Send a signature request: Send template 6242098 to our own inbox with a custom subject/body | api | done ✓ | POST /submissions {template_id, send_email:true, submitters:[{role:Client,email:the agent's inbox}], message} -> submission 11928160, submitter 15434608 status sent; GET /submissions/11928160 status pending; invite mail with subject AgentDrives test request arrived in our inbox at 01:32:57 |
| Customize email content sent to signers: Custom subject and body with variables on a submission | api | done ✓ | message.subject/body in POST /submissions; received mail subject AgentDrives test request, body Please sign AD PDF Agreement v2: <link> (variables {{template.name}} and {{submitter.link}} expanded) |
| Sign a document as a submitter: Open invite link, fill Full Name, type signature, Sign and Complete | browser | done ✓ | pw on https://docuseal.com/s/BKZHVeSzGiV2FT: page shows Document has been signed!; GET /submitters/15434608 status completed, values Full Name=AgentDrives Test, Signature png URL |
| Download signed documents and audit log: Fetch signed PDF and audit log | api | done ✓ | GET /submissions/11928160/documents -> agreement url; downloaded signed.pdf (PDF 1.4, contains /ByteRange digital signature); audit_log_url -> audit.pdf (2 pages) |
| One-off signature request from HTML without a saved template: POST /submissions/html with a City text field and a signature field | api | done ✓ | POST /submissions/html -> submission 11928471 (source api, submitter 15434935 awaiting, fields City/Sig); GET /submissions/11928471 status pending, template: null (no saved template appears in GET /templates) |
| Update a submission: Rename submission and set expiry | api | done ✓ | PUT /submissions/11928471 {name, expire_at 2026-12-31 12:00 UTC} -> GET shows name AD One-off renamed, expire_at 2026-12-31T12:00:00.000Z |
| Pre-fill submitter values and re-send invitation: PUT submitter values City=Amsterdam, send_email true | api | done ✓ | PUT /submitters/15434935 -> GET status sent, sent_at 2026-10-06T01:35:27Z, values City=Amsterdam; invite mail You are invited to sign a document arrived 01:35:27 |
| List and inspect submissions: GET /submissions?limit=5 | api | done ✓ | returns both submissions with status pending/completed and pagination {count,next,prev} cursor |
| List and inspect submitters: GET /submitters and /submitters/{id} | api | done ✓ | GET /submitters lists 15434935 (sent) and 15434608 (completed, 2 values); GET /submitters/15434608 values match what was typed in the signing form |
| Decline to sign: Open invite link for submitter 15434935 and decline with a reason | browser | done ✓ | page: Form has been declined on October 6, 2026 at 1:36 AM; GET /submitters/15434935 status declined, declined_at 2026-10-06T01:36:29Z |
| Archive a submission: DELETE /submissions/11928471 | api | done ✓ | DELETE -> {id, archived_at}; GET shows archived_at set; GET /submissions?archived=false omits it; PUT {archived:false} unarchives (archived_at null) |
| Archive a template: DELETE /templates/6242100 | api | done ✓ | DELETE -> archived_at set; GET /templates/6242100 shows archived_at; GET /templates no longer lists 6242100 |
| Collect via shared public signing link: Open https://docuseal.com/d/{template slug}, enter our second inbox, fill and sign | browser | done ✓ | GET /submissions?template_id=6242098 shows new submission 11928629 source link, submitter the agent's inbox completed |
| Collect a file attachment from a signer: One-off HTML submission with a file-field; signer uploads attach.txt in the signing form | browser | done ✓ | POST /submissions/html (file-field) -> submitter 15435114; browser: CONTINUE, setInputFiles attach.txt, sign -> Document has been signed!; GET /submitters/15435114 values Upload=[.../attach.txt]; fetching that URL returns AgentDrives attachment test |
| Sign in person: Logged-in host opens submission 11928657 > SIGN IN-PERSON and signs on the same device | browser | partial ✓ | submission page shows SIGN IN-PERSON link to /s/R1wGK6n8BFiuRZ; signed in the host browser; GET /submitters/15435145 status completed; Event Log lists created via API, viewed, started, completed but no event that names in-person signing |
| pay step: Probe agent payment rails and the upgrade path, without paying | none | done ✓ | Unauthenticated API calls -> 401 {"error":"Not authenticated"}, no 402, no PAYMENT-REQUIRED / WWW-Authenticate: Payment; x402./mpp./agents.docuseal.com do not resolve; /.well-known/ucp empty (docuseal.com) or 404 (www); no x-payment-info in OpenAPI; not found in x402 Bazaar or mpp.dev/api/services; no x402/MPP/agentic commerce text in llms.txt or pricing.md. Console /plans Upgrade to Pro opens Stripe Checkout (checkout.stripe.com cs_live_..., card fields). Not completed: no card |
| cancel plan: Find how to cancel/downgrade | none | skipped | No plan started. Docs (resources/manage-subscription.md): manage via Console Plans > Manage > Stripe billing page; no billing API in OpenAPI |
| Automated reminders: Check plan for Automated reminders | none | plan_gated ✓ | www.docuseal.com/pricing.md comparison table (cloud): Automated reminders: Basic No, Pro Yes |
| SMS phone verification: Check plan for SMS phone verification | none | plan_gated ✓ | www.docuseal.com/pricing.md comparison table (cloud): Phone number 2FA: Basic No; Request signature via SMS: Basic No |
| ID card / KBA verification: Check plan for ID card / KBA verification | none | plan_gated ✓ | www.docuseal.com/pricing.md comparison table (cloud): ID card verification: Basic No ($2/verification); KBA: Basic No ($2/KBA) |
| QeS/AeS: Check plan for QeS/AeS | none | plan_gated ✓ | www.docuseal.com/pricing.md comparison table (cloud): EU Qualified Signature: Basic No ($2-$4/QeS) |
| Bulk send from spreadsheet: Check plan for Bulk send from spreadsheet | none | plan_gated ✓ | www.docuseal.com/pricing.md comparison table (cloud): Bulk send from spreadsheet: Basic No |
| Private templates: Check plan for Private templates | none | plan_gated ✓ | www.docuseal.com/pricing.md comparison table (cloud): Private templates: Basic No |
| Embedded signing/builder: Check plan for Embedded signing/builder | none | plan_gated ✓ | www.docuseal.com/pricing.md comparison table (cloud): Embedded signing: Basic No; Embedded form builder: Basic No |
| Users and roles: Check plan for Users and roles | none | plan_gated ✓ | www.docuseal.com/pricing.md comparison table (cloud): User roles: Basic No |
| Teams/tenants: Check plan for Teams/tenants | none | plan_gated ✓ | www.docuseal.com/pricing.md comparison table (cloud): Teams and Tenants: Basic No |
| SAML SSO: Check plan for SAML SSO | none | plan_gated ✓ | www.docuseal.com/pricing.md comparison table (cloud): SAML SSO: Basic No |
| Company logo: Check plan for Company logo | none | plan_gated ✓ | www.docuseal.com/pricing.md comparison table (cloud): Company logo: Basic No |
| Connected Gmail/Outlook sender: Check plan for Connected Gmail/Outlook sender | none | plan_gated ✓ | www.docuseal.com/pricing.md comparison table (cloud): Console Cloud Plans lists Connect your Gmail or Outlook email under Pro |
| Custom domain: Check plan for Custom domain | none | plan_gated ✓ | www.docuseal.com/pricing.md comparison table (cloud): Custom domain: Basic No, Pro annual plan only |
| Invite a witness to co-sign: Two-party template (Signer, Witness); enable Invite by Signer in template Preferences; Signer signs and invites an inbox as witness | browser | done ✓ | Template created via POST /templates/html; Preferences > Recipients > Invite by Signer saved in the web UI (GET /templates/6242698 shows Witness invite_by_uuid = Signer uuid); after signing, the form asked Invite Witness; GET /submissions/11928732 shows submitter 15435255 role Witness the agent's inbox status sent |
| Send a signature request: Error handling: invalid template id and invalid submitter email | api | failed ✓ | template_id 1 (not ours) -> 403 {"error":"Not authorized"}; role Nope + email not-an-email -> 422 {"error":"email is invalid in `submitters[0]`."}; GET /templates/999 -> 403 Not authorized (not 404). application/json, not problem+json; no RateLimit headers seen on any response |
| delete account: Settings > Account > Delete My Account, posted headless via the web form | api | done ✓ | POST /settings/account _method=delete (web UI form, no password asked) -> 200 Your account will be permanently deleted within 2 months ... Your email address has been released immediately. Afterwards GET api.docuseal.com/templates with our key -> 401 Not authenticated; /settings/account -> 302 /sign_in |
| Collect a payment from a signer: Payment field in signing flow | none | skipped | Payment field needs a connected Stripe account (faq/how-to-set-up-subscription-payments-using-stripe-payment-field); not driven: no Stripe account and no spending allowed |
| Webhook notifications: Configure webhook | none | plan_gated ✓ | www.docuseal.com/pricing.md comparison table (cloud): Webhooks: Basic No, Pro Yes. console.docuseal.com/webhooks still shows a Test mode webhook form (URL + 11 events form.*, submission.*, template.*); delivery not driven |
| Automate from natural-language chat via AI agent integration: Check the agent integrations | mcp | skipped | Official MCP server https://mcp.docuseal.com exposes only search and load_resource (docs). Account actions from chat run through the Claude connector / ChatGPT app inside those products (OAuth at docuseal.com/oauth/authorize); not driven in this run |
Also in E-signature.
SignWellL3Gets in on its ownDocuSeal vs SignWell
DocuSignL1Can't sign up on its ownDocuSeal vs DocuSign
PandaDocL1Can't sign up on its ownDocuSeal vs PandaDoc