{
 "slug": "pipedream",
 "name": "Pipedream",
 "url": "https://pipedream.com",
 "domain": "pipedream.com",
 "category": "automation",
 "category_name": "Automation",
 "tested_at": "2026-10-06",
 "run": "20261006T030459Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261006T030459Z",
   "date": "2026-10-06",
   "level": 4,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  }
 ],
 "level": 4,
 "level_name": "Runs on its own",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 1,
  "tries": 1,
  "self_start": true
 },
 "badges": [
  "agent-can-leave"
 ],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up in a browser"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "yes",
   "text": "Work done: 100% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "part",
   "text": "Reaches the checkout: stopped at the card form",
   "value": "ready",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "left": "deleted"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up in a browser",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "yes",
   "text": "Work done: 100% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "part",
   "text": "Reaches the checkout: stopped at the card form",
   "value": "ready",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "left": "deleted",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "browser_signup",
   "label": "Sign-up in a browser",
   "routes": [],
   "minutes": 10.3,
   "core": "4/4"
  }
 ],
 "minutes": 10.3,
 "next": {
  "to": 5,
  "text": "Next: pay without a person"
 },
 "stop": null,
 "core": "4/4",
 "scores": {
  "coverage": 83,
  "reliability": 100,
  "resilience": null,
  "setup": 100,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 100,
  "security": null,
  "standards": [
   {
    "standard": "MCP",
    "state": "behind",
    "behind": 4,
    "value": "2024-11-05"
   },
   {
    "standard": "MCP discovery",
    "state": "behind",
    "behind": null,
    "value": "legacy"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 2,
    "value": "3.0.4"
   },
   {
    "standard": "A2A",
    "state": "behind",
    "behind": 1,
    "value": "0.3"
   }
  ]
 },
 "reliability_method": "first-try",
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": 100,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": "59d395064c20",
  "kb_version": "2",
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "start"
 },
 "same_level_drives": 1,
 "drives": 1,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "docs/llms.txt, .md pages, Accept: text/markdown, OpenAPI 3.0.4 at /docs/pipedream_openapi_swagger.json"
  },
  "signup": {
   "status": "browser",
   "note": "Web form /auth/signup (email+password), no bot check; Sign Up is a div, clicked by position. pd signup also opens a browser."
  },
  "verify": {
   "status": "headless",
   "note": "account usable before verifying"
  },
  "credentials": {
   "status": "browser",
   "note": "OAuth client created in web onboarding (docs: Settings > API); user API key from settings page; no documented headless credential path",
   "via": ""
  },
  "first_call": {
   "status": "headless",
   "note": "POST /v1/oauth/token client_credentials, GET /v1/connect/{project}/apps"
  },
  "first_action": {
   "status": "headless",
   "note": "POST /tokens + POST /accounts (cfmap_json) connected a key-based app for an external user"
  },
  "pay": {
   "status": "browser",
   "grade": "P2",
   "rails": [
    "Stripe Checkout (card)"
   ],
   "rail_ids": [
    "stripe-checkout"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "No 402/x402/MPP/UCP/billing API. Settings > Billing > Upgrade -> Stripe Checkout at payments.pipedream.com (card only, Startup $99/mo billed annually). Not paid."
  },
  "cancel": {
   "status": "n/a",
   "grade": "n/a",
   "note": "Nothing to cancel: our agent used the free plan.",
   "docs_note": "No plan started; 'Manage Billing' in web UI, not tested",
   "nothing": "free_plan"
  },
  "delete": {
   "status": "browser",
   "note": "Settings > Account > Delete this account; UI got HTTP 500 but account was deleted (API key 401, login 'user not found'). No API/CLI account delete; Connect resources and project deletable by API.",
   "left": "deleted",
   "account": true
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [
   {
    "id": "stripe-checkout",
    "name": "Stripe Checkout",
    "kind": "checkout",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": true
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": true,
  "sdk": true,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": true
 },
 "surface_notes": {
  "api": "REST Connect API, 51 paths in OpenAPI; JSON errors {error}, not problem+json",
  "openapi": "3.0.4; RunActionOpts marks configured_props optional but server requires it",
  "mcp": "official remote MCP, the older 5 Nov 2024 spec, tools per app (9 for pipedream); docs MCP is 28 Jul 2026",
  "cli": "pd 0.7.0; login opens browser, works headless with API key in config",
  "sandbox": "development environment is free"
 },
 "can_do": [
  "Connect a key-based app account for an end user entirely by API",
  "Run prebuilt tools for an end user via REST or MCP",
  "Call an integrated API through the auth proxy without holding the user's key",
  "Deploy HTTP and schedule triggers and read their events",
  "Get signed webhooks for trigger events and CONNECTION_SUCCESS",
  "Register custom OAuth clients and app overrides by API",
  "Delete connected accounts, end users, triggers and projects by API"
 ],
 "cannot_do": [
  {
   "what": "Sign up or get a first credential headless",
   "why": "web form and web-created OAuth client only; pd login/signup open a browser"
  },
  {
   "what": "Use File Stash, production tool runs, private tools or email invites on Free",
   "why": "plan-gated"
  },
  {
   "what": "Buy a plan without a card",
   "why": "Stripe Checkout only, no agent payment rail or billing API"
  },
  {
   "what": "Delete the account headless",
   "why": "web UI only, and it shows a 500 while succeeding"
  },
  {
   "what": "List deployed triggers",
   "why": "GET /deployed-triggers returned total_count 0 for existing triggers"
  }
 ],
 "blockers": [],
 "tips_for_owner": [
  "Let agents get a first credential headless",
  "Add an account-delete API, fix its 500",
  "Make deployed-triggers list return triggers",
  "Move the product MCP server to the 28 Jul 2026 spec",
  "Use real buttons on sign-up and Connect",
  "Fix OpenAPI drift, move to 3.1+",
  "Offer a billing API or agent payment rail",
  "Publish AI catalog and cards at root"
 ],
 "tips_for_agents": [
  "Create the OAuth client once in the web app, then use POST /v1/oauth/token and x-pd-environment: development",
  "Key-based apps connect headless: POST /tokens then POST /accounts with cfmap_json as a JSON string",
  "Read trigger events by id; the deployed-triggers list came back empty",
  "Never point the project webhook at an HTTP trigger in the same project: it loops",
  "Product MCP needs Bearer + x-pd-project-id, x-pd-environment, x-pd-external-user-id, x-pd-app-slug and speaks 2024-11-05",
  "pd CLI runs headless with api_key and org_id in a config profile"
 ],
 "selfhost": {
  "install": {
   "status": "skipped",
   "minutes": 0,
   "note": "no docker in the drive sandbox (Conduit has self-host/build-from-source docs)"
  }
 },
 "summary": "Pipedream Connect's core (connected accounts, tool runs via REST and MCP, proxy, triggers, webhooks) worked headless and verified on the free plan once credentials existed. Sign-up and the first OAuth client need the web app, buying a plan needs a card in Stripe Checkout, and account deletion is web-only and showed a 500 while succeeding.",
 "wall": "Sign-up and first key need a browser; a plan needs a card in Stripe Checkout",
 "plan_scope": "free plan",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Pipedream Connect lets an app link a user's other accounts and run automated tasks on their behalf. An AI agent could do almost all of the real work itself once it had a login and a key, including connecting accounts, running tools, and getting notified of events. It signed up and got its first API key itself in a browser, and buying a paid plan needs a credit card.",
  "can_do": [
   "Connect a user's third-party account and run tools on it automatically",
   "Make API calls through the service without ever holding the user's password or key",
   "Set up automatic notifications (triggers) when something happens in a connected app",
   "Create and delete accounts and connections entirely through code",
   "Use a chat-assistant style interface (MCP) to run the same tools"
  ],
  "cannot_do": [
   {
    "what": "Sign up or get a first login key without a browser",
    "why": "only a web sign-up form and web-made key exist"
   },
   {
    "what": "Use some advanced features like file storage, production mode, private tools, or email invites",
    "why": "these need a paid plan the free-plan agent could not buy"
   },
   {
    "what": "Pay for a plan without a credit card",
    "why": "the only checkout option is a card form"
   },
   {
    "what": "Delete the account through code",
    "why": "deletion only works from the website, and it even showed an error page while it worked"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "File Stash",
   "plan": "paid",
   "evidence": "actions/run with stash_id: file api 401 'Please upgrade your workspace to use this feature'"
  },
  {
   "capability": "Production environment",
   "plan": "Startup",
   "evidence": "actions/run in production -> 403 'Connect component API not enabled for this organization'"
  },
  {
   "capability": "custom private tools",
   "plan": "paid",
   "evidence": "pd publish ok, run -> 403 'Private component API not enabled for this organization'"
  },
  {
   "capability": "Team members (email invite)",
   "plan": "paid",
   "evidence": "'Email invites are only available on paid plans. Share your workspace's invite link instead.'"
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Managed auth",
   "capability": "Connect a third-party account for an end user",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/connect/{project_id}/tokens (then OAuth/key flow)",
    "mcp": null,
    "cli": "pd connect",
    "ui": "Connect project > Connect tab"
   },
   "check": "GET /v1/connect/{project_id}/accounts shows the new account with the external_user_id and app",
   "source": "https://pipedream.com/docs/connect/managed-auth/quickstart; https://pipedream.com/docs/connect/managed-auth/users"
  },
  {
   "id": "cap-02",
   "group": "Tool execution",
   "capability": "Execute a prebuilt action/tool on a connected account",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/connect/{project_id}/actions/run",
    "mcp": "e.g. slack-send-message",
    "cli": null,
    "ui": "SDK Playground"
   },
   "check": "Response returns the action's exported output (e.g. created Slack message id); re-fetch via the target app's API confirms the effect",
   "source": "https://pipedream.com/docs/connect/components/actions; https://pipedream.com/docs/connect/mcp"
  },
  {
   "id": "cap-03",
   "group": "Triggers",
   "capability": "Deploy a trigger to receive events from a third-party app",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/connect/{project_id}/triggers/deploy",
    "mcp": null,
    "cli": null,
    "ui": "Connect project > Triggers"
   },
   "check": "GET on the deployed trigger lists it as active; triggering the source event in the third-party app delivers a webhook event",
   "source": "https://pipedream.com/docs/connect/components/triggers"
  },
  {
   "id": "cap-04",
   "group": "API access",
   "capability": "Send authenticated requests to any integrated API via the proxy",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST https://api.pipedream.com/v1/connect/proxy",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Proxy response mirrors the upstream API's response (e.g. Slack chat.postMessage ok:true) without the caller ever holding the user's token",
   "source": "https://pipedream.com/docs/connect/api-proxy"
  },
  {
   "id": "cap-05",
   "group": "Managed auth",
   "capability": "Generate a hosted Connect Link to onboard a user without frontend code",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "connect_link_url field on token creation",
    "mcp": null,
    "cli": null,
    "ui": "Pipedream-hosted connect page"
   },
   "check": "Visiting the link completes the OAuth/key flow and the account then appears in GET /v1/connect/{project_id}/accounts",
   "source": "https://pipedream.com/docs/connect/managed-auth/connect-link"
  },
  {
   "id": "cap-06",
   "group": "App discovery",
   "capability": "Search and list available apps/integrations programmatically",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v1/connect/{project_id}/apps",
    "mcp": null,
    "cli": null,
    "ui": "App catalog"
   },
   "check": "Response list includes the queried app (e.g. 'google sheets') with its slug and auth type",
   "source": "https://pipedream.com/docs/connect/app-discovery"
  },
  {
   "id": "cap-07",
   "group": "Tool execution",
   "capability": "Retrieve a tool's input/output schema before running it",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v1/connect/{project_id}/components/{key}",
    "mcp": null,
    "cli": null,
    "ui": "SDK Playground"
   },
   "check": "Response returns the component's declared props/configurable fields matching what the run endpoint accepts",
   "source": "https://pipedream.com/docs/connect/components/actions"
  },
  {
   "id": "cap-08",
   "group": "Managed auth",
   "capability": "View and delete end users' connected accounts",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET/DELETE /v1/connect/{project_id}/accounts",
    "mcp": null,
    "cli": null,
    "ui": "Connect project > Users tab"
   },
   "check": "After DELETE, GET on the account id returns not found and the user's list no longer includes it",
   "source": "https://pipedream.com/docs/connect/managed-auth/users"
  },
  {
   "id": "cap-09",
   "group": "Events",
   "capability": "Receive webhooks for account-connection and trigger events",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "webhook_uri param on Connect token / trigger config",
    "mcp": null,
    "cli": null,
    "ui": "Project settings > default webhook"
   },
   "check": "Configured endpoint receives a POST with CONNECTION_SUCCESS/CONNECTION_ERROR or a trigger event payload matching the action taken",
   "source": "https://pipedream.com/docs/connect/webhooks"
  },
  {
   "id": "cap-10",
   "group": "Managed auth",
   "capability": "Bring your own OAuth app credentials for an integration",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "OAuth client config on the app/project",
    "mcp": null,
    "cli": null,
    "ui": "Project > Connect > OAuth clients"
   },
   "check": "New connections for that app go through the custom client's authorize URL instead of Pipedream's default client id",
   "source": "https://pipedream.com/docs/connect/managed-auth/oauth-clients"
  },
  {
   "id": "cap-11",
   "group": "Tool execution",
   "capability": "Publish custom private tools to a workspace",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET /v1/connect/{project_id}/components/list includes custom tools",
    "mcp": null,
    "cli": "pd publish --connect",
    "ui": null
   },
   "check": "The published component key appears in the workspace's component list and can be run like a public action",
   "source": "https://pipedream.com/docs/connect/components/custom-tools"
  },
  {
   "id": "cap-12",
   "group": "Tool execution",
   "capability": "Sync files from an action run to File Stash via a presigned URL",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "stashId param on action run; GET stash file URL",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Returned presigned URL downloads the file produced in /tmp during the run and is valid for 30 minutes",
   "source": "https://pipedream.com/docs/connect/components/files"
  },
  {
   "id": "cap-13",
   "group": "Managed auth",
   "capability": "Pre-configure app-specific fields with App Overrides",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Project > Connect > App configuration"
   },
   "check": "A new connection for that app skips the overridden field, pre-filled with the configured value",
   "source": "https://pipedream.com/docs/connect/managed-auth/app-overrides"
  },
  {
   "id": "cap-14",
   "group": "Project config",
   "capability": "Run separate development and production environments",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "projectEnvironment client param",
    "mcp": null,
    "cli": null,
    "ui": "Project environment switch"
   },
   "check": "Requests scoped to 'production' only succeed once the workspace is on a plan with production enabled (Free is development-only per the pricing comparison table)",
   "source": "https://pipedream.com/docs/connect/managed-auth/environments; https://pipedream.com/pricing"
  },
  {
   "id": "cap-15",
   "group": "Tool execution",
   "capability": "Explore and test tools interactively in the SDK Playground",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "https://pipedream.com/connect/demo"
   },
   "check": "Playground run produces the same output shape as the corresponding actions/run API call",
   "source": "https://pipedream.com/docs/connect"
  },
  {
   "id": "cap-16",
   "group": "Project config",
   "capability": "Manage project variables and secrets",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Project > Settings > Variables"
   },
   "check": "A saved variable is available to components run under that project and is hidden from the UI after save",
   "source": "https://pipedream.com/docs/projects/secrets"
  },
  {
   "id": "cap-17",
   "group": "Workspace admin",
   "capability": "Configure single sign-on (SSO) for a workspace",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Workspace settings > SSO"
   },
   "check": "Workspace login redirects to the configured IdP (Google Workspace/Okta/SAML) instead of email/password",
   "source": "https://pipedream.com/docs/workspaces/sso; https://pipedream.com/pricing"
  },
  {
   "id": "cap-18",
   "group": "Workspace admin",
   "capability": "Gate AI-assistant tool access with Conduit workspace access policies",
   "weight": "peripheral",
   "plan": "trial",
   "surfaces": {
    "api": null,
    "mcp": "Conduit MCP endpoint",
    "cli": null,
    "ui": "Conduit console > Policies"
   },
   "check": "A connector/tool not granted to a user's group is refused when that user's agent calls it through the Conduit endpoint",
   "source": "https://pipedream.com/conduit"
  },
  {
   "id": "cap-19",
   "group": "Workspace admin",
   "capability": "View audit log and usage analytics for agent tool calls",
   "weight": "peripheral",
   "plan": "trial",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Conduit console > Audit trail / Usage"
   },
   "check": "Every sign-in, policy change, and tool call shows up as a filterable row with its payload",
   "source": "https://pipedream.com/conduit"
  },
  {
   "id": "cap-20",
   "group": "Workspace admin",
   "capability": "Add unlimited team members to a workspace",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Workspace settings > Members"
   },
   "check": "Invited member appears in the workspace member list and can access shared projects",
   "source": "https://pipedream.com/pricing"
  }
 ],
 "attempts": [
  {
   "t": "04:08",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "robots/aipref",
   "task": "robots.txt and Content-Usage",
   "result": "done",
   "evidence": "https://pipedream.com/robots.txt 200 text/plain: user-agent * group with disallows for /admin/*, /@*, /community/...; no Content-Usage or Content-signal lines; no Content-Usage header on docs pages",
   "notes": "no AI preferences stated"
  },
  {
   "t": "04:08",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "llms.txt",
   "task": "llms.txt",
   "result": "done",
   "evidence": "https://pipedream.com/llms.txt 200 (app marketplace, 3,223 apps) and https://pipedream.com/docs/llms.txt 200 (docs index with .md links)"
  },
  {
   "t": "04:08",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "markdown",
   "task": "Accept: text/markdown and .md URL",
   "result": "done",
   "evidence": "GET /docs/connect/mcp with Accept: text/markdown -> 200 content-type text/markdown, vary: rsc, accept-encoding, Accept, User-Agent; /docs/connect/mcp.md -> 200 text/markdown"
  },
  {
   "t": "04:08",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "cards",
   "task": "AI catalog / agent card / MCP server card on domain root",
   "result": "failed",
   "evidence": "https://pipedream.com/.well-known/ai-catalog.json, agent-card.json, agent.json, mcp/server-card.json, oauth-*, ucp, /auth.md, /SKILL.md all 200 text/html SPA soft-404",
   "notes": "docs subpath has cards: /docs/.well-known/mcp/server-card.json (application/json, docs MCP), /docs/.well-known/agent-card.json (A2A protocolVersion 0.3), /docs/.well-known/agent-skills/index.json; advertised in Link header"
  },
  {
   "t": "04:08",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "docs MCP",
   "task": "server/discover on https://pipedream.com/docs/mcp",
   "result": "done",
   "evidence": "200 application/json result.supportedVersions [\"2026-07-28\"]; initialize also answers protocolVersion 2025-11-25; serverInfo Pipedream 1.0.0 (Mintlify docs search MCP)"
  },
  {
   "t": "04:08",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": false,
   "capability": "product MCP",
   "task": "server/discover on https://remote.mcp.pipedream.net/v3 unauthenticated",
   "result": "blocked",
   "evidence": "401 {code:-32001,'Unauthorized. A valid API JWT with project credentials is required.'}; no WWW-Authenticate; mcp.pipedream.net/v2 401 WWW-Authenticate Bearer error=invalid_token (no resource_metadata); PRM https://mcp.pipedream.net/.well-known/oauth-protected-resource 200 JSON, AS https://mcp.pipedream.com metadata has registration_endpoint (DCR), no client_id_metadata_document_supported, code_challenge_methods S256 and plain",
   "notes": "retry with credentials later"
  },
  {
   "t": "04:08",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "pay discovery",
   "task": "x402./mpp./agents. subdomains, /.well-known/ucp, api 402",
   "result": "done",
   "evidence": "x402/mpp/agents.pipedream.com: DNS not resolved; /.well-known/ucp SPA soft-404; api.pipedream.com/v1/users/me unauth -> 404 {error:record not found}, no 402"
  },
  {
   "t": "09:04",
   "cap": "docs",
   "capability": "docs",
   "task": "find docs, API reference, auth docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "docs/llms.txt index, every page as .md; Connect API reference with per-operation pages; authentication.md (client credentials via POST /v1/oauth/token)"
  },
  {
   "t": "09:04",
   "cap": "signup",
   "capability": "signup",
   "task": "create account with email+password",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://pipedream.com/auth/signup web form; POST https://api.pipedream.com/auth/password 200 new_user:true user u_r9hjxgO org [redacted]; redirected to connect.pipedream.com/@agentdrives/overview. No CAPTCHA seen. Docs offer only web form or `pd signup` (opens browser).",
   "notes": "Sign Up control is a <div> inside no <button>: getByRole('button',{name:'Sign Up'}) finds nothing; clicked by coordinates. Onboarding auto-created project [redacted] 'Default' and an OAuth client (secret shown once).",
   "quality": {
    "error_legibility": "n/a"
   }
  },
  {
   "t": "09:19",
   "cap": "verify",
   "capability": "verify email",
   "task": "click verification link",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Mail 'Confirm your email address' from notifications@pipedream.com arrived within seconds.",
   "notes": "account was usable before verification"
  },
  {
   "t": "10:20",
   "cap": "credentials",
   "capability": "API credentials",
   "task": "get OAuth client credentials",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Signup onboarding in the web app auto-created OAuth client 'Default' (client id Yr4b…, secret shown once); docs say create at Settings > API (web UI). User API key read from https://pipedream.com/settings/user. No documented API/CLI way to mint the first credential without a browser (pd login/signup open a browser)."
  },
  {
   "t": "10:20",
   "cap": "first_call",
   "capability": "first API call",
   "task": "client_credentials token, then list apps",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/oauth/token 200 token_type Bearer expires_in 3599 scope *; GET /v1/connect/[redacted]/apps?q=slack&limit=3 200 total_count 13",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "10:41",
   "cap": "cap-01",
   "capability": "Connect a third-party account for an end user",
   "task": "Create connect token for external user, connect a key-based app (Pipedream, our own API key) server-side",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/connect/[redacted]/tokens 200 ctok_… + connect_link_url; POST /v1/connect/[redacted]/accounts {app_slug:pipedream, cfmap_json, connect_token} 200 id apn_arhy6vn healthy:true; GET /accounts?external_user_id=agentdrives-test-user-1 total_count 1; GET /accounts/apn_arhy6vn 200",
   "notes": "OAuth apps still need the end user in a browser; key apps can be connected fully headless with POST /accounts (in OpenAPI)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "10:41",
   "cap": "cap-06",
   "capability": "Search and list available apps",
   "task": "search apps for 'slack', fetch app 'pipedream'",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /v1/connect/[redacted]/apps?q=slack&limit=3 200 total_count 13 with auth_type, custom_fields; GET /v1/connect/apps/pipedream 200 auth_type keys, proxy_enabled true; cursor pagination (page_info.end_cursor)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "11:12",
   "cap": "cap-07",
   "capability": "Retrieve a tool's input/output schema",
   "task": "GET action pipedream-get-app definition",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /v1/connect/[redacted]/actions/pipedream-get-app 200: configurable_props [app (type app), appId (string, remoteOptions)] + MCP-style annotations readOnlyHint etc.; the run below accepted exactly those props",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "11:12",
   "cap": "cap-02",
   "capability": "Execute a prebuilt action on a connected account",
   "task": "Run pipedream-get-app on the connected account for appId github",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/connect/[redacted]/actions/run {id, external_user_id, configured_props:{app:{authProvisionId:apn_arhy6vn}, appId:github}} 200 ret.data.id app_OrZhaO name_slug github; GET /v1/connect/apps/github returns same app (auth_type oauth)",
   "notes": "read-only action: our only connectable account was our own Pipedream key; no third-party write effect tested",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match",
    "idempotent": "yes"
   }
  },
  {
   "t": "11:12",
   "cap": "cap-04",
   "capability": "Send authenticated requests via the proxy",
   "task": "GET https://api.pipedream.com/v1/users/me through the Connect proxy for the end user's account",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /v1/connect/[redacted]/proxy/{base64url(url)}?external_user_id=…&account_id=apn_arhy6vn 200 body identical to a direct call with the key (user u_r9hjxgO); caller never sent the key",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "11:12",
   "cap": "first_action",
   "capability": "first real action",
   "task": "create a connected account for an end user",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/connect/[redacted]/accounts 200 apn_arhy6vn, read back via GET /accounts"
  },
  {
   "t": "13:56",
   "cap": "cap-03",
   "capability": "Deploy a trigger",
   "task": "Deploy http-new-requests and schedule-custom-interval triggers for an end user; fire the HTTP one and read its events",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/connect/[redacted]/triggers/deploy 200 hi_nlHbVPq endpoint https://eokyipa6rueazsa.m.pipedream.net; timer ti_ypTAALB; POST to endpoint 200; GET /deployed-triggers/hi_nlHbVPq/events returned our request (with our Web Bot Auth headers); GET /deployed-triggers/hi_nlHbVPq 200",
   "notes": "GET /deployed-triggers?external_user_id=… returned total_count 0 while three triggers were deployed and readable by id (drift). Timer asked intervalSeconds 900, got interval_seconds 3600 without an error. Deploy returns HttpInterface/TimerInterface objects, not the documented deployed-trigger shape.",
   "quality": {
    "verify_route": "yes",
    "docs_match": "drift",
    "error_legibility": "silent"
   }
  },
  {
   "t": "13:56",
   "cap": "cap-09",
   "capability": "Receive webhooks for connection and trigger events",
   "task": "Trigger webhook to our own receiver, connect token webhook_uri for CONNECTION_SUCCESS",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "PUT /deployed-triggers/hi_nlHbVPq/webhooks {webhook_urls:[receiver]} 200 with signing_key; firing the trigger delivered the event to receiver hi_12HMxEn with x-pd-signature t=…,v1=… and user-agent pipedream/1; POST /tokens with webhook_uri then POST /accounts -> receiver got {event: CONNECTION_SUCCESS, account.id apn_x7hdEP5} (no credentials in payload)",
   "notes": "Our first try pointed the project webhook (PUT /webhook) at an HTTP-trigger receiver in the same project: that receiver's own events went back to the project webhook and looped (7 growing deliveries in ~1 s) until we deleted the webhook and the trigger. Our misconfiguration; no loop guard on Pipedream's side.",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "15:30",
   "cap": "discovery",
   "capability": "product MCP",
   "task": "server/discover then initialize on https://remote.mcp.pipedream.net/v3 with OAuth bearer + x-pd-* headers",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "server/discover with 2026-07-28 headers -> 200 SSE JSON-RPC error -32601 Method not found (legacy); initialize offering 2026-07-28 -> protocolVersion 2024-11-05, serverInfo pd-connect 1.0.0, no Mcp-Session-Id; tools/list -> 9 tools for app pipedream (8 actions + retrieve_options)",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "15:30",
   "cap": "cap-02",
   "capability": "Execute a prebuilt action/tool on a connected account",
   "task": "tools/call pipedream-get-app appId notion over MCP",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "tools/call 200 SSE result.content text ret.data.id app_X7Lhxr name_slug notion; matches GET /v1/connect/apps/notion",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "17:53",
   "cap": "cap-05",
   "capability": "Hosted Connect Link",
   "task": "Open connect_link_url (&app=pipedream) in a browser and connect the key",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "connect_link_url from POST /tokens; page 'We use Pipedream to connect your account' -> Continue -> API Key -> Continue -> 'Successfully connected your Pipedream account!'; GET /users/agentdrives-test-user-4/accounts lists the new account",
   "notes": "Development mode: the link only works while signed in to pipedream.com as a workspace member. The Continue controls are not exposed as buttons to Playwright role/text locators; we clicked by position.",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "18:38",
   "cap": "cap-10",
   "capability": "Bring your own OAuth app credentials",
   "task": "Register a custom GitHub OAuth client via API and start a connection with it",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/connect/[redacted]/oauth_apps {app:github, client_id, client_secret, name} 201 id oa_1MiyyY; GET /oauth_apps/oa_1MiyyY 200; Connect Link with &oauthAppId=oa_1MiyyY sent the browser to github.com/login/oauth/authorize?client_id=<our client id>&redirect_uri=https://api.pipedream.com/connect/oauth/oa_1MiyyY/callback",
   "notes": "client id/secret were clearly labelled placeholders (we have no GitHub OAuth app), so no connection was completed; the check (authorize URL uses the custom client) passed",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "19:20",
   "cap": "cap-13",
   "capability": "App Overrides",
   "task": "Pre-fill Supabase subdomain with an app override and connect through it",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /v1/connect/[redacted]/app_overrides {app:supabase, name, cfmap:{subdomain}} 201 ao_2QdUEE; Connect Link &app=supabase&appOverrideId=ao_2QdUEE asked only for 'API Key'; same link without the override asked for 'Subdomain ID' and 'API Key'",
   "notes": "capability map lists no API surface; the documented app_overrides API exists (OpenAPI createAppOverride)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "19:53",
   "cap": "cap-12",
   "capability": "Sync files to File Stash",
   "task": "Run helper_functions-download-file-to-tmp with stash_id to get a presigned URL",
   "route": "api",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "POST /v1/connect/[redacted]/actions/run {…, stash_id:\"\"} HTTP 200 but os[0] k=error: file api 401 {error:'Please upgrade your workspace to use this feature'} 'Error communicating with file api'",
   "notes": "Free plan: File Stash needs an upgrade (capability map said free). The run itself returns HTTP 200 with the error only inside the os log array.",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "20:21",
   "cap": "cap-14",
   "capability": "Separate development and production environments",
   "task": "Create token/account and run an action with x-pd-environment: production",
   "route": "api",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "production: POST /tokens 200, POST /accounts 200 apn_r5h7bA7, GET /accounts?external_user_id=agentdrives-prod-user total 1 in production and 0 in development (environments are separated); POST /actions/run in production -> 403 {error:'Connect component API not enabled for this organization'}",
   "notes": "Free plan: production accounts can be created but tool runs in production are refused",
   "quality": {
    "error_legibility": "vague",
    "verify_route": "yes"
   }
  },
  {
   "t": "20:35",
   "cap": "cap-08",
   "capability": "View and delete connected accounts",
   "task": "List accounts for an end user, delete one, read back",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "DELETE /v1/connect/[redacted]/accounts/apn_mnhd7xB 204; GET same id 404 {error:'record not found'}; GET /accounts?external_user_id=agentdrives-test-user-2 total_count 0",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match",
    "error_legibility": "clear"
   }
  },
  {
   "t": "20:35",
   "cap": "cap-02",
   "capability": "Execute a prebuilt action/tool on a connected account",
   "task": "error check: run action without configured_props",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "POST /actions/run {id} -> 422 text/plain 'Failed to deserialize the JSON body into the target type: missing field `configured_props`'",
   "notes": "OpenAPI RunActionOpts lists only id and external_user_id as required; the server requires configured_props (drift). Error is plain text, not problem+json, but names the field.",
   "quality": {
    "error_legibility": "clear",
    "docs_match": "drift",
    "recoverable": "yes"
   }
  },
  {
   "t": "22:31",
   "cap": "pay",
   "capability": "pay step",
   "task": "find how an agent can buy a paid plan without paying",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "No 402 anywhere probed (api.pipedream.com unauth 404, x402./mpp./agents. no DNS, no /.well-known/ucp, no x-payment-info in OpenAPI, docs (llms-full.txt) mention no x402/MPP/SPT/Stripe Projects). Pricing: Free $0 no card; Startup $99/mo billed annually. Settings > Billing > Upgrade plan -> connect.pipedream.com/@agentdrives/upgrade -> 'Continue to checkout' -> Stripe Checkout at payments.pipedream.com/c/pay/cs_live_… (card only, €1,101.74/year). Stopped before entering anything.",
   "notes": "Hosted Stripe Checkout an agent with a card could complete; no billing API"
  },
  {
   "t": "25:05",
   "cap": "cap-16",
   "capability": "Manage project variables and secrets",
   "task": "Create a secret variable in the web UI and read the list back",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "pipedream.com/settings/env-vars > New Variable (key AGENTDRIVES_TEST_SECRET, secret checked) -> createEnvironmentVariable se_e8fyDPr secret:true; list shows value as 'Secret'",
   "notes": "Workspace/workflow variables (page warns 'Workflows and String are shutting down on March 31, 2027'); the Connect project configuration has no variables section and we did not confirm a Connect action can read it. No documented API.",
   "quality": {
    "verify_route": "no"
   }
  },
  {
   "t": "25:05",
   "cap": "cap-20",
   "capability": "Add team members",
   "task": "Invite our own second inbox the agent's inbox by email",
   "route": "browser",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "Settings > Membership > Invite By Email -> orgUserAdd errors ['Email invites are only available on paid plans. Share your workspace's invite link instead.']; an 'Invite Link for Any Email' is shown on Free",
   "notes": "Did not accept the invite link with a second account (single browser profile).",
   "quality": {
    "error_legibility": "clear"
   }
  },
  {
   "t": "27:32",
   "cap": "cap-11",
   "capability": "Publish custom private tools",
   "task": "pd publish a tiny echo action with --connect-environment development, then list and run it via the Connect API",
   "route": "cli",
   "documented": true,
   "result": "plan_gated",
   "verified": true,
   "evidence": "pd 0.7.0 (binary from cli.pipedream.com, config file with api_key+org_id profile): publish -> sc_v4ixdJQV 'AgentDrives Echo' 0.0.1; GET /actions?registry=private total 0; POST /actions/run {id:agentdrives-echo} -> 403 {error:'Private component API not enabled for this organization'}",
   "notes": "CLI works headless with the user API key in its config file (pd login itself needs a browser). Without a workspace org_id profile, publish fails with 404 'record not found' plus a misleading 'Try running pd login'.",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "29:25",
   "cap": "cap-15",
   "capability": "SDK Playground",
   "task": "Open pipedream.com/connect/demo and inspect a tool",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": false,
   "evidence": "Page loads without a challenge: Config/Code/Debug tabs, componentType Action/Trigger/API Proxy, app Slack, action 'Send Message to Channel', app metadata JSON",
   "notes": "Running a tool there needs a connected Slack account we do not have; output shape not compared"
  },
  {
   "t": "32:45",
   "cap": "delete",
   "capability": "delete account",
   "task": "Delete the Pipedream account and its data",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Settings > Account > Danger Zone > 'Delete this account' (type email + 'delete my account', Ok): graphql POST answered 500 {status:500,'Internal Server Error'} and the page stayed; afterwards the session was gone, GET /v1/users/me with the user API key -> 401, /v1/oauth/token -> 401 invalid_client, login -> 404 {type:not_found, data:'user not found'}",
   "notes": "Deletion worked but the UI reported a server error. Before that, API cleanup: DELETE deployed triggers, app override, OAuth client, external users (204 each) and DELETE /v1/connect/projects/[redacted] 204. No API/CLI route to delete the account itself.",
   "quality": {
    "error_legibility": "silent",
    "verify_route": "yes"
   }
  },
  {
   "t": "32:45",
   "cap": "cancel",
   "capability": "cancel plan",
   "task": "cancel a paid plan",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "No plan was started (free plan); Settings > Billing shows 'Manage Billing' (web UI). Not tested."
  }
 ],
 "stale": false,
 "icon": "/logos/pipedream.png",
 "monitored": false,
 "verdict": "Gets in on its own: L4 · Runs on its own. Sign-up uses a web form with no bot check, and our agent clicked through without a challenge. The first OAuth client and the user API key also need the web app: there is no headless path to credentials. Once a key existed, our agent worked entirely by API: it connected a key-based app for an external user, ran tool calls and reached triggers and webhooks through Connect. Buying a plan needs a card at Stripe Checkout; our agent stayed on the free plan, so there was nothing to cancel. Deleting the account works from account settings; the page returned a server error but the account was gone after.",
 "page": "https://agentdrives.com/tools/pipedream?via=api"
}