{
  "slug": "stripe-billing-feedback-options-api-adds-custom-subscription-cancellation-reason-f16ab79b6f21",
  "title": "Stripe Billing Feedback Options API adds custom subscription cancellation reasons",
  "tools": [
    "stripe"
  ],
  "tags": [
    "agent"
  ],
  "introduced_at": "2026-09-30T00:00:00.000Z",
  "announced_at": "2026-09-30T00:00:00.000Z",
  "effective_at": null,
  "date_basis": "source-publication",
  "status": "unknown",
  "how": {
    "incantation": "When configuring portal cancellation feedback, set the cancellation feature and its documented reason settings on the customer portal configuration. The available documentation does not show how to attach Billing Feedback Option resources.",
    "examples": [
      "curl https://api.stripe.com/v1/billing_portal/configurations/<configuration_id> -u \"<secret_key>:\" --data-urlencode \"features[subscription_cancel][cancellation_reason][enabled]=true\""
    ],
    "gotchas": [
      "Version: 2026-09-30.endive",
      "features (required): Portal configuration features object.",
      "features.subscription_cancel.cancellation_reason.enabled (required): Whether cancellation reasons are collected in the portal.",
      "features.subscription_cancel.cancellation_reason.options (required): Documented as an array of enums; the page does not document custom feedback-option resource IDs.",
      "The feedback options are presented to customers canceling through the customer portal.",
      "Docs conflict: The accessible configuration reference documents cancellation_reason.options as enum values (too_expensive, missing_features, switched_service, unused, other), not Billing Feedback Option resource IDs; it does not establish the custom-resource configuration described in the release note.",
      "Docs conflict: The accessible configuration reference does not carry the stated 2026-09-30.endive API version."
    ]
  },
  "why_it_matters": "Configure custom cancellation reasons for a subscription customer portal cancellation flow.",
  "sources": [
    "https://docs.stripe.com/changelog/endive/2026-09-30/feedback-options-api",
    "https://docs.stripe.com/api/customer_portal/configurations/object?api=true&shell=true"
  ],
  "rank": 0.95023,
  "judge": {
    "publish": true,
    "judge_model": "codex-cli/gpt-6-luna+typesafe/jev-1.13.0",
    "prompt_version": "extract-v7+enrich-v2+judge-v2x3+jev-publish-v1"
  },
  "review_state": "approved",
  "provenance": {
    "run_id": "wave1b-tools-20261017",
    "verdict_id": "wave1b-tools-20261017:wave1b-tools-20261017-0a4ff20e6af4aa5b-0:gate",
    "evidence_hash": "953a9e6fc1e1270ef3db4fa0235d784bfbc4b3f599e6beeb8e842ba32313357f"
  },
  "review": {
    "draft_hash": "1b3bb5e7dc3bd04b866393a600385a40a6dbba1a735f72d3155b121f892d4530",
    "reviewer": "publication-gate",
    "reviewed_at": "2026-10-07T00:00:00.000Z",
    "decision": "wave1b-tools-20261017:gate",
    "reason": "3 of 3 judge runs approved with p_yes >= 0.9 (mean 0.95 >= 0.9; 2 needed) and Jev gave 0.67 (>= 0.6 needed)."
  }
}
