Can an AI agent use SignWell?
As of 6 Oct 2026, an AI agent gets into SignWell 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: Cancels via support: Cancels only through a retention flow or support.
To reach L4 · Runs on its own: cancel the plan on its own.
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 agentsNot checked: its robots.txt asks crawlers to stay off the sign-up page.
- 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 SignWell.
On its own
- Create a document, add signature and date fields, and set the signing order
- Send it for signature and watch its status until it's signed
- Download the final signed PDF
2 more
- Reuse templates and get notified by webhook when things happen
- Do all of this for free using the tool's test mode
What it can't, and why
- Get its own API key without a browserThe key is only available after a 4-step setup wizard in the web dashboard
- Upgrade to a paid plan on its ownPaying only works through a credit-card form in the browser, no automated option
- Cancel or delete the account without a browserLeaving requires going through a cancellation survey and discount offer on the website
Can an AI agent sign up for SignWell on its own?
Yes, over the API, without a browser. Web sign-up form /app/sign_up/register/ posted over HTTP; honeypot fields only, no CAPTCHA; account starts on a 7-day Business trial, no card
Does SignWell have an MCP server, and can an agent connect to it?
Yes. SignWell has an official MCP server. The server runs on the agent's own machine, lists 16 tools and speaks the older 25 Nov 2025 MCP spec.
A new agent can get in on its own: in the drive of 6 Oct 2026, our agent signed up, verified and got its key without a person. Through the MCP server, 2 of our agent's 2 attempts worked.
What the drive found
APIOpenAPIMCP · officialCLI–SDKllms.txtWebhooksSandboxHow does an AI agent get a SignWell API key?
In the drive of 6 Oct 2026, our agent got its SignWell API key in a browser, without a person. API key only in Settings > API, behind a mandatory 4-step onboarding wizard; headless login session did not carry over; no API/device flow to mint a key
Can an AI agent delete its SignWell account?
Yes, in a browser, without a human. Cancel Plan flow ends in 'Cancel Plan & Permanently Delete Your Data' -> /app/goodbye; API key then 401 [redacted]. Web UI only.
Can an AI agent pay for SignWell?
Reaches the checkout: stopped at the card form.
- Stripe card form card 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, x402./mpp./agents. subdomains have no DNS, not in x402 Bazaar or mpp.dev. Upgrade is an in-app Stripe card form; not completed (no card), so whether a human (3DS) is needed is unknown. Free API tier: 25 free API docs/month, unlimited test docs.
From the drive of 6 Oct 2026.
For the team behind SignWell.
Where agents stop in SignWell today, and the fixes that get them further, highest impact first.
The fixes, highest impact first
- Let agents create API keys headlessStep-by-step guide
- Make the onboarding wizard skippable for API
- Fix send errors for documents still processing
4 more fixes
- Add a billing API or agent rail Step-by-step guide
- Allow account deletion without retention flow
- Ship a current-spec MCP over Streamable HTTP
- Name the plan in limit errors
- 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: found
- CLI: found
Not measured in this drive: Holds up, Docs match (part of an Audit).
The measures
- Work done100
- Reliability87
- Crash test–
Needs a paid plan
Not counted in the level. Our drive used no-card trial.
| Capability | Plan |
|---|---|
| Bulk-send a template via CSV | paid (map: light) |
| NOM-151 certificate | business / region |
For agents and builders.
The drive as data, every checkpoint and all 62 attempts.
How an agent connects · 4 tips
/api/tools/signwell.json/tools/signwell.mdMCP get_tool {"slug":"signwell"}
- Use REST with X-Api-Key and test_mode:true; test mails go to the sender's inbox
- Create with draft:true, wait ~20 s, then POST /documents/{id}/send; poll GET until Sent
- Template fields use placeholder_id, not recipient_id
- sw ignores SIGNWELL_API_KEY until `sw auth login --api-key` has been run
Every checkpoint, in detail · 9 checkpoints
- DocsHeadlessdevelopers.signwell.com/llms.txt, .md reference pages with embedded OpenAPI 3.0.1, markdown via Accept, api-catalog, agent-skills index, MCP server card
- Sign upHeadlessWeb sign-up form /app/sign_up/register/ posted over HTTP; honeypot fields only, no CAPTCHA; account starts on a 7-day Business trial, no card
- VerifyHeadlessConfirmation mail arrived within seconds; link fetched headless
- KeyIn a browserAPI key only in Settings > API, behind a mandatory 4-step onboarding wizard; headless login session did not carry over; no API/device flow to mint a key
- First callHeadlessGET /api/v1/me 200
- First actionHeadlessPOST /api/v1/documents (draft, test_mode) 201
- PayIn a browserNo 402/x402/MPP/L402, no /.well-known/ucp, x402./mpp./agents. subdomains have no DNS, not in x402 Bazaar or mpp.dev. Upgrade is an in-app Stripe card form; not completed (no card), so whether a human (3DS) is needed is unknown. Free API tier: 25 free API docs/month, unlimited test docs.
- CancelIn a browserWeb-only Cancel Plan flow with reason survey and a '50% off for 6 months' retention offer, then final confirmation; no billing API
- DeleteIn a browserCancel Plan flow ends in 'Cancel Plan & Permanently Delete Your Data' -> /app/goodbye; API key then 401 [redacted]. Web UI only.
The attempt log · 62 attempts
| Capability | Route | Result | Evidence |
|---|---|---|---|
| robots.txt / aipref: Read robots.txt | api | done ✓ | https://www.signwell.com/robots.txt 200 text/plain: 'Content-Signal: ai-train=yes, search=yes, ai-input=yes' (Cloudflare Content Signals syntax, parses); User-agent: * disallows /app/*, /docs/*, /sign_in/* etc. No aipref Content-Usage line or header. |
| llms.txt + markdown docs: Find llms.txt and markdown docs | api | done ✓ | https://developers.signwell.com/llms.txt 200 text/plain (51 lines, H1 'SignWell Documentation', .md links). www.signwell.com/llms.txt 404. reference/createdocument.md returns markdown with embedded OpenAPI ('openapi': '3.0.1'). Accept: text/markdown on reference/createdocument -> content-type text/markdown, vary: Accept. |
| cards & well-known: Probe agent/MCP/A2A cards | api | done ✓ | /.well-known/mcp/server-card.json 200 application/json (SEP-1649 shape; stdio @signwell/mcp v0.3.3, 'no hosted HTTP transport yet'); /.well-known/api-catalog 200 application/linkset+json; /.well-known/agent-skills/index.json 200 application/json (agentskills discovery 0.2.0, skills send-document, send-from-template, ...). 404: /.well-known/ai-catalog.json, agent-card.json, agent.json, oauth-protected-resource, oauth-authorization-server, /auth.md, /SKILL.md, /.well-known/ucp. Homepage link header advertises api-catalog, agent-skills, mcp-server-card. |
| docs: Find API docs | api | done ✓ | developers.signwell.com/llms.txt + reference/*.md with embedded OpenAPI 3.0.1; securityScheme X-Api-Key header |
| sign up: Create account with email/password | api | done ✓ | GET /app/sign_up/register/ (plain Rails form, honeypot field1 + status, no CAPTCHA); POST /app/sign_up/ with authenticity_token, user[email|name|password] -> 302 /app/; verification mail arrived in the agent's inbox within seconds |
| verify email: Open confirmation link | api | done ✓ | GET /app/users/confirmation/?confirmation_token=•••• -> redirect to /app/log_in/; later login succeeded and account usable |
| log in: Log in headless | api | partial | POST /app/log_in/ -> 302 /app/ with remember_user_token cookie, but following requests to /app/onboarding/start/ bounced back to /app/log_in/ in curl |
| log in: Log in in browser + onboarding | browser | done ✓ | pw: /app/log_in/ form -> /app/onboarding/start/; 4-step onboarding (use, org size/industry/role/source, features, signature skipped, first action skipped) |
| API key: Create API key | browser | done ✓ | Settings > API: 'Create an API Key & Get Started' -> 'Your API Key has been successfully created!'; 'Free API limited to 25 API Documents a month' |
| first API call: GET /api/v1/me | api | done ✓ | GET /api/v1/me/ 200 returns user email the agent's inbox, account id; headers x-ratelimit-limit: 120, x-ratelimit-remaining, x-ratelimit-reset (legacy X- names) |
| Retrieve account/credentials info: GET /api/v1/me | api | done ✓ | 200 with user.email=the agent's inbox, account.id f822f608-… |
| first real action: Create a draft document via API | api | done ✓ | POST /api/v1/documents/ 201 id [id] status Created; GET shows status Draft |
| Save a document as a draft: Create draft NDA-like doc with 2 signers | api | done ✓ | POST /api/v1/documents (draft:true,test_mode:true) 201; GET /documents/[id] status 'Draft' |
| Place fields: Place signature, date, initials fields by coordinates | api | done ✓ | GET fields: Signature_1 (x72,y200,p1,rcpt 1), DateField_1, Initials_1, Signature_2 with coordinates and sizes |
| Signing order: Two signers in order | api | done ✓ | GET: apply_signing_order true; recipients 1 signing_order 1, 2 signing_order 2 |
| Document language: Set language fr | api | done ✓ | GET: language 'fr' |
| Labels: Label document 'agentdrives' | api | done ✓ | GET: labels [{id:0a0528b7…, name:'Agentdrives'}] |
| Metadata: Attach metadata drive=… | api | done ✓ | GET: metadata {'drive':'20261006T034755Z'} unchanged |
| Redirect URL: Set redirect_url | api | done ✓ | GET: redirect_url https://agentdrives.com/ (browser redirect after signing not observed yet) |
| Update recipients before sending: PATCH recipients on draft to rename signer 1 | api | failed | PATCH /api/v1/documents/{id}/recipients on draft -> 409 {errors:{base:["Document in 'draft' status cannot have recipients managed. Only sent, viewed, pending, or bounced documents are eligible."]}} |
| Send a document for eSignature: Send the draft to signer 1 (our inbox) in test mode | api | done ✓ | POST /documents/[id]/send 201 (body still says status Draft); GET moments later status 'Sending' then 'Sent', recipient 1 'sent', recipient 2 'waiting' |
| Track status: Read status after send | api | done ✓ | GET /documents/{id}: status Sending -> Sent; per-recipient status sent/waiting |
| Update recipients: Rename signer 1 after send | api | done ✓ | PATCH /documents/{id}/recipients 200; GET shows recipient 1 name ['AgentDrives Signer One'] |
| Sign a document electronically: Both signers (our two inboxes) sign the sent doc via their signing_url | browser | done ✓ | Signing page /docs/<id>/ (French UI per language fr, test-mode banner 'pas juridiquement contraignant'); typed signature, date, initials; 'Accepter et Terminer'. GET /documents/{id}: recipients 1 and 2 'completed', document status 'Completed' |
| Redirect URL: Signer redirected after signing | browser | done ✓ | After 'Accepter et Terminer' browser landed on https://agentdrives.com/?document_status=completed&document_url=…&email=an inbox%40agentdrives.com |
| Track status: Follow status to Completed | api | done ✓ | GET /documents/{id}: Pending (r1 in progress/completed, r2 waiting/sent) -> Completed |
| Download completed PDF + audit trail: Download completed PDF | api | done ✓ | GET /documents/{id}/completed_pdf 200 application/pdf 96,967 bytes (original 0.7 KB, contains the signed page); ?url_only=true returns file_url https://www.signwell.com/app/signed/….pdf |
| Create template: Create template with recipient_id on field | api | failed | POST /document_templates 422 {errors:{placeholders:{with_no_fields:...}, fields:{file_1:{field_1:{placeholder_id:"This field isn't assigned to a placeholder. Please, add a 'placeholder_id' to this field."}}}}} |
| Create template: Create reusable template (1 placeholder, signature field) | api | done ✓ | POST /document_templates 201 id [id]; GET 200 name 'AgentDrives template' status Created |
| Update template: Rename template | api | done ✓ | PUT /document_templates/{id} 200; GET name 'AgentDrives template v2' |
| Document from template: Create and send doc from template | api | done ✓ | POST /document_templates/documents 201 id [id]; GET template_id [id], status Sending->Sending |
| Webhooks: Register webhook to our URL and list it | api | done ✓ | POST /hooks 201 id [id]; GET /hooks lists it |
| NOM-151 certificate: Get NOM-151 certificate for completed doc | api | plan_gated | GET /documents/{id}/nom151_certificate 422 {errors:{table:{not_available:'NOM-151 certificate not available'}}} |
| Bulk send: Bulk-send template to 2 own inboxes via CSV | api | plan_gated | GET /bulk_sends/csv_template 200 (signer_email,signer_name); POST /bulk_sends/validate_csv 200 (CSV valid); POST /bulk_sends 422 {errors:{bulk_send:['Account You have reached the limit allowed']}} |
| Signer authentication: Set static passcode on signer of template doc | api | done ✓ | PATCH /documents/{id}/authentication 200; GET recipient passcode '••••' set, passcode_delivery {enabled:false} |
| Embedded signing: Create embedded-signing doc from template | api | done ✓ | POST /document_templates/documents embedded_signing:true; GET [id]: embedded_signing true, recipient embedded_signing_url https://www.signwell.com/docs/…/ populated, send_email false; embedded_edit_url returned for drafts |
| MCP version: server/discover then initialize on stdio @signwell/mcp | mcp | done ✓ | npx @signwell/mcp (installed under run dir) stderr '[SignWell MCP] Ready v0.3.7 (16 tools, stdio transport)'. server/discover -> JSON-RPC -32601 Method not found (legacy). initialize offering 2026-07-28 -> protocolVersion '2025-11-25', serverInfo signwell 0.3.7. tools/list: 16 tools (file_store, file_validate_text_tags, document_create, document_list, document_get, document_send_draft, document_update_recipients, document_delete, document_send_reminder, document_completed_pdf, template_create, template_update, template_get, template_list, template_delete, template_create_document) |
| Track status: document_get over MCP | mcp | done ✓ | tools/call document_get -> ok:true, status 'Completed' for the signed doc |
| Official CLI: sw auth login --api-key; sw documents list --json | cli | done ✓ | @signwell/cli 1.0.0: auth login --api-key (non-interactive) ok; documents list --json success:true, 3 documents with ids/status matching the API |
| Reminder: Remind pending signer on directly-sent docs | api | failed | POST /documents/{id}/remind on docs created with draft:false (template doc and direct doc) -> 422 {errors:{document:'The document is in a status that cannot be reminded'}}; those docs stayed in status 'Sending' for 2+ minutes |
| Send a document for eSignature: Send immediately after creating a draft | api | partial ✓ | POST /documents (draft) then /send right away -> 422 {errors:{send:["The document you're trying to send isn't draft"]}} while GET shows status 'Draft'; same call 20 s later 201 and status 'Sent' |
| Reminder: Remind pending signer on a Sent doc | api | partial | POST /documents/{id}/remind on status 'Sent' doc -> 201 with document body; no reminder mail arrived in the agent's inbox within 40 s (test mode doc; the original request mail did not arrive either) |
| Attachment requests: Request an 'ID copy' upload from signer | api | partial ✓ | POST /documents with attachment_requests 201 ([id]); GET recipients[0].attachment_requests [{name:'ID copy',required:true,url:…}] |
| Conditional rules + validation: Show text field when checkbox completed; numbers-only validation | api | partial ✓ | First try 422 {errors:{conditional_rules[0]:["target_id can't be blank",...]}} (my guessed shape); with documented ConditionalRuleRequest 201; GET conditional_rules [{target_id:'cb1',action_type:'show',action_field_ids:['txt1'],conditions:[…]}], field txt1 validation 'numbers' |
| Delete document: Delete draft and stuck docs | api | done ✓ | DELETE /documents/{id} 204 x3; GET afterwards 404 |
| SMS delivery: Send via SMS | none | skipped | createdocument docs: SMS needs phone_number in E.164 and an SMS-eligible workspace |
| pay step: Probe agent payment rails and checkout | browser | done ✓ | Unauthenticated API call -> 401 'WWW-Authenticate: Basic realm=token' (no 402, no PAYMENT-REQUIRED, no Payment/L402 challenge); x402./mpp./agents.signwell.com no DNS; /openapi.json 404; /.well-known/ucp, oauth-* 404; no SignWell hits in x402 Bazaar CDP discovery or mpp.dev/api/services; llms.txt mentions no payment rails. In-app upgrade /app/upgrade?plan=api&frequency=month: 'Enter your credit card number' form loaded with js.stripe.com/v3 (Stripe Elements). Account started on a 7-day Business trial without a card; Free API: 25 free API docs/month. |
| Webhooks: Delete webhook | api | done ✓ | DELETE /hooks/{id} 204; GET /hooks -> [] |
| Delete template: Delete template | api | done ✓ | DELETE /document_templates/{id} 204; GET 404 |
| API application: Create API App in Settings > API, then GET /api_applications/{id} | browser | failed | Settings > API > Add API App -> /app/settings/new-api-app form (name, callback, colors, timezone…); filled name, clicked 'Create App': stayed on the form, API Apps list still 'Looks like you haven't added any applications yet.' |
| Template signing link: Not attempted | none | skipped | No API/CLI/MCP route in the docs (llms.txt reference list); web UI only |
| In-person signing: Not attempted | none | skipped | No API/CLI/MCP route in the docs (llms.txt reference list); web UI only |
| DocuSign import: Not attempted | none | skipped | No API/CLI/MCP route in the docs (llms.txt reference list); web UI only |
| Native integrations/Zapier: Not attempted | none | skipped | No API/CLI/MCP route in the docs (llms.txt reference list); web UI only |
| Team members: Not attempted | none | skipped | No API/CLI/MCP route in the docs (llms.txt reference list); web UI only |
| Workspaces: Not attempted | none | skipped | No API/CLI/MCP route in the docs (llms.txt reference list); web UI only |
| Branding: Not attempted | none | skipped | No API/CLI/MCP route in the docs (llms.txt reference list); web UI only |
| Reminder: Confirm reminder mail | api | done ✓ | After POST /documents/{id}/remind 201, mail 'Reminder: [TEST] Please complete Reminder test 2' from signwelldocs@signwell.com dated 04:06:31 arrived (test-mode mails land in the sender's inbox an inbox, body 'This is a TEST MODE email.') |
| cancel plan: Cancel the 7-day Business trial | browser | partial | Settings > Plans and Billing > Cancel Plan: survey 'We're sorry to see you go' (option order shuffled each time, Next disabled until a choice), then 'Special Offer: How about a 50% discount? 50% off for 6 months' -> Decline Offer. Afterwards billing page still shows 'Business Plan' + 'Cancel Plan', 'Trial: 7d left'; GET /me plan_tier 'business'. |
| Test mode: Create/send/sign docs with test_mode true | api | done ✓ | GET /documents/{id} test_mode true; signing page banner 'Ce document a été créé en mode essai et n'est pas juridiquement contraignant'; request mails subject '[TEST] …' 'This is a TEST MODE email.' routed to the sender inbox; Settings > API still '0/25 Requests used' |
| cancel plan: Cancel trial (same flow as delete) | browser | done ✓ | Settings > Plans and Billing > Cancel Plan -> survey (Next disabled until a reason) -> 'Special Offer: 50% off for 6 months' -> Decline Offer -> 'Final Confirmation: Cancel Plan & Permanently Delete Your Data' -> Confirm & Cancel -> /app/goodbye 'Your Account Has Been Cancelled' |
| delete account: Delete account and data | browser | done ✓ | Same flow, 'This will permanently delete all your data'; afterwards GET /api/v1/me and GET /api/v1/documents/{id} -> 401 {meta:{error:'[redacted]'}} |
Also in E-signature.
DocuSealL4Gets in on its ownSignWell vs DocuSeal
DocuSignL1Can't sign up on its ownSignWell vs DocuSign
PandaDocL1Can't sign up on its ownSignWell vs PandaDoc