{
 "slug": "pipedrive",
 "name": "Pipedrive",
 "url": "https://pipedrive.com",
 "domain": "pipedrive.com",
 "category": "crm",
 "category_name": "CRM",
 "tested_at": "2026-10-02",
 "run": "20261002T145041Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261001T081954Z",
   "date": "2026-10-01",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": [
     "matfy.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261001T204754Z",
   "date": "2026-10-01",
   "level": 4,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": [
     "[redacted]s.com"
    ],
    "robots": "start"
   },
   "why": "noise"
  },
  {
   "run": "20261002T145041Z",
   "date": "2026-10-02",
   "level": 3,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "[redacted]s.com"
    ],
    "robots": "start"
   },
   "why": "product"
  }
 ],
 "level": 3,
 "level_name": "Does the work",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 2,
  "tries": 3,
  "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": "part",
   "text": "Work done: 71% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Nothing to cancel; can't delete its account",
   "at": "delete",
   "left": "stuck"
  }
 ],
 "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": "part",
   "text": "Work done: 71% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Nothing to cancel; can't delete its account",
   "at": "delete",
   "left": "stuck",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "browser_signup",
   "label": "Sign-up in a browser",
   "routes": [],
   "minutes": 5.3,
   "core": "5/7"
  }
 ],
 "minutes": 5.3,
 "next": {
  "to": 4,
  "text": "Next: do 80% of the core work (now 71%)"
 },
 "stop": "delete",
 "core": "5/7",
 "scores": {
  "coverage": 65,
  "reliability": 94,
  "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": []
 },
 "reliability_method": "first-try",
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": 71,
 "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": [
   "[redacted]s.com"
  ],
  "robots": "start"
 },
 "same_level_drives": 1,
 "drives": 3,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt on www.pipedrive.com and pipedrive.readme.io, OpenAPI v1 (213 ops) and v2 (158 ops) YAML, OAuth AS + protected-resource metadata, MCP docs on support.pipedrive.com. Pricing page itself returns a Cloudflare 'Sorry, you have been blocked' 403 to our signed agent and browser."
  },
  "signup": {
   "status": "browser",
   "note": "The documented free developer sandbox form on developers.pipedrive.com (no CAPTCHA) created an account in the browser. No sign-up API."
  },
  "verify": {
   "status": "n/a",
   "note": "Sandbox needed no email verification; only a welcome mail arrived."
  },
  "credentials": {
   "status": "browser",
   "note": "Personal API token copied from Settings > API in the browser. Also: open dynamic client registration + OAuth code flow (PKCE) headless except the one browser consent click.",
   "via": ""
  },
  "first_call": {
   "status": "headless",
   "note": "GET /v1/users/me and /api/v2/deals with x-api-token, 200."
  },
  "first_action": {
   "status": "headless",
   "note": "POST /api/v2/organizations created an org, read back by GET."
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "no-card trial",
   "note": "No x402/MPP/L402/UCP anywhere: unauthenticated API calls give 401 JSON, x402./mpp./agents. subdomains hit the API wildcard (401), the only 402 is a plan gate ('Required suites missing') without payment data; not listed in x402 Bazaar or mpp.dev. Billing API is read-only (GET /billing/subscriptions/addons), MCP has no billing tools. Upgrading happens in the logged-in web app; we could not see that checkout (trial sign-up blocked, sandbox has no billing page) and the pricing page blocks our agent, so a human has to start the trial and the purchase. A no-card 14-day trial exists for humans.",
   "reached": false
  },
  "cancel": {
   "status": "n/a",
   "grade": "n/a",
   "note": "Nothing to cancel: our agent started no paid plan.",
   "docs_note": "Nothing recurring was started; the sandbox runs a 'free Pipedrive subscription'. No cancel API exists in the docs.",
   "nothing": "no_plan"
  },
  "delete": {
   "status": "blocked",
   "note": "All created data deleted via API (22 DELETEs, verified empty). No account/company delete in the API or the sandbox settings (only 'Leave company'); docs say inactive sandboxes are purged after 45 days, questions to marketplace.devs@pipedrive.com.",
   "left": "stuck",
   "account": true
  }
 },
 "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": 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": false,
  "sdk": true,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": true
 },
 "surface_notes": {
  "api": "REST v1 (213 ops) + v2 (158 ops); rate limit 20 req/2s burst, 150k daily token budget; clear validation errors",
  "openapi": "v1 and v2 YAML published on developers.pipedrive.com; no mail-send, automation or insights-report endpoints",
  "mcp": "official, mcp.pipedrive.ai/mcp, 49 tools (deals, persons, orgs, leads, activities, notes, products, search, stages); OAuth with discovery + dynamic client registration",
  "sdk": "official Node.js and PHP clients; developers page also lists an official 'cli' repo (not tested)",
  "webhooks": "v2 webhooks; delivery status readable via GET /v1/webhooks",
  "sandbox": "free developer sandbox, 5 seats, Lite features, purged after 45 days without an app"
 },
 "can_do": [
  "Get a free developer sandbox and an API token without a card (one browser form, no CAPTCHA)",
  "Create, update, move and win deals, and add custom pipeline stages",
  "Capture leads and convert them to deals (async conversion with status endpoint)",
  "Manage persons, organizations and parent/subsidiary relationships",
  "Schedule activities, log calls, add notes and upload files on deals",
  "Attach products as line items to deals",
  "Search across all record types, save filters and list deals through them",
  "Add custom fields and set their values",
  "Set a sales goal and read its progress",
  "Register webhooks and see their delivery status",
  "Drive the CRM through the official MCP server after an OAuth consent",
  "Register its own OAuth client dynamically",
  "Delete everything it created"
 ],
 "cannot_do": [
  {
   "what": "Start the regular 14-day trial",
   "why": "The register form returned 400 'Invalid Request' with a generic 'Unknown error' message; an invisible reCAPTCHA is on the page (cause not stated)"
  },
  {
   "what": "Send or track email",
   "why": "No send endpoint in the API or MCP; needs a synced Google/Microsoft/IMAP mailbox"
  },
  {
   "what": "Build automations or lead routing",
   "why": "Plan-gated (Growth/Premium) and UI-only, no API"
  },
  {
   "what": "Read Insights reports headless",
   "why": "No documented reports/dashboards API; only goal results"
  },
  {
   "what": "Get Nova meeting recaps",
   "why": "Needs a real recorded meeting via a connected calendar/video provider"
  },
  {
   "what": "Buy or upgrade a plan",
   "why": "No billing write API or agentic payment rail; checkout lives in the logged-in web app; pricing page blocks our agent"
  },
  {
   "what": "Delete the account",
   "why": "No delete in API or sandbox settings; sandbox is purged after 45 days of inactivity"
  }
 ],
 "blockers": [
  "Trial sign-up refused with a generic error (400 Invalid Request)",
  "Pricing page blocked by Cloudflare WAF for our signed agent",
  "No account deletion route"
 ],
 "tips_for_owner": [
  "Let verified agents start the trial",
  "Add an API to send tracked email",
  "Expose Insights reports through the API",
  "Offer a billing API for upgrades",
  "Add account deletion to the API",
  "Stop blocking signed agents on pricing",
  "Issue tokens with only the requested scopes"
 ],
 "tips_for_agents": [
  "Skip the trial form: sign up for the free developer sandbox at developers.pipedrive.com (no CAPTCHA, no card, no email verification), then copy the API token from Settings > API.",
  "Use header x-api-token against https://api.pipedrive.com (v2 for deals/persons/orgs/activities/products, v1 for leads, notes, files, filters, goals, webhooks, callLogs).",
  "For MCP, follow WWW-Authenticate -> oauth-protected-resource -> dynamic client registration; one browser consent click gives a bearer + refresh token.",
  "Look up field ids via /dealFields before building filters; webhooks v2 only accept create/change/delete.",
  "Lead conversion and goal progress are asynchronous: poll the status/results endpoints.",
  "The sandbox is Lite: automations, routing, Projects, Smart Docs and Campaigns are not available."
 ],
 "selfhost": null,
 "summary": "Pipedrive is very drivable once an agent is in: through the free developer sandbox (one browser form, no CAPTCHA) and an API token, we created, moved, converted, searched, filtered and deleted CRM data end to end via REST v1/v2 and the official OAuth-protected MCP server. The regular trial sign-up was refused with a generic error (400; an invisible reCAPTCHA is on the page), email sending, automations, reports and billing have no API, and there is no agent payment rail or account deletion.",
 "wall": "Trial sign-up refused with a generic error",
 "plan_scope": "free developer sandbox (Lite plan features)",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Pipedrive is a sales CRM for managing deals, contacts and leads. An AI agent could not open the normal free trial (the trial form returned a generic error; an invisible reCAPTCHA is on the page), but it found a separate free developer sandbox with no such check and from there ran almost the entire CRM, creating deals, contacts, leads, notes, calls and reports, entirely on its own. Paying or upgrading needs a person in the web app, and it found no way to delete the account at all: idle sandboxes are removed after 45 days.",
  "can_do": [
   "Get a free account and an access key without talking to a person",
   "Create and move deals through a sales pipeline",
   "Capture leads and turn them into deals",
   "Manage contacts, companies and their relationships",
   "Schedule calls and tasks, attach notes and files to records",
   "Attach products and pricing to a deal",
   "Search and filter all the records it created",
   "Add custom data fields",
   "Set and track sales goals",
   "Get live notifications when records change",
   "Connect and control the CRM through an AI assistant interface",
   "Clean up and delete everything it created"
  ],
  "cannot_do": [
   {
    "what": "Start the normal free trial",
    "why": "The trial form returned a generic error (an invisible reCAPTCHA is on the page)"
   },
   {
    "what": "Send or track email from the CRM",
    "why": "No programmatic way to send email exists"
   },
   {
    "what": "Set up automations or automatic lead assignment",
    "why": "Only available on paid plans and only through the web screens"
   },
   {
    "what": "Read sales reports and dashboards on its own",
    "why": "No programmatic access to reports, only goal progress numbers"
   },
   {
    "what": "Buy or upgrade the subscription",
    "why": "No way to pay programmatically; a person must do it in the web app"
   },
   {
    "what": "Delete the account",
    "why": "No account delete in the API or the sandbox settings; idle sandboxes expire"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "Workflow automations",
   "plan": "Growth or higher",
   "evidence": "Settings > Automations shows 'Get more done with Automations ... View billing plans' on the Lite sandbox"
  },
  {
   "capability": "Lead routing / automatic assignment",
   "plan": "Premium or higher",
   "evidence": "Settings > Automatic assignment: 'Feature available on the Premium plan or higher.'"
  },
  {
   "capability": "Projects",
   "plan": "Projects add-on",
   "evidence": "GET /v1/projects -> 402 'Required suites missing'"
  },
  {
   "capability": "Smart Docs",
   "plan": "Smart Docs add-on",
   "evidence": "Settings > Documents shows Smart Docs upsell 'Manage subscription'"
  },
  {
   "capability": "Campaigns",
   "plan": "Campaigns add-on",
   "evidence": "'Your Campaigns subscription has ended ... answer two questions for account review'"
  },
  {
   "capability": "Deal installments (line items work)",
   "plan": "higher plan",
   "evidence": "GET /api/v2/deals/installments -> 403 'The company does not have access to this feature'"
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Pipeline",
   "capability": "Create and manage a deal in a pipeline",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /deals",
    "mcp": null,
    "cli": null,
    "ui": "Deals / Pipeline view"
   },
   "check": "GET /deals/{id} returns the deal with its stage_id",
   "source": "https://developers.pipedrive.com/docs/api/v1/Deals; https://www.pipedrive.com"
  },
  {
   "id": "cap-02",
   "group": "Pipeline",
   "capability": "Customize pipeline stages and move deals through them",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PUT /deals/{id} (stage_id), POST/PUT /stages",
    "mcp": null,
    "cli": null,
    "ui": "Kanban pipeline board"
   },
   "check": "GET /deals/{id} shows updated stage_id after move",
   "source": "https://developers.pipedrive.com/docs/api/v1/Stages; https://www.pipedrive.com"
  },
  {
   "id": "cap-03",
   "group": "Leads",
   "capability": "Capture and manage leads before converting to deals",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /leads",
    "mcp": null,
    "cli": null,
    "ui": "Leads inbox"
   },
   "check": "GET /leads/{id} shows the lead; converting creates linked deal via POST /deals",
   "source": "https://developers.pipedrive.com/docs/api/v1/Leads; https://www.pipedrive.com/en/products/sales/leads"
  },
  {
   "id": "cap-04",
   "group": "Contacts",
   "capability": "Manage contact data (persons and organizations)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST/PUT /persons, POST/PUT /organizations",
    "mcp": null,
    "cli": null,
    "ui": "Contacts"
   },
   "check": "GET /persons/{id} and /organizations/{id} return stored fields",
   "source": "https://developers.pipedrive.com/docs/api/v1/Persons; https://developers.pipedrive.com/docs/api/v1/Organizations"
  },
  {
   "id": "cap-05",
   "group": "Email",
   "capability": "Sync email and send/track messages from a unified sales inbox",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /mailbox/mailMessages",
    "mcp": null,
    "cli": null,
    "ui": "Sales inbox"
   },
   "check": "GET /mailbox/mailThreads/{id} shows synced message with open/click tracking data",
   "source": "https://developers.pipedrive.com/docs/api/v1/Mailbox; https://www.pipedrive.com/en/products/sales/email-and-communications"
  },
  {
   "id": "cap-06",
   "group": "Automation",
   "capability": "Build workflow automations (triggers/actions) for the sales cycle",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Automations builder"
   },
   "check": "Automation's run history shows a triggered action after the trigger event occurs",
   "source": "https://www.pipedrive.com/en/products/sales/automations"
  },
  {
   "id": "cap-07",
   "group": "Automation",
   "capability": "Automatically route and assign leads to reps with rules",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Lead routing settings"
   },
   "check": "New lead matching a rule shows assigned owner_id without manual action",
   "source": "https://www.pipedrive.com"
  },
  {
   "id": "cap-08",
   "group": "Insights",
   "capability": "View real-time sales reports, dashboards and forecasts",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /goals; vendor-reported insights API",
    "mcp": null,
    "cli": null,
    "ui": "Insights & Reports dashboard"
   },
   "check": "Dashboard widget reflects updated deal values after a deal is won",
   "source": "https://www.pipedrive.com/en/features/insights-and-reports"
  },
  {
   "id": "cap-09",
   "group": "AI",
   "capability": "Use Nova meeting intelligence to brief, transcribe and recap calls into CRM updates",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /meetings",
    "mcp": null,
    "cli": null,
    "ui": "Nova panel on a deal"
   },
   "check": "Deal activity feed shows an auto-generated call recap after a synced meeting",
   "source": "https://www.pipedrive.com/en/nova"
  },
  {
   "id": "cap-10",
   "group": "Activities",
   "capability": "Schedule and track activities, tasks and reminders tied to deals",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /activities",
    "mcp": null,
    "cli": null,
    "ui": "Activities tab"
   },
   "check": "GET /activities/{id} shows done=true after marking complete",
   "source": "https://developers.pipedrive.com/docs/api/v1/Activities"
  },
  {
   "id": "cap-11",
   "group": "Calendar",
   "capability": "Sync calendar and share a booking link for meetings",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /meetings",
    "mcp": null,
    "cli": null,
    "ui": "Scheduler / Calendar sync settings"
   },
   "check": "Booked meeting via scheduler link appears as an activity with meeting link",
   "source": "https://www.pipedrive.com/en/products/sales/email-and-communications"
  },
  {
   "id": "cap-12",
   "group": "Products",
   "capability": "Attach products/line items to deals and track installments",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /deals/{id}/products, GET /dealInstallments",
    "mcp": null,
    "cli": null,
    "ui": "Deal detail products section"
   },
   "check": "GET /deals/{id}/products lists the attached product with price/quantity",
   "source": "https://developers.pipedrive.com/docs/api/v1/DealProducts; https://developers.pipedrive.com/docs/api/v1/DealInstallments"
  },
  {
   "id": "cap-13",
   "group": "Organize",
   "capability": "Search across deals, contacts, leads and other items",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /itemSearch",
    "mcp": null,
    "cli": null,
    "ui": "Global search bar"
   },
   "check": "GET /itemSearch?term=... returns matching items across object types",
   "source": "https://developers.pipedrive.com/docs/api/v1/ItemSearch"
  },
  {
   "id": "cap-14",
   "group": "Organize",
   "capability": "Save and apply custom filters/views on lists",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /filters",
    "mcp": null,
    "cli": null,
    "ui": "List view filter bar"
   },
   "check": "GET /filters/{id} returns saved filter conditions reusable in list views",
   "source": "https://developers.pipedrive.com/docs/api/v1/Filters"
  },
  {
   "id": "cap-15",
   "group": "Customization",
   "capability": "Add and manage custom fields on deals, persons, organizations, leads",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /dealFields, /personFields, /organizationFields, /leadFields",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Custom fields"
   },
   "check": "GET /dealFields shows new custom field; value appears on deal via PUT /deals/{id}",
   "source": "https://developers.pipedrive.com/docs/api/v1/DealFields"
  },
  {
   "id": "cap-16",
   "group": "Files & Notes",
   "capability": "Attach files and leave notes on records",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /files, POST /notes",
    "mcp": null,
    "cli": null,
    "ui": "Deal/contact detail panel"
   },
   "check": "GET /notes?deal_id={id} returns the created note",
   "source": "https://developers.pipedrive.com/docs/api/v1/Files; https://developers.pipedrive.com/docs/api/v1/Notes"
  },
  {
   "id": "cap-17",
   "group": "Calling",
   "capability": "Log and track phone calls against deals/contacts",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /callLogs",
    "mcp": null,
    "cli": null,
    "ui": "Activity/call panel"
   },
   "check": "GET /callLogs/{id} returns logged call with duration and outcome",
   "source": "https://developers.pipedrive.com/docs/api/v1/CallLogs"
  },
  {
   "id": "cap-18",
   "group": "Documents",
   "capability": "Create contracts and collect e-signatures (Smart Docs)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Smart Docs"
   },
   "check": "Document status changes to signed after counterpart signs",
   "source": "https://www.pipedrive.com/en/features/smart-docs-add-on"
  },
  {
   "id": "cap-19",
   "group": "Lead Generation",
   "capability": "Capture leads via web forms and chatbot (LeadBooster)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "LeadBooster add-on"
   },
   "check": "Submitted web form creates a new lead visible in Leads inbox",
   "source": "https://www.pipedrive.com/en/features/lead-generation-software"
  },
  {
   "id": "cap-20",
   "group": "Visitor Tracking",
   "capability": "Identify and track companies browsing your website",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Web Visitors add-on"
   },
   "check": "Web Visitors panel lists a company session with visited pages after a site visit",
   "source": "https://www.pipedrive.com/en/features/web-visitors-add-on"
  },
  {
   "id": "cap-21",
   "group": "Marketing",
   "capability": "Create and send email marketing campaigns (Campaigns add-on)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Campaigns add-on"
   },
   "check": "Campaign detail shows sent/open/click stats after sending",
   "source": "https://www.pipedrive.com/en/products/email-marketing-software"
  },
  {
   "id": "cap-22",
   "group": "Projects",
   "capability": "Plan and track projects/boards after a deal is won (Projects add-on)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET/POST /projects, /projectBoards, /projectPhases, /projectTemplates",
    "mcp": null,
    "cli": null,
    "ui": "Projects add-on"
   },
   "check": "GET /projects/{id} shows project linked to the originating deal",
   "source": "https://developers.pipedrive.com/docs/api/v1/Projects; https://www.pipedrive.com/en/products/project-management-software"
  },
  {
   "id": "cap-23",
   "group": "Goals",
   "capability": "Set sales goals and monitor team progress toward them",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /goals",
    "mcp": null,
    "cli": null,
    "ui": "Goals dashboard"
   },
   "check": "GET /goals/{id}/results shows progress value updating as deals close",
   "source": "https://developers.pipedrive.com/docs/api/v1/Goals"
  },
  {
   "id": "cap-24",
   "group": "Automation",
   "capability": "Receive real-time event notifications via webhooks",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /webhooks",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Webhooks"
   },
   "check": "GET /webhooks lists registered hook; triggering event causes a POST to the configured URL",
   "source": "https://developers.pipedrive.com/docs/api/v1/Webhooks"
  },
  {
   "id": "cap-25",
   "group": "Organize",
   "capability": "Relate organizations to each other (parent/subsidiary, etc.)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /organizationRelationships",
    "mcp": null,
    "cli": null,
    "ui": "Organization detail panel"
   },
   "check": "GET /organizationRelationships/{id} returns the relationship type between two orgs",
   "source": "https://developers.pipedrive.com/docs/api/v1/OrganizationRelationships"
  },
  {
   "id": "cap-26",
   "group": "Mobile",
   "capability": "Use Pipedrive via native Android/iOS mobile apps",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Mobile app"
   },
   "check": "Deal created in mobile app appears in web UI and vice versa",
   "source": "https://www.pipedrive.com"
  },
  {
   "id": "cap-27",
   "group": "Integrations",
   "capability": "Connect third-party apps from the Marketplace",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "GET /userConnections",
    "mcp": null,
    "cli": null,
    "ui": "Marketplace"
   },
   "check": "GET /userConnections lists the newly authorized third-party app connection",
   "source": "https://developers.pipedrive.com/docs/api/v1/UserConnections; https://www.pipedrive.com/en/marketplace"
  },
  {
   "id": "cap-28",
   "group": "Admin",
   "capability": "Manage team members, roles and permission sets",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /users, GET /roles, GET /permissionSets",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Users & permissions"
   },
   "check": "GET /users/{id} shows active=true and assigned role_id after invite acceptance",
   "source": "https://developers.pipedrive.com/docs/api/v1/Users; https://developers.pipedrive.com/docs/api/v1/Roles"
  },
  {
   "id": "cap-29",
   "group": "Admin",
   "capability": "Configure account-wide security settings and alerts",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /userSettings",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Security"
   },
   "check": "Security rule change is reflected in GET /userSettings response",
   "source": "https://developers.pipedrive.com/docs/api/v1/UserSettings; https://www.pipedrive.com (pricing: Ultimate plan)"
  },
  {
   "id": "cap-30",
   "group": "Admin",
   "capability": "View and manage subscription billing",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": "GET /billing/subscriptions/addons",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Subscription"
   },
   "check": "GET /billing/subscriptions/addons reflects active add-ons purchased",
   "source": "https://developers.pipedrive.com/docs/api/v1/Billing"
  },
  {
   "id": "cap-31",
   "group": "Admin",
   "capability": "Use a sandbox account to test integrations before production",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Developer sandbox account"
   },
   "check": "Sandbox account is a separate workspace isolated from the production account's data",
   "source": "https://pipedrive.readme.io/docs/developer-sandbox-account"
  },
  {
   "id": "cap-32",
   "group": "Admin",
   "capability": "Build and publish custom apps/extensions via the Developer Platform",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "OAuth 2.0 (POST /oauth/authorize, /oauth/token)",
    "mcp": null,
    "cli": null,
    "ui": "Developer Hub"
   },
   "check": "App registered in Developer Hub can obtain an access token via the OAuth flow",
   "source": "https://developers.pipedrive.com/docs/api/v1/Oauth; https://pipedrive.readme.io/docs/marketplace-creating-a-proper-app"
  }
 ],
 "attempts": [
  {
   "t": "02:52",
   "cap": "docs",
   "capability": "Find docs",
   "task": "Find API docs, OpenAPI, llms.txt, OAuth metadata",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "llms.txt at www.pipedrive.com/llms.txt (text/plain); OpenAPI v1 yaml at developers.pipedrive.com/docs/api/v1/openapi.yaml; OAuth AS metadata JSON at oauth.pipedrive.com/.well-known/oauth-authorization-server incl. registration_endpoint",
   "notes": "No MCP server found at mcp.pipedrive.com (wildcard *.pipedrive.com returns API 401 JSON)"
  },
  {
   "t": "02:52",
   "cap": "signup",
   "capability": "Sign up for 14-day free trial",
   "task": "Register trial with test email",
   "route": "none",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "No documented sign-up API; signup only via web form www.pipedrive.com/en/register",
   "notes": "Headless route does not exist"
  },
  {
   "t": "02:52",
   "cap": "signup",
   "capability": "Sign up for 14-day free trial",
   "task": "Register trial via web form (2 submits, second = one retry)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Form shows 'Unknown error. Please try again in a few seconds.'. page loads Google reCAPTCHA (key [redacted]) invisibly, no visible challenge",
   "notes": "Likely invisible reCAPTCHA score rejection of our agent's browser from datacenter IP; error message gives no reason."
  },
  {
   "t": "05:16",
   "cap": "signup",
   "capability": "Sign up (developer sandbox account)",
   "task": "Register free developer sandbox via developers.pipedrive.com/#signup",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Form (email, first name, password) -> POST app.pipedrive.com/signup/register/sandbox 200, logged in at [redacted]; no CAPTCHA on this form. GET /v1/users/me confirms company 'AgentDrives - Sandbox'",
   "notes": "Sandbox is documented (developers.pipedrive.com, 'free Sandbox account' in llms.txt). Regular trial signup was blocked; sandbox is the path that worked. First name used: AgentDrives."
  },
  {
   "t": "05:16",
   "cap": "verify",
   "capability": "Verify email",
   "task": "Check whether email verification is needed",
   "route": "none",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Only a welcome mail from info@marketplace.pipedrive.com arrived at 14:55; account worked immediately without verification",
   "notes": "No verification step required for sandbox"
  },
  {
   "t": "05:16",
   "cap": "credentials",
   "capability": "Get API token",
   "task": "Read personal API token from Settings > Personal preferences > API",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Token shown at /settings/api (40-hex); stored in secrets.env",
   "notes": "No headless way to mint the first token (OAuth needs a registered app + browser consent)"
  },
  {
   "t": "05:16",
   "cap": "first_call",
   "capability": "First API call",
   "task": "GET /v1/users/me and GET /api/v2/deals with x-api-token",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "users/me success:true id 28213389; v2/deals 200; headers x-ratelimit-limit 20 per 2s, x-daily-ratelimit-token-limit 150000",
   "notes": ""
  },
  {
   "t": "05:42",
   "cap": "cap-04",
   "capability": "Manage contact data (persons and organizations)",
   "task": "Create org + person linked to org, update person name, read back",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /api/v2/organizations -> id 1; POST /api/v2/persons -> id 1; PATCH name; GET /api/v2/persons/1 shows updated name, org_id 1, email",
   "notes": "v2 endpoints; 200 on create (not 201)"
  },
  {
   "t": "05:42",
   "cap": "cap-01",
   "capability": "Create and manage a deal in a pipeline",
   "task": "Create deal (EUR 1200) linked to person/org in stage 1, read back",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /api/v2/deals -> id 1; GET shows stage_id 1, value 1200, status open",
   "notes": ""
  },
  {
   "t": "05:42",
   "cap": "cap-02",
   "capability": "Customize pipeline stages and move deals through them",
   "task": "Create stage 'AgentDrives Review' and move the deal into it",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /api/v2/stages -> id 7; PATCH /api/v2/deals/1 stage_id; GET shows stage_id 7, stage_change_time 14:56:16Z",
   "notes": ""
  },
  {
   "t": "06:02",
   "cap": "cap-03",
   "capability": "Capture and manage leads before converting to deals",
   "task": "Create lead with value, read back, convert to deal",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/leads 201 id [id]; GET returns title/value; POST /api/v2/leads/{id}/convert/deal -> conversion status completed, deal_id 2; GET /api/v2/deals/2 shows title + person",
   "notes": "Lead conversion is async with a status endpoint"
  },
  {
   "t": "06:02",
   "cap": "cap-10",
   "capability": "Schedule and track activities, tasks and reminders tied to deals",
   "task": "Create call activity on deal, mark done, read back",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /api/v2/activities id 1; PATCH done=true; GET shows done True, deal_id 1",
   "notes": ""
  },
  {
   "t": "06:12",
   "cap": "cap-16",
   "capability": "Attach files and leave notes on records",
   "task": "Add a note and upload a file to the deal, list both",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/notes id 1; GET /v1/notes?deal_id=1 returns it; POST /v1/files multipart 201 id 1; GET /v1/deals/1/files lists note.txt",
   "notes": ""
  },
  {
   "t": "06:12",
   "cap": "cap-12",
   "capability": "Attach products/line items to deals and track installments",
   "task": "Create product, attach 3x EUR100 to deal, list; read installments",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "POST /api/v2/products id 1; POST /api/v2/deals/1/products 201; GET lists product_id 1, price 100, qty 3, sum 300. GET /api/v2/deals/installments -> 403 'The company does not have access to this feature'",
   "notes": "Line items fully work; installments plan-gated on the sandbox plan"
  },
  {
   "t": "06:52",
   "cap": "cap-13",
   "capability": "Search across deals, contacts, leads and other items",
   "task": "Search 'AgentDrives' across all item types",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /api/v2/itemSearch?term=AgentDrives returned deal x2, person, organization, product",
   "notes": "Converted lead appears as its deal"
  },
  {
   "t": "06:52",
   "cap": "cap-14",
   "capability": "Save and apply custom filters/views on lists",
   "task": "Save a deals filter and list deals through it",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/filters id 49 (title LIKE AgentDrives); GET /api/v2/deals?filter_id=49 returns both test deals",
   "notes": "A second filter (value > 1000, field_id 4) saved fine but returned no deals although the deal is EUR 1200; unclear semantics (currency conversion?), docs do not explain. Field ids must be looked up via /dealFields first; wrong id gives 'Field not found.'"
  },
  {
   "t": "06:52",
   "cap": "cap-15",
   "capability": "Add and manage custom fields on deals, persons, organizations, leads",
   "task": "Create a text custom deal field and set it on a deal",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/dealFields 200 key [redacted]; PATCH /api/v2/deals/1 custom_fields; GET shows value 'agent'",
   "notes": ""
  },
  {
   "t": "06:59",
   "cap": "cap-17",
   "capability": "Log and track phone calls against deals/contacts",
   "task": "Log a 5-minute connected call on the deal",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/callLogs id 5fe94ef4...; GET /v1/callLogs/{id} returns duration 300, outcome connected; auto-created activity_id 2",
   "notes": "to_phone_number is required; used placeholder '0' (no real number) since we have none"
  },
  {
   "t": "07:27",
   "cap": "cap-25",
   "capability": "Relate organizations to each other (parent/subsidiary, etc.)",
   "task": "Make Test Org parent of a new subsidiary org",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/organizationRelationships 201 id 1; GET returns type parent, owner org 1, linked org 2",
   "notes": ""
  },
  {
   "t": "08:17",
   "cap": "cap-23",
   "capability": "Set sales goals and monitor team progress toward them",
   "task": "Create quarterly deals-won goal, win the deal, read goal results",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/goals 201 id 79516661...; PATCH deal status=won; GET /v1/goals/{id}/results progress 0 right after, 1 ~30s later",
   "notes": "Progress is computed asynchronously"
  },
  {
   "t": "08:25",
   "cap": "cap-24",
   "capability": "Receive real-time event notifications via webhooks",
   "task": "Register deal.change webhook v2 to our URL, change a deal, check delivery",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/webhooks 201 id 1720408 (first try with event_action 'update' + v2.0 -> 400 with clear message 'Version 2.0 can be used only with create/change/delete'); after PATCH deal, GET /v1/webhooks shows last_delivery_time 14:58:36Z, last_http_status 404 (our receiver path does not exist)",
   "notes": "Delivery confirmed from Pipedrive's side; we had no receiver to read the payload"
  },
  {
   "t": "11:00",
   "cap": "credentials",
   "capability": "Get OAuth credentials for the official MCP server",
   "task": "Dynamic client registration + authorization code (PKCE) with resource=mcp.pipedrive.ai/mcp",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST oauth.pipedrive.com/oauth/register 201 (no auth needed, RFC 7591); /oauth/authorize consent 'Allow and Install' in browser; POST /oauth/token -> Bearer token (1h) + refresh token, api_domain [redacted]",
   "notes": "Discovery via WWW-Authenticate resource_metadata -> oauth-protected-resource -> AS metadata works exactly as MCP spec expects. Consent requires a logged-in browser once. Granted scope was wider than requested (incl. admin)."
  },
  {
   "t": "11:00",
   "cap": "cap-10",
   "capability": "Schedule and track activities, tasks and reminders tied to deals",
   "task": "Via official MCP with OAuth bearer: addActivity task on MCP deal, verify via REST",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "tools/call addActivity -> id 3; GET /api/v2/activities/3 returns subject 'AgentDrives MCP OAuth task', deal_id 3",
   "notes": "Documented MCP + documented OAuth route"
  },
  {
   "t": "13:04",
   "cap": "cap-06",
   "capability": "Build workflow automations (triggers/actions) for the sales cycle",
   "task": "Open Automations to build a deal-won follow-up workflow",
   "route": "browser",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Settings > Tools > Automations shows upsell 'Get more done with Automations ... View billing plans' on sandbox (Lite plan per Settings > Pipedrive MCP 'Included with your Lite billing plan'); no automation API in OpenAPI v1/v2",
   "notes": "Sandbox runs on Lite; automations need Growth+"
  },
  {
   "t": "13:04",
   "cap": "cap-07",
   "capability": "Automatically route and assign leads to reps with rules",
   "task": "Open Automatic assignment settings",
   "route": "browser",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Settings > Automatic assignment: 'Feature available on the Premium plan or higher.' + View billing plans",
   "notes": "No API surface either"
  },
  {
   "t": "13:04",
   "cap": "cap-22",
   "capability": "Plan and track projects/boards after a deal is won (Projects add-on)",
   "task": "List projects and boards via API",
   "route": "api",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "GET /v1/projects and /v1/projects/boards -> HTTP 402 {'error':'Required suites missing','errorCode':402}",
   "notes": "402 is used as a plan-gate code, not a payment challenge (no PAYMENT-REQUIRED / x402 body)"
  },
  {
   "t": "13:04",
   "cap": "cap-09",
   "capability": "Use Nova meeting intelligence to brief, transcribe and recap calls into CRM updates",
   "task": "Open Nova to get a meeting recap on a deal",
   "route": "browser",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Main menu Nova links to /nova-paywall ('Manage Nova access'); GET /v1/meetings/userProviderLinks 404; no Nova API documented",
   "notes": "Would also need a real recorded meeting with a video provider, which we cannot create without other people"
  },
  {
   "t": "13:48",
   "cap": "cap-09",
   "capability": "Use Nova meeting intelligence to brief, transcribe and recap calls into CRM updates",
   "task": "Re-check Nova access after paywall page",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "'Manage Nova access' leads to Settings > Manage users showing 'Nova: 5' seats with a Pipedrive Nova permission column, so Nova is not plan-gated on this account (corrects the previous paid-only line). A recap needs a real recorded meeting via a connected calendar/video provider (Zoom/Google Meet/Teams); we have no such account and no counterpart",
   "notes": "No API for Nova recaps; v1 only has POST/DELETE /meetings/userProviderLinks for video-call integrations"
  },
  {
   "t": "13:48",
   "cap": "cap-05",
   "capability": "Sync email and send/track messages from a unified sales inbox",
   "task": "List synced mail threads; look for a send route",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "GET /v1/mailbox/mailThreads?folder=inbox 200 with 0 threads (no mailbox connected). OpenAPI v1/v2 have only GET/PUT/DELETE on mailbox objects, no send endpoint; MCP has no mail tools. Sending/tracking needs Email sync with a Google/Microsoft/IMAP mailbox",
   "notes": "The agent's inbox is receive-only (no IMAP/SMTP), so we could not connect a mailbox; the API itself is read-only for mail"
  },
  {
   "t": "13:48",
   "cap": "cap-08",
   "capability": "View real-time sales reports, dashboards and forecasts",
   "task": "Read pipeline performance via API (goal results after winning a deal)",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "GET /v1/goals/{id}/results progress went 0 -> 1 after deal marked won; Insights page (browser) lists the goal and 'Reports 0/15'. No documented API for Insights reports/dashboards in OpenAPI v1/v2",
   "notes": "Only goal progress is readable headless; dashboards/reports are UI-only"
  },
  {
   "t": "16:57",
   "cap": "cap-08",
   "capability": "View real-time sales reports, dashboards and forecasts",
   "task": "Build a Deal > Performance report in Insights and check it reflects our deals",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Insights > Create > Report > Deal/Performance renders Oct 2026 bar: 3 deals (1 Won, 2 Open) = exactly our 3 test deals after marking deal 1 won (screenshot browser/shots/033.png). Banner 'Couldn't load data ... Account under maintenance' shown but chart loaded",
   "notes": "Saving the report did not complete in our second browser call (page state not kept); viewing works. No documented reports API"
  },
  {
   "t": "16:57",
   "cap": "cap-21",
   "capability": "Create and send email marketing campaigns (Campaigns add-on)",
   "task": "Open Campaigns",
   "route": "browser",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "/marketing/campaigns: 'Your Campaigns subscription has ended. To continue using Campaigns, please answer two questions for account review'",
   "notes": "Add-on not active on sandbox; also sending needs account review by Pipedrive"
  },
  {
   "t": "16:57",
   "cap": "cap-18",
   "capability": "Create contracts and collect e-signatures (Smart Docs)",
   "task": "Open Documents settings",
   "route": "browser",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Settings > Tools > Documents shows Smart Docs upsell with 'Manage subscription'",
   "notes": "Add-on"
  },
  {
   "t": "16:58",
   "cap": "cap-31",
   "capability": "Use a sandbox account to test integrations before production",
   "task": "Create a developer sandbox and confirm it is a separate company",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "developers.pipedrive.com sandbox signup created company 'AgentDrives - Sandbox' (domain [redacted]s-sandbox, company_id 16604369); GET /v1/users/me confirms",
   "notes": "Free, no card, no CAPTCHA on this form, works from a datacenter IP"
  },
  {
   "t": "16:58",
   "cap": "cap-32",
   "capability": "Build and publish custom apps/extensions via the Developer Platform",
   "task": "Register an OAuth app and obtain an access token",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST oauth.pipedrive.com/oauth/register 201 client_id 85aa…; authorize consent in browser; POST /oauth/token returned bearer + refresh; bearer used on MCP addActivity (activity 3 verified via REST)",
   "notes": "Dynamic Client Registration is open (no auth) and advertised in AS metadata; Developer Hub app creation UI not tested"
  },
  {
   "t": "16:58",
   "cap": "cap-28",
   "capability": "Manage team members, roles and permission sets",
   "task": "Read users, roles and permission sets",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "GET /v1/users (1 user, admin), /v1/roles ('Unassigned users'), /v1/permissionSets (Deals admin, Deals regular...) all 200",
   "notes": "Did not invite a second user: it sends an invite mail and needs a second address/seat; read-only part verified"
  },
  {
   "t": "16:58",
   "cap": "cap-29",
   "capability": "Configure account-wide security settings and alerts",
   "task": "Read user settings; open Security rules",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "GET /v1/userSettings 200 (read-only settings object); Settings > Security center > Rules page loads ('Enforce security rules on all users'). No documented write API for security rules",
   "notes": "Did not change a rule"
  },
  {
   "t": "16:58",
   "cap": "cap-30",
   "capability": "View and manage subscription billing",
   "task": "Read add-on subscriptions",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "GET /v1/billing/subscriptions/addons 200 data [] (no add-ons). No documented write/upgrade endpoint; settings/billing URL 404 in sandbox",
   "notes": "Read-only billing surface"
  },
  {
   "t": "17:57",
   "cap": "pay",
   "capability": "Pay step",
   "task": "Probe 402/x402/MPP/L402, well-known, registries, billing API, checkout",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "api.pipedrive.com/v1/deals unauth -> 401 JSON (no PAYMENT-REQUIRED/WWW-Authenticate Payment); x402./mpp./agents./mcp.pipedrive.com all hit the API wildcard -> 401; /v1/projects -> 402 'Required suites missing' (plan gate, no x402 body); www.pipedrive.com/.well-known/ucp -> redirect to soft 404 HTML; no pipedrive entries in x402 Bazaar or mpp.dev/api/services; OpenAPI v1/v2 and llms.txt mention no x402/MPP/USDC; billing API is GET /billing/subscriptions/addons only; MCP has no billing tools. sandbox /settings/billing 404",
   "notes": "Upgrade happens inside the logged-in web app; we could not reach the checkout (trial signup blocked, sandbox has no billing page)"
  },
  {
   "t": "17:57",
   "cap": "cap-27",
   "capability": "Connect third-party apps from the Marketplace",
   "task": "Install an app and list connections",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Our OAuth app 'AgentDrives test driver' was installed through the marketplace consent screen ('Allow and Install') and its token works; GET /v1/userConnections returned 200 with an empty body (it only lists Google/Microsoft connections)",
   "notes": "Did not install a third-party Marketplace app"
  },
  {
   "t": "17:57",
   "cap": "cap-11",
   "capability": "Sync calendar and share a booking link for meetings",
   "task": "Check calendar sync / scheduler",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Needs a Google/Microsoft calendar account to sync (Settings > Calendar sync); no documented API to create a scheduler booking link",
   "notes": "We own no calendar account"
  },
  {
   "t": "17:57",
   "cap": "cap-26",
   "capability": "Use Pipedrive via native Android/iOS mobile apps",
   "task": "Mobile app",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "Out of scope for a server-side agent; no device",
   "notes": ""
  },
  {
   "t": "17:57",
   "cap": "cap-19",
   "capability": "Capture leads via web forms and chatbot (LeadBooster)",
   "task": "Open LeadBooster",
   "route": "browser",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "/leadbooster -> 'page doesn't exist' in sandbox; no LeadBooster menu entry found",
   "notes": "Trial page says LeadBooster is included in the 14-day trial, which we could not start"
  },
  {
   "t": "17:57",
   "cap": "cap-20",
   "capability": "Identify and track companies browsing your website",
   "task": "Open Web Visitors",
   "route": "browser",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "/web-visitors -> 'page doesn't exist'; add-on not present in sandbox",
   "notes": ""
  },
  {
   "t": "19:33",
   "cap": "cleanup",
   "capability": "Clean up created data",
   "task": "Delete every object we created, revoke OAuth",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "22 DELETE calls (webhook, goal, 2 filters, call log, file, note, org relationship, deal product, 3 activities, 3 deals, lead, product, person, 2 orgs, stage, deal field) all 200; GET /api/v2/deals and /persons return empty; POST /oauth/revoke refresh token",
   "notes": ""
  },
  {
   "t": "19:33",
   "cap": "cancel",
   "capability": "Cancel/downgrade plan",
   "task": "Check for a plan to cancel",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Settings > Billing (/settings/subscription): 'You are running free Pipedrive subscription' - nothing recurring was started",
   "notes": "Sandbox is free; no subscription to cancel"
  },
  {
   "t": "19:33",
   "cap": "delete",
   "capability": "Delete account and data",
   "task": "Find a way to delete the sandbox company/account",
   "route": "browser",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "No delete/close control on /settings/subscription, /settings/profile or /settings/company_settings; /settings/companies only offers 'Leave company'; no API endpoint for account deletion in OpenAPI v1/v2. Docs (pipedrive.readme.io/docs/developer-sandbox-account): inactive sandboxes are deleted after 45 days without an app; questions to marketplace.devs@pipedrive.com",
   "notes": "Data deleted via API; the empty sandbox remains until Pipedrive's inactivity purge (we created no Developer Hub app)"
  },
  {
   "t": "19:42",
   "cap": "first_action",
   "capability": "First real action",
   "task": "Create an organization via API",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /api/v2/organizations -> id 1 'AgentDrives Test Org'; GET returns it",
   "notes": ""
  }
 ],
 "stale": false,
 "icon": "/logos/pipedrive.png",
 "monitored": false,
 "verdict": "Our agent gets in on its own: L3 · Does the work, through the free developer sandbox form in a browser, no bot check met along the way. Deletion stopped it first: it deleted every record it created through the API, but found no account or company delete, only \"Leave company,\" with inactive sandboxes purged later. Through the API and the official MCP server it created, moved, converted, searched, filtered and deleted CRM data end to end. Paying needs a human too: the pricing page returned a Cloudflare block, and the regular trial sign-up gave a generic error, so a person has to start the trial and checkout.",
 "page": "https://agentdrives.com/tools/pipedrive?via=api"
}