Skip to content

Subscription Module missing the Plan Field #867

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
2 tasks done
BenjiLewis opened this issue Apr 11, 2025 · 2 comments
Open
2 tasks done

Subscription Module missing the Plan Field #867

BenjiLewis opened this issue Apr 11, 2025 · 2 comments

Comments

@BenjiLewis
Copy link

BenjiLewis commented Apr 11, 2025

Existing Issue or Pull Request Verification

  • Confirmed, no existing Issues or Pull Requests found related to my submission.

Package Version

3.2.0

Are you using the latest version?

  • Yes, I verified the issue is still present in the latest version.

Steps to Reproduce

Create a customer.subscription.created event, then try to access the plan field of the subscription.

Example Event with API version: 2025-03-31.basil (From stripe)

{
  "object": {
    "id": "sub_1RChCzDC4Fizwk4lpuLvu7Bg",
    "object": "subscription",
    "application": null,
    "application_fee_percent": null,
    "automatic_tax": {
      "disabled_reason": null,
      "enabled": false,
      "liability": null
    },
    "billing_cycle_anchor": 1744376484,
    "billing_cycle_anchor_config": null,
    "cancel_at": null,
    "cancel_at_period_end": false,
    "canceled_at": null,
    "cancellation_details": {
      "comment": null,
      "feedback": null,
      "reason": null
    },
    "collection_method": "charge_automatically",
    "created": 1744376484,
    "currency": "usd",
    "customer": "cus_S6v3W4tTAAwHmd",
    "days_until_due": null,
    "default_payment_method": "pm_1RChCxDC4Fizwk4lHXW629kv",
    "default_source": null,
    "default_tax_rates": [],
    "description": null,
    "discounts": [],
    "ended_at": null,
    "invoice_settings": {
      "account_tax_ids": null,
      "issuer": {
        "type": "self"
      }
    },
    "items": {
      "object": "list",
      "data": [
        {
          "id": "si_S6v39hdZ0pif6M",
          "object": "subscription_item",
          "created": 1744376484,
          "current_period_end": 1746968484,
          "current_period_start": 1744376484,
          "discounts": [],
          "metadata": {},
          "plan": {
            "id": "price_1RC0eTDC4Fizwk4lAGHVuxqL",
            "object": "plan",
            "active": true,
            "amount": 1500,
            "amount_decimal": "1500",
            "billing_scheme": "per_unit",
            "created": 1744212897,
            "currency": "usd",
            "interval": "month",
            "interval_count": 1,
            "livemode": false,
            "metadata": {},
            "meter": null,
            "nickname": null,
            "product": "prod_S6D4U7hNT3EM2n",
            "tiers_mode": null,
            "transform_usage": null,
            "trial_period_days": null,
            "usage_type": "licensed"
          },
          "price": {
            "id": "price_1RC0eTDC4Fizwk4lAGHVuxqL",
            "object": "price",
            "active": true,
            "billing_scheme": "per_unit",
            "created": 1744212897,
            "currency": "usd",
            "custom_unit_amount": null,
            "livemode": false,
            "lookup_key": null,
            "metadata": {},
            "nickname": null,
            "product": "prod_S6D4U7hNT3EM2n",
            "recurring": {
              "interval": "month",
              "interval_count": 1,
              "meter": null,
              "trial_period_days": null,
              "usage_type": "licensed"
            },
            "tax_behavior": "unspecified",
            "tiers_mode": null,
            "transform_quantity": null,
            "type": "recurring",
            "unit_amount": 1500,
            "unit_amount_decimal": "1500"
          },
          "quantity": 1,
          "subscription": "sub_1RChCzDC4Fizwk4lpuLvu7Bg",
          "tax_rates": []
        }
      ],
      "has_more": false,
      "total_count": 1,
      "url": "/v1/subscription_items?subscription=sub_1RChCzDC4Fizwk4lpuLvu7Bg"
    },
    "latest_invoice": "in_1RChCzDC4Fizwk4lPZJTK1hZ",
    "livemode": false,
    "metadata": {},
    "next_pending_invoice_item_invoice": null,
    "on_behalf_of": null,
    "pause_collection": null,
    "payment_settings": {
      "payment_method_options": {
        "acss_debit": null,
        "bancontact": null,
        "card": {
          "network": null,
          "request_three_d_secure": "automatic"
        },
        "customer_balance": null,
        "konbini": null,
        "sepa_debit": null,
        "us_bank_account": null
      },
      "payment_method_types": null,
      "save_default_payment_method": "off"
    },
    "pending_invoice_item_interval": null,
    "pending_setup_intent": null,
    "pending_update": null,
    "plan": {
      "id": "price_1RC0eTDC4Fizwk4lAGHVuxqL",
      "object": "plan",
      "active": true,
      "amount": 1500,
      "amount_decimal": "1500",
      "billing_scheme": "per_unit",
      "created": 1744212897,
      "currency": "usd",
      "interval": "month",
      "interval_count": 1,
      "livemode": false,
      "metadata": {},
      "meter": null,
      "nickname": null,
      "product": "prod_S6D4U7hNT3EM2n",
      "tiers_mode": null,
      "transform_usage": null,
      "trial_period_days": null,
      "usage_type": "licensed"
    },
    "quantity": 1,
    "schedule": null,
    "start_date": 1744376484,
    "status": "active",
    "test_clock": null,
    "transfer_data": null,
    "trial_end": null,
    "trial_settings": {
      "end_behavior": {
        "missing_payment_method": "create_invoice"
      }
    },
    "trial_start": null
  },
  "previous_attributes": null
}

Expected Result

iex(7)> event
%Stripe.Event{
  account: nil,
  api_version: "2025-03-31.basil",
  created: 1744376486,
  data: %{
    object: %Stripe.Subscription{
      default_tax_rates: [],
      pending_update: nil,
      id: "sub_1RChCzDC4Fizwk4lpuLvu7Bg",
      transfer_data: nil,
      items: %Stripe.List{
        object: "list",
        data: [
          %Stripe.SubscriptionItem{
            billing_thresholds: nil,
            created: 1744376484,
            id: "si_S6v39hdZ0pif6M",
            metadata: %{},
            object: "subscription_item",
            plan: %Stripe.Plan{
              active: true,
              aggregate_usage: nil,
              amount: 1500,
              amount_decimal: "1500",
              billing_scheme: "per_unit",
              created: 1744212897,
              currency: "usd",
              id: "price_1RC0eTDC4Fizwk4lAGHVuxqL",
              interval: "month",
              interval_count: 1,
              livemode: false,
              metadata: %{},
              nickname: nil,
              object: "plan",
              product: "prod_S6D4U7hNT3EM2n",
              tiers: nil,
              tiers_mode: nil,
              transform_usage: nil,
              trial_period_days: nil,
              usage_type: "licensed"
            },
            price: %Stripe.Price{
              active: true,
              billing_scheme: "per_unit",
              created: 1744212897,
              currency: "usd",
              currency_options: nil,
              custom_unit_amount: nil,
              id: "price_1RC0eTDC4Fizwk4lAGHVuxqL",
              livemode: false,
              lookup_key: nil,
              metadata: %{},
              nickname: nil,
              object: "price",
              product: "prod_S6D4U7hNT3EM2n",
              recurring: %{
                interval: "month",
                meter: nil,
                interval_count: 1,
                trial_period_days: nil,
                usage_type: "licensed"
              },
              tax_behavior: "unspecified",
              tiers: nil,
              tiers_mode: nil,
              transform_quantity: nil,
              type: "recurring",
              unit_amount: 1500,
              unit_amount_decimal: "1500"
            },
            quantity: 1,
            subscription: "sub_1RChCzDC4Fizwk4lpuLvu7Bg",
            tax_rates: []
          }
        ],
        has_more: false,
        total_count: 1,
        url: "/v1/subscription_items?subscription=sub_1RChCzDC4Fizwk4lpuLvu7Bg"
      },
      status: "active",
      current_period_start: nil,
      trial_start: nil,
      trial_settings: %{
        end_behavior: %{missing_payment_method: "create_invoice"}
      },
      cancel_at: nil,
      trial_end: nil,
      created: 1744376484,
      currency: "usd",
      latest_invoice: "in_1RChCzDC4Fizwk4lPZJTK1hZ",
      current_period_end: nil,
      canceled_at: nil,
      schedule: nil,
      automatic_tax: %{enabled: false, disabled_reason: nil, liability: nil},
      test_clock: nil,
      billing_cycle_anchor: 1744376484,
      billing_cycle_anchor_config: nil,
      object: "subscription",
      cancel_at_period_end: false,
      default_source: nil,
      next_pending_invoice_item_invoice: nil,
      billing_thresholds: nil,
      pending_invoice_item_interval: nil,
      plan: %Stripe.Plan{
        active: true,
        aggregate_usage: nil,
        amount: 1500,
        amount_decimal: "1500",
        billing_scheme: "per_unit",
        created: 1744212897,
        currency: "usd",
        id: "price_1RC0eTDC4Fizwk4lAGHVuxqL",
        interval: "month",
        interval_count: 1,
        livemode: false,
        metadata: %{},
        nickname: nil,
        object: "plan",
        product: "prod_S6D4U7hNT3EM2n",
        tiers: nil,
        tiers_mode: nil,
        ...
      },
      application: nil,
      payment_settings: %{
        payment_method_options: %{
          sepa_debit: nil,
          customer_balance: nil,
          bancontact: nil,
          konbini: nil,
          us_bank_account: nil,
          card: %{network: nil, request_three_d_secure: "automatic"},
          acss_debit: nil
        },
        payment_method_types: nil,
        save_default_payment_method: "off"
      },
      days_until_due: nil,
      ended_at: nil,
      customer: "cus_S6v3W4tTAAwHmd",
      pause_collection: nil,
      on_behalf_of: nil,
      start_date: 1744376484,
      discount: nil,
      pending_setup_intent: nil,
      cancellation_details: %{reason: nil, comment: nil, feedback: nil},
      description: nil,
      metadata: %{},
      default_payment_method: "pm_1RChCxDC4Fizwk4lHXW629kv",
      collection_method: "charge_automatically",
      livemode: false,
      application_fee_percent: nil
    }
  },
  id: "evt_1RChD1DC4Fizwk4lO3OwEIHS",
  livemode: false,
  object: "event",
  pending_webhooks: 3,
  request: %{id: nil, idempotency_key: "0f533d6e-24ff-46e5-a250-f316c15e0a6d"},
  type: "customer.subscription.created"
}

Actual Result

[info] Stripe: Processing customer.subscription.created
[info] Sent 500 in 14ms
[error] ** (KeyError) key :plan not found in: %Stripe.Subscription{
  default_tax_rates: [],
  pending_update: nil,
  id: "sub_1RCepPDC4Fizwk4lDL6kSUR7",
  transfer_data: nil,
  items: %Stripe.List{
    object: "list",
    data: [
      %Stripe.SubscriptionItem{
        billing_thresholds: nil,
        created: 1744367336,
        id: "si_S6saziihpqX5js",
        metadata: %{},
        object: "subscription_item",
        plan: %Stripe.Plan{
          active: true,
          aggregate_usage: nil,
          amount: 1500,
          amount_decimal: "1500",
          billing_scheme: "per_unit",
          created: 1744367335,
          currency: "usd",
          id: "price_1RCepPDC4Fizwk4lggKScl6A",
          interval: "month",
          interval_count: 1,
          livemode: false,
          metadata: %{},
          nickname: nil,
          object: "plan",
          product: "prod_S6sagMyxdrwYkI",
          tiers: nil,
          tiers_mode: nil,
          transform_usage: nil,
          trial_period_days: nil,
          usage_type: "licensed"
        },
        price: %Stripe.Price{
          active: true,
          billing_scheme: "per_unit",
          created: 1744367335,
          currency: "usd",
          currency_options: nil,
          custom_unit_amount: nil,
          id: "price_1RCepPDC4Fizwk4lggKScl6A",
          livemode: false,
          lookup_key: nil,
          metadata: %{},
          nickname: nil,
          object: "price",
          product: "prod_S6sagMyxdrwYkI",
          recurring: %{
            interval: "month",
            meter: nil,
            aggregate_usage: nil,
            interval_count: 1,
            trial_period_days: nil,
            usage_type: "licensed"
          },
          tax_behavior: "unspecified",
          tiers: nil,
          tiers_mode: nil,
          transform_quantity: nil,
          type: "recurring",
          unit_amount: 1500,
          unit_amount_decimal: "1500"
        },
        quantity: 1,
        subscription: "sub_1RCepPDC4Fizwk4lDL6kSUR7",
        tax_rates: []
      }
    ],
    has_more: false,
    total_count: 1,
    url: "/v1/subscription_items?subscription=sub_1RCepPDC4Fizwk4lDL6kSUR7"
  },
  status: "active",
  current_period_start: 1744367335,
  trial_start: nil,
  trial_settings: %{end_behavior: %{missing_payment_method: "create_invoice"}},
  cancel_at: nil,
  trial_end: nil,
  created: 1744367335,
  currency: "usd",
  latest_invoice: "in_1RCepPDC4Fizwk4leFbfnaSu",
  current_period_end: 1746959335,
  canceled_at: nil,
  schedule: nil,
  automatic_tax: %{enabled: false, liability: nil, disabled_reason: nil},
  test_clock: nil,
  billing_cycle_anchor: 1744367335,
  billing_cycle_anchor_config: nil,
  object: "subscription",
  cancel_at_period_end: false,
  default_source: nil,
  next_pending_invoice_item_invoice: nil,
  billing_thresholds: nil,
  pending_invoice_item_interval: nil,
  application: nil,
  payment_settings: %{
    payment_method_types: nil,
    payment_method_options: nil,
    save_default_payment_method: "off"
  },
  days_until_due: nil,
  ended_at: nil,
  customer: "cus_S6sa66uXRou8ZU",
  pause_collection: nil,
  on_behalf_of: nil,
  start_date: 1744367335,
  discount: nil,
  pending_setup_intent: nil,
  cancellation_details: %{reason: nil, comment: nil, feedback: nil},
  description: nil,
  metadata: %{},
  default_payment_method: nil,
  collection_method: "charge_automatically",
  livemode: false,
  application_fee_percent: nil
}
@BenjiLewis
Copy link
Author

I have a PR on my machine for this, if approved.

@BenjiLewis
Copy link
Author

diff --git a/lib/generated/subscription.ex b/lib/generated/subscription.ex
index 164142c..f3fa2dd 100644
--- a/lib/generated/subscription.ex
+++ b/lib/generated/subscription.ex
@@ -31,6 +31,7 @@ defmodule Stripe.Subscription do
       :next_pending_invoice_item_invoice,
       :billing_thresholds,
       :pending_invoice_item_interval,
+      :plan,
       :application,
       :payment_settings,
       :days_until_due,
@@ -88,6 +89,7 @@ defmodule Stripe.Subscription do
             pending_invoice_item_interval: term | nil,
             pending_setup_intent: (binary | Stripe.SetupIntent.t()) | nil,
             pending_update: term | nil,
+            plan: (binary | Stripe.Plan.t()) | nil,
             schedule: (binary | Stripe.SubscriptionSchedule.t()) | nil,
             start_date: integer,
             status: binary,
@@ -491,6 +493,7 @@ defmodule Stripe.Subscription do
                   | :default_incomplete
                   | :error_if_incomplete
                   | :pending_if_incomplete,
+                optional(:plan) => binary,
                 optional(:items) => list(items),
                 optional(:transfer_data) => transfer_data,
                 optional(:proration_behavior) => :always_invoice | :create_prorations | :none,
@@ -550,6 +553,7 @@ defmodule Stripe.Subscription do
                 optional(:payment_settings) => payment_settings,
                 optional(:pending_invoice_item_interval) =>
                   pending_invoice_item_interval | binary,
+                optional(:plan) => binary,
                 optional(:promotion_code) => binary,
                 optional(:proration_behavior) => :always_invoice | :create_prorations | :none,
                 optional(:proration_date) => integer,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant