{
 "slug": "docuseal",
 "name": "DocuSeal",
 "url": "https://docuseal.com",
 "domain": "docuseal.com",
 "category": "e-signature",
 "category_name": "E-signature",
 "tested_at": "2026-10-06",
 "run": "20261006T012625Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261006T012625Z",
   "date": "2026-10-06",
   "level": 4,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  }
 ],
 "level": 4,
 "level_name": "Runs on its own",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 1,
  "tries": 1,
  "self_start": true
 },
 "badges": [
  "agent-can-leave"
 ],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: key by API"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "yes",
   "text": "Work done: 100% 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": "part",
   "text": "Some docs agents can read: llms.txt and an OpenAPI",
   "have": [
    "llms_txt",
    "openapi"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: key by API",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "yes",
   "text": "Work done: 100% 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": "key_by_api",
   "label": "Key by API",
   "routes": [],
   "minutes": 5.2,
   "core": "7/7"
  }
 ],
 "minutes": 5.2,
 "next": {
  "to": 5,
  "text": "Next: pay without a person"
 },
 "stop": "pay",
 "core": "7/7",
 "scores": {
  "coverage": 94,
  "reliability": 100,
  "resilience": null,
  "setup": 100,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 100,
  "security": null,
  "standards": [
   {
    "standard": "MCP",
    "state": "behind",
    "behind": 2,
    "value": "2025-06-18"
   },
   {
    "standard": "MCP discovery",
    "state": "behind",
    "behind": null,
    "value": "legacy"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 1,
    "value": "3.1.0"
   },
   {
    "standard": "A2A",
    "state": "current",
    "behind": null,
    "value": "1.0"
   }
  ]
 },
 "reliability_method": "first-try",
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": 100,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": "59d395064c20",
  "kb_version": "2",
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "start"
 },
 "same_level_drives": 1,
 "drives": 1,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-13"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "www.docuseal.com/llms.txt, .md for every page, Accept: text/markdown honoured, OpenAPI 3.1.0 at console.docuseal.com/openapi.json"
  },
  "signup": {
   "status": "headless",
   "note": "web sign-up form submitted headless: no CAPTCHA, no phone, logged in at once"
  },
  "verify": {
   "status": "n/a",
   "note": "no email verification required; the account worked immediately"
  },
  "credentials": {
   "status": "headless",
   "note": "API key shown in the console after an emailed 6-digit code",
   "via": ""
  },
  "first_call": {
   "status": "headless",
   "note": "GET https://api.docuseal.com/templates with X-Auth-Token -> 200"
  },
  "first_action": {
   "status": "headless",
   "note": "POST /templates/html created a template with fields"
  },
  "pay": {
   "status": "blocked",
   "grade": "P2",
   "rails": [
    "Stripe Checkout (card)"
   ],
   "rail_ids": [
    "stripe-checkout"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "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"
  },
  "cancel": {
   "status": "n/a",
   "note": "Nothing to cancel: our agent used the free plan.",
   "docs_note": "no plan started; docs: Console > Plans > Manage (Stripe billing page), no billing API",
   "docs_grade": "",
   "nothing": "free_plan"
  },
  "delete": {
   "status": "headless",
   "note": "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",
   "left": "deleted",
   "account": true
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [
   {
    "id": "stripe-checkout",
    "name": "Stripe Checkout",
    "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": true,
  "sdk": true,
  "mcp": "docs",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": true
 },
 "surface_notes": {
  "api": "REST, 23 operations, X-Auth-Token",
  "openapi": "3.1.0, matched live responses",
  "mcp": "official, docs-only (2 tools), the older 18 Jun 2025 spec",
  "cli": "npm docuseal (not exercised)"
 },
 "can_do": [
  "Sign up and get an API key without a browser",
  "Create templates from HTML or a tagged PDF, edit roles and documents, clone, merge, file into folders, archive",
  "Send signature requests with custom email text and pre-filled values, and re-send invites",
  "Create one-off submissions from HTML without a saved template",
  "Rename, set expiry, archive and unarchive submissions; list submissions and submitters",
  "Download the signed PDF and the audit log",
  "In a browser: sign, decline, fill a public share link, upload an attachment, invite a witness"
 ],
 "cannot_do": [
  {
   "what": "Sign, decline or upload as the signer via API",
   "why": "signer actions exist only in the signing form (by design)"
  },
  {
   "what": "Use the production API, webhooks, reminders, SMS, bulk send, teams on the free plan",
   "why": "Pro plan; Basic API runs as the Developer Sandbox"
  },
  {
   "what": "Buy Pro without a human card",
   "why": "Stripe Checkout with card only; no agent payment rail"
  },
  {
   "what": "Delete the account through the API",
   "why": "only the web form in Settings > Account"
  },
  {
   "what": "Act on the account through MCP",
   "why": "the MCP server only searches docs"
  }
 ],
 "blockers": [],
 "tips_for_owner": [
  "Add an API route to delete the account",
  "Label Basic keys as Developer Sandbox keys",
  "Return 404 and problem+json with rate-limit headers",
  "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"
 ],
 "tips_for_agents": [
  "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"
 ],
 "selfhost": {
  "install": {
   "status": "skipped",
   "minutes": 0,
   "note": "no docker in the drive sandbox (open-source edition: docker run docuseal/docuseal)"
  }
 },
 "summary": "An agent signed up, got an API key (after an email code) and ran the full template-to-signed-PDF workflow headless through the documented REST API; all 7 core capabilities verified, with signer steps done in a browser by design. On the free plan the API runs as the Developer Sandbox; production API, webhooks and team features are Pro via Stripe Checkout with a card, and account deletion is web-only.",
 "wall": "",
 "plan_scope": "free plan (Basic; API runs as the free Developer Sandbox)",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "DocuSeal is an e-signature tool for creating documents, sending them for signature and tracking completion. An agent signed up, retrieved its own API key (after an email code), and ran the full create-send-sign-download workflow entirely through documented interfaces, with only the signer's own signing page needing a browser (expected by design). The agent stopped at upgrading the plan, because paying required a human credit card on a hosted checkout page.",
  "can_do": [
   "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",
   "In its own browser: sign, decline, fill a public signing link, upload an attachment, and add a witness"
  ],
  "cannot_do": [
   {
    "what": "Sign or act as the person signing, through the API",
    "why": "signing is only available on the signing web page, by design"
   },
   {
    "what": "Use production features like webhooks, reminders, bulk sending or team accounts",
    "why": "these require a paid plan; the free plan is a developer sandbox"
   },
   {
    "what": "Upgrade to the paid plan on its own",
    "why": "payment only works through a checkout page needing a human's credit card"
   },
   {
    "what": "Delete the account through an API call",
    "why": "account deletion is only available via the website's settings page"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "Automated reminders",
   "plan": "Pro",
   "evidence": "pricing.md: Automated reminders Basic No"
  },
  {
   "capability": "SMS phone verification",
   "plan": "Pro",
   "evidence": "pricing.md: Phone number 2FA Basic No"
  },
  {
   "capability": "ID card / KBA",
   "plan": "Pro",
   "evidence": "pricing.md: ID card verification / KBA Basic No"
  },
  {
   "capability": "QeS/AeS",
   "plan": "Pro",
   "evidence": "pricing.md: EU Qualified Signature Basic No"
  },
  {
   "capability": "Bulk send",
   "plan": "Pro",
   "evidence": "pricing.md: Bulk send from spreadsheet Basic No"
  },
  {
   "capability": "Private templates",
   "plan": "Pro",
   "evidence": "pricing.md: Private templates Basic No"
  },
  {
   "capability": "Webhooks",
   "plan": "Pro",
   "evidence": "pricing.md: Webhooks Basic No"
  },
  {
   "capability": "Embedding",
   "plan": "Pro",
   "evidence": "pricing.md: Embedded signing / form builder Basic No"
  },
  {
   "capability": "Users and roles",
   "plan": "Pro",
   "evidence": "pricing.md: User roles Basic No"
  },
  {
   "capability": "Teams/tenants",
   "plan": "Pro",
   "evidence": "pricing.md: Teams and Tenants Basic No"
  },
  {
   "capability": "SAML SSO",
   "plan": "Pro",
   "evidence": "pricing.md: SAML SSO Basic No"
  },
  {
   "capability": "Company logo",
   "plan": "Pro",
   "evidence": "pricing.md: Company logo Basic No"
  },
  {
   "capability": "Gmail/Outlook sender",
   "plan": "Pro",
   "evidence": "console Cloud Plans lists it under Pro"
  },
  {
   "capability": "Custom domain",
   "plan": "Pro annual",
   "evidence": "pricing.md: Custom domain Basic No, annual plan"
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Document creation",
   "capability": "Create a fillable template from a PDF, DOCX or HTML file",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /templates/pdf, /templates/docx, /templates/html",
    "mcp": null,
    "cli": "docuseal templates create",
    "ui": "New template (upload document)"
   },
   "check": "GET /templates/{id} returns the template with detected/tagged fields",
   "source": "https://www.docuseal.com/docs/api.md"
  },
  {
   "id": "cap-02",
   "group": "Document creation",
   "capability": "Edit template fields and signer roles in the builder",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PUT /templates/{id}, PUT /templates/{id}/documents",
    "mcp": null,
    "cli": null,
    "ui": "Template builder"
   },
   "check": "GET /templates/{id} shows updated fields/roles",
   "source": "https://www.docuseal.com/docs/api.md; https://www.docuseal.com/docs/embedded/builder/js.md"
  },
  {
   "id": "cap-03",
   "group": "Document creation",
   "capability": "Clone an existing template",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /templates/{id}/clone",
    "mcp": null,
    "cli": null,
    "ui": "Template list > Clone"
   },
   "check": "GET /templates returns a new template referencing the source",
   "source": "https://www.docuseal.com/docs/api/clone-a-template.md"
  },
  {
   "id": "cap-04",
   "group": "Document creation",
   "capability": "Merge multiple templates into one combined template",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /templates/merge",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "GET /templates/{new_id} contains documents/fields from all source templates",
   "source": "https://www.docuseal.com/docs/api/merge-templates.md"
  },
  {
   "id": "cap-05",
   "group": "Document creation",
   "capability": "Archive (remove) a template",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "DELETE /templates/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Template list > Archive"
   },
   "check": "GET /templates/{id} shows archived status / excluded from active list",
   "source": "https://www.docuseal.com/docs/api/archive-a-template.md"
  },
  {
   "id": "cap-06",
   "group": "Signature requests",
   "capability": "Send a signature request (submission) to one or more signers via email or phone",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /submissions",
    "mcp": null,
    "cli": "docuseal submissions create",
    "ui": "Template > Send"
   },
   "check": "GET /submissions/{id} shows submitters with status sent/awaiting",
   "source": "https://www.docuseal.com/docs/api/create-a-submission.md"
  },
  {
   "id": "cap-07",
   "group": "Signature requests",
   "capability": "Send a one-off signature request directly from an uploaded PDF/DOCX/HTML without a saved template",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /submissions/pdf, /submissions/docx, /submissions/html",
    "mcp": null,
    "cli": null,
    "ui": "New submission from file"
   },
   "check": "GET /submissions/{id} shows the generated submission tied to a new template",
   "source": "https://www.docuseal.com/docs/api/create-a-submission-from-pdf.md"
  },
  {
   "id": "cap-08",
   "group": "Signature requests",
   "capability": "Update a submission (rename, change expiration date, archive/unarchive)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /submissions/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Submission detail"
   },
   "check": "GET /submissions/{id} reflects new name/expiry/archived flag",
   "source": "https://www.docuseal.com/docs/api/update-a-submission.md"
  },
  {
   "id": "cap-09",
   "group": "Signature requests",
   "capability": "Archive a submission",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "DELETE /submissions/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Submission list > Archive"
   },
   "check": "GET /submissions/{id} shows archived status",
   "source": "https://www.docuseal.com/docs/api/archive-a-submission.md"
  },
  {
   "id": "cap-10",
   "group": "Signature requests",
   "capability": "Send automated reminder emails to signers who haven't completed",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Submission detail > Remind"
   },
   "check": "Submitter record shows a reminder-sent timestamp / new email event",
   "source": "https://www.docuseal.com/pricing.md"
  },
  {
   "id": "cap-11",
   "group": "Signing experience",
   "capability": "Sign a document as a submitter by filling fields and applying a signature",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Signing form (shared link / email)"
   },
   "check": "GET /submitters/{id} shows status completed with field values and signature",
   "source": "https://www.docuseal.com/sign-documents-online.md"
  },
  {
   "id": "cap-12",
   "group": "Signing experience",
   "capability": "Sign a document in person (host hands device to signer)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Submission > In-person signing"
   },
   "check": "Submission audit log records in-person signing event",
   "source": "https://www.docuseal.com/pricing.md"
  },
  {
   "id": "cap-13",
   "group": "Signing experience",
   "capability": "Collect a document via a shared public signing link",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Template > Share link"
   },
   "check": "New submitter/submission appears after a visitor completes the shared link form",
   "source": "https://www.docuseal.com/pricing.md"
  },
  {
   "id": "cap-14",
   "group": "Signing experience",
   "capability": "Invite a witness to co-sign a submission",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Add Recipients > Witness"
   },
   "check": "GET /submission shows an additional submitter with witness role",
   "source": "https://www.docuseal.com/pricing.md"
  },
  {
   "id": "cap-15",
   "group": "Signing experience",
   "capability": "Decline to sign a submission",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Signing form > Decline"
   },
   "check": "Webhook 'form.declined' fires and GET /submitters/{id} shows declined status",
   "source": "https://www.docuseal.com/docs/api/form-webhook.md"
  },
  {
   "id": "cap-16",
   "group": "Signing experience",
   "capability": "Collect a free-form attachment (uploaded file) from a signer",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Field type: attachment"
   },
   "check": "GET /submitters/{id} documents include the uploaded attachment",
   "source": "https://www.docuseal.com/pricing.md"
  },
  {
   "id": "cap-17",
   "group": "Signing experience",
   "capability": "Verify a signer's identity via SMS phone code",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Add Recipients > invite via phone"
   },
   "check": "Submission audit log records phone verification event before completion",
   "source": "https://www.docuseal.com/index.md (FAQ: SMS verification)"
  },
  {
   "id": "cap-18",
   "group": "Signing experience",
   "capability": "Verify a signer's identity via ID card / knowledge-based authentication",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Submission settings > Identity verification"
   },
   "check": "Audit log records KBA/ID verification completion before signature",
   "source": "https://www.docuseal.com/pricing.md; https://www.docuseal.com/knowledge-based-authentication.md"
  },
  {
   "id": "cap-19",
   "group": "Signing experience",
   "capability": "Apply a qualified or advanced electronic signature (EU QeS/AeS)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Signing form (EU account)"
   },
   "check": "Signed document's certificate metadata indicates QeS/AeS level",
   "source": "https://www.docuseal.com/pricing.md; https://www.docuseal.com/qualified-electronic-signature.md"
  },
  {
   "id": "cap-20",
   "group": "Documents & results",
   "capability": "Download/retrieve the signed documents and audit log for a submission",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /submissions/{id}/documents",
    "mcp": null,
    "cli": "docuseal submissions download",
    "ui": "Submission detail > Download"
   },
   "check": "Downloaded PDF includes signatures and an audit trail certificate page",
   "source": "https://www.docuseal.com/docs/api/get-submission-documents.md; https://www.docuseal.com/guides/download-signed-documents.md"
  },
  {
   "id": "cap-21",
   "group": "Documents & results",
   "capability": "List and inspect submissions and their status",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /submissions, GET /submissions/{id}",
    "mcp": null,
    "cli": "docuseal submissions list",
    "ui": "Submissions dashboard"
   },
   "check": "GET /submissions returns array with status fields matching UI list",
   "source": "https://www.docuseal.com/docs/api/list-all-submissions.md"
  },
  {
   "id": "cap-22",
   "group": "Documents & results",
   "capability": "List and inspect submitters and their field values",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /submitters, GET /submitters/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Submission detail > Submitters"
   },
   "check": "GET /submitters/{id} returns field values matching what the signer entered",
   "source": "https://www.docuseal.com/docs/api/get-a-submitter.md"
  },
  {
   "id": "cap-23",
   "group": "Documents & results",
   "capability": "Pre-fill or update a submitter's field values and re-send the invitation email",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /submitters/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Submission detail > Edit submitter"
   },
   "check": "GET /submitters/{id} shows updated values and a new sent_at email timestamp",
   "source": "https://www.docuseal.com/docs/api/update-a-submitter.md"
  },
  {
   "id": "cap-24",
   "group": "Bulk & payments",
   "capability": "Bulk-send signature requests pre-filled from a spreadsheet (XLSX/CSV)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Template > Bulk Send"
   },
   "check": "GET /submissions lists one new submission per spreadsheet row",
   "source": "https://www.docuseal.com/pricing.md"
  },
  {
   "id": "cap-25",
   "group": "Bulk & payments",
   "capability": "Collect a payment from a signer as part of the signing flow",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Field type: payment"
   },
   "check": "Submission record shows a completed payment/charge tied to the submission",
   "source": "https://www.docuseal.com/blog/accept-payments-and-request-signatures-with-ease.md; https://www.docuseal.com/pricing.md"
  },
  {
   "id": "cap-26",
   "group": "Organization & search",
   "capability": "Organize templates into folders",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /templates/{id} (folder move)",
    "mcp": null,
    "cli": null,
    "ui": "Templates > Folders"
   },
   "check": "GET /templates/{id} shows updated folder field",
   "source": "https://www.docuseal.com/docs/api/update-a-template.md; https://www.docuseal.com/pricing.md"
  },
  {
   "id": "cap-27",
   "group": "Organization & search",
   "capability": "Mark templates private so only authorized users can access them",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Template settings > Private"
   },
   "check": "A non-authorized teammate's GET /templates excludes the private template",
   "source": "https://www.docuseal.com/pricing.md"
  },
  {
   "id": "cap-28",
   "group": "Organization & search",
   "capability": "Receive real-time webhook notifications for form and submission events",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "Webhook config (console); events form.*, submission.*, template.*",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Webhooks"
   },
   "check": "Configured webhook endpoint receives a POST matching the triggering event within the retry window",
   "source": "https://www.docuseal.com/docs/api/form-webhook.md; https://www.docuseal.com/docs/api/submission-webhook.md"
  },
  {
   "id": "cap-29",
   "group": "Organization & search",
   "capability": "Embed the signing form or form builder directly inside another app",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Embedded JS/React/Vue/Angular component"
   },
   "check": "Embedded component renders the live template/submission and reports completion via its callback",
   "source": "https://www.docuseal.com/docs/embedded/form.md; https://www.docuseal.com/docs/embedded/builder/js.md"
  },
  {
   "id": "cap-30",
   "group": "Organization & search",
   "capability": "Automate DocuSeal actions from natural-language chat (create/send/track) via an AI agent integration",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": "DocuSeal MCP server (API/embedding reference, used by connected agents)",
    "cli": "docuseal CLI (agent-skill driven)",
    "ui": "Claude connector / ChatGPT app / OpenClaw / Hermes chat"
   },
   "check": "Chat command 'Send contract to X' results in a new GET /submissions entry for that recipient",
   "source": "https://www.docuseal.com/ai.md"
  },
  {
   "id": "cap-31",
   "group": "Access & teams",
   "capability": "Invite and manage teammates with roles and permissions",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Users"
   },
   "check": "GET account user list (console) shows invited teammate with assigned role",
   "source": "https://www.docuseal.com/resources/manage-users-and-roles.md; https://www.docuseal.com/pricing.md"
  },
  {
   "id": "cap-32",
   "group": "Access & teams",
   "capability": "Create separate teams/tenants under one account",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Teams"
   },
   "check": "Console shows a new tenant with its own admin and isolated templates",
   "source": "https://www.docuseal.com/pricing.md"
  },
  {
   "id": "cap-33",
   "group": "Access & teams",
   "capability": "Enable SAML SSO login for the account",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > SSO"
   },
   "check": "Login via configured SAML IdP succeeds and creates/links a user session",
   "source": "https://www.docuseal.com/pricing.md"
  },
  {
   "id": "cap-34",
   "group": "Branding & personalization",
   "capability": "Upload company logo and brand the signing form and emails",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Personalization"
   },
   "check": "A new signing-form/email shows the uploaded logo",
   "source": "https://www.docuseal.com/resources/upload-company-logo.md"
  },
  {
   "id": "cap-35",
   "group": "Branding & personalization",
   "capability": "Send signature-request emails from a connected company email address (Gmail/Outlook)",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Email"
   },
   "check": "Signature-request email headers show the connected company address as sender",
   "source": "https://www.docuseal.com/index.md (FAQ: company email)"
  },
  {
   "id": "cap-36",
   "group": "Branding & personalization",
   "capability": "Customize email content/templates sent to signers",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Template/Submission > Email message"
   },
   "check": "Signature-request email body matches the customized text configured",
   "source": "https://www.docuseal.com/pricing.md"
  },
  {
   "id": "cap-37",
   "group": "Branding & personalization",
   "capability": "Use a custom domain for the hosted signing portal",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Domain"
   },
   "check": "Signing links resolve under the configured custom domain",
   "source": "https://www.docuseal.com/pricing.md"
  }
 ],
 "attempts": [
  {
   "t": "01:06",
   "cap": "discovery",
   "capability": "robots/aipref",
   "task": "Read robots.txt on docuseal.com and www",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "robots.txt: User-agent: * / Allow: / (www adds Sitemap). No Content-Usage or Content-signal lines; no Content-Usage response header on www.docuseal.com"
  },
  {
   "t": "01:06",
   "cap": "discovery",
   "capability": "llms.txt",
   "task": "Fetch llms.txt",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://www.docuseal.com/llms.txt 200 text/plain, H1 # DocuSeal, extensive sections; https://docuseal.com/llms.txt 404",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "01:06",
   "cap": "discovery",
   "capability": "markdown docs",
   "task": "Accept: text/markdown on docs page and .md URL",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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"
  },
  {
   "t": "01:06",
   "cap": "discovery",
   "capability": "OpenAPI",
   "task": "Fetch OpenAPI spec",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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"
  },
  {
   "t": "01:06",
   "cap": "discovery",
   "capability": "MCP version",
   "task": "POST server/discover to https://mcp.docuseal.com, then initialize",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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"
  },
  {
   "t": "01:06",
   "cap": "discovery",
   "capability": "cards",
   "task": "Agent card, AI catalog, MCP server card",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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)"
  },
  {
   "t": "01:06",
   "cap": "discovery",
   "capability": "oauth metadata",
   "task": "OAuth AS / PRM metadata",
   "route": "none",
   "documented": false,
   "result": "done",
   "verified": true,
   "evidence": "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"
  },
  {
   "t": "05:11",
   "cap": "docs",
   "capability": "find docs",
   "task": "Find API docs, OpenAPI, llms.txt",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "llms.txt lists API reference (.md), OpenAPI 3.1 at console.docuseal.com/openapi.json, SDKs, CLI, MCP"
  },
  {
   "t": "05:11",
   "cap": "signup",
   "capability": "sign up",
   "task": "Sign up with inbox via the web form, headless (curl)",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "notes": "no bot check; no phone asked"
  },
  {
   "t": "05:11",
   "cap": "verify",
   "capability": "verify email",
   "task": "Wait for verification mail",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "No verification mail required: account usable immediately after sign-up; only mails received were API key access codes"
  },
  {
   "t": "05:11",
   "cap": "credentials",
   "capability": "get API key",
   "task": "Reveal API key in console.docuseal.com/api headless",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "notes": "Email OTP step is an extra gate but an agent with its own inbox passes it",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "yes"
   }
  },
  {
   "t": "05:11",
   "cap": "first_call",
   "capability": "first API call",
   "task": "GET /templates with X-Auth-Token",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET https://api.docuseal.com/templates -> 200, data[0] Sample Document id 6242063. Bad key -> 401 {\"error\":\"Not authenticated\"} application/json (not problem+json)",
   "quality": {
    "docs_match": "match",
    "error_legibility": "clear"
   }
  },
  {
   "t": "06:17",
   "cap": "first_action",
   "capability": "first real action",
   "task": "Create a template from HTML",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /templates/html -> 200 id 6242096 with fields Company (text), Sig (signature); GET /templates/6242096 returns it",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "06:17",
   "cap": "cap-01",
   "capability": "Create a fillable template from a PDF, DOCX or HTML file",
   "task": "Create templates from HTML and from a PDF with {{tag}} text tags",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "notes": "FAQ says these endpoints are Pro or free Developer Sandbox only, yet they worked with the live key on the new free account (possibly a trial; account landed on /?checkout=true). HTML custom field tags without explicit size came back with areas: []",
   "quality": {
    "verify_route": "yes",
    "docs_match": "drift",
    "idempotent": "no"
   }
  },
  {
   "t": "06:17",
   "cap": "cap-02",
   "capability": "Edit template fields and signer roles",
   "task": "Rename template, rename role, add a date field via a new document",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "06:17",
   "cap": "cap-26",
   "capability": "Organize templates into folders",
   "task": "Move template into folder AgentDrives",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "PUT /templates/6242098 folder_name=AgentDrives -> GET /templates shows folder_name AgentDrives (clone inherited it)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "06:17",
   "cap": "cap-03",
   "capability": "Clone an existing template",
   "task": "Clone template 6242098",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /templates/6242098/clone {name: AD Clone} -> id 6242100; GET /templates lists it with 2 fields, same folder",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "06:17",
   "cap": "cap-04",
   "capability": "Merge multiple templates",
   "task": "Merge 6242096 and 6242098",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /templates/merge {template_ids:[6242096,6242098]} -> id 6242101 with 3 documents and 5 fields from both; GET /templates confirms fields 5, docs 3",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:40",
   "cap": "cap-06",
   "capability": "Send a signature request",
   "task": "Send template 6242098 to our own inbox with a custom subject/body",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "notes": "signing page shows banner Developer Sandbox. Upgrade to start using in Production.",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match",
    "idempotent": "no"
   }
  },
  {
   "t": "08:40",
   "cap": "cap-36",
   "capability": "Customize email content sent to signers",
   "task": "Custom subject and body with variables on a submission",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:40",
   "cap": "cap-11",
   "capability": "Sign a document as a submitter",
   "task": "Open invite link, fill Full Name, type signature, Sign and Complete",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "notes": "no API to sign as the signer (by design); the form state resets between separate browser calls, so do the whole flow in one script. No bot check on the signing page"
  },
  {
   "t": "08:40",
   "cap": "cap-20",
   "capability": "Download signed documents and audit log",
   "task": "Fetch signed PDF and audit log",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /submissions/11928160/documents -> agreement url; downloaded signed.pdf (PDF 1.4, contains /ByteRange digital signature); audit_log_url -> audit.pdf (2 pages)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "09:13",
   "cap": "cap-07",
   "capability": "One-off signature request from HTML without a saved template",
   "task": "POST /submissions/html with a City text field and a signature field",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "09:13",
   "cap": "cap-08",
   "capability": "Update a submission",
   "task": "Rename submission and set expiry",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "09:13",
   "cap": "cap-23",
   "capability": "Pre-fill submitter values and re-send invitation",
   "task": "PUT submitter values City=Amsterdam, send_email true",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "09:13",
   "cap": "cap-21",
   "capability": "List and inspect submissions",
   "task": "GET /submissions?limit=5",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "returns both submissions with status pending/completed and pagination {count,next,prev} cursor",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "09:13",
   "cap": "cap-22",
   "capability": "List and inspect submitters",
   "task": "GET /submitters and /submitters/{id}",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /submitters lists 15434935 (sent) and 15434608 (completed, 2 values); GET /submitters/15434608 values match what was typed in the signing form",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "10:09",
   "cap": "cap-15",
   "capability": "Decline to sign",
   "task": "Open invite link for submitter 15434935 and decline with a reason",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "notes": "decline_reason came back null in the submitter object although a reason was typed; webhook not checked (webhooks not configured)",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "10:18",
   "cap": "cap-09",
   "capability": "Archive a submission",
   "task": "DELETE /submissions/11928471",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "DELETE -> {id, archived_at}; GET shows archived_at set; GET /submissions?archived=false omits it; PUT {archived:false} unarchives (archived_at null)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "10:18",
   "cap": "cap-05",
   "capability": "Archive a template",
   "task": "DELETE /templates/6242100",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "DELETE -> archived_at set; GET /templates/6242100 shows archived_at; GET /templates no longer lists 6242100",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "11:35",
   "cap": "cap-13",
   "capability": "Collect via shared public signing link",
   "task": "Open https://docuseal.com/d/{template slug}, enter our second inbox, fill and sign",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /submissions?template_id=6242098 shows new submission 11928629 source link, submitter the agent's inbox completed",
   "notes": "a first try with an inbox showed Document has been signed already (one submission per email per link)",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "13:12",
   "cap": "cap-16",
   "capability": "Collect a file attachment from a signer",
   "task": "One-off HTML submission with a file-field; signer uploads attach.txt in the signing form",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "notes": "field type and submission created via API, upload by the signer in the browser (no API to upload as the signer)",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "14:35",
   "cap": "cap-12",
   "capability": "Sign in person",
   "task": "Logged-in host opens submission 11928657 > SIGN IN-PERSON and signs on the same device",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "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",
   "notes": "the map check asks for an in-person event in the audit log; none is shown, so partial",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "15:48",
   "cap": "pay",
   "capability": "pay step",
   "task": "Probe agent payment rails and the upgrade path, without paying",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "notes": "Hosted Stripe Checkout an agent could complete with a card; no billing API"
  },
  {
   "t": "15:48",
   "cap": "cancel",
   "capability": "cancel plan",
   "task": "Find how to cancel/downgrade",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No plan started. Docs (resources/manage-subscription.md): manage via Console Plans > Manage > Stripe billing page; no billing API in OpenAPI",
   "notes": "would be web UI (Stripe portal):"
  },
  {
   "t": "15:48",
   "cap": "cap-10",
   "capability": "Automated reminders",
   "task": "Check plan for Automated reminders",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "www.docuseal.com/pricing.md comparison table (cloud): Automated reminders: Basic No, Pro Yes",
   "notes": "free Basic plan; Pro is $20/user/month via Stripe Checkout with a card"
  },
  {
   "t": "15:48",
   "cap": "cap-17",
   "capability": "SMS phone verification",
   "task": "Check plan for SMS phone verification",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "www.docuseal.com/pricing.md comparison table (cloud): Phone number 2FA: Basic No; Request signature via SMS: Basic No",
   "notes": "free Basic plan; Pro is $20/user/month via Stripe Checkout with a card"
  },
  {
   "t": "15:48",
   "cap": "cap-18",
   "capability": "ID card / KBA verification",
   "task": "Check plan for ID card / KBA verification",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "www.docuseal.com/pricing.md comparison table (cloud): ID card verification: Basic No ($2/verification); KBA: Basic No ($2/KBA)",
   "notes": "free Basic plan; Pro is $20/user/month via Stripe Checkout with a card"
  },
  {
   "t": "15:48",
   "cap": "cap-19",
   "capability": "QeS/AeS",
   "task": "Check plan for QeS/AeS",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "www.docuseal.com/pricing.md comparison table (cloud): EU Qualified Signature: Basic No ($2-$4/QeS)",
   "notes": "free Basic plan; Pro is $20/user/month via Stripe Checkout with a card"
  },
  {
   "t": "15:48",
   "cap": "cap-24",
   "capability": "Bulk send from spreadsheet",
   "task": "Check plan for Bulk send from spreadsheet",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "www.docuseal.com/pricing.md comparison table (cloud): Bulk send from spreadsheet: Basic No",
   "notes": "free Basic plan; Pro is $20/user/month via Stripe Checkout with a card"
  },
  {
   "t": "15:48",
   "cap": "cap-27",
   "capability": "Private templates",
   "task": "Check plan for Private templates",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "www.docuseal.com/pricing.md comparison table (cloud): Private templates: Basic No",
   "notes": "free Basic plan; Pro is $20/user/month via Stripe Checkout with a card"
  },
  {
   "t": "15:48",
   "cap": "cap-29",
   "capability": "Embedded signing/builder",
   "task": "Check plan for Embedded signing/builder",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "www.docuseal.com/pricing.md comparison table (cloud): Embedded signing: Basic No; Embedded form builder: Basic No",
   "notes": "free Basic plan; Pro is $20/user/month via Stripe Checkout with a card"
  },
  {
   "t": "15:48",
   "cap": "cap-31",
   "capability": "Users and roles",
   "task": "Check plan for Users and roles",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "www.docuseal.com/pricing.md comparison table (cloud): User roles: Basic No",
   "notes": "free Basic plan; Pro is $20/user/month via Stripe Checkout with a card"
  },
  {
   "t": "15:48",
   "cap": "cap-32",
   "capability": "Teams/tenants",
   "task": "Check plan for Teams/tenants",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "www.docuseal.com/pricing.md comparison table (cloud): Teams and Tenants: Basic No",
   "notes": "free Basic plan; Pro is $20/user/month via Stripe Checkout with a card"
  },
  {
   "t": "15:48",
   "cap": "cap-33",
   "capability": "SAML SSO",
   "task": "Check plan for SAML SSO",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "www.docuseal.com/pricing.md comparison table (cloud): SAML SSO: Basic No",
   "notes": "free Basic plan; Pro is $20/user/month via Stripe Checkout with a card"
  },
  {
   "t": "15:48",
   "cap": "cap-34",
   "capability": "Company logo",
   "task": "Check plan for Company logo",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "www.docuseal.com/pricing.md comparison table (cloud): Company logo: Basic No",
   "notes": "free Basic plan; Pro is $20/user/month via Stripe Checkout with a card"
  },
  {
   "t": "15:48",
   "cap": "cap-35",
   "capability": "Connected Gmail/Outlook sender",
   "task": "Check plan for Connected Gmail/Outlook sender",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "www.docuseal.com/pricing.md comparison table (cloud): Console Cloud Plans lists Connect your Gmail or Outlook email under Pro",
   "notes": "free Basic plan; Pro is $20/user/month via Stripe Checkout with a card"
  },
  {
   "t": "15:48",
   "cap": "cap-37",
   "capability": "Custom domain",
   "task": "Check plan for Custom domain",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "www.docuseal.com/pricing.md comparison table (cloud): Custom domain: Basic No, Pro annual plan only",
   "notes": "free Basic plan; Pro is $20/user/month via Stripe Checkout with a card"
  },
  {
   "t": "17:43",
   "cap": "cap-14",
   "capability": "Invite a witness to co-sign",
   "task": "Two-party template (Signer, Witness); enable Invite by Signer in template Preferences; Signer signs and invites an inbox as witness",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "notes": "the Invite by Signer preference is UI-only (not in UpdateTemplateRequest)",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "17:57",
   "cap": "cap-06",
   "capability": "Send a signature request",
   "task": "Error handling: invalid template id and invalid submitter email",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "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",
   "notes": "deliberate bad input to check errors; 422 names the field, 403 for a missing id is vague",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "18:26",
   "cap": "delete",
   "capability": "delete account",
   "task": "Settings > Account > Delete My Account, posted headless via the web form",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "notes": "no API/CLI delete; web UI only (done headless by posting the form). Full erasure is scheduled within 2 months",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "18:26",
   "cap": "cap-25",
   "capability": "Collect a payment from a signer",
   "task": "Payment field in signing flow",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "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"
  },
  {
   "t": "18:26",
   "cap": "cap-28",
   "capability": "Webhook notifications",
   "task": "Configure webhook",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "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"
  },
  {
   "t": "18:26",
   "cap": "cap-30",
   "capability": "Automate from natural-language chat via AI agent integration",
   "task": "Check the agent integrations",
   "route": "mcp",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "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"
  }
 ],
 "stale": false,
 "icon": "/logos/docuseal.png",
 "monitored": false,
 "verdict": "Runs on its own: L4 · Runs on its own. Sign-up needed no phone and no challenge, and an emailed code got the API key working at once. From there our agent read the docs, called the API and ran the full template-to-signed-PDF workflow on its own through the REST API, with signer steps left to a browser by design. Production features, webhooks and team access sit behind Stripe Checkout, needing a card, so our agent stayed on the free plan and had nothing to cancel. Account deletion worked through a web form, no password asked, scheduled within the stated window, with no API or CLI route for it.",
 "page": "https://agentdrives.com/tools/docuseal?via=api"
}