{
 "slug": "signwell",
 "name": "SignWell",
 "url": "https://signwell.com",
 "domain": "signwell.com",
 "category": "e-signature",
 "category_name": "E-signature",
 "tested_at": "2026-10-06",
 "run": "20261006T034755Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261006T034755Z",
   "date": "2026-10-06",
   "level": 3,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  }
 ],
 "level": 3,
 "level_name": "Does the work",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 1,
  "tries": 1,
  "self_start": true
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up in a browser"
  },
  {
   "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": "part",
   "text": "Deletes; cancels only through a retention flow or support",
   "at": "cancel",
   "left": "deleted"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up in a browser",
   "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": "part",
   "text": "Deletes; cancels only through a retention flow or support",
   "at": "cancel",
   "left": "deleted",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "browser_signup",
   "label": "Sign-up in a browser",
   "routes": [],
   "minutes": 7.2,
   "core": "8/8"
  }
 ],
 "minutes": 7.2,
 "next": {
  "to": 4,
  "text": "Next: cancel the plan on its own"
 },
 "stop": null,
 "core": "8/8",
 "scores": {
  "coverage": 83,
  "reliability": 87,
  "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": 1,
    "value": "2025-11-25"
   },
   {
    "standard": "MCP discovery",
    "state": "behind",
    "behind": null,
    "value": "legacy"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 2,
    "value": "3.0.1"
   }
  ]
 },
 "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": "f3d0adeeb256",
  "kb_version": "2+overlay-9e43028a2c",
  "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": {
  "rung": "signup",
  "vendor": "First-party honeypot fields on the sign-up form (field1, status)",
  "signed": true
 },
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "robots",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "pending",
  "robots": "closed",
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "developers.signwell.com/llms.txt, .md reference pages with embedded OpenAPI 3.0.1, markdown via Accept, api-catalog, agent-skills index, MCP server card"
  },
  "signup": {
   "status": "headless",
   "note": "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"
  },
  "verify": {
   "status": "headless",
   "note": "Confirmation mail arrived within seconds; link fetched headless"
  },
  "credentials": {
   "status": "browser",
   "note": "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",
   "via": ""
  },
  "first_call": {
   "status": "headless",
   "note": "GET /api/v1/me 200"
  },
  "first_action": {
   "status": "headless",
   "note": "POST /api/v1/documents (draft, test_mode) 201"
  },
  "pay": {
   "status": "browser",
   "grade": "P2",
   "rails": [
    "Stripe Elements card form in app (/app/upgrade?plan=api)"
   ],
   "rail_ids": [
    "stripe-elements"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "no-card trial",
   "note": "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."
  },
  "cancel": {
   "status": "browser",
   "grade": "X2",
   "note": "Web-only Cancel Plan flow with reason survey and a '50% off for 6 months' retention offer, then final confirmation; no billing API"
  },
  "delete": {
   "status": "browser",
   "note": "Cancel Plan flow ends in 'Cancel Plan & Permanently Delete Your Data' -> /app/goodbye; API key then 401 [redacted]. Web UI only.",
   "left": "deleted",
   "account": true
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [
   {
    "id": "stripe-elements",
    "name": "Stripe card form",
    "kind": "checkout",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": true,
   "card_required": null,
   "free_plan": null
  },
  "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": false,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": true
 },
 "surface_notes": {
  "api": "REST, X-Api-Key, ~26 documented operations; x-ratelimit-* 120/window",
  "openapi": "3.0.1, embedded per reference page; no standalone /openapi.json",
  "mcp": "official stdio @signwell/mcp 0.3.7, 16 tools, the older 25 Nov 2025 spec",
  "cli": "@signwell/cli 1.0.0 (sw), --json output, non-interactive login with --api-key"
 },
 "can_do": [
  "Create a draft document with signature, date and initials fields placed by coordinates",
  "Set signing order, language, labels, metadata and a redirect URL, and read them back",
  "Send a document for signature and track per-recipient status to Completed",
  "Download the completed signed PDF",
  "Create, rename and delete templates, and create documents from a template",
  "Register, list and delete webhooks",
  "Set a signer passcode, update recipients after sending, send reminders",
  "Run everything in free test mode",
  "Drive the same API from the official CLI (sw) or the stdio MCP server"
 ],
 "cannot_do": [
  {
   "what": "Get an API key headless",
   "why": "Key only in Settings > API, behind a mandatory onboarding wizard; no API or device flow"
  },
  {
   "what": "Bulk send on the trial",
   "why": "POST /bulk_sends 422 'reached the limit allowed'"
  },
  {
   "what": "Pay or upgrade headless",
   "why": "Only an in-app Stripe card form; no billing API or agent rail"
  },
  {
   "what": "Cancel or delete the account headless",
   "why": "Web-only flow with survey and retention offer"
  },
  {
   "what": "Send documents created with draft:false reliably",
   "why": "They stayed in 'Sending' for 2+ minutes during the drive and could not be reminded"
  }
 ],
 "blockers": [
  "API key only via web UI after onboarding wizard"
 ],
 "tips_for_owner": [
  "Let agents create API keys headless",
  "Make the onboarding wizard skippable for API",
  "Fix send errors for documents still processing",
  "Add a billing API or agent rail",
  "Allow account deletion without retention flow",
  "Ship a current-spec MCP over Streamable HTTP",
  "Name the plan in limit errors"
 ],
 "tips_for_agents": [
  "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"
 ],
 "selfhost": null,
 "summary": "SignWell's documented REST API, official CLI and stdio MCP server let an agent do the whole core flow: draft, fields, signing order, send, track, signed PDF, templates and webhooks, free in test mode. Sign-up and email verification worked headless, but the API key is only in the web settings behind a mandatory onboarding wizard, and leaving (cancel plus delete) is a web-only flow with a retention offer. There is no agent payment rail, only an in-app Stripe card form.",
 "wall": "API key only in web settings, after onboarding",
 "plan_scope": "no-card trial",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "SignWell is an e-signature tool. The agent could sign up, verify its email, create and send documents, track signing, download the signed PDF, and use templates and webhooks entirely on its own, for free in test mode. It had to use a real browser once to get its API key, because that step is hidden behind a mandatory onboarding questionnaire with no automated shortcut.",
  "can_do": [
   "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",
   "Reuse templates and get notified by webhook when things happen",
   "Do all of this for free using the tool's test mode"
  ],
  "cannot_do": [
   {
    "what": "Get its own API key without a browser",
    "why": "The key is only available after a 4-step setup wizard in the web dashboard"
   },
   {
    "what": "Upgrade to a paid plan on its own",
    "why": "Paying only works through a credit-card form in the browser, no automated option"
   },
   {
    "what": "Cancel or delete the account without a browser",
    "why": "Leaving requires going through a cancellation survey and discount offer on the website"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "Bulk-send a template via CSV",
   "plan": "paid (map: light)",
   "evidence": "POST /api/v1/bulk_sends 422 {errors:{bulk_send:['Account You have reached the limit allowed']}}"
  },
  {
   "capability": "NOM-151 certificate",
   "plan": "business / region",
   "evidence": "GET /documents/{id}/nom151_certificate 422 'NOM-151 certificate not available'"
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "core",
   "capability": "Send a document for eSignature",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/documents",
    "mcp": "document_create / document_send_draft",
    "cli": "sw documents create",
    "ui": "New document / Send"
   },
   "check": "GET /api/v1/documents/{id} shows status Sent",
   "source": "https://www.signwell.com/, https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-02",
   "group": "core",
   "capability": "Sign a document electronically",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Signer's signing page (mobile-optimized, no account required)"
   },
   "check": "GET /api/v1/documents/{id} recipient status becomes 'signed'",
   "source": "https://www.signwell.com/"
  },
  {
   "id": "cap-03",
   "group": "core",
   "capability": "Save a document as a draft before sending",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/documents (draft:true)",
    "mcp": "document_create",
    "cli": "sw documents create",
    "ui": "Document editor"
   },
   "check": "GET /api/v1/documents/{id} shows status Created/Draft",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-04",
   "group": "core",
   "capability": "Place signature, date, initials and other fields on a document",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/documents (fields array / Text Tags)",
    "mcp": "document_create",
    "cli": "sw documents create --field",
    "ui": "Document editor drag-and-drop fields"
   },
   "check": "GET /api/v1/documents/{id} fields array lists placed field with coordinates",
   "source": "https://www.signwell.com/api/, https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-05",
   "group": "core",
   "capability": "Set a multi-signer signing order",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/documents (apply_signing_order)",
    "mcp": null,
    "cli": "sw documents create --recipient order",
    "ui": "Document editor recipient order"
   },
   "check": "GET /api/v1/documents/{id} shows apply_signing_order:true and recipients with order field",
   "source": "https://www.signwell.com/pricing/, https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-06",
   "group": "core",
   "capability": "Track document status (sent, viewed, signed, declined, completed)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/v1/documents/{id}",
    "mcp": "document_get",
    "cli": "sw documents list / documents get",
    "ui": "Dashboard document list"
   },
   "check": "GET /api/v1/documents/{id} returns current status field",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json, https://github.com/Bidsketch/signwell-cli"
  },
  {
   "id": "cap-07",
   "group": "core",
   "capability": "Download the completed, tamper-proof signed PDF and audit trail",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/v1/documents/{id}/completed_pdf",
    "mcp": "document_completed_pdf",
    "cli": "sw documents download",
    "ui": "Document detail page"
   },
   "check": "GET /api/v1/documents/{id}/completed_pdf returns PDF/file URL with audit trail pages attached",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json, https://www.signwell.com/"
  },
  {
   "id": "cap-08",
   "group": "core",
   "capability": "Embed signing, sending, or template editing directly in a third-party app (white-label API)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/documents (embedded_signing, embedded)",
    "mcp": null,
    "cli": null,
    "ui": "Embedded iframe/modal in customer's own product"
   },
   "check": "GET /api/v1/documents/{id} shows embedded_signing:true and embedded_preview_url populated",
   "source": "https://www.signwell.com/api/"
  },
  {
   "id": "cap-09",
   "group": "secondary",
   "capability": "Create and reuse a document template",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/document_templates",
    "mcp": "template tools (src/tools/templates.ts)",
    "cli": "sw templates create",
    "ui": "Templates page"
   },
   "check": "GET /api/v1/document_templates/{id} returns the created template",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-10",
   "group": "secondary",
   "capability": "Create a document from a template",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/document_templates/documents",
    "mcp": "document_create (from template)",
    "cli": "sw templates use",
    "ui": "Templates page > Use template"
   },
   "check": "GET /api/v1/documents/{id} references the source template",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-11",
   "group": "secondary",
   "capability": "Update or delete an existing template",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /api/v1/document_templates/{id}, DELETE /api/v1/document_templates/{id}",
    "mcp": null,
    "cli": "sw templates update / delete",
    "ui": "Templates page"
   },
   "check": "GET /api/v1/document_templates/{id} reflects edit, or returns 404 after delete",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-12",
   "group": "secondary",
   "capability": "Generate a shareable template signing link (no email send required)",
   "weight": "secondary",
   "plan": "light",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Templates > Template Links"
   },
   "check": "Visiting the generated link opens a fresh signable document instance",
   "source": "https://www.signwell.com/pricing/"
  },
  {
   "id": "cap-13",
   "group": "secondary",
   "capability": "Bulk-send a template to many recipients via CSV",
   "weight": "secondary",
   "plan": "light",
   "surfaces": {
    "api": "POST /api/v1/bulk_sends, GET /api/v1/bulk_sends/csv_template, POST /api/v1/bulk_sends/validate_csv",
    "mcp": null,
    "cli": "sw bulk-send create / csv-template / validate",
    "ui": "Bulk Send"
   },
   "check": "GET /api/v1/bulk_sends/{id}/documents lists one created document per CSV row",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json, https://github.com/Bidsketch/signwell-cli"
  },
  {
   "id": "cap-14",
   "group": "secondary",
   "capability": "Update document recipients before sending",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PATCH /api/v1/documents/{id}/recipients",
    "mcp": null,
    "cli": "sw documents update",
    "ui": "Document editor recipients"
   },
   "check": "GET /api/v1/documents/{id} shows updated recipient list",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-15",
   "group": "secondary",
   "capability": "Send a signing reminder to a pending recipient",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/documents/{id}/remind",
    "mcp": null,
    "cli": "sw documents remind",
    "ui": "Document detail > Remind"
   },
   "check": "API call returns 200 and recipient receives a new reminder email (per docs)",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json, https://github.com/Bidsketch/signwell-cli"
  },
  {
   "id": "cap-16",
   "group": "secondary",
   "capability": "Delete/cancel a document",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "DELETE /api/v1/documents/{id}",
    "mcp": null,
    "cli": "sw documents delete",
    "ui": "Document detail > Delete"
   },
   "check": "GET /api/v1/documents/{id} returns 404 after deletion",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-17",
   "group": "secondary",
   "capability": "Set up authentication requirements (static passcode, one-time passcode) for a signer",
   "weight": "secondary",
   "plan": "business",
   "surfaces": {
    "api": "PATCH /api/v1/documents/{id}/authentication",
    "mcp": null,
    "cli": null,
    "ui": "Document editor > Recipient authentication"
   },
   "check": "GET /api/v1/documents/{id} shows authentication settings on the recipient",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json, https://www.signwell.com/pricing/"
  },
  {
   "id": "cap-18",
   "group": "secondary",
   "capability": "Collect in-person signatures on a shared device",
   "weight": "secondary",
   "plan": "business",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Document send options > In-Person Signing"
   },
   "check": "Document created with in-person mode shows an in-person signing session in the UI",
   "source": "https://www.signwell.com/pricing/"
  },
  {
   "id": "cap-19",
   "group": "secondary",
   "capability": "Request file attachments from signers",
   "weight": "secondary",
   "plan": "light",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Document editor > Request Attachments field"
   },
   "check": "Completed document includes the uploaded attachment file",
   "source": "https://www.signwell.com/pricing/"
  },
  {
   "id": "cap-20",
   "group": "secondary",
   "capability": "Apply conditional field rules and data validation to form fields",
   "weight": "secondary",
   "plan": "light",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Document editor > Advanced fields"
   },
   "check": "Signing page shows/hides fields per configured condition when tested",
   "source": "https://www.signwell.com/pricing/"
  },
  {
   "id": "cap-21",
   "group": "secondary",
   "capability": "Redirect signer to a custom URL on completion",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/documents (redirect_url)",
    "mcp": null,
    "cli": "sw documents create --redirect-url",
    "ui": "Document editor settings"
   },
   "check": "GET /api/v1/documents/{id} shows configured redirect_url; browser redirects there after signing",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json, https://www.signwell.com/pricing/"
  },
  {
   "id": "cap-22",
   "group": "secondary",
   "capability": "Register and manage webhooks for document lifecycle events",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /api/v1/hooks, DELETE /api/v1/hooks/{id}",
    "mcp": null,
    "cli": "sw webhooks create / list / delete / listen",
    "ui": "Settings > Webhooks"
   },
   "check": "GET /api/v1/hooks lists the created webhook; endpoint receives event payload on document_signed",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json, https://github.com/Bidsketch/signwell-cli"
  },
  {
   "id": "cap-23",
   "group": "secondary",
   "capability": "Run documents in test mode (no real emails, no charges)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/documents (test_mode:true)",
    "mcp": null,
    "cli": "sw auth login --test-mode / --test-mode flag",
    "ui": "Account test mode toggle"
   },
   "check": "GET /api/v1/documents/{id} shows test_mode:true and no delivery email sent",
   "source": "https://developers.signwell.com/reference/getting-started-with-your-api-1"
  },
  {
   "id": "cap-24",
   "group": "secondary",
   "capability": "Set document language for the signing experience",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/documents (language)",
    "mcp": null,
    "cli": null,
    "ui": "Document editor > language"
   },
   "check": "GET /api/v1/documents/{id} shows the configured language code",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json, https://www.signwell.com/pricing/"
  },
  {
   "id": "cap-25",
   "group": "secondary",
   "capability": "Organize documents with labels",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/documents (labels)",
    "mcp": null,
    "cli": null,
    "ui": "Document editor / dashboard filters"
   },
   "check": "GET /api/v1/documents/{id} returns labels array with assigned label names",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-26",
   "group": "secondary",
   "capability": "Attach custom metadata key/value pairs to a document",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/v1/documents (metadata)",
    "mcp": null,
    "cli": "sw documents create --metadata",
    "ui": null
   },
   "check": "GET /api/v1/documents/{id} returns the metadata object unchanged",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-27",
   "group": "secondary",
   "capability": "Retrieve account/credentials info for the authenticated API key",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/v1/me",
    "mcp": null,
    "cli": "sw me",
    "ui": "Account settings"
   },
   "check": "GET /api/v1/me returns account id and email",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-28",
   "group": "secondary",
   "capability": "Import existing DocuSign documents/templates into SignWell",
   "weight": "secondary",
   "plan": "light",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Import tool"
   },
   "check": "Imported DocuSign template appears in SignWell templates list",
   "source": "https://www.signwell.com/pricing/"
  },
  {
   "id": "cap-29",
   "group": "secondary",
   "capability": "Connect SignWell to other apps via native integrations or Zapier",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Integrations marketplace (Close, QuickBooks, Xero, 9,000+ via Zapier)"
   },
   "check": "Connected integration (e.g. QuickBooks) shows an authorized connection in Settings > Integrations",
   "source": "https://www.signwell.com/"
  },
  {
   "id": "cap-30",
   "group": "secondary",
   "capability": "Generate a region-specific compliance certificate (e.g. Mexico NOM-151)",
   "weight": "secondary",
   "plan": "business",
   "surfaces": {
    "api": "GET /api/v1/documents/{id}/nom151_certificate",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "API call returns the NOM-151 certificate file for the completed document",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-31",
   "group": "peripheral",
   "capability": "Add teammates and assign senders/roles across the account",
   "weight": "peripheral",
   "plan": "light",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Team management"
   },
   "check": "Settings > Team shows the invited teammate with their assigned role",
   "source": "https://www.signwell.com/pricing/"
  },
  {
   "id": "cap-32",
   "group": "peripheral",
   "capability": "Manage multiple workspaces under one account",
   "weight": "peripheral",
   "plan": "business",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "sw profile add / use / list",
    "ui": "Workspace switcher"
   },
   "check": "Workspace switcher lists multiple workspaces and switching changes visible documents",
   "source": "https://www.signwell.com/pricing/"
  },
  {
   "id": "cap-33",
   "group": "peripheral",
   "capability": "Customize branding: logo, 'from' email, reply-to, and email signature",
   "weight": "peripheral",
   "plan": "light",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > API Application / Branding"
   },
   "check": "GET /api/v1/api_applications/{id} reflects configured branding fields",
   "source": "https://www.signwell.com/pricing/, https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-34",
   "group": "peripheral",
   "capability": "Send signing notifications via SMS",
   "weight": "peripheral",
   "plan": "light",
   "surfaces": {
    "api": "POST /api/v1/documents (recipient delivery_method sms)",
    "mcp": null,
    "cli": null,
    "ui": "Document editor recipient delivery method"
   },
   "check": "GET /api/v1/documents/{id} shows recipient delivery_method:sms with phone_number set",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json, https://www.signwell.com/pricing/"
  },
  {
   "id": "cap-35",
   "group": "peripheral",
   "capability": "Generate an API application and configure its OAuth-style custom-requester settings",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "GET/DELETE /api/v1/api_applications/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Settings > API"
   },
   "check": "GET /api/v1/api_applications/{id} returns the application's configuration",
   "source": "https://developers.signwell.com/openapi/resources-and-endpoints.json"
  },
  {
   "id": "cap-36",
   "group": "peripheral",
   "capability": "Drive the account from a terminal via the official CLI",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "sw (signwell-cli)",
    "ui": null
   },
   "check": "`sw documents list --json` returns the account's documents as JSON",
   "source": "https://github.com/Bidsketch/signwell-cli"
  }
 ],
 "attempts": [
  {
   "t": "01:26",
   "cap": "discovery",
   "capability": "robots.txt / aipref",
   "task": "Read robots.txt",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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.",
   "notes": ""
  },
  {
   "t": "01:26",
   "cap": "discovery",
   "capability": "llms.txt + markdown docs",
   "task": "Find llms.txt and markdown docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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.",
   "notes": ""
  },
  {
   "t": "01:26",
   "cap": "discovery",
   "capability": "cards & well-known",
   "task": "Probe agent/MCP/A2A cards",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "/.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.",
   "notes": ""
  },
  {
   "t": "07:13",
   "cap": "docs",
   "capability": "docs",
   "task": "Find API docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "developers.signwell.com/llms.txt + reference/*.md with embedded OpenAPI 3.0.1; securityScheme X-Api-Key header",
   "notes": ""
  },
  {
   "t": "07:13",
   "cap": "signup",
   "capability": "sign up",
   "task": "Create account with email/password",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "notes": "Normal web form posted over HTTP without a browser; no bot check met. Free account starts as 'Trial: 7d left'."
  },
  {
   "t": "07:13",
   "cap": "verify",
   "capability": "verify email",
   "task": "Open confirmation link",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /app/users/confirmation/?confirmation_token=•••• -> redirect to /app/log_in/; later login succeeded and account usable",
   "notes": ""
  },
  {
   "t": "07:13",
   "cap": "login",
   "capability": "log in",
   "task": "Log in headless",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": false,
   "evidence": "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",
   "notes": "The session from the headless login did not carry to the next page; not investigated further, continued in the browser."
  },
  {
   "t": "07:13",
   "cap": "login",
   "capability": "log in",
   "task": "Log in in browser + onboarding",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "pw: /app/log_in/ form -> /app/onboarding/start/; 4-step onboarding (use, org size/industry/role/source, features, signature skipped, first action skipped)",
   "notes": "Mandatory onboarding wizard before Settings > API is reachable (/app/settings/api/ 302 -> /app/onboarding/start/)."
  },
  {
   "t": "07:13",
   "cap": "credentials",
   "capability": "API key",
   "task": "Create API key",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Settings > API: 'Create an API Key & Get Started' -> 'Your API Key has been successfully created!'; 'Free API limited to 25 API Documents a month'",
   "notes": "No API/CLI route to mint a key; web UI only (docs/MCP page: 'Log in to SignWell, go to Settings > API')."
  },
  {
   "t": "07:13",
   "cap": "first_call",
   "capability": "first API call",
   "task": "GET /api/v1/me",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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)",
   "notes": ""
  },
  {
   "t": "07:13",
   "cap": "cap-27",
   "capability": "Retrieve account/credentials info",
   "task": "GET /api/v1/me",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "200 with user.email=the agent's inbox, account.id f822f608-…",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:15",
   "cap": "first_action",
   "capability": "first real action",
   "task": "Create a draft document via API",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /api/v1/documents/ 201 id [id] status Created; GET shows status Draft",
   "notes": "test_mode true"
  },
  {
   "t": "08:15",
   "cap": "cap-03",
   "capability": "Save a document as a draft",
   "task": "Create draft NDA-like doc with 2 signers",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /api/v1/documents (draft:true,test_mode:true) 201; GET /documents/[id] status 'Draft'",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:15",
   "cap": "cap-04",
   "capability": "Place fields",
   "task": "Place signature, date, initials fields by coordinates",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET fields: Signature_1 (x72,y200,p1,rcpt 1), DateField_1, Initials_1, Signature_2 with coordinates and sizes",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:15",
   "cap": "cap-05",
   "capability": "Signing order",
   "task": "Two signers in order",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET: apply_signing_order true; recipients 1 signing_order 1, 2 signing_order 2",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:15",
   "cap": "cap-24",
   "capability": "Document language",
   "task": "Set language fr",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET: language 'fr'",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:15",
   "cap": "cap-25",
   "capability": "Labels",
   "task": "Label document 'agentdrives'",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET: labels [{id:0a0528b7…, name:'Agentdrives'}]",
   "notes": "Label name capitalised by the server ('agentdrives' -> 'Agentdrives'), not mentioned in docs.",
   "quality": {
    "verify_route": "yes",
    "docs_match": "drift"
   }
  },
  {
   "t": "08:15",
   "cap": "cap-26",
   "capability": "Metadata",
   "task": "Attach metadata drive=…",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET: metadata {'drive':'20261006T034755Z'} unchanged",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:15",
   "cap": "cap-21",
   "capability": "Redirect URL",
   "task": "Set redirect_url",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET: redirect_url https://agentdrives.com/ (browser redirect after signing not observed yet)",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:21",
   "cap": "cap-14",
   "capability": "Update recipients before sending",
   "task": "PATCH recipients on draft to rename signer 1",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "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.\"]}}",
   "notes": "Endpoint works only after sending; will retry after send.",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "yes"
   }
  },
  {
   "t": "08:45",
   "cap": "cap-01",
   "capability": "Send a document for eSignature",
   "task": "Send the draft to signer 1 (our inbox) in test mode",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /documents/[id]/send 201 (body still says status Draft); GET moments later status 'Sending' then 'Sent', recipient 1 'sent', recipient 2 'waiting'",
   "notes": "Send is async: the send response shows the old status.",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:45",
   "cap": "cap-06",
   "capability": "Track status",
   "task": "Read status after send",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /documents/{id}: status Sending -> Sent; per-recipient status sent/waiting",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:45",
   "cap": "cap-14",
   "capability": "Update recipients",
   "task": "Rename signer 1 after send",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "PATCH /documents/{id}/recipients 200; GET shows recipient 1 name ['AgentDrives Signer One']",
   "notes": "Works on sent documents only, not on drafts (409); capability says 'before sending'.",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "14:47",
   "cap": "cap-02",
   "capability": "Sign a document electronically",
   "task": "Both signers (our two inboxes) sign the sent doc via their signing_url",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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'",
   "notes": "No API to sign as a recipient (by design); signing_url comes back in GET recipients so an agent can open it. Signing done in browser.",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "14:47",
   "cap": "cap-21",
   "capability": "Redirect URL",
   "task": "Signer redirected after signing",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "After 'Accepter et Terminer' browser landed on https://agentdrives.com/?document_status=completed&document_url=…&email=an inbox%40agentdrives.com",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "14:47",
   "cap": "cap-06",
   "capability": "Track status",
   "task": "Follow status to Completed",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /documents/{id}: Pending (r1 in progress/completed, r2 waiting/sent) -> Completed",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "14:47",
   "cap": "cap-07",
   "capability": "Download completed PDF + audit trail",
   "task": "Download completed PDF",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "notes": "audit_page=false returned byte-identical file (True); could not parse the PDF here to confirm the audit page (no PDF tool in sandbox).",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "15:02",
   "cap": "cap-09",
   "capability": "Create template",
   "task": "Create template with recipient_id on field",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "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.\"}}}}}",
   "notes": "My mistake: template fields use placeholder_id; error said exactly what to fix.",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "yes"
   }
  },
  {
   "t": "15:12",
   "cap": "cap-09",
   "capability": "Create template",
   "task": "Create reusable template (1 placeholder, signature field)",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /document_templates 201 id [id]; GET 200 name 'AgentDrives template' status Created",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "15:12",
   "cap": "cap-11",
   "capability": "Update template",
   "task": "Rename template",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "PUT /document_templates/{id} 200; GET name 'AgentDrives template v2'",
   "notes": "delete tested at cleanup",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "15:27",
   "cap": "cap-10",
   "capability": "Document from template",
   "task": "Create and send doc from template",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /document_templates/documents 201 id [id]; GET template_id [id], status Sending->Sending",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "15:42",
   "cap": "cap-22",
   "capability": "Webhooks",
   "task": "Register webhook to our URL and list it",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /hooks 201 id [id]; GET /hooks lists it",
   "notes": "Delivery of an event payload not observed (callback URL on our site has no receiver).",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "15:42",
   "cap": "cap-30",
   "capability": "NOM-151 certificate",
   "task": "Get NOM-151 certificate for completed doc",
   "route": "api",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "GET /documents/{id}/nom151_certificate 422 {errors:{table:{not_available:'NOM-151 certificate not available'}}}",
   "notes": "Map says business plan; error does not say why (plan, region or setting).",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "15:58",
   "cap": "cap-13",
   "capability": "Bulk send",
   "task": "Bulk-send template to 2 own inboxes via CSV",
   "route": "api",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "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']}}",
   "notes": "Free/trial account limit; map lists plan 'light'. Error does not name the plan.",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "no"
   }
  },
  {
   "t": "16:12",
   "cap": "cap-17",
   "capability": "Signer authentication",
   "task": "Set static passcode on signer of template doc",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "PATCH /documents/{id}/authentication 200; GET recipient passcode '••••' set, passcode_delivery {enabled:false}",
   "notes": "Worked on the 7-day trial account; map lists business plan.",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "16:12",
   "cap": "cap-08",
   "capability": "Embedded signing",
   "task": "Create embedded-signing doc from template",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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",
   "notes": "Embedded doc stayed in status 'Sending' for minutes (no email is sent for embedded signing); embedded_preview_url null on it (populated on the normal sent doc).",
   "quality": {
    "verify_route": "yes",
    "docs_match": "drift"
   }
  },
  {
   "t": "17:35",
   "cap": "discovery",
   "capability": "MCP version",
   "task": "server/discover then initialize on stdio @signwell/mcp",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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)",
   "notes": "Server card at /.well-known/mcp/server-card.json says version 0.3.3 (npm package is 0.3.7). Auth via SIGNWELL_API_KEY env."
  },
  {
   "t": "17:35",
   "cap": "cap-06",
   "capability": "Track status",
   "task": "document_get over MCP",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "tools/call document_get -> ok:true, status 'Completed' for the signed doc",
   "notes": ""
  },
  {
   "t": "17:35",
   "cap": "cap-36",
   "capability": "Official CLI",
   "task": "sw auth login --api-key; sw documents list --json",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "@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",
   "notes": "SIGNWELL_API_KEY env is ignored until a profile exists (warning SIGNWELL_API_KEY_IGNORED); `sw --version` prints 'unknown'.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "recoverable": "yes"
   }
  },
  {
   "t": "18:36",
   "cap": "cap-15",
   "capability": "Reminder",
   "task": "Remind pending signer on directly-sent docs",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "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",
   "notes": "Docs created and sent in one call (draft:false) never left 'Sending' during the drive; the draft->send path reached 'Sent' within seconds.",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "yes"
   }
  },
  {
   "t": "18:36",
   "cap": "cap-01",
   "capability": "Send a document for eSignature",
   "task": "Send immediately after creating a draft",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "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'",
   "notes": "Async processing after create; the error text is misleading (should say 'still processing, retry').",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "yes",
    "docs_match": "drift"
   }
  },
  {
   "t": "18:50",
   "cap": "cap-15",
   "capability": "Reminder",
   "task": "Remind pending signer on a Sent doc",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": false,
   "evidence": "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)",
   "notes": "No documented way to read reminder history back; test mode seems to suppress recipient request emails.",
   "quality": {
    "verify_route": "no"
   }
  },
  {
   "t": "19:13",
   "cap": "cap-19",
   "capability": "Attachment requests",
   "task": "Request an 'ID copy' upload from signer",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "POST /documents with attachment_requests 201 ([id]); GET recipients[0].attachment_requests [{name:'ID copy',required:true,url:…}]",
   "notes": "Request configured and read back; an actual upload by a signer was not tested.",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "19:13",
   "cap": "cap-20",
   "capability": "Conditional rules + validation",
   "task": "Show text field when checkbox completed; numbers-only validation",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "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'",
   "notes": "Rules stored and read back; show/hide on the signing page not exercised.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "recoverable": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "19:21",
   "cap": "cap-16",
   "capability": "Delete document",
   "task": "Delete draft and stuck docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "DELETE /documents/{id} 204 x3; GET afterwards 404",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "19:21",
   "cap": "cap-34",
   "capability": "SMS delivery",
   "task": "Send via SMS",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "createdocument docs: SMS needs phone_number in E.164 and an SMS-eligible workspace",
   "notes": "Our agent has no phone number; not attempted."
  },
  {
   "t": "20:11",
   "cap": "pay",
   "capability": "pay step",
   "task": "Probe agent payment rails and checkout",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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.",
   "notes": "No card entered. No billing API."
  },
  {
   "t": "20:17",
   "cap": "cap-22",
   "capability": "Webhooks",
   "task": "Delete webhook",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "DELETE /hooks/{id} 204; GET /hooks -> []",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "20:17",
   "cap": "cap-11",
   "capability": "Delete template",
   "task": "Delete template",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "DELETE /document_templates/{id} 204; GET 404",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "21:52",
   "cap": "cap-35",
   "capability": "API application",
   "task": "Create API App in Settings > API, then GET /api_applications/{id}",
   "route": "browser",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "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.'",
   "notes": "No API to create an app; the form likely wanted another field (no visible error captured). Not pursued further (peripheral).",
   "quality": {
    "error_legibility": "silent"
   }
  },
  {
   "t": "21:52",
   "cap": "cap-12",
   "capability": "Template signing link",
   "task": "Not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No API/CLI/MCP route in the docs (llms.txt reference list); web UI only",
   "notes": "Skipped for time; secondary/peripheral, UI-only."
  },
  {
   "t": "21:52",
   "cap": "cap-18",
   "capability": "In-person signing",
   "task": "Not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No API/CLI/MCP route in the docs (llms.txt reference list); web UI only",
   "notes": "Skipped for time; secondary/peripheral, UI-only."
  },
  {
   "t": "21:52",
   "cap": "cap-28",
   "capability": "DocuSign import",
   "task": "Not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No API/CLI/MCP route in the docs (llms.txt reference list); web UI only",
   "notes": "Skipped for time; secondary/peripheral, UI-only."
  },
  {
   "t": "21:52",
   "cap": "cap-29",
   "capability": "Native integrations/Zapier",
   "task": "Not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No API/CLI/MCP route in the docs (llms.txt reference list); web UI only",
   "notes": "Skipped for time; secondary/peripheral, UI-only."
  },
  {
   "t": "21:52",
   "cap": "cap-31",
   "capability": "Team members",
   "task": "Not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No API/CLI/MCP route in the docs (llms.txt reference list); web UI only",
   "notes": "Skipped for time; secondary/peripheral, UI-only."
  },
  {
   "t": "21:52",
   "cap": "cap-32",
   "capability": "Workspaces",
   "task": "Not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No API/CLI/MCP route in the docs (llms.txt reference list); web UI only",
   "notes": "Skipped for time; secondary/peripheral, UI-only."
  },
  {
   "t": "21:52",
   "cap": "cap-33",
   "capability": "Branding",
   "task": "Not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No API/CLI/MCP route in the docs (llms.txt reference list); web UI only",
   "notes": "Skipped for time; secondary/peripheral, UI-only."
  },
  {
   "t": "23:59",
   "cap": "cap-15",
   "capability": "Reminder",
   "task": "Confirm reminder mail",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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.')",
   "notes": "In test mode SignWell routes recipient mails to the sender, which is why an inbox did not see them.",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "23:59",
   "cap": "cancel",
   "capability": "cancel plan",
   "task": "Cancel the 7-day Business trial",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": false,
   "evidence": "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'.",
   "notes": "No billing API. Retention flow (survey + discount). No confirmation that the trial was cancelled; no card on file, so nothing will be charged either way.",
   "quality": {
    "verify_route": "no",
    "error_legibility": "silent"
   }
  },
  {
   "t": "25:01",
   "cap": "cap-23",
   "capability": "Test mode",
   "task": "Create/send/sign docs with test_mode true",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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'",
   "notes": "",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "25:59",
   "cap": "cancel",
   "capability": "cancel plan",
   "task": "Cancel trial (same flow as delete)",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "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'",
   "notes": "Cancel and account deletion are one web-only flow with a retention survey and discount offer; no billing API. Help article 242 documents it.",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "25:59",
   "cap": "delete",
   "capability": "delete account",
   "task": "Delete account and data",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Same flow, 'This will permanently delete all your data'; afterwards GET /api/v1/me and GET /api/v1/documents/{id} -> 401 {meta:{error:'[redacted]'}}",
   "notes": "Web UI only (help.signwell.com/article/242-how-to-delete-your-account). Template, webhook and 4 documents were deleted by API before.",
   "quality": {
    "verify_route": "yes"
   }
  }
 ],
 "stale": false,
 "icon": "/logos/signwell.png",
 "monitored": false,
 "verdict": "Gets in on its own: L3 · Does the work. Signup and email verification ran headless with no challenge shown. It stopped at credentials: the API key lives in Settings > API behind a mandatory onboarding wizard, and the headless session did not carry over, so no key could be minted without a browser. Once a key was in hand, the API drafted a document in test mode, with the documented reference covering fields, signing order, send, tracking and templates. Paying stayed untested since no card was entered, and leaving meant a web-only Cancel Plan flow with a retention offer before the account and key were deleted.",
 "page": "https://agentdrives.com/tools/signwell?via=api"
}