{
 "slug": "polar",
 "name": "Polar",
 "url": "https://polar.sh",
 "domain": "polar.sh",
 "category": "payments",
 "category_name": "Payments",
 "tested_at": "2026-10-12",
 "run": "20261012T090702Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261006T031222Z",
   "date": "2026-10-06",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  },
  {
   "run": "20261012T090702Z",
   "date": "2026-10-12",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 3,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "obey"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 2,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "openapi",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": null,
 "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": "behind",
    "behind": null,
    "value": "dcr"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 1,
    "value": "3.1.0"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "reported",
 "driver": {
  "version": 3,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false,
  "prompt_sha": "076cd4c65a1a",
  "kb_version": "3+overlay-1353601952",
  "identity": "e8a92f24a9a8"
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 3,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "obey"
 },
 "same_level_drives": 2,
 "drives": 2,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "Cloudflare Turnstile",
  "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 at /docs/llms.txt, .md pages and Accept: text/markdown, OpenAPI 3.1.0 at /docs/openapi/2026-10.openapi.json"
  },
  "signup": {
   "status": "human",
   "note": "Email sign-in on /auth shows a Cloudflare Turnstile widget; it failed our agent's browser ('Verification failed. Please try again.'). Other routes are Google/Apple/GitHub OAuth; no API or CLI sign-up."
  },
  "verify": {
   "status": "",
   "note": "No code mail sent: the Turnstile check failed first.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "Organization access tokens are dashboard-only; DCR (POST /v1/oauth2/register) works headless but /oauth2/authorize sends to the same Turnstile sign-in. No device flow, no CIMD.",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "GET /v1/products/ -> 401 Unauthorized without a token.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "No token.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [
    "dashboard plan switch (checkout not visible without an account)"
   ],
   "rail_ids": [
    "card"
   ],
   "first_party": true,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "Free Starter plan; Pro $20/mo, Growth $100/mo, Scale $400/mo switched in the dashboard behind the human sign-in. No 402, x402, MPP, Stripe Projects listing or billing API found. We paid nothing: no 402 asking for USDC.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "note": "not tested: no plan or trial was started. Docs: plans can be switched anytime in the dashboard; downgrading to Starter moves to 5% + 50c.",
   "docs_grade": "",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account was created; the OpenAPI has no user or organization delete operation.",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-12",
  "source": "probe",
  "options": [],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": null
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": true,
  "sdk": true,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": true
 },
 "surface_notes": {
  "api": "REST, 128 paths / 190 operations (2026-10)",
  "openapi": "3.1.0, versioned specs 2026-04, 2026-10, 2027-01",
  "mcp": "official, OAuth, 3 meta-tools over 100 operations (per docs)",
  "cli": "polar CLI, browser OAuth login or OAT"
 },
 "can_do": [
  "Read the full docs as Markdown via llms.txt and .md URLs",
  "Download the versioned OpenAPI spec",
  "Register an OAuth client headless via DCR"
 ],
 "cannot_do": [
  {
   "what": "Sign up or sign in",
   "why": "Cloudflare Turnstile on email sign-in failed our signed agent browser; other routes need Google/Apple/GitHub accounts"
  },
  {
   "what": "Get an API token",
   "why": "Organization access tokens are dashboard-only; OAuth authorize goes through the same sign-in"
  },
  {
   "what": "Use any product capability",
   "why": "No token"
  },
  {
   "what": "Upgrade or pay for a plan",
   "why": "Only in the dashboard; no agent payment rail or billing API"
  }
 ],
 "blockers": [
  "Cloudflare Turnstile on the email sign-in (/auth)",
  "API tokens only created in the dashboard"
 ],
 "tips_for_owner": [
  "Let verified agents pass sign-in Turnstile",
  "Add an API route to create access tokens",
  "Offer device flow for CLI and MCP",
  "Add a plan and billing API",
  "Document and expose account deletion"
 ],
 "tips_for_agents": [
  "Read docs via https://polar.sh/docs/llms.txt and .md page URLs",
  "A human must sign in once and create an organization access token (Settings > Developers) or approve MCP OAuth",
  "Use https://sandbox-api.polar.sh with a sandbox token for tests; sandbox.polar.sh disallows all crawlers in robots.txt"
 ],
 "selfhost": {
  "install": {
   "status": "skipped",
   "minutes": 0,
   "note": "no docker in the drive sandbox"
  }
 },
 "summary": "Polar's docs are agent-ready (llms.txt, Markdown pages, OpenAPI 3.1.0, CLI, OAuth MCP server), but our agent could not get in: email sign-in sits behind a Cloudflare Turnstile widget that failed our agent's browser. API tokens are dashboard-only, so no capability could be driven.",
 "wall": "Cloudflare Turnstile on the email sign-in",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Polar is a payments platform for selling products online. The agent could read all the documentation on its own but could not create an account because a Cloudflare 'prove you are human' check blocked its sign-in attempt, so it never got access to try any real features.",
  "can_do": [
   "Read all the product documentation in machine-readable form",
   "Download the technical API specification",
   "Register as a developer application automatically"
  ],
  "cannot_do": [
   {
    "what": "Create an account",
    "why": "A human verification puzzle blocked the sign-up form"
   },
   {
    "what": "Get an API key",
    "why": "Keys are only created inside the website dashboard, which needs sign-in"
   },
   {
    "what": "Use any feature of the product",
    "why": "No account or key was ever obtained"
   },
   {
    "what": "Pay for or cancel a paid plan",
    "why": "Plan changes only happen in the dashboard behind the same sign-in wall"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Products",
   "capability": "Create and configure a sellable product",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/products",
    "mcp": "Create product",
    "cli": "polar products",
    "ui": "Dashboard > Products"
   },
   "check": "GET /v1/products/{id} returns the product with the configured prices and benefits",
   "source": "https://polar.sh/docs/features/products, https://polar.sh/docs/api-reference/2026-04/products/create-product"
  },
  {
   "id": "cap-02",
   "group": "Checkout",
   "capability": "Sell via a hosted checkout session/link",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/checkouts",
    "mcp": "Create checkout link",
    "cli": "polar checkout_links",
    "ui": "Dashboard > Checkout Links"
   },
   "check": "GET /v1/checkouts/{id} shows status succeeded after payment completes",
   "source": "https://polar.sh/docs/features/checkout/session, https://polar.sh/docs/features/checkout/links"
  },
  {
   "id": "cap-03",
   "group": "Subscriptions",
   "capability": "Sell a recurring subscription plan with trials, upgrades and proration",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/subscriptions, PATCH /v1/subscriptions/{id}",
    "mcp": "Update subscription",
    "cli": "polar subscriptions",
    "ui": "Dashboard > Subscriptions"
   },
   "check": "GET /v1/subscriptions/{id} reflects status active/trialing and updated plan after an upgrade",
   "source": "https://polar.sh/docs/features/subscriptions/introduction, https://polar.sh/docs/features/subscriptions/trials, https://polar.sh/docs/features/subscriptions/proration"
  },
  {
   "id": "cap-04",
   "group": "Usage billing",
   "capability": "Meter usage events and bill on consumption",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/events/ingest; POST /v1/meters",
    "mcp": "Create meter",
    "cli": "polar events; polar meters",
    "ui": "Dashboard > Meters"
   },
   "check": "GET /v1/customer-meters/{id} shows incremented consumed_units after ingesting a matching event, and the next invoice line item reflects it",
   "source": "https://polar.sh/docs/features/usage-based-billing/introduction, https://polar.sh/docs/features/usage-based-billing/event-ingestion, https://polar.sh/docs/features/usage-based-billing/billing"
  },
  {
   "id": "cap-05",
   "group": "Credits",
   "capability": "Grant prepaid usage credits that draw down automatically",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/benefits (type meter_credit)",
    "mcp": "Create benefit",
    "cli": "polar benefits",
    "ui": "Dashboard > Benefits"
   },
   "check": "GET /v1/customer-meters/{id} shows credited balance at cycle start, decreasing as usage events are ingested",
   "source": "https://polar.sh/docs/features/usage-based-billing/credits"
  },
  {
   "id": "cap-06",
   "group": "Merchant of record",
   "capability": "Collect global sales tax/VAT automatically as merchant of record",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Checkout page (tax line), Dashboard > Orders"
   },
   "check": "GET /v1/orders/{id} includes a non-zero tax_amount computed for the customer's billing country",
   "source": "https://polar.sh/docs/merchant-of-record/introduction, https://polar.sh/docs/introduction"
  },
  {
   "id": "cap-07",
   "group": "Payouts",
   "capability": "Receive settled revenue payouts to a connected bank account",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "polar payments",
    "ui": "Dashboard > Finance > Payouts"
   },
   "check": "Dashboard Payouts list shows a new payout entry with status paid after a withdrawal",
   "source": "https://polar.sh/docs/features/finance/payouts, https://polar.sh/docs/features/finance/accounts"
  },
  {
   "id": "cap-08",
   "group": "Benefits",
   "capability": "Automatically deliver entitlements (license keys, file downloads, GitHub/Discord/Slack access) on purchase",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/benefits",
    "mcp": "Create benefit",
    "cli": "polar benefits",
    "ui": "Dashboard > Benefits"
   },
   "check": "GET /v1/benefits/{id}/grants shows a new grant record for the customer right after checkout completes",
   "source": "https://polar.sh/docs/features/benefits/introduction, https://polar.sh/docs/features/benefits/license-keys, https://polar.sh/docs/features/benefits/github-access, https://polar.sh/docs/features/benefits/discord-access"
  },
  {
   "id": "cap-09",
   "group": "Checkout",
   "capability": "Embed checkout directly on own website",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Embedded Checkout JS component"
   },
   "check": "Embedded checkout element renders and posts a checkout session that appears in GET /v1/checkouts",
   "source": "https://polar.sh/docs/features/checkout/embed"
  },
  {
   "id": "cap-10",
   "group": "Pricing",
   "capability": "Set flexible pricing (fixed, pay-what-you-want, free, seat-based, unit-based, metered, ad-hoc)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/products (prices[])",
    "mcp": "Update product",
    "cli": "polar products",
    "ui": "Dashboard > Products > Pricing"
   },
   "check": "GET /v1/products/{id} shows the configured price objects with the chosen amount_type",
   "source": "https://polar.sh/docs/features/seat-based-pricing, https://polar.sh/docs/features/unit-based-pricing, https://polar.sh/docs/features/checkout/session"
  },
  {
   "id": "cap-11",
   "group": "Seats",
   "capability": "Assign and manage team seats on a seat-based subscription",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/customer-seats",
    "mcp": "Assign customer seat",
    "cli": "polar customer_seats",
    "ui": "Customer Portal > Seats"
   },
   "check": "GET /v1/customer-seats lists the new seat with status claimed after the invitee accepts",
   "source": "https://polar.sh/docs/features/seat-based-pricing, https://polar.sh/docs/api-reference/2026-04/customer-seats/assign-seat.md"
  },
  {
   "id": "cap-12",
   "group": "Discounts",
   "capability": "Create discount codes for products and subscriptions",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/discounts",
    "mcp": "Create discount code",
    "cli": "polar discounts",
    "ui": "Dashboard > Discounts"
   },
   "check": "Applying the code at checkout reduces checkout.amount and GET /v1/discounts/{id} shows redemptions_count incremented",
   "source": "https://polar.sh/docs/features/discounts"
  },
  {
   "id": "cap-13",
   "group": "Checkout",
   "capability": "Add custom input fields to checkout",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/custom-fields",
    "mcp": "Create custom field",
    "cli": "polar custom_fields",
    "ui": "Dashboard > Custom Fields"
   },
   "check": "GET /v1/orders/{id} includes the submitted custom_field_data value",
   "source": "https://polar.sh/docs/features/custom-fields"
  },
  {
   "id": "cap-14",
   "group": "Orders",
   "capability": "Issue full or partial refunds on an order",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/refunds",
    "mcp": "Create refund",
    "cli": "polar refunds",
    "ui": "Dashboard > Orders > Refund"
   },
   "check": "GET /v1/orders/{id} shows refunded_amount updated and a refund.created webhook fires",
   "source": "https://polar.sh/docs/features/refunds"
  },
  {
   "id": "cap-15",
   "group": "Orders",
   "capability": "Generate and download order invoices and receipts",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/orders/{id}/invoice; GET /v1/orders/{id}/receipt",
    "mcp": "Generate order invoice",
    "cli": "polar orders",
    "ui": "Customer Portal > Orders"
   },
   "check": "GET /v1/orders/{id}/invoice returns a presigned PDF URL that resolves to a document",
   "source": "https://polar.sh/docs/api-reference/2026-04/orders/generate-order-invoice.md, https://polar.sh/docs/api-reference/2026-04/orders/get-order-receipt.md"
  },
  {
   "id": "cap-16",
   "group": "Customer portal",
   "capability": "Let customers self-manage subscriptions, payment methods, orders and benefits",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v1/customer-portal/*",
    "mcp": null,
    "cli": null,
    "ui": "Hosted Customer Portal"
   },
   "check": "Customer Portal subscription cancel action updates GET /v1/customer-portal/subscriptions/{id} to cancel_at_period_end: true",
   "source": "https://polar.sh/docs/features/customer-portal/introduction, https://polar.sh/docs/features/customer-portal/settings"
  },
  {
   "id": "cap-17",
   "group": "Webhooks",
   "capability": "Configure webhook endpoints and receive lifecycle events",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/webhooks/endpoints",
    "mcp": "Create webhook endpoint",
    "cli": "polar webhooks; polar listen",
    "ui": "Dashboard > Webhooks"
   },
   "check": "Triggering an event (e.g. order.paid) produces a delivery visible in GET /v1/webhooks/deliveries with status succeeded",
   "source": "https://polar.sh/docs/integrate/webhooks/endpoints, https://polar.sh/docs/integrate/webhooks/events"
  },
  {
   "id": "cap-18",
   "group": "Analytics",
   "capability": "View revenue, order and subscription metrics/analytics",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /v1/metrics",
    "mcp": "Get metrics",
    "cli": "polar metrics",
    "ui": "Dashboard > Analytics"
   },
   "check": "GET /v1/metrics for a date range returns non-zero orders/revenue series matching known test orders",
   "source": "https://polar.sh/docs/features/analytics, https://polar.sh/docs/api-reference/2026-04/metrics/get-metrics.md"
  },
  {
   "id": "cap-19",
   "group": "Customers",
   "capability": "Manage customer records (create, update, view state, delete/anonymize)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/customers; GET /v1/customers/{id}/state",
    "mcp": "Create customer",
    "cli": "polar customers",
    "ui": "Dashboard > Customers"
   },
   "check": "GET /v1/customers/{id}/state reflects active subscriptions/benefits right after a purchase",
   "source": "https://polar.sh/docs/features/customer-management, https://polar.sh/docs/integrate/customer-state"
  },
  {
   "id": "cap-20",
   "group": "Cost insights",
   "capability": "Track per-customer costs and margins against revenue",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v1/events (cost metadata)",
    "mcp": null,
    "cli": "polar events",
    "ui": "Dashboard > Cost Insights"
   },
   "check": "Dashboard Cost Insights view shows computed margin per customer after cost events are ingested",
   "source": "https://polar.sh/docs/features/cost-insights/introduction, https://polar.sh/docs/features/cost-insights/cost-events"
  },
  {
   "id": "cap-22",
   "group": "Migration",
   "capability": "Migrate products, customers, and subscriptions from Stripe",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Migrate from Stripe wizard"
   },
   "check": "Dashboard shows imported Stripe subscriptions as subscription.migrated and they appear in GET /v1/subscriptions",
   "source": "https://polar.sh/docs/migrate"
  },
  {
   "id": "cap-23",
   "group": "Sandbox",
   "capability": "Develop and test integration in a sandbox environment",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "sandbox-api.polar.sh base URL",
    "mcp": "polar-sandbox server",
    "cli": "polar auth (sandbox)",
    "ui": "Dashboard sandbox org"
   },
   "check": "A sandbox-mode checkout session completes without a real card charge and appears only in the sandbox org's order list",
   "source": "https://polar.sh/docs/integrate/sandbox"
  },
  {
   "id": "cap-24",
   "group": "Payment methods",
   "capability": "Accept multiple payment methods with localized checkout language/currency",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Checkout page"
   },
   "check": "Checkout page renders the payment method list and language matching the customer's locale/country",
   "source": "https://polar.sh/docs/features/checkout/payment-methods, https://polar.sh/docs/features/checkout/localization"
  },
  {
   "id": "cap-25",
   "group": "Failed payments",
   "capability": "Automatic dunning retries for failed subscription renewals",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Subscriptions"
   },
   "check": "GET /v1/subscriptions/{id} shows status past_due then active after a retried charge succeeds, matching subscription.past_due/active webhooks",
   "source": "https://polar.sh/docs/features/subscriptions/failed-payments"
  },
  {
   "id": "cap-26",
   "group": "Integrations",
   "capability": "Connect to third-party apps (Zapier, Raycast, Framer, Fernand, ParityDeals, Affonso)",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Integrations marketplace"
   },
   "check": "A configured Zapier zap fires when a Polar order.created event occurs",
   "source": "https://polar.sh/docs/features/integrations/zapier, https://polar.sh/docs/features/integrations/raycast, https://polar.sh/docs/features/integrations/framer"
  },
  {
   "id": "cap-27",
   "group": "Team",
   "capability": "Invite teammates and manage their roles/permissions",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Settings > Team"
   },
   "check": "Dashboard Team page lists the invited member with the assigned role after they accept",
   "source": "https://polar.sh/docs/features/team-management"
  },
  {
   "id": "cap-28",
   "group": "Team",
   "capability": "Enable Single Sign-On for team members",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Settings > SSO"
   },
   "check": "A configured IdP user can sign into the dashboard via SSO and appears as an organization member",
   "source": "https://polar.sh/docs/features/sso"
  },
  {
   "id": "cap-29",
   "group": "OAuth",
   "capability": "Build OAuth2 apps/extensions that connect to Polar customers' organizations",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "GET /v1/oauth2/authorize",
    "mcp": null,
    "cli": null,
    "ui": "Dashboard > Settings > OAuth clients"
   },
   "check": "Completing the OAuth2 authorize flow returns an access token scoped to the connected organization",
   "source": "https://polar.sh/docs/integrate/oauth2/introduction, https://polar.sh/docs/integrate/oauth2/setup"
  },
  {
   "id": "cap-30",
   "group": "CLI",
   "capability": "Forward webhooks to local machine and trigger sample events via CLI",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "polar listen; polar trigger",
    "ui": null
   },
   "check": "Running `polar listen` forwards a triggered sample event to the local URL and it is logged there",
   "source": "https://polar.sh/docs/integrate/cli/reference/listen, https://polar.sh/docs/integrate/cli/reference/trigger"
  },
  {
   "id": "cap-31",
   "group": "Compliance",
   "capability": "Apply acceptable-use review constraints on what can be sold",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard account review"
   },
   "check": "A product in a restricted category triggers an account review flag visible on the organization dashboard",
   "source": "https://polar.sh/docs/merchant-of-record/acceptable-use/introduction, https://polar.sh/docs/merchant-of-record/account-reviews"
  },
  {
   "id": "cap-32",
   "group": "Account",
   "capability": "Migrate away from Polar to another payment provider",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Dashboard export tools"
   },
   "check": "Exported customer/payment-method data file contains the organization's customers and tokenized payment methods",
   "source": "https://polar.sh/docs/migrate-away"
  }
 ],
 "attempts": [
  {
   "t": "04:48",
   "cap": "discovery",
   "capability": "docs",
   "task": "Find docs, llms.txt, OpenAPI",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://polar.sh/docs/llms.txt 200 text/plain (662 lines, H1 # Polar); /llms.txt 308 redirect; OpenAPI https://polar.sh/docs/openapi/2026-10.openapi.json openapi 3.1.0, info.version 2026-10, 128 paths/190 operations; also 2026-04 and 2027-01 specs listed",
   "notes": "Docs on Mintlify; every page has a .md URL"
  },
  {
   "t": "04:48",
   "cap": "discovery",
   "capability": "markdown docs",
   "task": "Accept: text/markdown on a docs page",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET https://polar.sh/docs/integrate/sandbox with Accept: text/markdown -> content-type: text/markdown; charset=utf-8, vary: rsc, accept-encoding, Accept, User-Agent; .md URLs (e.g. /docs/integrate/mcp.md) return markdown",
   "notes": "markdown both"
  },
  {
   "t": "04:48",
   "cap": "discovery",
   "capability": "MCP server/discover",
   "task": "POST server/discover to https://mcp.polar.sh/mcp/polar-mcp and /polar-sandbox",
   "route": "mcp",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Both answer HTTP 401 application/json with WWW-Authenticate: Bearer resource_metadata=\"https://mcp.polar.sh/.well-known/oauth-protected-resource/mcp/polar-mcp\"; PRM answers {resource, authorization_servers:[https://api.polar.sh]}; AS metadata has registration_endpoint https://api.polar.sh/v1/oauth2/register (DCR), no client_id_metadata_document_supported, no device_authorization_endpoint, code_challenge_methods S256 and plain. Hosted on Speakeasy Gram (CORS headers). Docs list 3 meta-tools search_tools/describe_tools/execute_tool over 100 operations",
   "notes": "auth-required; protocol version not observable without a token"
  },
  {
   "t": "04:48",
   "cap": "discovery",
   "capability": "cards and preferences",
   "task": "AI catalog, server card, A2A card, aipref",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "polar.sh/.well-known/ai-catalog.json 404 html; mcp.polar.sh/mcp/polar-mcp/server-card 404 text/plain; /.well-known/agent-card.json and /.well-known/agent.json 404 html; robots.txt has no Content-Usage or Content-signal lines; no Content-Usage header on https://polar.sh/; /.well-known/ucp 404; /auth.md 404; /SKILL.md 404",
   "notes": "none present"
  },
  {
   "t": "05:55",
   "cap": "docs",
   "capability": "find docs",
   "task": "Find the docs an agent needs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "llms.txt at https://polar.sh/docs/llms.txt, .md pages, OpenAPI 3.1.0 (2026-10), MCP, CLI and sandbox docs fetched headless",
   "notes": "headless"
  },
  {
   "t": "05:55",
   "cap": "signup",
   "capability": "sign up",
   "task": "Create an account with the agent's inbox via https://polar.sh/signup (redirects to /auth; email sign-in creates the account)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Only routes: Google, Apple, GitHub OAuth or email. Email path shows a Cloudflare Turnstile widget (Verify you are human, iframe challenges.cloudflare.com/.../turnstile/...) before the code is sent; after ~20 s the form said Verification failed. Please try again. No documented API or CLI sign-up (CLI polar auth login opens the browser; OpenAPI has no user/account creation). sandbox.polar.sh robots.txt is User-Agent: * Disallow: /",
   "notes": "Wall: Cloudflare Turnstile on the email sign-in",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "no"
   }
  },
  {
   "t": "05:55",
   "cap": "verify",
   "capability": "verify email",
   "task": "Read the login code mail",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No mail sent: the Turnstile check failed before the code request",
   "notes": "behind sign-up"
  },
  {
   "t": "05:55",
   "cap": "credentials",
   "key": "create",
   "capability": "API credentials",
   "task": "Get an organization access token or OAuth token headless",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "OATs are created only in the dashboard (docs/integrate/oat: Settings > Developers > New Token); OpenAPI 2026-10 has no token-creation endpoint. DCR works headless: POST https://api.polar.sh/v1/oauth2/register -> 201 with client_id polar_ci_Yo93...; but /oauth2/authorize redirects to /auth (the Turnstile sign-in). No device flow, no CIMD in AS metadata.",
   "notes": "Credentials need a signed-in human; the DCR client could not be deleted without a user token (DELETE -> 400 access_denied)"
  },
  {
   "t": "05:55",
   "cap": "first_call",
   "capability": "first authenticated call",
   "task": "GET /v1/products/",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "GET https://api.polar.sh/v1/products/ without token -> 401 application/json {\"error\":\"Unauthorized\",\"detail\":\"Unauthorized\"}, WWW-Authenticate: Bearer realm=\"polar\"",
   "notes": "no token: behind sign-up",
   "quality": {
    "error_legibility": "vague"
   }
  },
  {
   "t": "05:55",
   "cap": "first_action",
   "capability": "first create",
   "task": "Create a product",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "no token",
   "notes": "behind sign-up"
  },
  {
   "t": "06:14",
   "cap": "pay",
   "capability": "pay step public probes",
   "task": "Find an agent way to pay for a Polar plan (Pro $20/mo, Growth $100/mo, Scale $400/mo)",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "pay_probe.json: no 402 challenges, no MPP/Stripe Projects/Bazaar listings, no checkout found; pay_tx.json: refused, no 402 asking for USDC. Own probes: GET https://api.polar.sh/v1/checkouts/ 401 (no 402); x402.polar.sh, mpp.polar.sh, agents.polar.sh do not resolve; /.well-known/ucp 404; llms.txt has 0 mentions of x402/MPP/USDC/Stripe Projects; OpenAPI 2026-10 has no plan or billing operation for the seller org. docs/merchant-of-record/fees.md: free Starter plan, paid plans you can switch between anytime (in the dashboard; checkout not visible without an account)",
   "notes": "Plan changes only inside the dashboard behind the Turnstile sign-in; free Starter plan, no trial needed. We paid nothing (no 402 rail)."
  },
  {
   "t": "06:14",
   "cap": "cancel",
   "capability": "cancel plan",
   "task": "Cancel a paid plan",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "fees.md: You can switch between plans anytime ... downgrading to Starter lands you on the new 5% + 50c rate",
   "notes": "not tested: no plan or trial was started (no account); downgrade is a dashboard action per docs"
  },
  {
   "t": "06:14",
   "cap": "delete",
   "capability": "delete account",
   "task": "Delete the account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account was created (sign-up blocked by Turnstile). OpenAPI 2026-10 has no user or organization delete operation (organizations: list/create/get/update only)",
   "notes": "nothing to delete; an API delete route does not exist in the spec"
  }
 ],
 "stale": false,
 "icon": "/logos/polar.png",
 "monitored": false,
 "verdict": "Needs a person before it does anything: L1 · Needs a person. Our agent stopped at signup: email sign-in on /auth shows a Cloudflare Turnstile widget, and it answered \"Verification failed. Please try again.\" to our agent's browser. Other routes are Google, Apple or GitHub OAuth; none lets an API or CLI create an account. Dynamic client registration works headless, but authorizing still routes through that same Turnstile sign-in, so no token, no first call, no work done. Docs are agent-ready: llms.txt, Markdown pages, OpenAPI, a CLI, an OAuth MCP server. Paying and leaving stay untested: plan switches sit behind that same human sign-in, and the API has no operation to delete an account.",
 "page": "https://agentdrives.com/tools/polar?via=api"
}