See also the Braintree::Subscription response object.

Ruby
Click to copy
Copied
result = Braintree::Subscription.create(
  :payment_method_token => "the_token",
  :plan_id => "silver_plan"
)
Parameters
:add_ons

The collection of add-ons associated with a subscription. Add-on details can only be managed within the Control Panel.

:add Array

Array of add-ons to add to the subscription.

Each element contains:
:amount BigDecimal or String

Price of the add-on. This will override the inherited add-on amount.

:inherited_from_id required, String

Specify an add-on ID to apply to the subscription. You cannot duplicate an add-on that is inherited from the plan, but you can update the quantity.

:never_expires bool

Set a subscription's billing cycle to never expire instead of specifying a number of billing cycles.

:number_of_billing_cycles String

Number of billing cycles to apply the add-on. Must be greater than 0.

:quantity Integer

How many of this add-on to apply to the subscription. The default is 1.

:remove Array

Array of add-on IDs that are inherited from the plan. IDs specified will be removed from the subscription.

:update Array

Array of add-ons that are inherited from the plan.

Each element contains:
:amount BigDecimal or String

Price of the add-on. This will override the existing add-on amount.

:existing_id required, String

Update a particular add-on by specifying the add-on ID.

:never_expires bool

Set a subscription's billing cycle to never expire instead of specifying a number of billing cycles. This will override inherited plan details.

:number_of_billing_cycles Integer

Number of billing cycles to apply the add-on. This will override inherited plan details. Must be greater than 0.

:quantity Integer

How many of this add-on to apply to the subscription. The default is 1.

:billing_day_of_month Integer

The value that specifies the day of the month that the gateway will charge the subscription on every billing cycle. The value of this field must be 1-28 or 31. A value of 31 tells the recurring billing engine to charge the subscription on the last day of the month, regardless of how many days are in the month. Passing a value with this field will override the plan's default settings.

:descriptor

Dynamic descriptors are not enabled on all accounts by default. If you receive a validation error of 92203 or if your dynamic descriptors are not displaying as expected, please contact our Support team.

Dynamic descriptors are sent on a per-transaction basis and define what will appear on your customers' credit card statements for a specific purchase. The clearer the description of your product, the less likely customers will issue chargebacks due to confusion or non-recognition.

See the dynamic descriptor example for additional information.

:name String

The value in the business name field of a customer's statement. The specific length/character requirements for this value depend on your processor. Contact our Support team for assistance.

:phone String

The value in the phone number field of a customer's statement. Phone must be 10-14 characters and can only contain numbers, dashes, parentheses and periods.

:url String

The value in the URL/web address field of a customer's statement. The URL must be 13 characters or shorter.

:discounts

A collection of discounts associated with this subscription. Discount details can only be managed within the Control Panel.

:add Array

Array of discounts to add to the subscription.

Each element contains:
:amount BigDecimal or String

Price of the discount. This will override the inherited discount amount.

:inherited_from_id required, String

Specify a discount ID to apply to the subscription. You cannot duplicate a discount that is inherited from the plan, but you can update the quantity.

:never_expires bool

Set a subscription's billing cycle to never expire instead of specifying a number of billing cycles.

:number_of_billing_cycles String

Number of billing cycles to apply the discount. Must be greater than 0.

:quantity Integer

How many of this discount to apply to the subscription. The default is 1.

:remove Array

Array of discount IDs that are inherited from the plan. IDs specified will be removed from the subscription.

:update Array

Array of discounts that are inherited from the plan.

Each element contains:
:amount BigDecimal or String

Price of the discount. This will override the existing discount amount.

:existing_id required, String

Update a particular discount by specifying the discount ID.

:never_expires bool

Set a subscription's billing cycle to never expire instead of specifying a number of billing cycles. This will override inherited plan details.

:number_of_billing_cycles Integer

Number of billing cycles to apply the discount. This will override inherited plan details. Must be greater than 0.

:quantity Integer

How many of this discount to apply to the subscription. The default is 1.

:first_billing_date Time

The day the subscription starts billing. The field can accept date objects and must be a future date. This will override default plan details. Dates will be interpreted as UTC dates.

:id String

A string value representing a specific subscription in the Vault. Max 36 characters; must be unique within a merchant's Vault; valid characters are letters, numbers, - and _. If not specified on creation, the gateway will generate an alphanumeric ID that can be accessed on the result. The generated IDs will never start with a leading 0 and are case insensitive.

:merchant_account_id String

The merchant account ID used to create the subscription's transactions. Currency is also determined by merchant account ID and it must match the Plan's currency. See the Transaction merchant_account_id parameter for more information.

:never_expires bool

When true, the subscription never expires.

:number_of_billing_cycles Integer

Number of billing cycles the subscription should last.

:options

Optional values that can be passed with a request.

:do_not_inherit_add_ons_or_discounts bool

When true, the plan's add-ons and discounts are ignored for this subscription.

:paypal

PayPal-specific options.

:description String

The description of the transaction that is displayed to customers in email receipts from PayPal. 127 character maximum.

:start_immediately bool

This option overrides a plan's details and starts the subscription immediately.

:payment_method_nonce String

One-time-use reference to a payment method provided by your customer, such as a credit card or PayPal account.

A payment method must be vaulted before you can associate it with a subscription, so it's usually simplest to refer to the payment method using its payment_method_token. However, there are 2 cases where you can pass a payment method nonce instead of a payment method token:

  • If the nonce was generated by our Drop-in UI and you passed a customer_id when generating the client token, or
  • If the nonce was generated from a vaulted payment method belonging to the customer that will own the subscription
:payment_method_token required, String

An alphanumeric value that references a specific payment method stored in your Vault. It is required when creating a subscription unless you pass a payment_method_nonce instead, which can be done under certain circumstances.

:plan_id required, String

The plan identifier. Values can use only letters, numbers, -, and _. Plans must be created in the Control Panel.

:price BigDecimal or String

The price specified for a subscription. Billing price must be formatted like 10 or 10.00. If you provide a price, it can't be an empty string and cannot be greater than the maximum allowed by the processor (contact our Support team for your specific limit). If you omit the price, the subscription will inherit the price from the plan.

:trial_duration Integer

The trial timeframe specified in a plan. Specifying a trial duration via the API will override the subscription's plan details. It is required if trial period is set to true and must be 1-3 digits. If you specify a trial duration of 0, the gateway will start the subscription immediately and not consider it to include a trial period.

:trial_duration_unit String

The trial unit specified in a plan. Specify day or month. Specifying a trial duration unit via the API will override the subscription's plan details.

:trial_period bool

A value indicating whether a subscription should begin with a trial period. Specifying a trial period via the API will override the subscription's plan details.

Examples

Specify merchant account

If you have multiple merchant accounts, you can pass the merchant account ID to specify which merchant account to use to process transactions for the subscription. If a merchant account ID is not passed, we'll use your default merchant account. Just like when specifying merchant account for transactions, the merchant account will determine the currency for the subscription.

Ruby
Click to copy
Copied
result = Braintree::Subscription.create(
  :payment_method_token => "the_token",
  :plan_id => "silver_plan",
  :merchant_account_id => "gbp_account"
)

Override plan details

When creating the subscription, you can modify the default behavior in three ways:

  • New add-ons/discounts can be added to the subscription.
  • Add-ons/discounts that would be inherited from the plan can be updated on the subscription.
  • Add-ons/discounts that would be inherited from the plan can be removed from the subscription.
Ruby
Click to copy
Copied
result = Braintree::Subscription.create(
  :payment_method_token => "the_token",
  :plan_id => "the_plan_id",
  :add_ons => {
    :add => [
      {
        :inherited_from_id => "add_on_id_1",
        :amount => BigDecimal.new("20.00")
      },
      {
        :inherited_from_id => "add_on_id_2",
        :amount => BigDecimal.new("30.00")
      }
    ],
    :update => [
      {
        :existing_id => "add_on_id_3",
        :quantity => 2
      },
      {
        :existing_id => "add_on_id_4",
        :quantity => 3
      }
    ],
    :remove => ["add_on_id_5", "add_on_id_6"]
  }
)

When adding add-ons/discounts to a subscription, all details will be inherited from the add-on/discount specified by the inherited_from_id. When updating add-ons/discounts, all details will be inherited from the add-on/discount specified by the existing_id. You can override any of the following:

  • amount
  • number_of_billing_cycles or never_expires
  • quantity
Ruby
Click to copy
Copied
result = Braintree::Subscription.create(
  :payment_method_token => "the_token",
  :plan_id => "the_plan_id",
  :add_ons => {
    :add => [
      {
        :inherited_from_id => "add_on_id_1",
        :amount => BigDecimal.new("20.00"),
        :number_of_billing_cycles => 2,
        :quantity => 4
      }
    ],
    :update => [
      {
        :existing_id => "add_on_id_2",
        :amount => BigDecimal.new("15.00"),
        :never_expires => true,
        :quantity => 3
      }
    ]
  }
)
note

You can only add an add-on or discount to a subscription once. If you'd like to apply an add-on or discount to a subscription several times, you can pass quantity when creating or updating the add-on/discount.

Override trial details

Ruby
Click to copy
Copied
result = Braintree::Subscription.create(
  :payment_method_token => "the_token",
  :plan_id => "silver_plan",
  :trial_period => true,
  :trial_duration => 3,
  :trial_duration_unit => "month"
)
  • If you specify a trial_duration of 0, we will start the subscription immediately and not consider it in a trial period.
  • Valid values for trial_duration_unit are day and month.
  • You can disable the trial period (if the plan has one) by passing trial_period as false.

Set start date

You can override the start date from the plan in three different ways:

  • Set first_billing_date to a specific date.
  • Set billing_day_of_month.
  • Set the option start_immediately, which overrides any plan start date and starts the subscription immediately.
important

Passing in more than one of these fields will result in a validation error.

Ruby
Click to copy
Copied
result = Braintree::Subscription.create(
  :payment_method_token => "the_token",
  :plan_id => "silver_plan",
  :first_billing_date => Date.today + 3
)
result.subscription.status
#=> "Pending"
Ruby
Click to copy
Copied
result = Braintree::Subscription.create(
  :payment_method_token => "the_token",
  :plan_id => "silver_plan",
  :billing_day_of_month => 15
)
result.subscription.status
#=> "Pending"

result.subscription.billing_day_of_month
#=> 15
Ruby
Click to copy
Copied
result = Braintree::Subscription.create(
  :payment_method_token => "the_token",
  :plan_id => "silver_plan",
  :options => {
    :start_immediately => true
  }
)
result.subscription.status
#=> "Active"

Dynamic descriptors

Ruby
Click to copy
Copied
result = Braintree::Subscription.create(
  :payment_method_token => "the_token",
  :plan_id => "plan_without_trial",
  :descriptor => {
    :name => "company*my product",
    :phone => "3125551212",
    :url => "company.com",
  }
)

result.subscription.descriptor.name
#=> "company*my product"

result.subscription.descriptor.phone
#=> "3125551212"

transaction = result.subscription.transactions.first
transaction.descriptor.name
#=> "company*my product"

transaction.descriptor.phone
#=> "3125551212"

See also

Still have questions?

If you can’t find an answer, contact our Support team.