{
 "slug": "jotform",
 "name": "Jotform",
 "url": "https://jotform.com",
 "domain": "jotform.com",
 "category": "forms",
 "category_name": "Forms",
 "tested_at": "2026-10-02",
 "run": "20261002T204905Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261002T204905Z",
   "date": "2026-10-02",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   },
   "drives": 2
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 2,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "part",
   "text": "Some docs agents can read: an MCP server",
   "have": [
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": "0/10",
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 55,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 55,
  "security": null,
  "standards": []
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": null,
  "kb_version": null,
  "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": 2,
 "drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "reCAPTCHA v2 (checkbox)",
  "visible": true,
  "type": "challenge",
  "human": null,
  "how": "Check the Web Bot Auth signature on the sign-up request and skip reCAPTCHA (or lower the score threshold) for signed agents; or offer a documented sign-up API with email verification.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "captcha"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "captcha",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "api.jotform.com/docs (single JS page with curl/SDK samples for ~45 routes), official SDKs in 9 languages, an outdated swagger repo (2016), developers/mcp page. No llms.txt (404), no current OpenAPI."
  },
  "signup": {
   "status": "human",
   "note": "the required field is not documented, and after 4 calls the endpoint returned 429 for more than 5 minutes. Web and MCP-OAuth sign-up both show a visible reCAPTCHA v2 (REQUIRE_CAPTCHA)."
  },
  "verify": {
   "status": "",
   "note": "Verification mail arrived in 34 s, but its links point to api.jotform.com where /verifyemail/... returns 404 and /login/?unusual-signup=1 returns 404 JSON; the same path on www redirects to login, then 429. The account worked unverified for login.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "Documented POST /user/login returns 200 but no appKey (docs promise one); its session cookie is rejected by the API (401). Web UI My Account > API could not load: its own XHRs (/API/user/keys) returned 429 on 3 tries over 6 min. MCP OAuth: DCR works, but the consent step was not completed (browser run hung).",
   "via": "",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "No API key or MCP token obtained. Only unauthenticated documented calls (GET /system/plan/{name}) succeeded.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "Nothing created in the account: no credentials.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P2",
   "rails": [],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "No x402/MPP/L402/UCP, no 402 on the API or on the x402./mpp./agents. subdomains, not listed in mpp.dev or the x402 Bazaar, no MCP billing tools in the docs. GET /system/plan/BRONZE returns prices and FastSpring hosted-checkout URLs, which load headless with no bot check (card or PayPal). The in-app Upgrade page was not reached (429). From evidence: a hosted checkout an agent with a card could likely complete; not confirmed, nothing paid.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "grade": "n/a",
   "note": "No plan started. No billing or cancel endpoint in the API.",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No documented API for deleting the account; account settings in the web UI unreachable (429). Account [redacted] left in place (free, unverified, empty).",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-02",
  "source": "drive",
  "options": [],
  "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": false,
  "cli": false,
  "sdk": true,
  "mcp": "official",
  "llms_txt": false,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST at api.jotform.com, about 45 documented routes (forms, questions, properties, submissions, webhooks, reports, folders, user); API key or session; 1,000 calls/day on Free",
  "openapi": "none current; github.com/jotform/jotform-api-swagger last pushed 2016",
  "sdk": "official clients for Node, PHP, Python, Java, C#, Ruby, Go, Scala, iOS/Android",
  "mcp": "official hosted MCP at mcp.jotform.com, OAuth 2.1 with PKCE and dynamic client registration (RFC 9728/8414 metadata served); forms and submissions tools; bearer API keys not accepted",
  "webhooks": "documented POST/GET/DELETE /form/{id}/webhooks"
 },
 "can_do": [
  "Read the API docs, plan limits and prices headless (GET /system/plan/{name})",
  "Discover the MCP server's OAuth metadata and register an OAuth client headless"
 ],
 "cannot_do": [
  {
   "what": "Sign up through a documented route without a human",
   "why": "The documented register call needs an undocumented terms field; the web and MCP sign-up show reCAPTCHA v2"
  },
  {
   "what": "Get an API key",
   "why": "POST /user/login no longer returns an appKey; the API key page in the web UI was throttled (429) from our IP"
  },
  {
   "what": "Verify the email address",
   "why": "Links in the mail for API-created accounts point to api.jotform.com routes that 404"
  },
  {
   "what": "Drive any form, submission, webhook or report capability",
   "why": "No credentials reached; every capability needs an API key, an MCP token or a working web session"
  },
  {
   "what": "Delete the account headless",
   "why": "No account deletion in the API; settings page throttled"
  }
 ],
 "blockers": [
  "reCAPTCHA v2 on web and MCP sign-up",
  "POST /user/login returns no appKey (docs drift)"
 ],
 "tips_for_owner": [
  "Return an API key from /user/login again",
  "Relax 429s for signed, verified agents",
  "Fix verification links for API sign-ups",
  "Issue a new client on every MCP registration",
  "Publish an OpenAPI spec and llms.txt",
  "Add account deletion to the API"
 ],
 "tips_for_agents": [
  "Pace requests to www.jotform.com far below normal browsing; a burst of a few page loads trips 429s that last minutes",
  "stop at the first 429, the endpoint stays throttled for over 5 minutes",
  "POST /user/login does not return an API key any more; plan on the web UI (My Account > API) or MCP OAuth",
  "The MCP server needs OAuth (PKCE + dynamic client registration).",
  "Plan limits and prices are readable without auth at GET /system/plan/{FREE|BRONZE|SILVER|GOLD}"
 ],
 "selfhost": null,
 "summary": "Jotform has a broad documented REST API, SDKs and an official OAuth MCP server, but our agent never got credentials. Documented sign-up fails on an undocumented terms field and the web sign-up shows reCAPTCHA v2.",
 "wall": "No API key: login drift and 429 throttling",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Jotform is an online form builder with a documented API, SDKs, and an official MCP server for AI agents, but our agent could never get working credentials on its own. It stopped because the free sign-up it could use through the documented API lacked a working key afterward, and the backup paths (web sign-up, dashboard, OAuth login) were blocked by a CAPTCHA or by the site's own rate limiter.",
  "can_do": [
   "Read the pricing and API documentation without an account",
   "Discover and register with the AI-agent connection point (MCP) without a person's help",
   "Create a free account by itself, though only by using a hidden setting not shown in the instructions"
  ],
  "cannot_do": [
   {
    "what": "Sign up through the official, documented sign-up process",
    "why": "It demands a hidden field, and the normal web sign-up shows a human-only checkbox test"
   },
   {
    "what": "Get a working API key",
    "why": "Logging in no longer hands out a key as the instructions promise, and the key page kept timing out"
   },
   {
    "what": "Confirm its email address",
    "why": "The confirmation link in the email goes to a page that no longer exists"
   },
   {
    "what": "Build or manage any form, submission, table, or workflow",
    "why": "None of these can be reached without a working account key"
   },
   {
    "what": "Delete its account afterward",
    "why": "There is no cleanup option in the API, and the account page kept timing out"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "HIPAA-compliant forms",
   "plan": "Gold or Enterprise",
   "evidence": "Pricing page: 'HIPAA-Enabled Features Unavailable' on Starter/Bronze/Silver; GET /system/plan/FREE limits.hipaaCompliance=false"
  },
  {
   "capability": "Custom API domain + SSO",
   "plan": "Enterprise",
   "evidence": "Pricing page: SSO and custom domain listed for Enterprise only"
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Form Builder",
   "capability": "Build a form with the drag-and-drop editor",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /form",
    "mcp": null,
    "cli": null,
    "ui": "Form Builder"
   },
   "check": "GET /form/{id} returns the new form with the added fields in its question list",
   "source": "https://www.jotform.com/; https://www.jotform.com/features/drag-and-drop/; https://api.jotform.com/docs/"
  },
  {
   "id": "cap-02",
   "group": "Form Builder",
   "capability": "Start from a premade form template",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Form Builder > Templates (20,000+)"
   },
   "check": "New form is created pre-filled with the template's fields, visible in My Forms",
   "source": "https://www.jotform.com/features/form-templates/"
  },
  {
   "id": "cap-03",
   "group": "Form Builder",
   "capability": "Publish/embed a form so it can be filled out",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /form/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Form Builder > Publish"
   },
   "check": "Form's public URL or embed code returns a working live form page",
   "source": "https://www.jotform.com/features/embed-forms/; https://www.jotform.com/features/qr-code-forms/"
  },
  {
   "id": "cap-04",
   "group": "Form Builder",
   "capability": "Collect form submissions (incl. file uploads)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /form/{id}/submissions",
    "mcp": null,
    "cli": null,
    "ui": "Form > Submissions"
   },
   "check": "GET /form/{id}/submissions shows the new submission with its answers/uploaded files",
   "source": "https://api.jotform.com/docs/; https://www.jotform.com/features/file-upload/"
  },
  {
   "id": "cap-05",
   "group": "Form Builder",
   "capability": "Add conditional logic to show/hide fields, route emails, or branch pages",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Form Builder > Settings > Conditions"
   },
   "check": "Filling the form live shows/hides the conditioned field based on the trigger answer",
   "source": "https://www.jotform.com/features/conditional-logic/"
  },
  {
   "id": "cap-06",
   "group": "Payments",
   "capability": "Accept payments or donations through a form",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Form Builder > Payment field"
   },
   "check": "Submission record shows a completed payment with amount and transaction status",
   "source": "https://www.jotform.com/; https://www.jotform.com/features/recurring-subscriptions/; https://www.jotform.com/features/ach-payments/"
  },
  {
   "id": "cap-07",
   "group": "E-signature",
   "capability": "Collect a legally binding e-signature on a document/form",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Jotform Sign"
   },
   "check": "Signed document record shows status 'completed' with signer's signature embedded",
   "source": "https://www.jotform.com/features/electronic-signature-form/; https://www.jotform.com/products/sign/"
  },
  {
   "id": "cap-08",
   "group": "Tables",
   "capability": "Turn submissions into a spreadsheet-like table (Jotform Tables) and edit rows",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Jotform Tables"
   },
   "check": "Table view shows one row per submission; editing a cell persists on reload",
   "source": "https://www.jotform.com/features/form-submissions/"
  },
  {
   "id": "cap-09",
   "group": "AI Agents",
   "capability": "Create and publish an AI Agent (chat/voice) to collect data or answer questions",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Jotform AI Agents"
   },
   "check": "Agent's conversation count/session increments in the agent dashboard after a test chat",
   "source": "https://www.jotform.com/pricing/ (AI Agents FAQ section)"
  },
  {
   "id": "cap-10",
   "group": "Workflows",
   "capability": "Automate a multi-step approval workflow on submissions",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Jotform Approvals / Workflows"
   },
   "check": "Submission's approval status field advances (pending -> approved/denied) after an approver acts",
   "source": "https://www.jotform.com/pricing/ (group approvals mentioned in Gold plan FAQ)"
  },
  {
   "id": "cap-11",
   "group": "Reporting",
   "capability": "Build a visual report (charts/grids) from submission data",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Jotform Report Builder"
   },
   "check": "Report page renders bar/pie chart reflecting current submission counts",
   "source": "https://www.jotform.com/features/visual-form-reports/"
  },
  {
   "id": "cap-12",
   "group": "Export & sharing",
   "capability": "Export submissions to CSV/Excel/PDF or as a zip of uploaded files",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /form/{id}/submissions?...",
    "mcp": null,
    "cli": null,
    "ui": "Submissions table > Export"
   },
   "check": "Downloaded file contains the submission rows matching the live table",
   "source": "https://www.jotform.com/features/export-submission-data/"
  },
  {
   "id": "cap-13",
   "group": "Export & sharing",
   "capability": "Convert a submission into a formatted PDF document",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /form/{id}/submissions/{sid}",
    "mcp": null,
    "cli": null,
    "ui": "Jotform PDF Editor"
   },
   "check": "Generated PDF contains the submission's field values in the designed layout",
   "source": "https://www.jotform.com/features/convert-submission-into-pdf-document/"
  },
  {
   "id": "cap-14",
   "group": "Sharing",
   "capability": "Share a form or its submission data with others via link",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Form/Table > Share"
   },
   "check": "Recipient opening the share link can view the form/table without logging into the owner's account",
   "source": "https://www.jotform.com/features/share-forms-submissions/"
  },
  {
   "id": "cap-15",
   "group": "Notifications",
   "capability": "Send autoresponder and notification emails on submission",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Form Builder > Settings > Emails"
   },
   "check": "Submitting the form delivers both the autoresponder email to the user and the notification email to the owner",
   "source": "https://www.jotform.com/features/autoresponder-emails/; https://www.jotform.com/features/notification-emails/"
  },
  {
   "id": "cap-16",
   "group": "Notifications",
   "capability": "Get WhatsApp notifications for new submissions",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Form Builder > Settings > WhatsApp"
   },
   "check": "A new submission triggers a WhatsApp message to the configured number",
   "source": "https://www.jotform.com/features/whatsapp/"
  },
  {
   "id": "cap-17",
   "group": "Save & resume",
   "capability": "Let respondents save an incomplete form and continue later",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Form Builder > Save & Continue Later"
   },
   "check": "Partially-filled submission reappears pre-filled when the saved link is revisited",
   "source": "https://www.jotform.com/features/save-and-continue/"
  },
  {
   "id": "cap-18",
   "group": "Pre-fill",
   "capability": "Pre-populate a form's fields from a URL, prior submission, or spreadsheet",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Form Builder > Prefill"
   },
   "check": "Opening the generated prefill URL shows the target fields already filled with the supplied values",
   "source": "https://www.jotform.com/features/pre-populate-forms/"
  },
  {
   "id": "cap-19",
   "group": "Localization",
   "capability": "Translate a form into another language",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Form Builder > Settings > Translate"
   },
   "check": "Switching the form's language selector renders field labels in the translated language",
   "source": "https://www.jotform.com/features/translate-forms/"
  },
  {
   "id": "cap-20",
   "group": "Offline",
   "capability": "Collect form responses offline via the Jotform Mobile Forms app, synced later",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Jotform Mobile Forms app"
   },
   "check": "Submission created while device is offline appears in the account's submission list once reconnected",
   "source": "https://www.jotform.com/features/offline-forms/"
  },
  {
   "id": "cap-21",
   "group": "Automation",
   "capability": "Connect a form to third-party apps via webhooks or integrations (CRM, email marketing, project mgmt, storage)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /form/{id}/webhooks",
    "mcp": null,
    "cli": null,
    "ui": "Form Builder > Settings > Integrations"
   },
   "check": "GET /form/{id}/webhooks lists the registered webhook URL and it receives a payload on next submission",
   "source": "https://api.jotform.com/docs/; https://www.jotform.com/features/crm-forms/; https://www.jotform.com/features/email-marketing-integrations/"
  },
  {
   "id": "cap-22",
   "group": "Analytics",
   "capability": "View form analytics (views, submissions, conversion)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Form > Analytics"
   },
   "check": "Analytics dashboard view count increments after loading the live form page",
   "source": "https://www.jotform.com/features/form-analytics/; https://www.jotform.com/features/google-analytics-form-tracking/"
  },
  {
   "id": "cap-23",
   "group": "Security",
   "capability": "Add a CAPTCHA/spam-protection field to a form",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Form Builder > Add field > CAPTCHA"
   },
   "check": "Submitting the live form without solving the CAPTCHA is rejected",
   "source": "https://www.jotform.com/features/enable-google-recaptcha/"
  },
  {
   "id": "cap-24",
   "group": "Discounts",
   "capability": "Add coupon/promo codes to an order form",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Form Builder > Payment field > Coupons"
   },
   "check": "Entering a valid coupon code on the live order form reduces the displayed total",
   "source": "https://www.jotform.com/features/discount-coupons/"
  },
  {
   "id": "cap-25",
   "group": "Apps",
   "capability": "Package forms, tables, and content into a mobile/web app (Jotform Apps)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Jotform Apps"
   },
   "check": "Published app URL/QR loads the composed screens containing the embedded forms",
   "source": "https://www.jotform.com/pricing/; https://www.jotform.com/"
  },
  {
   "id": "cap-26",
   "group": "Store",
   "capability": "Create an online store to sell products via a form-based storefront",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Jotform Store Builder"
   },
   "check": "Store checkout produces a completed order submission with product line items",
   "source": "https://www.jotform.com/; https://www.jotform.com/pricing/"
  },
  {
   "id": "cap-27",
   "group": "Customization",
   "capability": "Apply custom CSS/branding to a form",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Form Builder > Settings > Custom CSS"
   },
   "check": "Live form page reflects the custom CSS rules after publishing",
   "source": "https://www.jotform.com/features/custom-css/"
  },
  {
   "id": "cap-28",
   "group": "Developer access",
   "capability": "Call the Jotform REST API with an API key to read/manage forms and submissions",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "GET /user, GET /form, GET /form/{id}/submissions",
    "mcp": null,
    "cli": null,
    "ui": "My Account > API"
   },
   "check": "Authenticated GET /user returns the account's profile JSON",
   "source": "https://api.jotform.com/docs/"
  },
  {
   "id": "cap-29",
   "group": "Compliance",
   "capability": "Enable HIPAA-compliant forms for handling PHI",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Form Builder > Settings > HIPAA"
   },
   "check": "Form shows HIPAA-enabled badge and uses the hipaa-api.jotform.com endpoint for submissions",
   "source": "https://www.jotform.com/hipaa/; https://www.jotform.com/pricing/"
  },
  {
   "id": "cap-30",
   "group": "Enterprise admin",
   "capability": "Use a custom API/form domain and Single Sign-On for the organization (Enterprise)",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "configurable base URL (your-domain.com/API)",
    "mcp": null,
    "cli": null,
    "ui": "Enterprise admin console"
   },
   "check": "API calls to the custom domain succeed and return the same data as api.jotform.com",
   "source": "https://api.jotform.com/docs/; https://www.jotform.com/enterprise/"
  }
 ],
 "attempts": [
  {
   "t": "00:10",
   "cap": "docs",
   "capability": "find docs",
   "task": "Fetch API docs and discovery files",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://api.jotform.com/docs/ 200; www.jotform.com/llms.txt 404. mcp.jotform.com returns 401 NO_AUTH_HEADER (MCP server exists)",
   "notes": "Docs rendered client-side; parameter tables not in static HTML.",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "00:35",
   "cap": "signup",
   "capability": "sign up",
   "task": "",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "401 {\"message\":\"You cannot sign up without accepting the terms and conditions.\",\"info\":\"https://api.jotform.com/docs#user-register\"}; tried terms=1 and acceptTerms=1 (same 401), then 429 HTML 'Too many requests' after the 4th call",
   "notes": "Docs list only username/password/email; the required terms-acceptance field is not documented, so the agent cannot complete the documented route. Stopped guessing at the 429.",
   "quality": {
    "verify_route": "no",
    "error_legibility": "vague",
    "docs_match": "drift",
    "recoverable": "no"
   }
  },
  {
   "t": "03:30",
   "cap": "signup",
   "capability": "sign up",
   "task": "Sign up with email on https://www.jotform.com/signup/ in the browser",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Email step OK; on Create Account the page logged action 'captcha-required' and showed a visible reCAPTCHA v2 'I'm not a robot' checkbox (screenshot browser/shots/006.png). Earlier browser attempt hit 'Error #429 - Too many requests' page (IP rate-limited after 4 API register calls).",
   "notes": "Visible reCAPTCHA v2 on sign-up. Social sign-up (Google/Microsoft/Apple) needs accounts we do not have.",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "05:40",
   "cap": "credentials",
   "capability": "get API/MCP credentials",
   "task": "Register an OAuth client for the official MCP server (mcp.jotform.com) via its advertised dynamic client registration",
   "route": "mcp",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "mcp.jotform.com/.well-known/oauth-protected-resource and oauth-authorization-server return JSON (scopes readOnly/full, PKCE S256, registration_endpoint https://oauth2.jotform.com/register-public-client). POST register-public-client -> 200 client_id. Authorization step needs a logged-in Jotform user, which we do not have (sign-up blocked by reCAPTCHA).",
   "notes": "DCR response echoed client_name 'Slack MCP localhost verify' and an issued_at from March 2026 instead of our client_name: registration appears to be deduplicated by redirect URI and returns an existing client.",
   "quality": {
    "verify_route": "no",
    "docs_match": "drift",
    "recoverable": "no"
   }
  },
  {
   "t": "12:30",
   "cap": "signup",
   "capability": "sign up",
   "task": "Sign up through the official MCP OAuth flow (oauth2.jotform.com/authorize -> www.jotform.com/oa2/login?is_mcp=1 -> Sign up with Email)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Own DCR client registered (200). Authorize redirects to MCP-specific login/sign-up page; Sign up with Email -> POST server.php action=registerNewUser ... isAgreedTerms=1&recaptcha= -> 400 {\"error\":\"REQUIRE_CAPTCHA\",\"success\":false}; reCAPTCHA v2 widget then rendered (screenshot browser/shots/017.png).",
   "notes": "Same reCAPTCHA wall on the MCP-branded sign-up. not re-asked.",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "15:00",
   "cap": "cap-01",
   "capability": "Build a form with the drag-and-drop editor",
   "task": "Attempt via documented API POST /form in account",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-02",
   "capability": "Start from a premade form template",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-03",
   "capability": "Publish/embed a form so it can be filled out",
   "task": "Attempt via documented API GET /form/{id} in account",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-04",
   "capability": "Collect form submissions (incl. file uploads)",
   "task": "Attempt via documented API GET /form/{id}/submissions in account",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-05",
   "capability": "Add conditional logic to show/hide fields, route emails, or branch pages",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-06",
   "capability": "Accept payments or donations through a form",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-07",
   "capability": "Collect a legally binding e-signature on a document/form",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-08",
   "capability": "Turn submissions into a spreadsheet-like table (Jotform Tables) and edit rows",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-09",
   "capability": "Create and publish an AI Agent (chat/voice) to collect data or answer questions",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-10",
   "capability": "Automate a multi-step approval workflow on submissions",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-11",
   "capability": "Build a visual report (charts/grids) from submission data",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-12",
   "capability": "Export submissions to CSV/Excel/PDF or as a zip of uploaded files",
   "task": "Attempt via documented API GET /form/{id}/submissions?... in account",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-13",
   "capability": "Convert a submission into a formatted PDF document",
   "task": "Attempt via documented API GET /form/{id}/submissions/{sid} in account",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-14",
   "capability": "Share a form or its submission data with others via link",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-15",
   "capability": "Send autoresponder and notification emails on submission",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-16",
   "capability": "Get WhatsApp notifications for new submissions",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-17",
   "capability": "Let respondents save an incomplete form and continue later",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-18",
   "capability": "Pre-populate a form's fields from a URL, prior submission, or spreadsheet",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-19",
   "capability": "Translate a form into another language",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-20",
   "capability": "Collect form responses offline via the Jotform Mobile Forms app, synced later",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-21",
   "capability": "Connect a form to third-party apps via webhooks or integrations (CRM, email marketing, project mgmt, storage)",
   "task": "Attempt via documented API POST /form/{id}/webhooks in account",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-22",
   "capability": "View form analytics (views, submissions, conversion)",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-23",
   "capability": "Add a CAPTCHA/spam-protection field to a form",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-24",
   "capability": "Add coupon/promo codes to an order form",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-25",
   "capability": "Package forms, tables, and content into a mobile/web app (Jotform Apps)",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-26",
   "capability": "Create an online store to sell products via a form-based storefront",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-27",
   "capability": "Apply custom CSS/branding to a form",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-28",
   "capability": "Call the Jotform REST API with an API key to read/manage forms and submissions",
   "task": "Attempt via documented API GET /user, GET /form, GET /form/{id}/submissions in account",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account.",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-29",
   "capability": "Enable HIPAA-compliant forms for handling PHI",
   "task": "Attempt via official MCP / web UI in account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account. Also a paid-plan feature (Gold/Enterprise per pricing page).",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "15:00",
   "cap": "cap-30",
   "capability": "Use a custom API/form domain and Single Sign-On for the organization (Enterprise)",
   "task": "Attempt via documented API configurable base URL (your-domain.com/API) in account",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every route for this capability (API key, MCP OAuth, web UI) needs a logged-in account. Also a paid-plan feature (Gold/Enterprise per pricing page).",
   "notes": "Not driven; blocked at the access ladder, not a product failure of this capability.",
   "quality": {}
  },
  {
   "t": "12:30",
   "cap": "credentials",
   "capability": "get API credentials",
   "task": "Documented POST /user/login (username, password, appName, access=full) to obtain an appKey",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "200 success, content keys [user, usage, loginType]; no appKey (docs sample shows content.appKey). Session cookies JOTFORM_SESSION set, but GET /user and /user/forms with that cookie -> 401 'You're not authorized to use (/user)'.",
   "notes": "Docs drift: login does not hand out an API key. No documented endpoint to create an API key.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "silent",
    "docs_match": "drift",
    "recoverable": "no"
   }
  },
  {
   "t": "13:00",
   "cap": "verify",
   "capability": "verify email",
   "task": "Open the verification link from the mail headless",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "Mail 'Please verify your email address' arrived. Links point at api.jotform.com: /verifyemail/... -> 404 then 429; /login/?unusual-signup=1... -> 404 'Requested URL (/login/) is not available!'. Same path on www redirects to /login/?rp=... (needs a session).",
   "notes": "Verification links in the mail for API-created accounts point to the API host where those routes 404.",
   "quality": {
    "error_legibility": "vague",
    "docs_match": "undocumented",
    "recoverable": "yes"
   }
  },
  {
   "t": "20:00",
   "cap": "login",
   "capability": "log in",
   "task": "Log in on www.jotform.com/login with username and password",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "First browser login triggered an 'E-mail Authentication' 6-digit code modal (code mail received in 1 min; screenshot shots/020.png); a later login from the same browser landed directly on /workspace/ (shots/024.png). No CAPTCHA on login.",
   "notes": "Several browser page loads in between returned 'Error #429 - Too many requests' at single-user pace (one page load every ~5-10 s).",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "yes"
   }
  },
  {
   "t": "26:00",
   "cap": "credentials",
   "capability": "get API key",
   "task": "Create an API key in the web UI (My Account > API > Create New Key) while logged in",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Three tries over ~6 min, spaced 30-120 s apart: the page shell loads but its own XHRs return 429 (www.jotform.com/API/user/keys, /API/ep/user/actions, /API/ep/user/account-sharing-limit-banner); API panel stays a spinner (shots/027.png, 029.png). Direct loads of /myaccount/api and /verifyemail/... also returned 'Error #429 - Too many requests'.",
   "notes": "Our datacenter IP stayed throttled across www.jotform.com at single-user pace; the web app could not load its own data. Not retried with different behaviour.",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "no"
   }
  },
  {
   "t": "29:00",
   "cap": "credentials",
   "capability": "get MCP token",
   "task": "Authorize our DCR client for mcp.jotform.com while logged in, capture the code at the loopback redirect, exchange at oauth2.jotform.com/token",
   "route": "mcp",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "Two browser runs of the authorize URL hung without returning a page snapshot or redirect (no screenshot written, killed at 120 s / 200 s). No code obtained.",
   "notes": "Cause not determined: could be the 429 throttling on www.jotform.com/oa2/* or our agent's browser wrapper waiting on the unreachable 127.0.0.1 redirect. Not counted against the product beyond 'not reached'.",
   "quality": {
    "recoverable": "no"
   }
  },
  {
   "t": "31:00",
   "cap": "pay",
   "capability": "buy a plan",
   "task": "Probe agent-payment rails and hosted checkout without paying",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "No 402 anywhere: api.jotform.com unauth -> 401 JSON; x402./mpp./agents.jotform.com -> 200 HTML (generic site, no PAYMENT-REQUIRED/WWW-Authenticate Payment); /.well-known/ucp 404; not in mpp.dev services or x402 Bazaar. Documented GET /system/plan/{BRONZE} returns prices (39/mo) and FastSpring 'instant' checkout URLs; sites.fastspring.com/interlogy/instant/jotformbronzemonthly2022 loads headless (title 'Jotform Store', card/PayPal). In-app Upgrade page not reached (429). No free trial; free Starter plan exists.",
   "notes": "Hosted checkout looks completable by an agent with a card; not confirmed (no card, never entered).",
   "quality": {
    "verify_route": "no",
    "docs_match": "match"
   }
  },
  {
   "t": "32:00",
   "cap": "delete",
   "capability": "delete account",
   "task": "Find a documented way to delete the account and data",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "API docs have DELETE for forms/submissions/folders/reports but no account deletion; web UI account settings unreachable (429 on /myaccount/*). Account [redacted] (free, unverified, no forms) left in place.",
   "notes": "Cleanup incomplete: account still exists.",
   "quality": {
    "verify_route": "no"
   }
  }
 ],
 "stale": false,
 "icon": "/logos/jotform.png",
 "monitored": false,
 "verdict": "Jotform needs a person: L1 · Needs a person. Our agent gets in on its own for nothing here: sign-up stops behind reCAPTCHA v2, and the documented endpoint rejects it on a terms field the docs never name. Verification mail arrived fast, but every link it carried led to a dead or redirecting page, and the API never issued a key even to an unverified login. With no credentials, our agent reached only the public, unauthenticated routes: plan lookups, nothing else. Paying looks reachable later: the plan endpoint returns a hosted checkout page with no bot check. Account deletion was never tested: settings stayed locked behind the same wall, so the account sits there, empty and unverified.",
 "page": "https://agentdrives.com/tools/jotform?via=api"
}