diff --git a/CODEGEN_VERSION b/CODEGEN_VERSION index 5c168e856a..c9b9222261 100644 --- a/CODEGEN_VERSION +++ b/CODEGEN_VERSION @@ -1 +1 @@ -68065dff88008f079e79eb1ef0add5e261b416e1 \ No newline at end of file +35e26af8c8a4fb5988922dfcb4d9bd22f7f850c5 \ No newline at end of file diff --git a/OPENAPI_VERSION b/OPENAPI_VERSION index 70faab1cf1..ea042559fa 100644 --- a/OPENAPI_VERSION +++ b/OPENAPI_VERSION @@ -1 +1 @@ -v2176 \ No newline at end of file +v2185 \ No newline at end of file diff --git a/src/Stripe.net/Entities/AccountSignals/AccountSignals.cs b/src/Stripe.net/Entities/AccountSignals/AccountSignals.cs new file mode 100644 index 0000000000..63068cb5cc --- /dev/null +++ b/src/Stripe.net/Entities/AccountSignals/AccountSignals.cs @@ -0,0 +1,52 @@ +// File generated from our OpenAPI spec +namespace Stripe +{ + using Newtonsoft.Json; +#if NET6_0_OR_GREATER + using STJS = System.Text.Json.Serialization; +#endif + + /// + /// The Account Signals API provides risk related signals that can be used to better manage + /// risks. + /// + public class AccountSignals : StripeEntity, IHasObject + { + /// + /// String representing the object's type. Objects of the same type share the same value. + /// + [JsonProperty("object")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("object")] +#endif + public string Object { get; set; } + + /// + /// The account for which the signals belong to. + /// + [JsonProperty("account")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("account")] +#endif + public string Account { get; set; } + + /// + /// The delinquency signal of the account. + /// + [JsonProperty("delinquency")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("delinquency")] +#endif + public AccountSignalsDelinquency Delinquency { get; set; } + + /// + /// Has the value true if the object exists in live mode or the value false if + /// the object exists in test mode. + /// + [JsonProperty("livemode")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("livemode")] +#endif + public bool Livemode { get; set; } + } +} diff --git a/src/Stripe.net/Entities/AccountSignals/AccountSignalsDelinquency.cs b/src/Stripe.net/Entities/AccountSignals/AccountSignalsDelinquency.cs new file mode 100644 index 0000000000..a2480dbbc9 --- /dev/null +++ b/src/Stripe.net/Entities/AccountSignals/AccountSignalsDelinquency.cs @@ -0,0 +1,64 @@ +// File generated from our OpenAPI spec +namespace Stripe +{ + using System; + using System.Collections.Generic; + using Newtonsoft.Json; + using Stripe.Infrastructure; +#if NET6_0_OR_GREATER + using STJS = System.Text.Json.Serialization; +#endif + + public class AccountSignalsDelinquency : StripeEntity + { + /// + /// Time at which the signal was evaluated, measured in seconds since the Unix epoch. + /// + [JsonProperty("evaluated_at")] + [JsonConverter(typeof(UnixDateTimeConverter))] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("evaluated_at")] + [STJS.JsonConverter(typeof(STJUnixDateTimeConverter))] +#endif + public DateTime? EvaluatedAt { get; set; } + + /// + /// Array of objects representing individual factors that contributed to the calculated + /// probability of delinquency. + /// + [JsonProperty("indicators")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("indicators")] +#endif + public List Indicators { get; set; } + + /// + /// The probability of delinquency. Can be between 0.00 and 100.00. + /// + [JsonProperty("probability")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("probability")] +#endif + public decimal? Probability { get; set; } + + /// + /// Categorical assessment of the delinquency risk based on probability. + /// One of: elevated, highest, low, normal, not_assessed, + /// or unknown. + /// + [JsonProperty("risk_level")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("risk_level")] +#endif + public string RiskLevel { get; set; } + + /// + /// Unique identifier for the delinquency signal. + /// + [JsonProperty("signal_id")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("signal_id")] +#endif + public string SignalId { get; set; } + } +} diff --git a/src/Stripe.net/Entities/AccountSignals/AccountSignalsDelinquencyIndicator.cs b/src/Stripe.net/Entities/AccountSignals/AccountSignalsDelinquencyIndicator.cs new file mode 100644 index 0000000000..8f8be79679 --- /dev/null +++ b/src/Stripe.net/Entities/AccountSignals/AccountSignalsDelinquencyIndicator.cs @@ -0,0 +1,45 @@ +// File generated from our OpenAPI spec +namespace Stripe +{ + using Newtonsoft.Json; +#if NET6_0_OR_GREATER + using STJS = System.Text.Json.Serialization; +#endif + + public class AccountSignalsDelinquencyIndicator : StripeEntity + { + /// + /// A brief explanation of how this indicator contributed to the delinquency probability. + /// + [JsonProperty("description")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("description")] +#endif + public string Description { get; set; } + + /// + /// The effect this indicator had on the overall risk level. + /// One of: decrease, neutral, slight_increase, or + /// strong_increase. + /// + [JsonProperty("impact")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("impact")] +#endif + public string Impact { get; set; } + + /// + /// The name of the specific indicator used in the risk assessment. + /// One of: account_balance, aov, charge_concentration, + /// dispute_window, disputes, duplicates, exposure, + /// firmographic, lifetime_metrics, payment_processing, + /// payment_volume, payouts, refunds, tenure, or + /// transfers. + /// + [JsonProperty("indicator")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("indicator")] +#endif + public string Indicator { get; set; } + } +} diff --git a/src/Stripe.net/Entities/ApplicationFees/ApplicationFee.cs b/src/Stripe.net/Entities/ApplicationFees/ApplicationFee.cs index bf038410ae..ac01c85fe4 100644 --- a/src/Stripe.net/Entities/ApplicationFees/ApplicationFee.cs +++ b/src/Stripe.net/Entities/ApplicationFees/ApplicationFee.cs @@ -248,6 +248,16 @@ public Charge Charge #endif public ApplicationFeeFeeSource FeeSource { get; set; } + /// + /// Polymorphic funding source of the application fee. Includes the type and details of the + /// funding source. + /// + [JsonProperty("funding_source")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("funding_source")] +#endif + public ApplicationFeeFundingSource FundingSource { get; set; } + /// /// Has the value true if the object exists in live mode or the value false if /// the object exists in test mode. diff --git a/src/Stripe.net/Entities/ApplicationFees/ApplicationFeeFundingSource.cs b/src/Stripe.net/Entities/ApplicationFees/ApplicationFeeFundingSource.cs new file mode 100644 index 0000000000..b640d7385e --- /dev/null +++ b/src/Stripe.net/Entities/ApplicationFees/ApplicationFeeFundingSource.cs @@ -0,0 +1,29 @@ +// File generated from our OpenAPI spec +namespace Stripe +{ + using Newtonsoft.Json; +#if NET6_0_OR_GREATER + using STJS = System.Text.Json.Serialization; +#endif + + public class ApplicationFeeFundingSource : StripeEntity + { + /// + /// The invoice ID associated with this funding source, if applicable. + /// + [JsonProperty("invoice")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("invoice")] +#endif + public string Invoice { get; set; } + + /// + /// The type of funding source. + /// + [JsonProperty("type")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("type")] +#endif + public string Type { get; set; } + } +} diff --git a/src/Stripe.net/Entities/Billing/AlertTriggereds/AlertTriggered.cs b/src/Stripe.net/Entities/Billing/AlertTriggereds/AlertTriggered.cs index e574334f61..430e48d757 100644 --- a/src/Stripe.net/Entities/Billing/AlertTriggereds/AlertTriggered.cs +++ b/src/Stripe.net/Entities/Billing/AlertTriggereds/AlertTriggered.cs @@ -19,6 +19,15 @@ public class AlertTriggered : StripeEntity, IHasObject #endif public string Object { get; set; } + /// + /// The aggregation period for which this alert triggered. + /// + [JsonProperty("aggregation_period")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("aggregation_period")] +#endif + public AlertTriggeredAggregationPeriod AggregationPeriod { get; set; } + /// /// A billing alert is a resource that notifies you when a certain usage threshold on a /// meter is crossed. For example, you might create a billing alert to notify you when a @@ -77,6 +86,16 @@ public class AlertTriggered : StripeEntity, IHasObject #endif public string ExternalCustomerId { get; set; } + /// + /// Populated specifically for spend alerts to notify merchants which group_by entity has + /// the exceeded spend. + /// + [JsonProperty("group_by")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("group_by")] +#endif + public AlertTriggeredGroupBy GroupBy { get; set; } + /// /// Has the value true if the object exists in live mode or the value false if /// the object exists in test mode. @@ -87,6 +106,17 @@ public class AlertTriggered : StripeEntity, IHasObject #endif public bool Livemode { get; set; } + /// + /// Timestamp at which the threshold was crossed. + /// + [JsonProperty("triggered_at")] + [JsonConverter(typeof(UnixDateTimeConverter))] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("triggered_at")] + [STJS.JsonConverter(typeof(STJUnixDateTimeConverter))] +#endif + public DateTime? TriggeredAt { get; set; } + /// /// The value triggering the alert. /// diff --git a/src/Stripe.net/Entities/Billing/AlertTriggereds/AlertTriggeredAggregationPeriod.cs b/src/Stripe.net/Entities/Billing/AlertTriggereds/AlertTriggeredAggregationPeriod.cs new file mode 100644 index 0000000000..a9aa1b57f4 --- /dev/null +++ b/src/Stripe.net/Entities/Billing/AlertTriggereds/AlertTriggeredAggregationPeriod.cs @@ -0,0 +1,35 @@ +// File generated from our OpenAPI spec +namespace Stripe.Billing +{ + using System; + using Newtonsoft.Json; + using Stripe.Infrastructure; +#if NET6_0_OR_GREATER + using STJS = System.Text.Json.Serialization; +#endif + + public class AlertTriggeredAggregationPeriod : StripeEntity + { + /// + /// End time of the aggregation period. + /// + [JsonProperty("ends_at")] + [JsonConverter(typeof(UnixDateTimeConverter))] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("ends_at")] + [STJS.JsonConverter(typeof(STJUnixDateTimeConverter))] +#endif + public DateTime EndsAt { get; set; } = Stripe.Infrastructure.DateTimeUtils.UnixEpoch; + + /// + /// Start time of the aggregation period. + /// + [JsonProperty("starts_at")] + [JsonConverter(typeof(UnixDateTimeConverter))] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("starts_at")] + [STJS.JsonConverter(typeof(STJUnixDateTimeConverter))] +#endif + public DateTime StartsAt { get; set; } = Stripe.Infrastructure.DateTimeUtils.UnixEpoch; + } +} diff --git a/src/Stripe.net/Entities/Billing/AlertTriggereds/AlertTriggeredGroupBy.cs b/src/Stripe.net/Entities/Billing/AlertTriggereds/AlertTriggeredGroupBy.cs new file mode 100644 index 0000000000..688d0f5294 --- /dev/null +++ b/src/Stripe.net/Entities/Billing/AlertTriggereds/AlertTriggeredGroupBy.cs @@ -0,0 +1,40 @@ +// File generated from our OpenAPI spec +namespace Stripe.Billing +{ + using Newtonsoft.Json; +#if NET6_0_OR_GREATER + using STJS = System.Text.Json.Serialization; +#endif + + public class AlertTriggeredGroupBy : StripeEntity + { + /// + /// The billing cadence ID, populated when type is billing_cadence. + /// + [JsonProperty("billing_cadence")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("billing_cadence")] +#endif + public string BillingCadence { get; set; } + + /// + /// The pricing plan subscription ID, populated when type is + /// pricing_plan_subscription. + /// + [JsonProperty("pricing_plan_subscription")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("pricing_plan_subscription")] +#endif + public string PricingPlanSubscription { get; set; } + + /// + /// The type of grouping used for this alert notification. + /// One of: billing_cadence, or pricing_plan_subscription. + /// + [JsonProperty("type")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("type")] +#endif + public string Type { get; set; } + } +} diff --git a/src/Stripe.net/Entities/FinancialConnections/Sessions/Session.cs b/src/Stripe.net/Entities/FinancialConnections/Sessions/Session.cs index 832ca167fe..e41d624d36 100644 --- a/src/Stripe.net/Entities/FinancialConnections/Sessions/Session.cs +++ b/src/Stripe.net/Entities/FinancialConnections/Sessions/Session.cs @@ -64,6 +64,15 @@ public class Session : StripeEntity, IHasId, IHasObject #endif public SessionFilters Filters { get; set; } + /// + /// Settings for the Hosted UI mode. + /// + [JsonProperty("hosted")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("hosted")] +#endif + public SessionHosted Hosted { get; set; } + [JsonProperty("limits")] #if NET6_0_OR_GREATER [STJS.JsonPropertyName("limits")] @@ -145,5 +154,26 @@ public class Session : StripeEntity, IHasId, IHasObject [STJS.JsonPropertyName("status_details")] #endif public SessionStatusDetails StatusDetails { get; set; } + + /// + /// The UI mode for this session. + /// One of: hosted, or modal. + /// + [JsonProperty("ui_mode")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("ui_mode")] +#endif + public string UiMode { get; set; } + + /// + /// The hosted URL for this Session. Redirect customers to this URL to take them to the + /// hosted authentication flow. This value is only present when the Session is active and + /// the ui_mode is hosted. + /// + [JsonProperty("url")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("url")] +#endif + public string Url { get; set; } } } diff --git a/src/Stripe.net/Entities/FinancialConnections/Sessions/SessionHosted.cs b/src/Stripe.net/Entities/FinancialConnections/Sessions/SessionHosted.cs new file mode 100644 index 0000000000..076461ab42 --- /dev/null +++ b/src/Stripe.net/Entities/FinancialConnections/Sessions/SessionHosted.cs @@ -0,0 +1,32 @@ +// File generated from our OpenAPI spec +namespace Stripe.FinancialConnections +{ + using Newtonsoft.Json; +#if NET6_0_OR_GREATER + using STJS = System.Text.Json.Serialization; +#endif + + public class SessionHosted : StripeEntity + { + /// + /// How the user enters the hosted flow. You can only use the values email and + /// url if you provide relink_options. + /// One of: email, or url. + /// + [JsonProperty("delivery_method")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("delivery_method")] +#endif + public string DeliveryMethod { get; set; } + + /// + /// The URL to redirect your customer back to after they link their accounts or cancel this + /// Session. This parameter is required if ui_mode is hosted. + /// + [JsonProperty("return_url")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("return_url")] +#endif + public string ReturnUrl { get; set; } + } +} diff --git a/src/Stripe.net/Entities/Tax/CalculationLineItems/CalculationLineItem.cs b/src/Stripe.net/Entities/Tax/CalculationLineItems/CalculationLineItem.cs index b7257dee2a..8eccaca7aa 100644 --- a/src/Stripe.net/Entities/Tax/CalculationLineItems/CalculationLineItem.cs +++ b/src/Stripe.net/Entities/Tax/CalculationLineItems/CalculationLineItem.cs @@ -71,12 +71,10 @@ public class CalculationLineItem : StripeEntity, IHasId, IH public Dictionary Metadata { get; set; } /// - /// A tax location for a line item that acts as a performance location. This indicates that - /// the line item might be taxed at the place where it is being performed at. This is - /// helpful for events or other services being performed at non-customer addresses like - /// venues or offices. This can be left empty for tax codes that do not require a tax - /// location. For tax codes where the location requirement is "optional", this would - /// override the customer address in most use cases. + /// Indicates the line item represents a performance where the venue location might + /// determine the tax, not the customer address. Leave empty if the tax code doesn't require + /// a tax location. If you provide this value for tax codes with an optional location + /// requirement, it overrides the customer address. /// [JsonProperty("performance_location")] #if NET6_0_OR_GREATER diff --git a/src/Stripe.net/Infrastructure/Public/StripeTypeRegistry.cs b/src/Stripe.net/Infrastructure/Public/StripeTypeRegistry.cs index 6aa760130d..3e013a674b 100644 --- a/src/Stripe.net/Infrastructure/Public/StripeTypeRegistry.cs +++ b/src/Stripe.net/Infrastructure/Public/StripeTypeRegistry.cs @@ -19,6 +19,7 @@ public static class StripeTypeRegistry { "account_link", typeof(AccountLink) }, { "account_notice", typeof(AccountNotice) }, { "account_session", typeof(AccountSession) }, + { "account_signals", typeof(AccountSignals) }, { "apple_pay_domain", typeof(ApplePayDomain) }, { "application", typeof(Application) }, { "application_fee", typeof(ApplicationFee) }, diff --git a/src/Stripe.net/Services/AccountLinks/AccountLinkCollectionOptionsOptions.cs b/src/Stripe.net/Services/AccountLinks/AccountLinkCollectionOptionsOptions.cs index ea26950998..ca68a3b3e8 100644 --- a/src/Stripe.net/Services/AccountLinks/AccountLinkCollectionOptionsOptions.cs +++ b/src/Stripe.net/Services/AccountLinks/AccountLinkCollectionOptionsOptions.cs @@ -31,5 +31,16 @@ public class AccountLinkCollectionOptionsOptions : INestedOptions [STJS.JsonPropertyName("future_requirements")] #endif public string FutureRequirements { get; set; } + + /// + /// Specifies whether the platform collects external account information from connected + /// accounts during Connect Onboarding. When set to false, external account + /// collection is skipped. Defaults to true. + /// + [JsonProperty("external_account_collection")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("external_account_collection")] +#endif + public bool? ExternalAccountCollection { get; set; } } } diff --git a/src/Stripe.net/Services/AccountSignals/AccountSignalsGetOptions.cs b/src/Stripe.net/Services/AccountSignals/AccountSignalsGetOptions.cs new file mode 100644 index 0000000000..dd6e44785c --- /dev/null +++ b/src/Stripe.net/Services/AccountSignals/AccountSignalsGetOptions.cs @@ -0,0 +1,7 @@ +// File generated from our OpenAPI spec +namespace Stripe +{ + public class AccountSignalsGetOptions : BaseOptions + { + } +} diff --git a/src/Stripe.net/Services/AccountSignals/AccountSignalsService.cs b/src/Stripe.net/Services/AccountSignals/AccountSignalsService.cs new file mode 100644 index 0000000000..166530bb35 --- /dev/null +++ b/src/Stripe.net/Services/AccountSignals/AccountSignalsService.cs @@ -0,0 +1,42 @@ +// File generated from our OpenAPI spec +namespace Stripe +{ + using System; + using System.Net; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + + public class AccountSignalsService : Service + { + public AccountSignalsService() + { + } + + internal AccountSignalsService(ApiRequestor requestor) + : base(requestor) + { + } + + public AccountSignalsService(IStripeClient client) + : base(client) + { + } + + /// + ///

Retrieves the account’s Signal objects

. + ///
+ public virtual AccountSignals Get(string parentId, AccountSignalsGetOptions options = null, RequestOptions requestOptions = null) + { + return this.Request(BaseAddress.Api, HttpMethod.Get, $"/v1/accounts/{WebUtility.UrlEncode(parentId)}/signals", options, requestOptions); + } + + /// + ///

Retrieves the account’s Signal objects

. + ///
+ public virtual Task GetAsync(string parentId, AccountSignalsGetOptions options = null, RequestOptions requestOptions = null, CancellationToken cancellationToken = default) + { + return this.RequestAsync(BaseAddress.Api, HttpMethod.Get, $"/v1/accounts/{WebUtility.UrlEncode(parentId)}/signals", options, requestOptions, cancellationToken); + } + } +} diff --git a/src/Stripe.net/Services/Accounts/AccountService.cs b/src/Stripe.net/Services/Accounts/AccountService.cs index ddd34e4f5f..aabae45a6d 100644 --- a/src/Stripe.net/Services/Accounts/AccountService.cs +++ b/src/Stripe.net/Services/Accounts/AccountService.cs @@ -19,6 +19,7 @@ public class AccountService : Service, private AccountExternalAccountService externalAccounts; private AccountLoginLinkService loginLinks; private AccountPersonService persons; + private AccountSignalsService signals; public AccountService() { @@ -46,6 +47,9 @@ public AccountService(IStripeClient client) public virtual AccountPersonService Persons => this.persons ??= new AccountPersonService( this.Requestor); + public virtual AccountSignalsService Signals => this.signals ??= new AccountSignalsService( + this.Requestor); + /// ///

With Connect, you can create Stripe /// accounts for your users. To do this, you’ll first need to + /// Settings for hosted Sessions. Required if ui_mode is hosted. + ///

+ [JsonProperty("hosted")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("hosted")] +#endif + public SessionHostedOptions Hosted { get; set; } + /// /// Settings for configuring Session-specific limits. /// @@ -88,5 +97,15 @@ public class SessionCreateOptions : BaseOptions [STJS.JsonPropertyName("return_url")] #endif public string ReturnUrl { get; set; } + + /// + /// The UI mode of the Session. Defaults to modal. + /// One of: hosted, or modal. + /// + [JsonProperty("ui_mode")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("ui_mode")] +#endif + public string UiMode { get; set; } } } diff --git a/src/Stripe.net/Services/FinancialConnections/Sessions/SessionHostedOptions.cs b/src/Stripe.net/Services/FinancialConnections/Sessions/SessionHostedOptions.cs new file mode 100644 index 0000000000..669a9cfee4 --- /dev/null +++ b/src/Stripe.net/Services/FinancialConnections/Sessions/SessionHostedOptions.cs @@ -0,0 +1,22 @@ +// File generated from our OpenAPI spec +namespace Stripe.FinancialConnections +{ + using Newtonsoft.Json; +#if NET6_0_OR_GREATER + using STJS = System.Text.Json.Serialization; +#endif + + public class SessionHostedOptions : INestedOptions + { + /// + /// How the user should enter the hosted flow. The values email and url can + /// only be used if relink_options is provided. + /// One of: email, or url. + /// + [JsonProperty("delivery_method")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("delivery_method")] +#endif + public string DeliveryMethod { get; set; } + } +} diff --git a/src/Stripe.net/Services/Subscriptions/SubscriptionTrialSettingsEndBehaviorOptions.cs b/src/Stripe.net/Services/Subscriptions/SubscriptionTrialSettingsEndBehaviorOptions.cs index 3d96b69716..2429630861 100644 --- a/src/Stripe.net/Services/Subscriptions/SubscriptionTrialSettingsEndBehaviorOptions.cs +++ b/src/Stripe.net/Services/Subscriptions/SubscriptionTrialSettingsEndBehaviorOptions.cs @@ -8,6 +8,17 @@ namespace Stripe public class SubscriptionTrialSettingsEndBehaviorOptions : INestedOptions { + /// + /// Indicates how the subscription's billing cycle anchor is reset when a trial ends. + /// Defaults to now. + /// One of: now, or unchanged. + /// + [JsonProperty("billing_cycle_anchor")] +#if NET6_0_OR_GREATER + [STJS.JsonPropertyName("billing_cycle_anchor")] +#endif + public string BillingCycleAnchor { get; set; } + /// /// Indicates how the subscription should change when the trial ends if the user did not /// provide a payment method.