{
 "slug": "posthog",
 "name": "PostHog",
 "url": "https://posthog.com",
 "domain": "posthog.com",
 "category": "product-analytics",
 "category_name": "Product analytics",
 "tested_at": "2026-10-03",
 "run": "20261003T221341Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261001T055742Z",
   "date": "2026-10-01",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": false,
    "inbox": [
     "matfy.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261001T205034Z",
   "date": "2026-10-01",
   "level": 4,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   },
   "why": "noise"
  },
  {
   "run": "20261002T142021Z",
   "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"
  },
  {
   "run": "20261003T221341Z",
   "date": "2026-10-03",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 1,
  "tries": 3,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "part",
   "text": "Gets in 1 of 3 drives",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "part",
   "text": "Gets in 1 of 3 drives",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": "0/10",
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 100,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 100,
  "security": null,
  "standards": [
   {
    "standard": "MCP client registration",
    "state": "current",
    "behind": null,
    "value": "cimd"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 1,
    "value": "3.1.0"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [
  {
   "capability": "Capture custom and autocaptured events",
   "probe": "capture event with a well-formed but non-existent project token",
   "outcome": "200 application/json {\"status\":\"Ok\"}",
   "grade": "silent",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Capture custom and autocaptured events",
   "probe": "capture event with the required api_key missing",
   "outcome": "401 text/plain 'event submitted without an api_key'",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Evaluate a feature flag at runtime for a user",
   "probe": "evaluate flags with an invalid project token",
   "outcome": "401 application/json {\"type\":\"authentication_error\",\"code\":\"authentication_failed\",\"detail\":\"The provided API key is invalid or has expired. Please check your API key and try again.\",\"attr\":null}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Build trends, funnels, retention, paths, lifecycle insights",
   "probe": "bad credential on the private API",
   "outcome": "401 application/json {\"type\":\"authentication_error\",\"code\":\"authentication_failed\",\"detail\":\"Personal API key found in request Authorization header is invalid.\",\"attr\":null}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Build trends, funnels, retention, paths, lifecycle insights",
   "probe": "no credential on the private API",
   "outcome": "401 application/json + WWW-Authenticate: Bearer resource_metadata=\"https://us.posthog.com/.well-known/oauth-protected-resource\"; {\"type\":\"authentication_error\",\"code\":\"not_authenticated\",...}",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Create and roll out a feature flag with targeted release conditions",
   "probe": "bad credential on the MCP server",
   "outcome": "401 text/plain 'Invalid API key' (no WWW-Authenticate on this response; without a token: 401 with resource_metadata and a link to docs)",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  },
  {
   "capability": "Build trends, funnels, retention, paths, lifecycle insights",
   "probe": "burst of 15 sequential unauthenticated GETs on one cheap endpoint",
   "outcome": "15x 401, no 429, no RateLimit/X-RateLimit/Retry-After headers",
   "grade": "vague",
   "idempotent": null,
   "rate_limit": "none-seen"
  },
  {
   "capability": "signup",
   "probe": "register a CIMD partner client whose URL redirects",
   "outcome": "400 application/json {\"type\":\"error\",\"error\":{\"code\":\"registration_failed\",\"message\":\"Metadata document endpoint returned redirect (HTTP 302), redirects are not allowed\"},\"registered\":false,\"checks\":[",
   "grade": "clear",
   "idempotent": null,
   "rate_limit": null
  }
 ],
 "surface_audit": {
  "totals": {
   "items": 3585,
   "documented": 3573,
   "safe": 3418,
   "exercised": 24,
   "passed": 11,
   "skipped": 160,
   "blocked": 3394,
   "not_run": 0,
   "match": 16,
   "drift": 8,
   "broken_doc": 0,
   "docs_complete": 84,
   "docs_partial": 3357,
   "docs_missing": 132,
   "errors_clear": 6,
   "errors_vague": 3,
   "errors_silent": 3
  }
 },
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": "f9ae61c1d6ff",
  "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": 2,
 "drives": 4,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "Cloudflare Turnstile (visible 'Verify you are human' on the last sign-up step)",
  "visible": true,
  "type": "network",
  "human": null,
  "how": "Let verified bots and signed agents past the check on sign-up: in Cloudflare, add a WAF custom rule that skips the bot challenge on your sign-up paths for verified bots and for signed agents (rule field cf.bot_management.signed_agent; since 1 July 2026 signed agents count as verified bots), and render Turnstile only when the request is not from a verified agent.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "form"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "through",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt with every docs page as Markdown (.md and Accept: text/markdown), public OpenAPI 3.1.0 at us.posthog.com/api/schema/, MCP tools reference, auth.md manifest."
  },
  "signup": {
   "status": "human",
   "note": "Documented headless sign-up (wizard provision / --signup over the provisioning API) answered 403 'Account creation is not enabled for this partner' in US and EU. The web form ends in a visible Cloudflare Turnstile 'Verify you are human' on the last step."
  },
  "verify": {
   "status": "",
   "note": "No account, so no verification mail (inbox empty).",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "Routes exist (OAuth with DCR/CIMD and PKCE, posthog-cli device-style login, personal API keys in the UI) but all need a signed-in account. DCR itself worked headless (201).",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "No credential. Public capture with a made-up project token answers 200 Ok, which proves nothing.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "No credential, nothing created.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P2",
   "rails": [
    "Stripe (billing page; card managed in Stripe)",
    "Stripe Projects listing 'stripe projects add posthog/analytics' (unconfirmed)",
    "billing API ops in OpenAPI (activate, switch-plan, deactivate; undescribed)"
   ],
   "rail_ids": [
    "stripe-portal",
    "stripe-projects",
    "billing-api"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "Free plan needs no card; paid is pay-as-you-go from the billing page with a card in Stripe. No 402 anywhere (no x402/MPP/L402 headers, no x402./mpp./agents. hosts, no /.well-known/ucp, not in the x402 Bazaar or mpp.dev). projects.dev lists PostHog as a Stripe Projects provider, not confirmed (no Stripe account). From docs only: no account to reach billing.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "grade": "n/a",
   "note": "No plan was started. OpenAPI has POST /api/billing/deactivate/ without a description.",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account was created. OpenAPI lists DELETE /api/users/{uuid}/ and DELETE /api/organizations/{id}/, not checked against an account.",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-03",
  "source": "drive",
  "options": [
   {
    "id": "stripe-portal",
    "name": "stripe-portal",
    "kind": "checkout",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   },
   {
    "id": "stripe-projects",
    "name": "Stripe Projects",
    "kind": "agent-rail",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   },
   {
    "id": "billing-api",
    "name": "Billing API",
    "kind": "billing",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [
   "stripe-projects"
  ],
  "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."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": true,
  "sdk": true,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST, 2358 operations in a public OpenAPI 3.1.0 spec plus public capture/flags and a provisioning API",
  "openapi": "public, most operations without error responses or examples",
  "mcp": "official, hosted, OAuth; 1083 tools documented",
  "cli": "posthog-cli 0.18.9 and the wizard; the tool catalog is browsable without a key",
  "llms_txt": "complete index, one Markdown page per API operation"
 },
 "can_do": [
  "Find every docs page, the full OpenAPI spec and the MCP tool list as Markdown or JSON without an account",
  "Follow a standard discovery chain from a 401 to OAuth metadata and an auth.md manifest",
  "Register an OAuth client headless (DCR) for the MCP server",
  "Browse and inspect the MCP tool catalog from the CLI without a key"
 ],
 "cannot_do": [
  {
   "what": "Create an account",
   "why": "the documented headless sign-up (wizard provisioning) returns 403 and the web form shows a Cloudflare Turnstile"
  },
  {
   "what": "Get an API key, OAuth token or project token",
   "why": "every route needs a signed-in account"
  },
  {
   "what": "Use any product feature (events, insights, flags, experiments, replays, surveys, errors)",
   "why": "no account"
  },
  {
   "what": "Upgrade or pay as an agent",
   "why": "no agent payment rail on PostHog's own domain; paid plan goes through the billing page and Stripe"
  }
 ],
 "blockers": [
  "Headless sign-up through the wizard returns 403 'Account creation is not enabled for this partner'",
  "Cloudflare Turnstile on the last step of the web sign-up form"
 ],
 "tips_for_owner": [
  "Re-enable headless sign-up through the wizard",
  "Let verified signed agents past sign-up Turnstile",
  "Show provisioning errors in the wizard",
  "Reject unknown project tokens on capture",
  "Answer MCP server/discover before auth",
  "Document error responses for every endpoint",
  "Fix links in the Markdown docs",
  "Document an agent purchase path"
 ],
 "tips_for_agents": [
  "Start at https://posthog.com/llms.txt: every docs page and every API operation has a .md page",
  "The OpenAPI spec is public at https://us.posthog.com/api/schema/ (17 MB)",
  "`posthog-cli api tools / search / info` lists the MCP tool catalog with input schemas, no key needed",
  "Once a human has an account, `posthog-cli login` gives a device-style code flow; or set POSTHOG_CLI_API_KEY and POSTHOG_CLI_PROJECT_ID",
  "Capture answers 200 Ok even for a wrong project token: check events landed with a read call",
  "Private API on us.posthog.com, public capture/flags on us.i.posthog.com; EU uses eu. hosts"
 ],
 "selfhost": {
  "install": {
   "status": "skipped",
   "minutes": 0,
   "note": "no docker in the drive sandbox; PostHog documents an open-source self-hosted edition (https://posthog.com/docs/self-host.md)"
  }
 },
 "summary": "PostHog is very well documented for agents: llms.txt, Markdown for every page, a public OpenAPI spec, an MCP server with OAuth discovery and an auth.md manifest. But our agent could not get an account: the documented headless sign-up (the wizard's provisioning) returned 403, and the web form ends in a Cloudflare Turnstile. Nothing past the docs could be driven.",
 "wall": "Turnstile on sign-up; wizard sign-up refused (403)",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "PostHog is a product analytics tool (events, dashboards, feature flags, experiments, session replay) that publishes unusually thorough documentation for AI agents. An agent on its own could read everything about the product but could not create an account: the official no-form sign-up method was refused by the server, and the normal web sign-up form ended in a 'prove you're human' check to click through it.",
  "can_do": [
   "Find every help page, API reference and tool list without needing an account",
   "Follow the product's own trail from a login error to its sign-in setup instructions",
   "Register itself as an application with the sign-in service without a person's help",
   "Look up the full list of automation tools and what each one needs, without a password"
  ],
  "cannot_do": [
   {
    "what": "Create an account",
    "why": "the no-form method was refused and the web form shows a human verification check"
   },
   {
    "what": "Get a password or access key",
    "why": "every way to get one requires an account that could not be created"
   },
   {
    "what": "Use any feature, like tracking events or flags",
    "why": "there is no account to use them with"
   },
   {
    "what": "Pay for a paid plan as an agent",
    "why": "upgrading happens on a billing page behind the same account wall, through a card, not an automatic payment"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Product analytics",
   "capability": "Capture custom and autocaptured events",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /i/v0/e (capture)",
    "mcp": null,
    "cli": null,
    "ui": "Activity / autocapture settings"
   },
   "check": "GET /api/event/ shows the new event",
   "source": "https://posthog.com/docs/product-analytics, https://posthog.com/docs/api/capture"
  },
  {
   "id": "cap-02",
   "group": "Product analytics",
   "capability": "Build trends, funnels, retention, paths, lifecycle insights",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST/GET /api/projects/{id}/insights",
    "mcp": "run trends/funnels/retention/SQL queries",
    "cli": null,
    "ui": "Insights"
   },
   "check": "GET /api/projects/{id}/insights/{id} returns the saved query/result",
   "source": "https://posthog.com/docs/product-analytics, https://posthog.com/docs/product-analytics/surfaces/mcp"
  },
  {
   "id": "cap-03",
   "group": "Product analytics",
   "capability": "Assemble and share dashboards, set alerts on insights",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/projects/{id}/dashboards",
    "mcp": null,
    "cli": null,
    "ui": "Dashboards"
   },
   "check": "GET /api/projects/{id}/dashboards/{id} shows tiles and alert config",
   "source": "https://posthog.com/docs/product-analytics, https://posthog.com/docs/alerts"
  },
  {
   "id": "cap-04",
   "group": "Session replay",
   "capability": "Record and watch session replays with synced DevTools (console/network)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/projects/{id}/session_recordings",
    "mcp": "search sessions",
    "cli": null,
    "ui": "Session replay"
   },
   "check": "GET /api/projects/{id}/session_recordings/{id} returns playable recording metadata",
   "source": "https://posthog.com/docs/session-replay"
  },
  {
   "id": "cap-05",
   "group": "Feature flags",
   "capability": "Create and roll out a feature flag with targeted release conditions",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/projects/{id}/feature_flags",
    "mcp": "create/update/schedule flags",
    "cli": null,
    "ui": "Feature flags"
   },
   "check": "GET /api/projects/{id}/feature_flags/{id} shows release conditions/rollout percentage",
   "source": "https://posthog.com/docs/feature-flags"
  },
  {
   "id": "cap-06",
   "group": "Feature flags",
   "capability": "Evaluate a feature flag at runtime for a user",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /flags",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Response body includes featureFlags map with resolved value for distinct_id",
   "source": "https://posthog.com/docs/api/flags"
  },
  {
   "id": "cap-07",
   "group": "Experiments",
   "capability": "Create and launch an A/B experiment, read significance results",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/projects/{id}/experiments",
    "mcp": "create experiments, check results",
    "cli": null,
    "ui": "Experiments"
   },
   "check": "GET /api/projects/{id}/experiments/{id} shows status=running then results with significance",
   "source": "https://posthog.com/docs/experiments"
  },
  {
   "id": "cap-08",
   "group": "Error tracking",
   "capability": "Capture exceptions and triage them as issues (assign, resolve)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET/PATCH /api/projects/{id}/error_tracking/issues",
    "mcp": "pull issues and stack traces",
    "cli": null,
    "ui": "Error tracking"
   },
   "check": "GET /api/projects/{id}/error_tracking/issues/{id} shows status=resolved and assignee",
   "source": "https://posthog.com/docs/error-tracking"
  },
  {
   "id": "cap-09",
   "group": "Surveys",
   "capability": "Build, target, and launch an in-app survey and read responses",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/projects/{id}/surveys",
    "mcp": "create, launch, stop, summarize surveys",
    "cli": null,
    "ui": "Surveys"
   },
   "check": "GET /api/projects/{id}/surveys/{id} shows status=running then response events present",
   "source": "https://posthog.com/docs/surveys"
  },
  {
   "id": "cap-10",
   "group": "Web analytics",
   "capability": "View web analytics (traffic, sources, pages) without extra instrumentation",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Web analytics dashboard"
   },
   "check": "Web analytics overview page shows sessions/pageviews for the project",
   "source": "https://posthog.com/pricing, https://posthog.com/web-analytics"
  },
  {
   "id": "cap-11",
   "group": "AI observability",
   "capability": "Track LLM traces, generations, and spans from AI integrations",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /api/projects/{id}/llm_traces (see AI Observability API)",
    "mcp": "use AI Observability over MCP",
    "cli": null,
    "ui": "AI Observability dashboard"
   },
   "check": "GET LLM trace endpoint returns captured generation with token usage/cost",
   "source": "https://posthog.com/docs/ai-observability, https://posthog.com/docs/ai-observability/surfaces/api"
  },
  {
   "id": "cap-12",
   "group": "Data warehouse",
   "capability": "Link an external source (Stripe, Postgres, S3, etc.) and query it with SQL alongside PostHog data",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/projects/{id}/warehouse/sources",
    "mcp": "run HogQL/SQL queries",
    "cli": null,
    "ui": "Data warehouse"
   },
   "check": "GET /api/projects/{id}/warehouse/sources/{id} shows status=completed sync and HogQL query against table returns rows",
   "source": "https://posthog.com/docs/data-warehouse"
  },
  {
   "id": "cap-13",
   "group": "Logs",
   "capability": "Ingest and search application logs with PostHog context",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Logs"
   },
   "check": "Logs search UI returns ingested log lines filtered by query",
   "source": "https://posthog.com/pricing, https://posthog.com/docs (llms.txt Logs entry)"
  },
  {
   "id": "cap-14",
   "group": "CDP / destinations",
   "capability": "Send events to a realtime destination (Slack, Zapier, Customer.io, etc.)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/projects/{id}/hog_functions (destinations)",
    "mcp": "set up a CDP destination",
    "cli": null,
    "ui": "Data pipelines / Destinations"
   },
   "check": "GET /api/projects/{id}/hog_functions/{id} shows enabled=true and delivery logs show a trigger fired",
   "source": "https://posthog.com/docs/cdp, https://posthog.com/pricing"
  },
  {
   "id": "cap-15",
   "group": "CDP / batch exports",
   "capability": "Set up a batch export of PostHog data to a warehouse (BigQuery, Databricks, S3/Azure Blob)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/projects/{id}/batch_exports",
    "mcp": null,
    "cli": null,
    "ui": "Data pipelines / Batch exports"
   },
   "check": "GET /api/projects/{id}/batch_exports/{id}/runs shows a completed run",
   "source": "https://posthog.com/docs/cdp/batch-exports"
  },
  {
   "id": "cap-16",
   "group": "Cohorts & group analytics",
   "capability": "Define a cohort or analytics group and segment insights by it",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/projects/{id}/cohorts",
    "mcp": null,
    "cli": null,
    "ui": "Cohorts / Persons"
   },
   "check": "GET /api/projects/{id}/cohorts/{id} shows member count > 0",
   "source": "https://posthog.com/docs/data/cohorts, https://posthog.com/docs/feature-flags"
  },
  {
   "id": "cap-17",
   "group": "Endpoints",
   "capability": "Publish a governed query as a reusable API endpoint for external apps",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "custom endpoint URL (see Endpoints product)",
    "mcp": null,
    "cli": null,
    "ui": "Endpoints"
   },
   "check": "Calling the published endpoint URL returns the governed query result",
   "source": "https://posthog.com/endpoints, https://posthog.com/docs (llms.txt Endpoints entry)"
  },
  {
   "id": "cap-18",
   "group": "Replay Vision",
   "capability": "Have AI watch session recordings at scale and surface matching moments",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Replay Vision"
   },
   "check": "Replay Vision results list shows matched recordings for the defined criteria",
   "source": "https://posthog.com/docs/replay-vision, https://posthog.com/pricing"
  },
  {
   "id": "cap-19",
   "group": "Inbox / Self-driving",
   "capability": "Review Self-driving reports and merge auto-opened pull requests fixing detected issues",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": "mark issue resolved, assignment rules",
    "cli": null,
    "ui": "PostHog Desktop / Self-driving inbox"
   },
   "check": "Inbox report shows a linked PR; merging it closes the report",
   "source": "https://posthog.com/docs/error-tracking, https://posthog.com/docs/session-replay, https://posthog.com/docs/model-context-protocol"
  },
  {
   "id": "cap-20",
   "group": "PostHog AI",
   "capability": "Ask PostHog AI to build insights or answer product questions in natural language",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Max AI assistant"
   },
   "check": "AI chat response produces/opens an insight matching the asked question",
   "source": "https://posthog.com/ai, https://posthog.com/pricing"
  },
  {
   "id": "cap-21",
   "group": "Source maps / releases",
   "capability": "Upload source maps and debug symbols so stack traces are readable",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "posthog-cli sourcemap / dsym / hermes / proguard",
    "ui": "Error tracking settings"
   },
   "check": "A captured exception's stack trace shows original (unminified) source after upload",
   "source": "https://posthog.com/docs/cli, https://posthog.com/docs/error-tracking/upload-source-maps"
  },
  {
   "id": "cap-22",
   "group": "Emails / workflows",
   "capability": "Send user emails via workflows triggered by events/properties",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Workflows"
   },
   "check": "Workflow run log shows an email delivered to the triggering user",
   "source": "https://posthog.com/pricing, https://posthog.com/workflows"
  },
  {
   "id": "cap-23",
   "group": "Remote config",
   "capability": "Ship a JSON payload to clients via remote config tied to a flag",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /flags (payload field)",
    "mcp": null,
    "cli": null,
    "ui": "Feature flags > remote config"
   },
   "check": "Flag evaluation response includes the configured payload object",
   "source": "https://posthog.com/docs/feature-flags/remote-config"
  },
  {
   "id": "cap-24",
   "group": "CLI tasks",
   "capability": "List, create, update, and delete PostHog tasks from the CLI",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "posthog-cli api (tasks)",
    "ui": null
   },
   "check": "posthog-cli api task list shows the created task after posthog-cli api task create",
   "source": "https://posthog.com/docs/cli"
  },
  {
   "id": "cap-25",
   "group": "Account & org admin",
   "capability": "Invite teammates to a project/organization",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/organizations/{id}/invites",
    "mcp": null,
    "cli": null,
    "ui": "Organization settings > Members"
   },
   "check": "GET /api/organizations/{id}/invites shows the pending invite",
   "source": "https://posthog.com/docs/api"
  },
  {
   "id": "cap-26",
   "group": "Account & org admin",
   "capability": "Create and manage multiple projects within an organization",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/organizations/{id}/projects",
    "mcp": null,
    "cli": null,
    "ui": "Organization settings > Projects"
   },
   "check": "GET /api/organizations/{id}/projects lists the new project",
   "source": "https://posthog.com/pricing (plan project limits)"
  },
  {
   "id": "cap-27",
   "group": "Billing",
   "capability": "View usage and set billing limits/alerts per product",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Billing settings"
   },
   "check": "Billing page shows a configured spend limit for a product taking effect",
   "source": "https://posthog.com/docs/billing/limits-alerts"
  },
  {
   "id": "cap-28",
   "group": "Integrations",
   "capability": "Install PostHog via SDK/wizard and connect third-party app integrations (Slack, Zapier, etc.)",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "npx @posthog/wizard@latest",
    "ui": "Integrations marketplace"
   },
   "check": "Integration shows status=connected in settings after OAuth flow",
   "source": "https://posthog.com/llms.txt, https://posthog.com/docs/cdp/sources"
  },
  {
   "id": "cap-29",
   "group": "API keys & auth",
   "capability": "Create and manage personal API keys, project secret keys, and OAuth apps",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "POST /api/personal_api_keys",
    "mcp": null,
    "cli": "posthog-cli login",
    "ui": "User settings > API keys"
   },
   "check": "GET /api/personal_api_keys lists the newly created key with its scopes",
   "source": "https://posthog.com/docs/api/personal-api-keys, https://posthog.com/docs/api"
  },
  {
   "id": "cap-30",
   "group": "Branding",
   "capability": "Customize survey/popup appearance and branding",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Survey appearance settings"
   },
   "check": "Rendered survey widget reflects the configured colors/branding",
   "source": "https://posthog.com/docs/surveys"
  }
 ],
 "attempts": [
  {
   "t": "01:28",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "llms.txt",
   "task": "GET /llms.txt",
   "result": "done",
   "evidence": "200 text/plain 434985 bytes, H1 '# PostHog', ~4500 lines incl. every OpenAPI op as .md page",
   "notes": "llms-full.txt 404"
  },
  {
   "t": "01:28",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "markdown docs",
   "task": "Accept: text/markdown and .md URL on /docs/feature-flags",
   "result": "done",
   "evidence": "Accept: text/markdown -> 200 content-type text/markdown, vary: Accept, User-Agent; /docs/feature-flags.md -> 200 text/plain vary Accept",
   "notes": "both"
  },
  {
   "t": "01:28",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "robots/aipref",
   "task": "robots.txt Content-Usage / Content-signal",
   "result": "done",
   "evidence": "posthog.com/robots.txt: only Googlebot/Bingbot/DuckDuckBot/Yeti groups 'Disallow: /*.md$'; no Content-Usage or Content-signal lines; no Content-Usage header on / or docs",
   "notes": "aipref absent"
  },
  {
   "t": "01:35",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": false,
   "capability": "well-known cards",
   "task": "ai-catalog, agent-card, agent.json, mcp server-card, ucp",
   "result": "failed",
   "evidence": "all 404 text/html on posthog.com; mcp.posthog.com/mcp/server-card 401 (auth required)",
   "notes": "no A2A card, no AI catalog"
  },
  {
   "t": "01:35",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "OAuth PRM/AS",
   "task": "401 WWW-Authenticate -> PRM -> AS metadata -> auth.md",
   "result": "done",
   "evidence": "GET us.posthog.com/api/projects/ 401 www-authenticate Bearer resource_metadata=.../.well-known/oauth-protected-resource; AS metadata: client_id_metadata_document_supported true, registration_endpoint (DCR), PKCE S256, grants authorization_code/refresh_token/jwt-bearer, agent_auth {identity_types_supported:[identity_assertion], id-jag}; no device_authorization_endpoint; us.posthog.com/auth.md 200 text/markdown says service_auth/anonymous not supported yet",
   "notes": "auth.md via ID-JAG is Enterprise-only beta"
  },
  {
   "t": "01:35",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": false,
   "capability": "MCP server/discover",
   "task": "POST server/discover 2026-07-28 to https://mcp.posthog.com/mcp",
   "result": "partial",
   "evidence": "401 text/plain 'No token provided...' www-authenticate Bearer resource_metadata=https://mcp.posthog.com/.well-known/oauth-protected-resource/mcp; PRM 200 -> AS https://oauth.posthog.com (CIMD true, DCR registration_endpoint); /sse -> 308 to /mcp?_deprecated=sse",
   "notes": "auth required; retry with credential later"
  },
  {
   "t": "01:35",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": false,
   "capability": "pay well-knowns",
   "task": "/.well-known/ucp, /auth.md (posthog.com), /SKILL.md",
   "result": "failed",
   "evidence": "404 on posthog.com for /.well-known/ucp, /auth.md, /SKILL.md (auth.md lives on us.posthog.com)"
  },
  {
   "t": "03:10",
   "cap": "signup",
   "capability": "sign up",
   "task": "Create account headless with documented wizard: `wizard provision --email the agent's inbox --region us` (@posthog/wizard 2.80.0)",
   "route": "cli",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "wizard exits 1: {\"error\":\"Request failed with status code 403\",\"code\":\"provisioning_failed\"}.",
   "notes": "docs (wizard-signup.md, us.posthog.com/auth.md) present the wizard as the no-form signup path; the wizard's own OAuth client (US) is refused account creation. The wizard prints only 'status code 403' and drops the server's message.",
   "quality": {
    "error_legibility": "vague",
    "docs_match": "drift",
    "recoverable": "no"
   }
  },
  {
   "t": "06:10",
   "cap": "signup",
   "capability": "sign up",
   "task": "Web sign-up form at us.posthog.com/signup (email, password, name/org/role)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "steps 1-2 passed; on the final 'Create account' click a Cloudflare Turnstile widget 'Verify you are human' appeared in place of the button (screenshot browser/shots/008.png); not clicked",
   "notes": "visible interactive Turnstile on the signup submit; our agent's browser sends Web Bot Auth signatures and an honest UA",
   "quality": {
    "error_legibility": "n/a",
    "recoverable": "no"
   }
  },
  {
   "t": "06:37",
   "cap": "signup",
   "capability": "sign up",
   "task": "Same headless wizard provisioning in the EU region (`wizard provision --region eu`)",
   "route": "cli",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "exit 1 {\"error\":\"Request failed with status code 403\",\"code\":\"provisioning_failed\"}",
   "notes": "EU wizard client refused too",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "no"
   }
  },
  {
   "t": "06:37",
   "cap": "signup",
   "capability": "sign up",
   "task": "Ask a human to do the sign-up in their own browser (Turnstile judges the browser)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "",
   "notes": "Cloudflare Turnstile"
  },
  {
   "t": "09:09",
   "cap": "credentials",
   "capability": "get API credentials",
   "task": "posthog-cli login (documented) to obtain a personal API token",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "posthog-cli 0.18.9 login (US) starts 'OAuth Device Flow': prints https://us.posthog.com/cli/authorize?code=••••&use_cases=agent-cli and polls (121 attempts); approval needs a signed-in user",
   "notes": "no account (sign-up wall), so nobody to approve; headless device-style flow exists once an account exists. Without a TTY, login fails with 'Oops! Failed to login'"
  },
  {
   "t": "11:14",
   "cap": "credentials",
   "capability": "get API credentials",
   "task": "MCP OAuth: DCR a client at oauth.posthog.com/oauth/register/, then authorize with PKCE + resource=https://mcp.posthog.com/mcp",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "DCR POST -> 201 client_id issued (redirect_uris echoed plus https://oauth.posthog.com/oauth/callback/ added); authorize -> region picker -> us.posthog.com/login?next=/oauth/authorize/... (email/password, Google/GitHub/GitLab, passkey)",
   "notes": "client registration headless works (DCR and CIMD advertised); consent needs a logged-in account we could not create",
   "quality": {}
  },
  {
   "t": "12:02",
   "cap": "verify",
   "capability": "verify",
   "task": "verify the sign-up email",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'"
  },
  {
   "t": "12:02",
   "cap": "first_call",
   "capability": "The first call",
   "task": "first authenticated API/MCP/CLI call",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'"
  },
  {
   "t": "12:02",
   "cap": "first_action",
   "capability": "The first action",
   "task": "create a first object (feature flag)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'"
  },
  {
   "t": "12:02",
   "cap": "cap-01",
   "capability": "Capture custom and autocaptured events",
   "task": "Capture custom and autocaptured events via POST /i/v0/e (capture)",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'. Capture to /i/v0/e with a made-up token answered 200 Ok (see stress line); a real project token needs an account",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-02",
   "capability": "Build trends, funnels, retention, paths, lifecycle insights",
   "task": "Build trends, funnels, retention, paths, lifecycle insights via POST/GET /api/projects/{id}/insights",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-03",
   "capability": "Assemble and share dashboards, set alerts on insights",
   "task": "Assemble and share dashboards, set alerts on insights via POST /api/projects/{id}/dashboards",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-04",
   "capability": "Record and watch session replays with synced DevTools (console/network)",
   "task": "Record and watch session replays with synced DevTools (console/network) via GET /api/projects/{id}/session_recordings",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-05",
   "capability": "Create and roll out a feature flag with targeted release conditions",
   "task": "Create and roll out a feature flag with targeted release conditions via POST /api/projects/{id}/feature_flags",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-06",
   "capability": "Evaluate a feature flag at runtime for a user",
   "task": "Evaluate a feature flag at runtime for a user via POST /flags",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'. /flags with a made-up token answered 401 authentication_failed; a real project token needs an account",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-07",
   "capability": "Create and launch an A/B experiment, read significance results",
   "task": "Create and launch an A/B experiment, read significance results via POST /api/projects/{id}/experiments",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-08",
   "capability": "Capture exceptions and triage them as issues (assign, resolve)",
   "task": "Capture exceptions and triage them as issues (assign, resolve) via GET/PATCH /api/projects/{id}/error_tracking/issues",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-09",
   "capability": "Build, target, and launch an in-app survey and read responses",
   "task": "Build, target, and launch an in-app survey and read responses via POST /api/projects/{id}/surveys",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-10",
   "capability": "View web analytics (traffic, sources, pages) without extra instrumentation",
   "task": "View web analytics (traffic, sources, pages) without extra instrumentation via UI",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-11",
   "capability": "Track LLM traces, generations, and spans from AI integrations",
   "task": "Track LLM traces, generations, and spans from AI integrations via GET /api/projects/{id}/llm_traces (see AI Observability API)",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-12",
   "capability": "Link an external source (Stripe, Postgres, S3, etc.) and query it with SQL alongside PostHog data",
   "task": "Link an external source (Stripe, Postgres, S3, etc.) and query it with SQL alongside PostHog data via POST /api/projects/{id}/warehouse/sources",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-13",
   "capability": "Ingest and search application logs with PostHog context",
   "task": "Ingest and search application logs with PostHog context via UI",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-14",
   "capability": "Send events to a realtime destination (Slack, Zapier, Customer.io, etc.)",
   "task": "Send events to a realtime destination (Slack, Zapier, Customer.io, etc.) via POST /api/projects/{id}/hog_functions (destinations)",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-15",
   "capability": "Set up a batch export of PostHog data to a warehouse (BigQuery, Databricks, S3/Azure Blob)",
   "task": "Set up a batch export of PostHog data to a warehouse (BigQuery, Databricks, S3/Azure Blob) via POST /api/projects/{id}/batch_exports",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-16",
   "capability": "Define a cohort or analytics group and segment insights by it",
   "task": "Define a cohort or analytics group and segment insights by it via POST /api/projects/{id}/cohorts",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-17",
   "capability": "Publish a governed query as a reusable API endpoint for external apps",
   "task": "Publish a governed query as a reusable API endpoint for external apps via custom endpoint URL (see Endpoints product)",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-18",
   "capability": "Have AI watch session recordings at scale and surface matching moments",
   "task": "Have AI watch session recordings at scale and surface matching moments via UI",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-19",
   "capability": "Review Self-driving reports and merge auto-opened pull requests fixing detected issues",
   "task": "Review Self-driving reports and merge auto-opened pull requests fixing detected issues via mark issue resolved, assignment rules",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-20",
   "capability": "Ask PostHog AI to build insights or answer product questions in natural language",
   "task": "Ask PostHog AI to build insights or answer product questions in natural language via UI",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-21",
   "capability": "Upload source maps and debug symbols so stack traces are readable",
   "task": "Upload source maps and debug symbols so stack traces are readable via posthog-cli sourcemap / dsym / hermes / proguard",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-22",
   "capability": "Send user emails via workflows triggered by events/properties",
   "task": "Send user emails via workflows triggered by events/properties via UI",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-23",
   "capability": "Ship a JSON payload to clients via remote config tied to a flag",
   "task": "Ship a JSON payload to clients via remote config tied to a flag via POST /flags (payload field)",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-24",
   "capability": "List, create, update, and delete PostHog tasks from the CLI",
   "task": "List, create, update, and delete PostHog tasks from the CLI via posthog-cli api (tasks)",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-25",
   "capability": "Invite teammates to a project/organization",
   "task": "Invite teammates to a project/organization via POST /api/organizations/{id}/invites",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-26",
   "capability": "Create and manage multiple projects within an organization",
   "task": "Create and manage multiple projects within an organization via POST /api/organizations/{id}/projects",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-27",
   "capability": "View usage and set billing limits/alerts per product",
   "task": "View usage and set billing limits/alerts per product via UI",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-28",
   "capability": "Install PostHog via SDK/wizard and connect third-party app integrations (Slack, Zapier, etc.)",
   "task": "Install PostHog via SDK/wizard and connect third-party app integrations (Slack, Zapier, etc.) via npx @posthog/wizard@latest",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-29",
   "capability": "Create and manage personal API keys, project secret keys, and OAuth apps",
   "task": "Create and manage personal API keys, project secret keys, and OAuth apps via POST /api/personal_api_keys",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "12:02",
   "cap": "cap-30",
   "capability": "Customize survey/popup appearance and branding",
   "task": "Customize survey/popup appearance and branding via UI",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no PostHog account: web sign-up ends in a Cloudflare Turnstile 'Verify you are human' and the documented headless sign-up (wizard provisioning) answers 403 'Account creation is not enabled for this partner'",
   "notes": "not attempted past the 401: every route needs a personal API key, OAuth token or project token from an account"
  },
  {
   "t": "16:27",
   "cap": "pay",
   "capability": "buy the product the agent way",
   "task": "probe 402 rails, well-knowns, registries, docs for machine payments; find the upgrade path",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": false,
   "evidence": "x402./mpp./agents.posthog.com do not resolve; POST /api/billing/ unauthenticated -> 401 (no 402, no PAYMENT-REQUIRED, no WWW-Authenticate: Payment/L402); /.well-known/ucp 404; no x-payment-info in OpenAPI 3.1.0; not in x402 Bazaar (27227 resources) nor mpp.dev/api/services; llms.txt has no x402/MPP/ACP/UCP/AP2/L402 mentions. projects.dev/providers lists 'stripe projects add posthog/analytics' (listing only, unconfirmed: no Stripe account). Provisioning docs: service_id 'free'|'pay_as_you_go' and token response 'payment_credentials: orchestrator'. Pricing: free plan, no credit card; paid = pay-as-you-go, subscribed from the billing page, card managed in Stripe. OpenAPI has /api/billing/activate/, /subscription/switch-plan/, /deactivate/ (no descriptions)",
   "notes": "no account, so the billing page and API could not be reached"
  },
  {
   "t": "16:27",
   "cap": "cancel",
   "capability": "cancel/downgrade",
   "task": "cancel a plan",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "no plan started (no account); free plan has nothing recurring; OpenAPI lists POST /api/billing/deactivate/ without description"
  },
  {
   "t": "16:27",
   "cap": "delete",
   "capability": "delete account and data",
   "task": "delete the account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no account was created, nothing to delete; OpenAPI lists DELETE /api/organizations/{id}/ and /api/projects/{id}/ (account deletion route not checked against an account)"
  },
  {
   "t": "17:55",
   "cap": "docs",
   "capability": "find docs",
   "task": "find API, auth, MCP and sign-up docs headless",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "llms.txt (4503 lines, 4265 links incl. one .md page per OpenAPI op), every docs page as Markdown via .md or Accept: text/markdown, public OpenAPI 3.1.0 at us.posthog.com/api/schema/ (2358 ops), MCP tools page (1083 tools), auth.md manifest",
   "quality": {
    "docs_match": "match"
   }
  }
 ],
 "stale": false,
 "icon": "/logos/posthog.png",
 "monitored": false,
 "verdict": "L1 · Needs a person describes PostHog today: docs are built for an agent to read, but no agent can open an account on its own. Our agent stopped at signup: the documented headless path answered 403, \"Account creation is not enabled for this partner,\" and the web form ends in a visible Cloudflare Turnstile. With no account, the key page, the first call and any real work through the API, CLI or MCP server stayed out of reach. Paying, cancelling and deleting were never reached either, since no plan was ever started.",
 "page": "https://agentdrives.com/tools/posthog?via=api"
}