{
 "slug": "gumroad",
 "name": "Gumroad",
 "url": "https://gumroad.com",
 "domain": "gumroad.com",
 "category": "ecommerce",
 "category_name": "E-commerce",
 "tested_at": "2026-10-06",
 "run": "20261006T020117Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261006T020117Z",
   "date": "2026-10-06",
   "level": 2,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  }
 ],
 "level": 2,
 "level_name": "Gets in",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 1,
  "tries": 1,
  "self_start": true
 },
 "badges": [
  "agent-can-leave"
 ],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up in a browser"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "no",
   "text": "Work done: 10% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "na",
   "text": "No plan to buy",
   "value": "nothing",
   "route": "none"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "left": "deleted"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "part",
   "text": "Some docs agents can read: llms.txt and an MCP server",
   "have": [
    "llms_txt",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up in a browser",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "no",
   "text": "Work done: 10% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "na",
   "text": "No plan to buy",
   "value": "nothing",
   "route": "none",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "left": "deleted",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "browser_signup",
   "label": "Sign-up in a browser",
   "routes": [],
   "minutes": 4.6,
   "core": "1/10"
  }
 ],
 "minutes": 4.6,
 "next": {
  "to": 3,
  "text": "Next: do half of the core work (now 10%)"
 },
 "stop": null,
 "core": "1/10",
 "scores": {
  "coverage": 17,
  "reliability": 100,
  "resilience": null,
  "setup": 75,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 75,
  "security": "private",
  "standards": [
   {
    "standard": "MCP",
    "state": "behind",
    "behind": 3,
    "value": "2025-03-26"
   },
   {
    "standard": "MCP discovery",
    "state": "behind",
    "behind": null,
    "value": "legacy"
   },
   {
    "standard": "MCP client registration",
    "state": "behind",
    "behind": null,
    "value": "dcr"
   }
  ]
 },
 "reliability_method": "first-try",
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": 10,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": "59d395064c20",
  "kb_version": "2",
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "start"
 },
 "same_level_drives": 1,
 "drives": 1,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": true,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt, /.well-known/mcp.json, PRM and AS metadata are plain JSON/text. The API reference at /api is a JS app: the HTML has no content, the text lives in the JS chunk (read headless). No OpenAPI file; Accept: text/markdown returns 404."
  },
  "signup": {
   "status": "browser",
   "note": "Web form only (email + password) at /signup; no CAPTCHA met; no sign-up API."
  },
  "verify": {
   "status": "headless",
   "note": "Confirmation mail arrived in about 1 minute."
  },
  "credentials": {
   "status": "browser",
   "note": "Token from Settings > Advanced > Applications > Generate access token (web UI). The official CLI also does an OAuth device flow (gumroad auth login), but its Authorize click needs a logged-in browser session."
  },
  "first_call": {
   "status": "headless",
   "note": "GET /v2/user with the bearer token returned 200 with our account."
  },
  "first_action": {
   "status": "headless",
   "note": "POST /v2/products and MCP create_draft_product created products, read back with GET /v2/products/{id}. They stay drafts: publishing needs a payout method."
  },
  "pay": {
   "status": "n/a",
   "grade": "n/a",
   "rails": [],
   "rail_ids": [],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "There is no paid tier for sellers. /pricing: \"Direct sales: 10% + 50¢ per sale, $0 monthly\". No 402 on the API (401 Bearer), no /.well-known/ucp, no registry listing. x402./mpp./agents. subdomains are creator storefronts or 404."
  },
  "cancel": {
   "status": "n/a",
   "grade": "n/a",
   "note": "Nothing to cancel: there is nothing to pay for.",
   "docs_note": "No subscription or plan was started; nothing recurring to cancel.",
   "nothing": "nothing_to_pay"
  },
  "delete": {
   "status": "browser",
   "note": "Settings > Advanced > Delete your Gumroad account, confirmed in a dialog. Web only. Afterwards the token answered 401 \"The access token was revoked\" and the storefront returned 404.",
   "left": "deleted",
   "account": true
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": true
  },
  "owner_fixes": []
 },
 "surfaces": {
  "api": true,
  "openapi": false,
  "cli": true,
  "sdk": false,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST on api.gumroad.com/v2, about 80 documented operations; errors come back as HTTP 200 {success:false,message}",
  "openapi": "none found (/openapi.json 404)",
  "cli": "official gumroad CLI 2026.10.02 (github.com/antiwork/gumroad-cli), wraps the API plus upsells, pages, MCP stdio and device login",
  "mcp": "official, 8 tools, the 26 Mar 2025 MCP spec, OAuth with DCR",
  "webhooks": "resource_subscriptions (sale, refund, etc.)"
 },
 "can_do": [
  "Create draft digital products, memberships with a monthly tier, and bundles through the API, CLI or MCP",
  "Edit, unpublish and delete products through the API",
  "Upload a file and attach it to a product with the CLI",
  "Add variants, discount codes, custom checkout fields and pay-what-you-want pricing through the API",
  "Create a cross-sell upsell with the CLI",
  "Update the seller name and bio, shown on the public storefront",
  "Create and delete sale webhooks",
  "Draft an audience email and send a preview to the seller's own inbox",
  "Turn on authenticator-app 2FA by reading the setup key and computing the code",
  "Export the sales CSV from the dashboard"
 ],
 "cannot_do": [
  {
   "what": "Publish any product, even a free one",
   "why": "Publishing needs a payout method. That form asks for a PayPal email, legal name, home address, phone number, date of birth and an attestation of a government photo ID."
  },
  {
   "what": "Sell anything: checkout, refunds, licenses, subscribers, gifts, embeds",
   "why": "No product can be published, so nothing can be bought"
  },
  {
   "what": "Send an email broadcast or publish a workflow",
   "why": "Gumroad requires at least $100 in sales and a payout first"
  },
  {
   "what": "Create commission, call or coffee (tip) products",
   "why": "\"Service products are disabled until your account is 30 days old.\""
  },
  {
   "what": "Create a physical product",
   "why": "This account has no physical product type, in the UI or the CLI"
  },
  {
   "what": "Add an affiliate",
   "why": "The affiliate must already have a Gumroad account"
  },
  {
   "what": "Get the first API token without a browser",
   "why": "Both routes (Generate access token, and approving a device code) need a logged-in web session"
  }
 ],
 "blockers": [
  "Publishing a product requires a payout method with identity verification (phone, date of birth, address, ID)",
  "Emails and workflows need $100 in sales and a payout",
  "Service products need a 30-day-old account"
 ],
 "tips_for_owner": [
  "Let drafts publish before payout setup",
  "Add server/discover and 28 Jul 2026 to MCP",
  "Return real HTTP status codes on errors",
  "Publish an OpenAPI file and Markdown docs",
  "Add account deletion to the API",
  "Let agents mint a token without the dashboard"
 ],
 "tips_for_agents": [
  "Use the official CLI (curl -fsSL https://gumroad.com/install-cli.sh | bash). It covers more than the /api page: upsells, pages, file uploads in one command, and --json output.",
  "The API token from Settings > Advanced > Applications also works as a Bearer token on the MCP endpoint https://gumroad.com/muse/v1/mcp.",
  "Errors come back as HTTP 200 with success:false: check the success field, not the status.",
  "The MCP server is legacy (initialize, protocol 2025-03-26); server/discover returns -32601.",
  "Expect drafts only on a new account. Publishing needs a payout method with identity data, emails need $100 in sales, and service products need a 30-day-old account.",
  "Deleted products still answer GET with deleted:true; filter on it.",
  "Form-encode values with --data-urlencode: a literal + becomes a space."
 ],
 "selfhost": {
  "install": {
   "status": "skipped",
   "minutes": 0,
   "note": "Gumroad's code is public at github.com/antiwork/gumroad (linked from the site header); no docker in the drive sandbox"
  }
 },
 "summary": "An agent gets a Gumroad account and a token with a few browser steps (sign-up form, token button), then works fully headless through a ~80-operation REST API, an official CLI and an official MCP server: drafts, variants, discounts, files, upsells, webhooks. It cannot sell anything: publishing any product needs a payout method with identity verification (phone, date of birth, address, ID), and emails, workflows and service products are held back by sales and account-age gates.",
 "wall": "Publishing needs payout setup with identity data",
 "plan_scope": "free plan",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Gumroad lets creators sell digital products, courses and memberships. An agent could sign itself up, get an API key, and build and edit draft products entirely on its own through Gumroad's API, CLI and MCP server. It stopped there: Gumroad will not let any product go live, so nothing could ever be sold, because going live requires a payout method, and setting one up means submitting a real person's name, address, phone number, date of birth and a government ID photo.",
  "can_do": [
   "Sign up and get an API key with a couple of clicks, no CAPTCHA",
   "Create, edit and delete draft products on its own",
   "Add pricing options, discount codes, variants, custom checkout fields and bundles",
   "Upload files and attach them to products",
   "Set up webhooks and a basic storefront profile",
   "Turn on two-factor login security itself",
   "Export its own sales report"
  ],
  "cannot_do": [
   {
    "what": "Make any product actually go live for sale",
    "why": "Needs a payout method, which asks for a real person's ID and address"
   },
   {
    "what": "Sell, buy, refund or manage anything money-related",
    "why": "Nothing can go live, so there is nothing to buy"
   },
   {
    "what": "Send marketing emails or automated workflows",
    "why": "Account needs $100 in past sales first"
   },
   {
    "what": "Sell commissions, calls or tips",
    "why": "Blocked until the account is 30 days old"
   },
   {
    "what": "Get its first API key without opening a browser",
    "why": "Both ways to get a key need a signed-in browser session"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Products",
   "capability": "Create and publish a product",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v2/products",
    "mcp": null,
    "cli": null,
    "ui": "Products dashboard → New product"
   },
   "check": "GET /v2/products/{id} returns the product with published: true",
   "source": "https://gumroad.com/help/article/149-adding-a-product; https://gumroad.com/features"
  },
  {
   "id": "cap-02",
   "group": "Products",
   "capability": "Edit or unpublish/delete a product",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PUT /v2/products/{id}, DELETE /v2/products/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Products dashboard → product settings"
   },
   "check": "GET /v2/products/{id} reflects updated fields or published: false after unpublish",
   "source": "https://gumroad.com/help/article/248-delete-a-product"
  },
  {
   "id": "cap-03",
   "group": "Products",
   "capability": "Sell digital files, courses, or streamed content",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v2/products (file attach via dashboard)",
    "mcp": null,
    "cli": null,
    "ui": "Content tab of product editor"
   },
   "check": "Buyer library shows a downloadable/streamable file for the purchased product",
   "source": "https://gumroad.com/features (Digital products, Courses, Streaming)"
  },
  {
   "id": "cap-04",
   "group": "Products",
   "capability": "Sell memberships/subscriptions with tiers",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /v2/products (is_recurring/variants)",
    "mcp": null,
    "cli": null,
    "ui": "New product → Membership type"
   },
   "check": "GET /v2/subscribers for product shows active subscription with the chosen tier",
   "source": "https://gumroad.com/help/article/82-membership-products; https://gumroad.com/features"
  },
  {
   "id": "cap-05",
   "group": "Products",
   "capability": "Sell physical goods with shipping",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "New product → Physical product, shipping destinations"
   },
   "check": "Order in Sales dashboard shows a shipping address and tracking status field",
   "source": "https://gumroad.com/features"
  },
  {
   "id": "cap-07",
   "group": "Products",
   "capability": "Accept commissions, consultation calls, or tips",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "New product → Commission/Call/Coffee type"
   },
   "check": "Seller profile shows a bookable call or tip jar; booking appears in Sales dashboard",
   "source": "https://gumroad.com/features (Commissions, Consultation calls, Coffee/tips)"
  },
  {
   "id": "cap-11",
   "group": "Payments",
   "capability": "Checkout and purchase a product (cart, multi-currency, wallets)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Product/profile checkout page"
   },
   "check": "GET /v2/sales shows the new sale with currency and payment method",
   "source": "https://gumroad.com/features (Cart, Multi-currency, Apple Pay/Google Pay)"
  },
  {
   "id": "cap-18",
   "group": "Memberships",
   "capability": "Manage a customer's subscription (cancel, upgrade/downgrade, pause)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "PUT /v2/subscribers/{id} (cancel), /v2/subscribers endpoints",
    "mcp": null,
    "cli": null,
    "ui": "Sales dashboard → Subscribers"
   },
   "check": "GET /v2/subscribers/{id} shows status cancelled, or updated tier/paused state",
   "source": "https://gumroad.com/help/article/139-how-to-cancel-your-customers-subscriptions; https://gumroad.com/features"
  },
  {
   "id": "cap-19",
   "group": "Payouts",
   "capability": "Receive payouts on a chosen schedule and method",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings → Payouts"
   },
   "check": "Payouts dashboard shows a completed payout transaction to the configured bank/PayPal",
   "source": "https://gumroad.com/help/article/13-getting-paid; https://gumroad.com/features (Flexible payout schedule)"
  },
  {
   "id": "cap-25",
   "group": "Marketing",
   "capability": "Send email updates/broadcasts to an audience",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Emails → New email"
   },
   "check": "Email analytics shows the sent broadcast with delivery/open counts",
   "source": "https://gumroad.com/help/article/169-how-to-send-an-update"
  },
  {
   "id": "cap-06",
   "group": "Products",
   "capability": "Set up product bundles",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Products → New bundle"
   },
   "check": "Bundle product page lists the included products; purchase grants access to all of them",
   "source": "https://gumroad.com/help/article/339-product-bundles"
  },
  {
   "id": "cap-08",
   "group": "Products",
   "capability": "Set up and manage product variants/tiers with SKUs",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "variants field on POST/PUT /v2/products",
    "mcp": null,
    "cli": null,
    "ui": "Product editor → Versions"
   },
   "check": "GET /v2/products/{id} shows variants array with the configured options and SKUs",
   "source": "https://gumroad.com/help/article/126-setting-up-versions-on-a-digital-product"
  },
  {
   "id": "cap-09",
   "group": "Products",
   "capability": "Upload a new file version so buyers get updates",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Product editor → Content → Upload new version"
   },
   "check": "Existing buyer's library download reflects the new file without a new purchase",
   "source": "https://gumroad.com/features (Versioned files)"
  },
  {
   "id": "cap-10",
   "group": "Products",
   "capability": "Set pay-what-you-want pricing",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "customizable_price on POST /v2/products",
    "mcp": null,
    "cli": null,
    "ui": "Product editor → Pricing"
   },
   "check": "Checkout page shows an editable price field with the configured minimum",
   "source": "https://gumroad.com/help/article/133-pay-what-you-want-pricing"
  },
  {
   "id": "cap-12",
   "group": "Payments",
   "capability": "Create and apply discount codes",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v2/products/{id}/offer_codes",
    "mcp": null,
    "cli": null,
    "ui": "Product editor → Discounts"
   },
   "check": "GET /v2/products/{id}/offer_codes/{id} returns the code; checkout with code lowers the price",
   "source": "https://gumroad.com/help/article/128-discount-codes"
  },
  {
   "id": "cap-13",
   "group": "Payments",
   "capability": "Let buyers pay in installments",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Product editor → Installment plans"
   },
   "check": "Buyer's purchase shows scheduled remaining installment charges in Sales dashboard",
   "source": "https://gumroad.com/help/article/346-installment-plans"
  },
  {
   "id": "cap-14",
   "group": "Payments",
   "capability": "Offer free trials on memberships",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Membership product → Free trial"
   },
   "check": "New subscriber shows trial status before first charge date",
   "source": "https://gumroad.com/features (Free trials)"
  },
  {
   "id": "cap-15",
   "group": "Payments",
   "capability": "Collect custom checkout fields",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v2/products/{id}/custom_fields",
    "mcp": null,
    "cli": null,
    "ui": "Product editor → Checkout form"
   },
   "check": "GET /v2/sales/{id} includes the custom field value submitted at checkout",
   "source": "https://gumroad.com/features (Custom checkout fields)"
  },
  {
   "id": "cap-16",
   "group": "Payments",
   "capability": "Issue a full or partial refund",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /v2/sales/{id}/refund",
    "mcp": null,
    "cli": null,
    "ui": "Sales dashboard → refund action"
   },
   "check": "GET /v2/sales/{id} shows refunded: true (or partially_refunded_amount set)",
   "source": "https://gumroad.com/help/article/47-how-to-refund-a-customer"
  },
  {
   "id": "cap-17",
   "group": "Payments",
   "capability": "Purchase and send a product as a gift",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Checkout → Give as a gift"
   },
   "check": "Recipient's library shows the gifted product after redemption",
   "source": "https://gumroad.com/help/article/213-how-do-i-give-a-product-as-a-gift"
  },
  {
   "id": "cap-20",
   "group": "Payouts",
   "capability": "Request an instant payout",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Payouts dashboard → Instant payout"
   },
   "check": "Payouts dashboard shows an immediate payout entry outside the normal schedule",
   "source": "https://gumroad.com/features (Instant payouts)"
  },
  {
   "id": "cap-21",
   "group": "Content",
   "capability": "Generate and verify/enable/disable license keys",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v2/licenses/verify, /v2/licenses/enable, /v2/licenses/disable",
    "mcp": null,
    "cli": null,
    "ui": "Product editor → License keys"
   },
   "check": "POST /v2/licenses/verify with the issued key returns success: true and uses_count",
   "source": "https://gumroad.com/help/article/76-license-keys"
  },
  {
   "id": "cap-22",
   "group": "Content",
   "capability": "Stamp PDFs with buyer info",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Product editor → PDF stamping toggle"
   },
   "check": "Downloaded PDF for a sale contains the buyer's name/email watermark",
   "source": "https://gumroad.com/help/article/130-pdf-stamping"
  },
  {
   "id": "cap-23",
   "group": "Profile",
   "capability": "Customize the public seller profile page",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Profile editor"
   },
   "check": "Public profile URL reflects the edited sections, bio, and featured products",
   "source": "https://gumroad.com/help/article/124-your-gumroad-profile-page"
  },
  {
   "id": "cap-24",
   "group": "Profile",
   "capability": "Create and share a wishlist",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Profile → Wishlists"
   },
   "check": "Public wishlist URL lists the added products",
   "source": "https://gumroad.com/help/article/343-wishlists"
  },
  {
   "id": "cap-26",
   "group": "Marketing",
   "capability": "Set up automated email workflows (drip, abandoned cart)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Emails → Workflows"
   },
   "check": "A test purchaser/abandoned-cart trigger produces the scheduled workflow email in logs",
   "source": "https://gumroad.com/help/article/131-using-workflows-to-send-automated-updates"
  },
  {
   "id": "cap-27",
   "group": "Marketing",
   "capability": "Recruit affiliates with tracked commission links",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings → Affiliates"
   },
   "check": "Sale made via an affiliate link appears in Sales with the affiliate's commission recorded",
   "source": "https://gumroad.com/help/article/249-affiliate-faq; https://gumroad.com/help/article/333-affiliates-on-gumroad"
  },
  {
   "id": "cap-28",
   "group": "Marketing",
   "capability": "Create upsells and product recommendations",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Product editor → Upsells"
   },
   "check": "Checkout flow displays the configured upsell offer before purchase completion",
   "source": "https://gumroad.com/help/article/331-creating-upsells"
  },
  {
   "id": "cap-29",
   "group": "Marketing",
   "capability": "Embed a buy button/overlay widget on an external site",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Product editor → Share → Embed"
   },
   "check": "Generated embed script, placed on a test page, renders a working Gumroad overlay checkout",
   "source": "https://gumroad.com/help/article/44-build-gumroad-into-your-website"
  },
  {
   "id": "cap-30",
   "group": "Analytics",
   "capability": "View sales and traffic analytics with UTM tracking",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Analytics dashboard"
   },
   "check": "Analytics dashboard shows revenue/views broken down by the UTM-tagged link",
   "source": "https://gumroad.com/help/article/74-the-analytics-dashboard"
  },
  {
   "id": "cap-31",
   "group": "Analytics",
   "capability": "Export sales/customer data as CSV",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Sales dashboard → Export"
   },
   "check": "Downloaded CSV file contains the listed sales/customer rows",
   "source": "https://gumroad.com/features (CSV exports)"
  },
  {
   "id": "cap-33",
   "group": "Admin",
   "capability": "Subscribe to webhooks for sale/refund/cancellation events",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /v2/resource_subscriptions",
    "mcp": null,
    "cli": null,
    "ui": "Settings → Advanced → Webhooks"
   },
   "check": "A triggered sale/refund delivers a POST to the configured webhook URL with matching resource_name",
   "source": "https://gumroad.com/features (Webhooks)"
  },
  {
   "id": "cap-32",
   "group": "Admin",
   "capability": "Build an OAuth app and manage API access tokens",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": "OAuth2 /oauth/authorize, /oauth/token",
    "mcp": null,
    "cli": null,
    "ui": "Settings → Advanced → Applications"
   },
   "check": "Issued OAuth token successfully authenticates a GET /v2/products call",
   "source": "https://gumroad.com/help/article/280-create-application-api"
  },
  {
   "id": "cap-34",
   "group": "Admin",
   "capability": "Invite team members with role-based permissions",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings → Team"
   },
   "check": "Invited teammate's account shows access scoped to the assigned role",
   "source": "https://gumroad.com/help/article/326-teams-and-roles"
  },
  {
   "id": "cap-35",
   "group": "Admin",
   "capability": "Enable two-factor authentication",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings → Account → Two-factor authentication"
   },
   "check": "Login flow prompts for a TOTP code after password entry",
   "source": "https://gumroad.com/help/article/292-account-login-security"
  },
  {
   "id": "cap-36",
   "group": "Admin",
   "capability": "Customize receipt emails",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings → Checkout form → Receipt"
   },
   "check": "A new sale's receipt email reflects the custom message/branding",
   "source": "https://gumroad.com/features (Customizable receipts)"
  },
  {
   "id": "cap-37",
   "group": "Integrations",
   "capability": "Connect Discord/Circle/Zoom/Google Calendar integrations",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Product editor → Integrations"
   },
   "check": "A buyer's purchase triggers the configured Discord invite or Zoom link delivery",
   "source": "https://gumroad.com/help/article/295-external-integration; https://gumroad.com/features (Integrations)"
  },
  {
   "id": "cap-38",
   "group": "Integrations",
   "capability": "Use a custom domain for the storefront",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings → Advanced → Custom domain"
   },
   "check": "The configured custom domain resolves to the seller's Gumroad profile",
   "source": "https://gumroad.com/help/article/153-setting-up-a-custom-domain"
  }
 ],
 "attempts": [
  {
   "t": "01:10",
   "cap": "discovery",
   "capability": "MCP discovery",
   "task": "Find MCP endpoint via PRM/AS metadata and /.well-known/mcp.json",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /.well-known/oauth-protected-resource 200 JSON resource=https://gumroad.com/muse/v1/mcp; /.well-known/mcp.json 200 JSON lists clients muse/claude/chatgpt MCP URLs; llms.txt links Muse/Claude connectors",
   "notes": "llms.txt present (H1 Gumroad). /.well-known/ai-catalog.json, agent-card.json, agent.json, mcp/server-card.json 404 JSON. <mcp>/server-card 404."
  },
  {
   "t": "01:10",
   "cap": "discovery",
   "capability": "MCP server/discover",
   "task": "POST server/discover (2026-07-28) to https://gumroad.com/muse/v1/mcp without credentials",
   "route": "mcp",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "HTTP 401, WWW-Authenticate: Bearer realm=\"Gumroad\", resource_metadata=\"https://gumroad.com/.well-known/oauth-protected-resource/muse/v1/mcp\"",
   "notes": "auth required before discover; PRM path-suffixed variant answers 200"
  },
  {
   "t": "01:10",
   "cap": "discovery",
   "capability": "Markdown docs / aipref",
   "task": "Accept: text/markdown on /api and help article; .md URLs; robots Content-Usage",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "Accept: text/markdown on https://gumroad.com/api returns 404 text/html; /api.md 404; robots.txt has only User-agent:* Disallow:/purchases/ and Sitemaps; no Content-Usage header",
   "notes": "API docs page /api is an Inertia SPA; content not in HTML"
  },
  {
   "t": "01:46",
   "cap": "signup",
   "capability": "Sign up",
   "task": "Create account with email+password on https://gumroad.com/signup",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Form submit redirected to /dashboard showing the agent's inbox and \"Please confirm your email address\"; no CAPTCHA signals on page",
   "notes": "Web form only (Email, Password, Google, X). No documented API sign-up. Dashboard says products cannot be published until a payout method is connected."
  },
  {
   "t": "03:32",
   "cap": "docs",
   "capability": "Find docs",
   "task": "Locate API reference, CLI, MCP docs",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://gumroad.com/api (SPA; content in JS chunk Api-C0Udgo-d.js) documents ~80 REST operations on api.gumroad.com/v2 (products, offer_codes, variant_categories, custom_fields, sales refund/mark_as_shipped, subscribers, licenses, emails send/schedule, workflows, payouts, resource_subscriptions, files presign) plus official CLI github.com/antiwork/gumroad-cli (brew install antiwork/cli/gumroad or curl -fsSL https://gumroad.com/install-cli.sh); llms.txt; /muse page documents MCP server https://gumroad.com/muse/v1/mcp",
   "notes": "No OpenAPI file found; docs not readable without JS (HTML has no content); Accept: text/markdown 404"
  },
  {
   "t": "04:34",
   "cap": "verify",
   "capability": "Verify email",
   "task": "Open confirmation link from mail",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Mail Confirmation instructions arrived ~1 min after sign-up. dashboard banner \"Please confirm your email\" gone afterwards",
   "notes": "done headless with the mailed link"
  },
  {
   "t": "04:34",
   "cap": "credentials",
   "capability": "Get API credentials",
   "task": "Settings > Advanced > Applications: create app, Generate access token",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Created app AgentDrives Test (redirect http://127.0.0.1:8765/callback) at /oauth/applications/<id>/edit; Generate access token produced a token",
   "notes": "Docs: \"On the application page, click Generate access token\". No headless path for the first token except the OAuth code flow, which needs a logged-in browser consent. Session needed a password re-login."
  },
  {
   "t": "04:34",
   "cap": "first_call",
   "capability": "First API call",
   "task": "GET /v2/user with bearer token",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "200 application/json {\"success\":true,\"user\":{...\"display_name\":\"drivemaster38\",\"email\":\"the agent's inbox\"}}",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "04:48",
   "cap": "discovery",
   "capability": "MCP initialize fallback",
   "task": "server/discover with token, then initialize offering 2026-07-28, tools/list",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "server/discover -> 200 JSON-RPC error -32601 Method not found (legacy). initialize -> protocolVersion 2025-03-26, serverInfo gumroad/Gumroad 1.0.0, no Mcp-Session-Id; tools/list: get_account, list_products, get_product, create_draft_product, publish_product, unpublish_product, list_sales, list_payouts",
   "notes": "The API access token from Settings>Applications is accepted as Bearer by the MCP endpoint. AS metadata offers DCR registration_endpoint, no CIMD flag, PKCE S256 and plain."
  },
  {
   "t": "05:50",
   "cap": "cap-01",
   "capability": "Create and publish a product",
   "task": "MCP create_draft_product then publish_product",
   "route": "mcp",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "create_draft_product -> id iL5ChmNEqTldgarIAyddbg== published:false; publish_product -> isError: \"You must connect at least one payment method before you can publish this product for sale.\"; GET /v2/products/{id} published:false",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "recoverable": "no",
    "docs_match": "match"
   }
  },
  {
   "t": "05:50",
   "cap": "cap-01",
   "capability": "Create and publish a product",
   "task": "POST /v2/products (paid PWYW and free $0), then PUT /v2/products/{id}/enable",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "POST /v2/products -> 200 success:true published:false (no warning field seen). PUT /v2/products/9nq5Osb1cDeCx9r0ghAccA==/enable -> HTTP 200 {\"success\":false,\"message\":\"You must connect at least one payment method before you can publish this product for sale.\"}; also for a $0 product. POST .../enable (as the prose says) -> 404",
   "notes": "Publishing requires a payout method. /settings/payments asks PayPal email, legal first/last name, address, city, postal code, country, phone number, date of birth, and attestations of a government photo ID and proof of residence: KYC data an agent cannot truthfully give for a account. Error comes with HTTP 200 and success:false.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "06:18",
   "cap": "cap-02",
   "capability": "Edit or unpublish/delete a product",
   "task": "PUT /v2/products/{id} rename + price 400 + custom_receipt; read back",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "PUT -> success:true; GET /v2/products/KKpyUfNzzDJb7TpXL2uQwg== name \"AgentDrives Test Template v2\" price 400 custom_receipt set",
   "notes": "delete tested at cleanup",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match",
    "idempotent": "yes"
   }
  },
  {
   "t": "06:18",
   "cap": "cap-08",
   "capability": "Product variants/tiers with SKUs",
   "task": "POST variant_categories Format + 2 variants (PDF, PDF + Notion +$2); read back",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "variant_category envcwsZbsQSu0D8qJbs7rw==; variants IJD0-3TEU94-4DrxE_DN3Q==, CNBEOAX6WGKbTiA5Bal_5w==; GET product shows variants[Format].options with price_difference 0/200",
   "notes": "No SKU parameter in the documented variant endpoints; my unencoded + became a space (form encoding, my error).",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "06:18",
   "cap": "cap-10",
   "capability": "Pay-what-you-want pricing",
   "task": "POST /v2/products price=300 customizable_price=true suggested_price_cents=500",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET product customizable_price:true, formatted_price \"$3+\"",
   "notes": "Checkout page not viewable: product cannot be published (payout method wall)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "06:18",
   "cap": "cap-12",
   "capability": "Discount codes",
   "task": "POST /v2/products/{id}/offer_codes ADTEST10 10% off; list",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "offer_code WMyPRqVE7gz1OTfzzpLbEA== percent_off 10; GET offer_codes lists it",
   "notes": "Applying it at checkout not testable (unpublished product, no purchase)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "06:18",
   "cap": "cap-15",
   "capability": "Custom checkout fields",
   "task": "POST /v2/products/{id}/custom_fields Company",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "custom_field KoSIpeuE15-4p7Ph9IDygA==; GET product custom_fields lists Company",
   "notes": "Collecting a value at checkout not testable (no sale)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "06:18",
   "cap": "cap-33",
   "capability": "Webhooks",
   "task": "PUT /v2/resource_subscriptions resource_name=sale post_url=https://example.com/agentdrives-test-hook; list",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "resource_subscription _Qk6fNYWre_pUUX8FyT0nQ== created; GET resource_subscriptions?resource_name=sale lists it",
   "notes": "Delivery not observed: no sale possible (products cannot be published). Webhook payloads are form-encoded pings, no Standard Webhooks signature headers documented.",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:03",
   "cap": "cap-32",
   "capability": "OAuth app and API access tokens",
   "task": "Create OAuth application in Settings > Advanced, generate token; also CLI OAuth device authorization (gumroad auth login)",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "App token: GET /v2/user 200. CLI: device URL https://gumroad.com/oauth/device?user_code=GRD-••••; approved with Authorize in our logged-in browser (\"Authorization complete\"); CLI printed \"Logged in as the agent's inbox\"; gumroad user --json success:true",
   "notes": "Device flow (RFC 8628 style) lets a headless CLI get a token; the approval click still needs a logged-in browser session. Device page grants \"Full access to your account\".",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:23",
   "cap": "cap-03",
   "capability": "Sell digital files",
   "task": "gumroad files upload ./guide.pdf (presign/multipart/complete), then products update --file to attach; read back",
   "route": "cli",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "files upload -> file_url https://s3.amazonaws.com/gumroad/attachments/...; products view iL5ChmNEqTldgarIAyddbg== files[0] name \"AgentDrives Guide\" with files.gumroad.com URL",
   "notes": "File is attached to the product, but the buyer side (library) cannot be reached: the product cannot be published without a payout method. Clear CLI error when product uses per-variant content.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "recoverable": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:44",
   "cap": "cap-04",
   "capability": "Memberships with tiers",
   "task": "gumroad products create --type membership --subscription-duration monthly --price 5 --draft",
   "route": "cli",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Product b1R45-NC_ytRSvynoCxYGw== is_tiered_membership:true recurrences [monthly], variants Tier/Untitled monthly price_cents 500, published:false",
   "notes": "Membership with a tier created; cannot be published (payout method required), so no subscriber can exist to check GET /v2/subscribers",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "08:44",
   "cap": "cap-07",
   "capability": "Commissions, calls, tips",
   "task": "gumroad products create --type coffee|commission|call --draft",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "All three: {\"success\":false,\"error\":{\"message\":\"Service products are disabled until your account is 30 days old.\",\"status_code\":200}}",
   "notes": "Account-age gate (30 days), not a plan. Error is clear but returned with HTTP 200.",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "08:44",
   "cap": "cap-06",
   "capability": "Product bundles",
   "task": "gumroad products create --type bundle --draft",
   "route": "cli",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Bundle MCPh-FS8ukC4UJ0Yt1SKxg== created published:false, bundle_products empty",
   "notes": "Did not add contents; cannot be published or bought"
  },
  {
   "t": "09:20",
   "cap": "cap-23",
   "capability": "Customize public seller profile",
   "task": "gumroad user update --name --bio; fetch public storefront",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "user update success:true; GET https://drivemaster38.gumroad.com/ 200 contains \"AgentDrives Test\" and \"Account of AgentDrives.\"",
   "notes": "Storefront pages/custom HTML also exposed via CLI pages and /v2/user/custom_html (not exercised)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "09:20",
   "cap": "cap-28",
   "capability": "Upsells and recommendations",
   "task": "gumroad upsells create --cross-sell 20% off guide for buyers of template; upsells list",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "upsell fzhtufmLJcVCnnh72Hz_YQ== cross_sell:true percents 20; upsells list returns it",
   "notes": "Display at checkout not testable (products unpublished). Upsells are in the CLI; the /api page lists no upsell endpoint.",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "09:20",
   "cap": "cap-36",
   "capability": "Customize receipt emails",
   "task": "PUT /v2/products/{id} custom_receipt",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "GET product custom_receipt \"Thanks from AgentDrives test\"",
   "notes": "Receipt email itself needs a sale; not reachable"
  },
  {
   "t": "09:20",
   "cap": "cap-05",
   "capability": "Physical goods with shipping",
   "task": "Look for a physical product type in API/CLI and /products/new",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "/products/new offers Digital product, Course, E-book, Membership, Bundle, Commission, Call, Coffee; no Physical. CLI --type list has no physical. API sales has mark_as_shipped only.",
   "notes": "No route to create a physical product on this new account",
   "quality": {
    "recoverable": "no"
   }
  },
  {
   "t": "12:49",
   "cap": "cap-25",
   "capability": "Send email broadcasts",
   "task": "POST /v2/emails draft; POST /v2/emails/{id}/preview; POST /v2/emails/{id}/send",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Draft sj-Pwt8UHoMTOarktt6Q5g== created (state draft); preview -> \"A preview has been sent to your email.\" and the mail \"AgentDrives test update\" from drivemaster38@creators.gumroad.com arrived in our inbox; send -> HTTP 200 {\"success\":false,\"message\":\"You are not eligible to publish or schedule emails. Please ensure you have made at least $100 in sales and received a payout.\"}",
   "notes": "Eligibility gate on account history ($100 sales + a payout), not a paid plan. Audience was empty anyway.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "12:49",
   "cap": "cap-26",
   "capability": "Automated email workflows",
   "task": "Create workflow in UI (Purchase trigger; Abandoned cart option disabled), add email via gumroad workflows add-email, publish in UI",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Workflow Nds6EPRyuSDfxzeEB7uQRQ== created in /workflows/new; CLI add-email -> email OFK8Pbf-ebeJ-WBbR79ZOQ== delay 1 day; workflows view emails_count 1 state draft; Publish now -> toast \"You cannot publish a workflow until you have made at least $100 in total earnings and received a payout\"",
   "notes": "No API/CLI route to create a workflow (only list/view/add-email/update-email). Abandoned cart trigger greyed out.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "recoverable": "no"
   }
  },
  {
   "t": "13:27",
   "cap": "pay",
   "capability": "Pay step",
   "task": "Probe 402s (api base, x402./mpp./agents. subdomains), /.well-known/ucp, openapi.json, registries, pricing page",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "api.gumroad.com/v2/sales unauthenticated -> 401 Bearer (no 402); x402.gumroad.com 404; mpp.gumroad.com and agents.gumroad.com are creator storefronts (og:title Junior / agents), not payment endpoints; /.well-known/ucp 404; openapi.json 404; no gumroad entries in x402 Bazaar or mpp.dev/api/services; /pricing: \"Direct sales: 10% + 50¢ per sale, $0 monthly\"",
   "notes": "No paid tier for sellers: Gumroad takes a fee per sale. /settings/billing is only invoice details. MCP server instructions: \"This server does not take payment.\""
  },
  {
   "t": "14:13",
   "cap": "cap-34",
   "capability": "Invite team members with roles",
   "task": "Settings > Team: invite the agent's inbox (our second inbox) as Marketing",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Team members table lists the agent's inbox / Marketing; mail \"Gumroad team invitation\" with role Marketing arrived at an inbox with an accept link",
   "notes": "Acceptance needs a second Gumroad account; not done. No API/CLI route for team."
  },
  {
   "t": "14:47",
   "cap": "cap-27",
   "capability": "Affiliates",
   "task": "/affiliates/new: add the agent's inbox at 20% on all products",
   "route": "browser",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "Toast: \"The affiliate has not created a Gumroad account with this email address.\"",
   "notes": "Affiliate must already have a Gumroad account; affiliate sales impossible anyway (nothing published). No API/CLI route.",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "yes"
   }
  },
  {
   "t": "15:19",
   "cap": "cap-31",
   "capability": "Export sales CSV",
   "task": "Sales > Export > Download (last 30 days)",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "sales_export.csv downloaded (1159 bytes): header Purchase ID, Item Name, ... License Key ... plus Totals row; no purchase rows, consistent with GET /v2/sales -> sales: []",
   "notes": "No API/CLI export; GET /v2/sales is the headless equivalent"
  },
  {
   "t": "15:33",
   "cap": "cap-30",
   "capability": "Sales and traffic analytics with UTM",
   "task": "Open Analytics (/dashboard/sales)",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Analytics page shows Sales 0, Views 0, Total $0, Referrer and Locations tables \"Nothing yet\"; tabs Following/Sales/Churn/Links",
   "notes": "No traffic or sales possible (nothing published), so UTM breakdown not observable. GET /v2/earnings exists in API docs (not exercised)."
  },
  {
   "t": "18:18",
   "cap": "cap-35",
   "capability": "Two-factor authentication",
   "task": "Settings > Password and authentication > Authenticator app: read setup key, compute TOTP (RFC 6238) ourselves, verify",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "After Verify the page showed 10 recovery codes; reload shows Authenticator app with Regenerate recovery codes / Remove buttons",
   "notes": "Agent can enable TOTP 2FA with a setup key (no phone needed). Login prompt not exercised (did not log out)."
  },
  {
   "t": "18:18",
   "cap": "cap-11",
   "capability": "Checkout and purchase a product",
   "task": "Checkout and purchase a product on our account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every product stays unpublished: PUT /v2/products/{id}/enable and MCP publish_product -> \"You must connect at least one payment method before you can publish this product for sale.\" GET /v2/sales -> sales: []",
   "notes": "Needs a published product and/or a purchase (buyer side); not reachable without a payout method, and we may not pay. Not attempted further."
  },
  {
   "t": "18:18",
   "cap": "cap-16",
   "capability": "Issue a refund",
   "task": "Issue a refund on our account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every product stays unpublished: PUT /v2/products/{id}/enable and MCP publish_product -> \"You must connect at least one payment method before you can publish this product for sale.\" GET /v2/sales -> sales: []",
   "notes": "Needs a published product and/or a purchase (buyer side); not reachable without a payout method, and we may not pay. Not attempted further."
  },
  {
   "t": "18:18",
   "cap": "cap-18",
   "capability": "Manage a customer subscription",
   "task": "Manage a customer subscription on our account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every product stays unpublished: PUT /v2/products/{id}/enable and MCP publish_product -> \"You must connect at least one payment method before you can publish this product for sale.\" GET /v2/sales -> sales: []",
   "notes": "Needs a published product and/or a purchase (buyer side); not reachable without a payout method, and we may not pay. Not attempted further."
  },
  {
   "t": "18:18",
   "cap": "cap-21",
   "capability": "License keys verify/enable/disable",
   "task": "License keys verify/enable/disable on our account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every product stays unpublished: PUT /v2/products/{id}/enable and MCP publish_product -> \"You must connect at least one payment method before you can publish this product for sale.\" GET /v2/sales -> sales: []",
   "notes": "Needs a published product and/or a purchase (buyer side); not reachable without a payout method, and we may not pay. Not attempted further."
  },
  {
   "t": "18:18",
   "cap": "cap-09",
   "capability": "Upload a new file version for buyers",
   "task": "Upload a new file version for buyers on our account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every product stays unpublished: PUT /v2/products/{id}/enable and MCP publish_product -> \"You must connect at least one payment method before you can publish this product for sale.\" GET /v2/sales -> sales: []",
   "notes": "Needs a published product and/or a purchase (buyer side); not reachable without a payout method, and we may not pay. Not attempted further."
  },
  {
   "t": "18:18",
   "cap": "cap-13",
   "capability": "Installment plans",
   "task": "Installment plans on our account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every product stays unpublished: PUT /v2/products/{id}/enable and MCP publish_product -> \"You must connect at least one payment method before you can publish this product for sale.\" GET /v2/sales -> sales: []",
   "notes": "Needs a published product and/or a purchase (buyer side); not reachable without a payout method, and we may not pay. Not attempted further."
  },
  {
   "t": "18:18",
   "cap": "cap-14",
   "capability": "Free trials on memberships",
   "task": "Free trials on memberships on our account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every product stays unpublished: PUT /v2/products/{id}/enable and MCP publish_product -> \"You must connect at least one payment method before you can publish this product for sale.\" GET /v2/sales -> sales: []",
   "notes": "Needs a published product and/or a purchase (buyer side); not reachable without a payout method, and we may not pay. Not attempted further."
  },
  {
   "t": "18:18",
   "cap": "cap-17",
   "capability": "Gift purchase",
   "task": "Gift purchase on our account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every product stays unpublished: PUT /v2/products/{id}/enable and MCP publish_product -> \"You must connect at least one payment method before you can publish this product for sale.\" GET /v2/sales -> sales: []",
   "notes": "Needs a published product and/or a purchase (buyer side); not reachable without a payout method, and we may not pay. Not attempted further."
  },
  {
   "t": "18:18",
   "cap": "cap-22",
   "capability": "PDF stamping",
   "task": "PDF stamping on our account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every product stays unpublished: PUT /v2/products/{id}/enable and MCP publish_product -> \"You must connect at least one payment method before you can publish this product for sale.\" GET /v2/sales -> sales: []",
   "notes": "Needs a published product and/or a purchase (buyer side); not reachable without a payout method, and we may not pay. Not attempted further."
  },
  {
   "t": "18:18",
   "cap": "cap-24",
   "capability": "Wishlist",
   "task": "Wishlist on our account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every product stays unpublished: PUT /v2/products/{id}/enable and MCP publish_product -> \"You must connect at least one payment method before you can publish this product for sale.\" GET /v2/sales -> sales: []",
   "notes": "Needs a published product and/or a purchase (buyer side); not reachable without a payout method, and we may not pay. Not attempted further."
  },
  {
   "t": "18:18",
   "cap": "cap-29",
   "capability": "Embed buy button",
   "task": "Embed buy button on our account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every product stays unpublished: PUT /v2/products/{id}/enable and MCP publish_product -> \"You must connect at least one payment method before you can publish this product for sale.\" GET /v2/sales -> sales: []",
   "notes": "Needs a published product and/or a purchase (buyer side); not reachable without a payout method, and we may not pay. Not attempted further."
  },
  {
   "t": "18:18",
   "cap": "cap-37",
   "capability": "Discord/Zoom/Calendar integrations",
   "task": "Discord/Zoom/Calendar integrations on our account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Every product stays unpublished: PUT /v2/products/{id}/enable and MCP publish_product -> \"You must connect at least one payment method before you can publish this product for sale.\" GET /v2/sales -> sales: []",
   "notes": "Needs a published product and/or a purchase (buyer side); not reachable without a payout method, and we may not pay. Not attempted further."
  },
  {
   "t": "18:28",
   "cap": "cap-19",
   "capability": "Receive payouts",
   "task": "Connect a payout method in Settings > Payments; GET /v2/payouts",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "/settings/payments form: PayPal Email, Individual/Business, First/Last name (as on ID), Address, City, Postal code, Country, Phone number, date of birth (Month/Day/Year), checkboxes for government photo ID and proof of residence. gumroad payouts list -> payouts: []",
   "notes": "Payout setup is identity verification (KYC) for a real person: phone, date of birth, home address, ID. Not submitted. Minimum payout $100.",
   "quality": {
    "recoverable": "no"
   }
  },
  {
   "t": "18:28",
   "cap": "cap-20",
   "capability": "Instant payout",
   "task": "Instant payout",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No payout method connected (KYC form) and balance $0",
   "notes": "depends on"
  },
  {
   "t": "18:28",
   "cap": "cap-38",
   "capability": "Custom domain",
   "task": "Settings > Advanced > Custom domain",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "Field exists on /settings/advanced (input Domain)",
   "notes": "Needs a domain with DNS we control for this account; none set up for this drive."
  },
  {
   "t": "18:51",
   "cap": "cap-02",
   "capability": "Edit or unpublish/delete a product",
   "task": "MCP unpublish_product; DELETE /v2/products/{id} for all 5 test products; list and get",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "unpublish_product -> published:false; DELETE x5 -> \"The product was deleted successfully.\"; GET /v2/products -> products: []; GET /v2/products/KKpy... still 200 with deleted:true (soft delete)",
   "notes": "Errors use HTTP 200 with {success:false,message} (e.g. POST /v2/products without name -> 200 \"Name can't be blank\"), not RFC 9457 problem+json. Repeat DELETE of a deleted webhook also returns success:true.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "idempotent": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "19:35",
   "cap": "delete",
   "capability": "Delete account",
   "task": "Settings > Advanced > Delete your Gumroad account > Yes, delete my account",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Redirected to https://gumroad.com/; GET /v2/user with the app token -> 401 \"The access token was revoked\"; CLI -> not_authenticated; https://drivemaster38.gumroad.com/ -> 404",
   "notes": "Web UI only; no API/CLI delete. Page says the email cannot be reused for a new account. Deleted products had been soft-deleted (GET returned deleted:true) before account deletion."
  }
 ],
 "stale": false,
 "icon": "/logos/gumroad.png",
 "monitored": false,
 "verdict": "Gets in on its own: L2 · Gets in. Sign-up is a web form, with no challenge, and account verification arrived by email. Getting a token needs one browser step, at Settings, Advanced, Applications; the official CLI's OAuth flow also needs a logged-in browser for the authorize click. From there our agent worked headless: calls to the REST API and the official MCP server created and read back products. Products stay drafts: publishing needs a payout method with identity verification, so no sale went through. There is no paid tier to cancel. Deleting the account, in Settings under Advanced, worked on its own, and the token stopped answering afterward.",
 "page": "https://agentdrives.com/tools/gumroad?via=api"
}