{
 "slug": "copper",
 "name": "Copper",
 "url": "https://copper.com",
 "domain": "copper.com",
 "category": "crm",
 "category_name": "CRM",
 "tested_at": "2026-10-02",
 "run": "20261002T151322Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261001T214755Z",
   "date": "2026-10-01",
   "level": 4,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": null,
    "robots": "start"
   }
  },
  {
   "run": "20261002T151322Z",
   "date": "2026-10-02",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   },
   "why": "product"
  }
 ],
 "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": "part",
   "text": "Work done: 56% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "part",
   "text": "Reaches the checkout: stopped at the card form",
   "value": "ready",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Nothing to cancel; can't delete its account",
   "at": "delete",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "part",
   "text": "Some docs agents can read: llms.txt",
   "have": [
    "llms_txt"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "part",
   "text": "Work done: 56% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "part",
   "text": "Reaches the checkout: stopped at the card form",
   "value": "ready",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Nothing to cancel; can't delete its account",
   "at": "delete",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 3,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": "5/9",
 "scores": {
  "coverage": 41,
  "reliability": 100,
  "resilience": null,
  "setup": 50,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 50,
  "security": null,
  "standards": []
 },
 "reliability_method": "first-try",
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": 56,
 "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": 1,
 "drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "closed"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-15"
  },
  "browser": {
   "state": "unknown",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "developer.copper.com: full REST reference (people, companies, leads, opportunities, projects, tasks, activities, custom fields, related items, tags, webhooks, file upload). llms.txt exists but is marketing text. No OpenAPI file found."
  },
  "signup": {
   "status": "blocked",
   "note": "Every visible sign-up (www.copper.com/signup, app.copper.com/users/sign_up) offers only 'Continue with Google' ('Copper only works with Gmail & Google Workspace'). An agent without a Google account cannot start the trial through the UI. No CAPTCHA seen."
  },
  "verify": {
   "status": "browser",
   "note": "Reached via the internal email sign-up: confirmation mail from notifier@copper.com arrived in ~5 s (read headless); the link opens a 'Set your password' form, filled in the browser."
  },
  "credentials": {
   "status": "browser",
   "note": "Settings > Integrations > API Keys > Generate API Key (UI only; onboarding wizard must be skipped first). No API to mint keys; OAuth apps need Copper's approval.",
   "via": ""
  },
  "first_call": {
   "status": "headless",
   "note": "GET /developer_api/v1/account 200 with X-PW-AccessToken, X-PW-Application, X-PW-UserEmail headers"
  },
  "first_action": {
   "status": "headless",
   "note": "POST /companies and /people 200, read back with GET"
  },
  "pay": {
   "status": "browser",
   "grade": "P2",
   "rails": [],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "no-card trial",
   "note": "No 402/x402/MPP/L402, no UCP or agent-registration metadata, not in x402 Bazaar or mpp.dev. Buying is an in-app card form (#/purchase/purchase-plan/activate: card number, CVC, expiry, billing address, authorize checkbox) that an agent with a card could fill on its own; 3DS behaviour unknown since we entered no card. No billing API. Trial: 14-day Business plan without a card."
  },
  "cancel": {
   "status": "n/a",
   "note": "Nothing to cancel: our agent started no paid plan.",
   "docs_note": "Nothing to cancel (no-card trial). Documented: Settings > Billing > 'Request Cancellation' in the web app (cancels at next renewal), or billing support by chat/email. No billing API. Not exercised.",
   "docs_grade": "",
   "nothing": "no_plan"
  },
  "delete": {
   "status": "blocked",
   "note": "No delete-account control in Settings and no API; help center only covers deleting users and records. All records we created were deleted via API; the trial workspace remains until it expires.",
   "account": 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": 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": false,
  "cli": false,
  "sdk": false,
  "mcp": "none",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST v1, ~110 documented operations, 3-header auth",
  "openapi": "none published",
  "mcp": "none documented; an OAuth-gated api.copper.com/mcp answers 401 with no discovery",
  "llms_txt": "marketing summary only, no API pointers",
  "webhooks": "create/list/delete worked"
 },
 "can_do": [
  "Create, update, search and delete people and companies",
  "Create deals, move them through pipeline stages, mark them won or lost",
  "Create, assign and complete tasks linked to a deal",
  "Log calls and notes and read the unified activity feed",
  "Add custom fields and tags and filter records by tag",
  "Create and close (legacy) projects and link them to a deal",
  "Set a deal's currency",
  "Subscribe to and remove webhooks",
  "Build a task automation in the web UI that fires when a deal is won via the API"
 ],
 "cannot_do": [
  {
   "what": "Sign up through any visible form without a Google account",
   "why": "UI offers only 'Continue with Google'"
  },
  {
   "what": "Create an API key headlessly",
   "why": "keys are generated only in Settings > API Keys"
  },
  {
   "what": "Send or sync email, bulk email",
   "why": "email features run through Gmail; no send-email API; bulk 'Email' action not completed in the browser"
  },
  {
   "what": "Move a project through pipeline stages via API",
   "why": "documented /projects is the legacy object with Open/Completed only"
  },
  {
   "what": "Build or read reports via API",
   "why": "no report endpoints (404)"
  },
  {
   "what": "Create a web form",
   "why": "Forms builder card did not respond to automated clicks; no forms API"
  },
  {
   "what": "Create leads",
   "why": "POST /leads 403 'Feature not enabled' until Leads is switched on in settings"
  },
  {
   "what": "Delete the account",
   "why": "no control in Settings or API"
  }
 ],
 "blockers": [
  "Google-only sign-up in the UI",
  "API keys only from the web UI",
  "Email features tied to Gmail"
 ],
 "tips_for_owner": [
  "Show the email sign-up form you already support",
  "Let agents mint API keys after sign-up",
  "Publish an OpenAPI file and llms.txt API links",
  "Document the MCP endpoint with OAuth discovery",
  "Expose pipeline-based projects in the API",
  "Add a self-serve delete-account path"
 ],
 "tips_for_agents": [
  "Use the REST API with three headers: X-PW-AccessToken, X-PW-Application: developer_api, X-PW-UserEmail.",
  "Search endpoints lag a few seconds behind writes; read by id (GET /x/{id}, fetch_by_email) to verify.",
  "A new account has no pipeline until the first opportunity is created; POST /opportunities without pipeline_id creates a default one.",
  "Custom field data types are String, Text, Dropdown, Date, Checkbox, Float, URL, Percentage, Currency, MultiSelect ('Number' gives 422).",
  "Leads are off by default (403 'Feature not enabled').",
  "Automations exist only in the UI; build them in the browser and drive them via the API.",
  "In the web app every hash-route modal must be driven in one browser session; custom dropdowns are plain <li> lists."
 ],
 "selfhost": null,
 "summary": "Copper's REST API is solid: once an agent has a key it can run the core CRM loop of contacts, deals, stages, won/lost, tasks, activities, custom fields and tags headlessly and verify every step. Getting in is the problem. The visible sign-up is Google-only. Email features depend on Gmail, reports and automations are UI-only, and there is no agent payment rail or self-serve account deletion.",
 "wall": "Google-only sign-up, API keys only in UI",
 "plan_scope": "no-card trial (14-day Business plan)",
 "robots_stop": null,
 "robots": {
  "rule": "star",
  "step": null,
  "seen": "2026-10-15",
  "held": true,
  "since": "2026-10-11",
  "drives": 2,
  "until": "2026-10-15"
 },
 "plain": {
  "summary": "Copper is a sales CRM built tightly around Gmail and Google accounts. Once our agent had an account and an API key, it ran the day-to-day sales work (contacts, deals, tasks, tags) entirely on its own. Getting in is the hard part: the sign-up page offers only Google, and API keys are made only on a settings page in the browser.",
  "can_do": [
   "Create and update contacts and companies, then find and remove them later",
   "Move a sales deal through stages and mark it won or lost",
   "Create and complete follow-up tasks tied to a deal",
   "Log calls and notes and read a combined activity timeline",
   "Add custom fields and tags to records and filter by them",
   "Set up a task that automatically fires when a deal is marked won",
   "Set a deal's currency",
   "Turn notifications on or off for record changes"
  ],
  "cannot_do": [
   {
    "what": "Sign up for an account on its own",
    "why": "the sign-up page only offers 'Continue with Google'"
   },
   {
    "what": "Get an API key without a browser",
    "why": "keys can only be generated from a settings page"
   },
   {
    "what": "Send or sync email through the product",
    "why": "email features require a connected Gmail account"
   },
   {
    "what": "Move a delivery project through its stages",
    "why": "the documented project feature only has open/closed, not stages"
   },
   {
    "what": "Pull a sales report",
    "why": "no reporting endpoint exists, only a dashboard in the app"
   },
   {
    "what": "Create a lead-capture web form",
    "why": "the form builder did not respond to automated use, and there's no API for it"
   },
   {
    "what": "Delete the account",
    "why": "no delete option exists in settings or via the API"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Contacts",
   "capability": "Add and manage a contact (person or company)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST/GET/PUT/DELETE /developer_api/v1/people or /companies",
    "mcp": null,
    "cli": null,
    "ui": "People / Companies directory"
   },
   "check": "GET /people/{id} returns the created/updated record",
   "source": "https://www.copper.com/manage-contacts; https://developer.copper.com/"
  },
  {
   "id": "cap-02",
   "group": "Pipelines",
   "capability": "Create and track a sales opportunity through pipeline stages",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST/GET/PUT /developer_api/v1/opportunities",
    "mcp": null,
    "cli": null,
    "ui": "Pipelines board"
   },
   "check": "GET /opportunities/{id} shows pipeline_stage_id changed to target stage",
   "source": "https://www.copper.com/track-leads; https://www.copper.com/pricing"
  },
  {
   "id": "cap-03",
   "group": "Pipelines",
   "capability": "Mark a deal as won/lost",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PUT /developer_api/v1/opportunities/{id} (status field)",
    "mcp": null,
    "cli": null,
    "ui": "Opportunity card 'Mark as Won/Lost' dialog"
   },
   "check": "GET /opportunities/{id} status field = Won or Lost",
   "source": "https://www.copper.com/track-leads; https://www.copper.com/manage-projects"
  },
  {
   "id": "cap-04",
   "group": "Projects",
   "capability": "Convert a closed deal into a delivery project",
   "weight": "core",
   "plan": "basic",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Mark-deal-as-won > workflow selection dialog"
   },
   "check": "UI shows a new Project record linked to the originating Opportunity",
   "source": "https://www.copper.com/manage-projects"
  },
  {
   "id": "cap-05",
   "group": "Projects",
   "capability": "Manage a project through its pipeline (create, move stage, close)",
   "weight": "core",
   "plan": "basic",
   "surfaces": {
    "api": "POST/GET/PUT /developer_api/v1/projects",
    "mcp": null,
    "cli": null,
    "ui": "Projects board"
   },
   "check": "GET /projects/{id} shows updated status/stage",
   "source": "https://www.copper.com/manage-projects; https://www.copper.com/pricing"
  },
  {
   "id": "cap-06",
   "group": "Tasks",
   "capability": "Assign and complete a task or follow-up",
   "weight": "core",
   "plan": "basic",
   "surfaces": {
    "api": "POST/GET/PUT /developer_api/v1/tasks",
    "mcp": null,
    "cli": null,
    "ui": "Task list / deal & project cards"
   },
   "check": "GET /tasks/{id} status = Completed",
   "source": "https://www.copper.com/manage-projects; https://www.copper.com/pricing"
  },
  {
   "id": "cap-07",
   "group": "Email",
   "capability": "Send and sync email through Gmail inside Copper",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /developer_api/v1/activities (email type) via Gmail sync",
    "mcp": null,
    "cli": null,
    "ui": "Gmail inbox with Copper sidebar; Chrome extension"
   },
   "check": "Contact's activity feed shows the sent/received email logged",
   "source": "https://www.copper.com/ (Google Workspace section); https://www.copper.com/google-workspace-crm"
  },
  {
   "id": "cap-08",
   "group": "Email",
   "capability": "Send a bulk/mass email to a filtered list of contacts",
   "weight": "core",
   "plan": "professional",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Bulk email composer from a saved list/filter"
   },
   "check": "Email Sent Activity logged on each targeted contact; send report shows recipient count",
   "source": "https://www.copper.com/marketing-tools; https://www.copper.com/pricing"
  },
  {
   "id": "cap-09",
   "group": "Automation",
   "capability": "Automate a stage-triggered email or task (pipeline/workflow automation)",
   "weight": "core",
   "plan": "professional",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Pipeline/Project settings > Automations"
   },
   "check": "Moving an opportunity/project to the configured stage produces the automated email send or task creation, visible in the activity feed",
   "source": "https://www.copper.com/track-leads; https://www.copper.com/marketing-tools; https://www.copper.com/pricing"
  },
  {
   "id": "cap-10",
   "group": "Lead capture",
   "capability": "Capture a lead from an embedded website contact form",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /developer_api/v1/people (via webform webhook)",
    "mcp": null,
    "cli": null,
    "ui": "Website contact form builder"
   },
   "check": "New Person/Opportunity record created in Copper after test form submission",
   "source": "https://www.copper.com/marketing-tools; https://www.copper.com/manage-contacts"
  },
  {
   "id": "cap-11",
   "group": "Lead capture",
   "capability": "Scan a business card to create a contact",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "Mobile app",
    "ui": "Mobile app business card scanner"
   },
   "check": "New Person record appears in Copper after a scan",
   "source": "https://www.copper.com/manage-contacts; https://www.copper.com/mobile-crm"
  },
  {
   "id": "cap-12",
   "group": "Email",
   "capability": "Build and send an email sequence/rekindle campaign",
   "weight": "secondary",
   "plan": "professional",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Email Sequences / Rekindle automation builder"
   },
   "check": "Contact's activity feed shows sequential automated emails sent over time per the configured schedule",
   "source": "https://www.copper.com/marketing-tools"
  },
  {
   "id": "cap-13",
   "group": "Email",
   "capability": "Track email opens and link clicks",
   "weight": "secondary",
   "plan": "professional",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Email activity / click-tracking panel"
   },
   "check": "Sent email record shows opened/clicked timestamp after recipient interaction",
   "source": "https://www.copper.com/marketing-tools; https://www.copper.com/manage-contacts"
  },
  {
   "id": "cap-14",
   "group": "Email",
   "capability": "Use AI to draft or rewrite an email",
   "weight": "secondary",
   "plan": "professional",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Gmail compose > Copper AI writing assistant"
   },
   "check": "Compose window shows AI-generated/rewritten draft replacing or augmenting the typed text",
   "source": "https://www.copper.com/marketing-tools"
  },
  {
   "id": "cap-15",
   "group": "Templates",
   "capability": "Create and reuse an email/pipeline/form template",
   "weight": "secondary",
   "plan": "basic",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Template gallery (email, pipeline, project)"
   },
   "check": "New record created from template pre-fills the template's stages/fields/content",
   "source": "https://www.copper.com/ (templates section); https://www.copper.com/manage-projects"
  },
  {
   "id": "cap-16",
   "group": "Customization",
   "capability": "Add custom fields to a record type",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /developer_api/v1/custom_field_definitions",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Custom Fields"
   },
   "check": "New field appears on the record form and GET /people/{id} includes the custom_fields value",
   "source": "https://www.copper.com/manage-contacts; https://www.copper.com/track-leads; https://developer.copper.com/"
  },
  {
   "id": "cap-17",
   "group": "Customization",
   "capability": "Tag, label and filter records",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /developer_api/v1/people (tags field)",
    "mcp": null,
    "cli": null,
    "ui": "Record detail > Tags; saved filters"
   },
   "check": "GET /people/{id} tags array contains the applied tag; saved filter returns matching records",
   "source": "https://www.copper.com/manage-contacts; https://www.copper.com/manage-projects"
  },
  {
   "id": "cap-18",
   "group": "Enrichment",
   "capability": "Auto-enrich a new contact with external data",
   "weight": "secondary",
   "plan": "basic",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Contact record > enrichment panel"
   },
   "check": "Newly created Person record is populated with social/company fields without manual entry",
   "source": "https://www.copper.com/manage-contacts; https://www.copper.com/pricing"
  },
  {
   "id": "cap-19",
   "group": "Reporting",
   "capability": "Build a custom report on pipeline/revenue/activity",
   "weight": "secondary",
   "plan": "professional",
   "surfaces": {
    "api": "GET /developer_api/v1/report/activities (and related report endpoints)",
    "mcp": null,
    "cli": null,
    "ui": "Reporting dashboard"
   },
   "check": "Generated report reflects the underlying pipeline data (e.g. matches a manual GET /opportunities count)",
   "source": "https://www.copper.com/track-leads; https://www.copper.com/sales-reporting; https://www.copper.com/pricing"
  },
  {
   "id": "cap-20",
   "group": "Alerts",
   "capability": "Receive AI-flagged alerts on stalled/high-value deals",
   "weight": "secondary",
   "plan": "basic",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Pipeline/Project board flag badges and notifications"
   },
   "check": "A deal inactive beyond the configured threshold shows a flag icon and triggers a notification",
   "source": "https://www.copper.com/track-leads; https://www.copper.com/manage-projects"
  },
  {
   "id": "cap-21",
   "group": "Activity",
   "capability": "View a unified activity feed across contacts/deals/projects",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /developer_api/v1/activities/search",
    "mcp": null,
    "cli": null,
    "ui": "Activity Feed"
   },
   "check": "A newly logged call/email/note appears in the feed in near-real time",
   "source": "https://www.copper.com/ (Activity Feed); https://www.copper.com/manage-projects"
  },
  {
   "id": "cap-22",
   "group": "Mobile",
   "capability": "Log calls and SMS automatically via the mobile app",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "Mobile app (iOS/Android)",
    "ui": "Mobile app call/SMS logging"
   },
   "check": "Contact's activity feed shows an auto-logged call/SMS entry after a phone interaction",
   "source": "https://www.copper.com/mobile-crm; https://www.copper.com/pricing"
  },
  {
   "id": "cap-23",
   "group": "Browser extension",
   "capability": "Add/update contacts and log activity from LinkedIn or any webpage",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Chrome extension on LinkedIn/any site"
   },
   "check": "A Person record is created/updated in Copper after using the extension on a LinkedIn profile",
   "source": "https://www.copper.com/linkedin-crm; https://www.copper.com/marketing-tools"
  },
  {
   "id": "cap-24",
   "group": "Documents",
   "capability": "Draft and send a proposal/contract from a deal",
   "weight": "secondary",
   "plan": "professional",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Deal record > Docs/Proposals (Google Docs, PandaDoc, DocuSign integration)"
   },
   "check": "Opportunity record shows an attached/linked proposal document with sent/signed status",
   "source": "https://www.copper.com/ (Contracts & proposals); https://www.copper.com/marketing-tools"
  },
  {
   "id": "cap-25",
   "group": "Files",
   "capability": "Sync and attach Google Drive files to records",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Record detail > Files panel (Google Drive sync)"
   },
   "check": "A file added in the linked Google Drive folder appears attached to the Copper record",
   "source": "https://www.copper.com/manage-projects; https://www.copper.com/google-workspace-crm"
  },
  {
   "id": "cap-26",
   "group": "Calendar",
   "capability": "Sync events with Google Calendar",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Google Calendar sync panel"
   },
   "check": "An event created in Google Calendar with a tracked contact appears logged on that contact's activity feed",
   "source": "https://www.copper.com/pricing; https://www.copper.com/google-workspace-crm"
  },
  {
   "id": "cap-27",
   "group": "API",
   "capability": "Build custom integrations via the Developer API",
   "weight": "secondary",
   "plan": "professional",
   "surfaces": {
    "api": "REST https://api.copper.com/developer_api/",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Authenticated request to any documented endpoint (e.g. GET /people) returns JSON data",
   "source": "https://developer.copper.com/; https://www.copper.com/pricing"
  },
  {
   "id": "cap-28",
   "group": "Integrations",
   "capability": "Connect third-party apps (Mailchimp, Slack, QuickBooks, Zapier, etc.)",
   "weight": "secondary",
   "plan": "professional",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Integrations marketplace"
   },
   "check": "Enabled integration shows 'Connected' status and syncs a test record to the external app",
   "source": "https://www.copper.com/integrations; https://www.copper.com/pricing"
  },
  {
   "id": "cap-29",
   "group": "Team",
   "capability": "Invite and collaborate with teammates on shared records",
   "weight": "secondary",
   "plan": "basic",
   "surfaces": {
    "api": "GET /developer_api/v1/users",
    "mcp": null,
    "cli": null,
    "ui": "Settings > Users; record Owner field"
   },
   "check": "Invited teammate appears in GET /users and can be assigned as Owner on a record",
   "source": "https://www.copper.com/pricing"
  },
  {
   "id": "cap-30",
   "group": "Support",
   "capability": "Get help via in-app live chat",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "In-app live chat widget"
   },
   "check": "Live chat widget opens and connects to a support agent",
   "source": "https://www.copper.com/pricing"
  },
  {
   "id": "cap-31",
   "group": "Support",
   "capability": "Get personal onboarding / premium support (CSM)",
   "weight": "peripheral",
   "plan": "professional",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Account > Success plan / onboarding scheduling"
   },
   "check": "Eligible annual Professional/Business account can book an onboarding consultant session",
   "source": "https://www.copper.com/pricing"
  },
  {
   "id": "cap-32",
   "group": "Admin",
   "capability": "Set multi-currency on opportunities",
   "weight": "peripheral",
   "plan": "business",
   "surfaces": {
    "api": "PUT /developer_api/v1/opportunities (currency field)",
    "mcp": null,
    "cli": null,
    "ui": "Opportunity amount field currency selector"
   },
   "check": "Opportunity record shows a non-default currency on its amount field",
   "source": "https://www.copper.com/pricing"
  }
 ],
 "attempts": [
  {
   "t": "01:59",
   "cap": "docs",
   "capability": "find docs",
   "task": "Find developer docs, llms.txt, discovery files",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "developer.copper.com 200 (REST API docs); www.copper.com/llms.txt 200 (marketing summary, mentions REST API+OAuth); no .well-known oauth/ucp, no SKILL.md/auth.md; x402./mpp./agents. subdomains do not resolve",
   "notes": ""
  },
  {
   "t": "01:59",
   "cap": "signup",
   "capability": "sign up",
   "task": "Start the 14-day free trial (no card) via the public sign-up page",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "www.copper.com/signup and app.copper.com/users/sign_up only offer 'Continue with Google' (Google OAuth); page text: 'Copper only works with Gmail & Google Workspace.' No email/password form rendered. We hold no Google account.",
   "notes": "No CAPTCHA seen; the wall is the mandatory Google identity."
  },
  {
   "t": "05:41",
   "cap": "verify",
   "capability": "verify email",
   "task": "Confirm email from the agent's inbox and set the password",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "'Confirm Your Email Address' from notifier@copper.com arrived in ~5s; link -> /users/confirmation?confirmation_token=•••• -> 'Set your password' form; after submit landed in app.copper.com/companies/621205/app#/welcome with '14 days left in your Business plan trial'",
   "notes": "Mail read headless; password form filled in browser (Rails form, no captcha)"
  },
  {
   "t": "05:41",
   "cap": "credentials",
   "capability": "get API key",
   "task": "Generate an API key",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Settings > Integrations > API Keys > 'Generate API Key' showed a 32-hex key in the table",
   "notes": "No headless route to create keys; onboarding wizard modals must be skipped first. OAuth apps need partner approval per docs."
  },
  {
   "t": "05:51",
   "cap": "first_call",
   "capability": "first API call",
   "task": "GET /account and /users/me",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /developer_api/v1/account 200 {id:621205,name:\"AgentDrives Test's Company\"}; /users/me 200 id 1427486",
   "notes": "Auth = 3 headers X-PW-AccessToken, X-PW-Application: developer_api, X-PW-UserEmail"
  },
  {
   "t": "06:08",
   "cap": "cap-01",
   "capability": "Add and manage a contact (person or company)",
   "task": "Create company + person linked to it, update title, read back, search, delete a temp person",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /companies 200 id 77690226; POST /people 200 id 185824919 company_id 77690226; PUT title -> GET shows 'Head of Buying', company_name 'AgentDrives Demo Co'; DELETE /people/185824921 -> {is_deleted:true}, GET -> 404",
   "notes": "POST /people/search returned [] for a few seconds after create (search index lag), then found the record; fetch_by_email is immediate"
  },
  {
   "t": "07:48",
   "cap": "first_action",
   "capability": "first real action",
   "task": "Create a company via API",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /companies 200 id 77690226, read back via GET /people/185824919 company_name",
   "notes": ""
  },
  {
   "t": "07:48",
   "cap": "cap-02",
   "capability": "Create and track a sales opportunity through pipeline stages",
   "task": "Create opportunity 'AgentDrives pilot' in stage Lead, move to Proposal",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /opportunities 200 id 39272158 stage 5217782; PUT pipeline_stage_id 5217783; GET shows 5217783; activity feed shows system 'Stage Change' on the opportunity",
   "notes": "A fresh account has no pipeline visible via GET /pipelines until the first opportunity is created; then 'Stage 1/Stage 2' default pipeline appears."
  },
  {
   "t": "07:48",
   "cap": "cap-03",
   "capability": "Mark a deal as won/lost",
   "task": "Mark pilot Won and demo deal Lost",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "PUT status Won -> GET status 'Won'; PUT /opportunities/39272157 status Lost -> 'Lost'; POST /opportunities/search status_ids [1] returns 'AgentDrives pilot'",
   "notes": "search index lags a few seconds behind writes"
  },
  {
   "t": "07:48",
   "cap": "cap-04",
   "capability": "Convert a closed deal into a delivery project",
   "task": "Turn won deal into a project",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "No convert endpoint. Workaround: POST /projects 200 id 1673298 then POST /opportunities/39272158/related {project} -> added:true; GET related/projects lists it",
   "notes": "The UI's 'Projects pipeline' (deal->project with stages) is not reachable through the documented API: legacy /projects only has status Open/Completed; POST /pipelines with type 'project' came back type 'opportunity'"
  },
  {
   "t": "07:48",
   "cap": "cap-05",
   "capability": "Manage a project through its pipeline (create, move stage, close)",
   "task": "Create project, close it",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "POST /projects 200 id 1673298 status Open; PUT status Completed -> 200 status 'Completed'",
   "notes": "Create and close work; the documented project object has no pipeline stage field, so 'move stage' is not possible through the API"
  },
  {
   "t": "07:48",
   "cap": "cap-06",
   "capability": "Assign and complete a task or follow-up",
   "task": "Create a high-priority task on the deal assigned to me, complete it",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /tasks 200 id 60397516 related opportunity 39272158 assignee 1427486; PUT status Completed; GET status 'Completed'; feed shows system Status Change on task",
   "notes": ""
  },
  {
   "t": "07:48",
   "cap": "cap-16",
   "capability": "Add custom fields to a record type",
   "task": "Create Float field 'Agent score' on person+opportunity and set it",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /custom_field_definitions 200 id 770759; PUT /people/185824919 custom_fields value 42 -> returned value 42.0",
   "notes": "First try with data_type 'Number' -> 422 \"Invalid data type 'Number'\" (clear error); valid types listed in docs"
  },
  {
   "t": "07:48",
   "cap": "cap-17",
   "capability": "Tag, label and filter records",
   "task": "Tag Dana 'vip' and filter people by tag",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "PUT tags ['agentdrives','vip'] 200; POST /people/search {tags:['vip']} returned 'Dana Demo' (empty on first try ~seconds after write)",
   "notes": "GET /tags returned [] even after tagging (lags or only counts some entities)"
  },
  {
   "t": "07:48",
   "cap": "cap-21",
   "capability": "View a unified activity feed across contacts/deals/projects",
   "task": "Log a phone call on person and a note on deal; read the feed",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /activities 200 ids 13475828083, 13475828116; POST /activities/search lists both plus system events for task, project, opportunity",
   "notes": ""
  },
  {
   "t": "07:48",
   "cap": "cap-22",
   "capability": "Log calls and SMS automatically via the mobile app",
   "task": "Log a phone call activity",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Phone Call activity type 2401715 logged via POST /activities; automatic mobile logging not testable headless",
   "notes": ""
  },
  {
   "t": "07:48",
   "cap": "cap-29",
   "capability": "Invite and collaborate with teammates on shared records",
   "task": "List users",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "POST /users/search 200 returns 1 user; no documented API to invite users",
   "notes": ""
  },
  {
   "t": "07:48",
   "cap": "cap-32",
   "capability": "Set multi-currency on opportunities",
   "task": "Set deal currency to EUR",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "PUT monetary_unit EUR 200 -> monetary_unit 'EUR' (converted_unit USD)",
   "notes": "Business plan trial"
  },
  {
   "t": "07:48",
   "cap": "cap-19",
   "capability": "Build a custom report on pipeline/revenue/activity",
   "task": "Fetch a report via API",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "GET /reports/activities, /report/activities, /reports/opportunities -> 404 not_found; developer.copper.com has no reports section",
   "notes": "Reporting is UI (Custom Reports) / Looker Studio / Sheets add-on only"
  },
  {
   "t": "07:48",
   "cap": "cap-07",
   "capability": "Send and sync email through Gmail inside Copper",
   "task": "Send/sync an email",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Email send/sync requires connecting a Google account (Gmail); our identity is an email-only account with no Google account. API has no send-email endpoint.",
   "notes": ""
  },
  {
   "t": "08:02",
   "cap": "new-webhooks",
   "capability": "Subscribe to record-change webhooks",
   "task": "Create, list, delete a webhook on opportunity update",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /webhooks 200 id 561159; GET lists it; DELETE 200; GET []",
   "notes": "target our own domain; not in the frozen map, added to capabilities_found"
  },
  {
   "t": "10:39",
   "cap": "cap-10",
   "capability": "Capture a lead from an embedded website contact form",
   "task": "Create a 'Create or update people' web form in Forms and submit it",
   "route": "browser",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "Forms page renders, but clicking the 'Create or update people' card (by text, ancestor element, and coordinates) did nothing; Playwright click timed out after 20s (element not actionable); no popup, no navigation. No documented forms API.",
   "notes": "Lead API alternative: POST /leads -> 403 'Feature not enabled' (Leads disabled by default in account settings)"
  },
  {
   "t": "11:20",
   "cap": "pay",
   "capability": "buy the product",
   "task": "Probe agent payment rails and the purchase path (no payment made)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "No 402/x402/MPP/L402: unauthenticated API -> 401 {error:'authentication error'}; x402./mpp./agents.copper.com do not resolve; no /.well-known/ucp or oauth metadata; not listed in x402 Bazaar or mpp.dev. Purchase = in-app page #/purchase/purchase-plan/activate with card number/CVC/expiry/billing address form + authorize checkbox; no billing API documented.",
   "notes": "Trial is 14-day Business plan, no card. Did not enter card details. Checkout is a plain in-app card form an agent with a card could fill alone (3DS behaviour unknown)."
  },
  {
   "t": "18:03",
   "cap": "cap-09",
   "capability": "Automate a stage-triggered email or task (pipeline/workflow automation)",
   "task": "Task automation: when a pipeline record's status changes to Won, create task 'Kick off delivery project'; then win a deal via API",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Automations > Task Automations > Add new (Pipeline record / Status is changed to / Won) saved -> list shows 'Pipeline records (1)'. PUT /opportunities/39272229 status Won via API -> GET /opportunities/39272229/related/tasks returns task 60397657; GET /tasks/60397657 name 'Kick off delivery project'",
   "notes": "No API to create automations. Browser gotcha: every pw call starts on the last URL, so hash-route modals must be driven within one call; custom dropdowns are <li> lists, status options need a click on the label text."
  },
  {
   "t": "20:13",
   "cap": "cap-08",
   "capability": "Send a bulk/mass email to a filtered list of contacts",
   "task": "Select people in the People list and open the bulk 'Email' action (to our own inbox only)",
   "route": "browser",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "People list: selecting Dana Demo shows toolbar 'Edit | Email | Export'; our scripted click landed on a column header instead and the composer never opened in 4 attempts. No documented API for bulk email.",
   "notes": "Not concluded; whether bulk email needs a connected Gmail account was not observed. Corrected an earlier line that asserted this without evidence."
  },
  {
   "t": "20:28",
   "cap": "cleanup",
   "capability": "delete created records",
   "task": "Delete every record created via API",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "[('/tasks/60397516', 200), ('/tasks/60397657', 200), ('/opportunities/39272158', 200), ('/opportunities/39272157', 200), ('/opportunities/39272229', 200), ('/projects/1673298', 200), ('/activities/13475828083', 200), ('/activities/13475828116', 200), ('/people/185824919', 200), ('/companies/77690226', 200), ('/custom_field_definitions/770759', 200)]; GETs after -> 404",
   "notes": "Pipelines 'Sales'/'Delivery' and the task automation have no documented delete endpoint"
  },
  {
   "t": "22:43",
   "cap": "cancel",
   "capability": "cancel plan",
   "task": "Find how to cancel",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No paid plan started (14-day trial, no card) so nothing to cancel. Help article 'Cancel Subscription': Settings > Billing > 'Request Cancellation' (account owner) sets cancel at next renewal, or billing support via chat/support@copper.com (up to 24h). No billing API documented.",
   "notes": "Purchase form checkbox text confirms the 'Request Cancellation' in-app path"
  },
  {
   "t": "22:43",
   "cap": "delete",
   "capability": "delete account",
   "task": "Delete the account and its data",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Settings menus (Google Sync, Manage Your Data: Import/Export, Personal Preferences, Users, Customization, Integrations: API Keys, Security: SSO, Billing & Upgrade) show no delete-account control; help center search 'delete account' only covers deleting users/records; no API endpoint. All records created were deleted via API (see cleanup).",
   "notes": "Account (trial) left to expire; deleting the workspace itself appears to need support (not confirmed)"
  },
  {
   "t": "23:35",
   "cap": "cap-02",
   "capability": "Create and track a sales opportunity through pipeline stages",
   "task": "",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /opportunities pipeline 1161227 stage 5217779 -> id 39272254; PUT stage 5217780; GET pipeline_stage_id 5217780; deleted",
   "notes": ""
  }
 ],
 "stale": false,
 "icon": "/logos/copper.png",
 "monitored": false,
 "verdict": null,
 "page": "https://agentdrives.com/tools/copper?via=api"
}