braintree · Schema

Braintree Subscription

Represents a recurring billing subscription that automatically charges a customer's vaulted payment method on a schedule defined by a billing plan. Subscriptions support configurable trial periods, add-ons and discounts, and mid-cycle proration. Status changes are communicated through webhook notifications.

Properties

Name Type Description
id string Unique identifier for the subscription. Auto-generated by Braintree if not specified at creation.
plan_id string Identifier of the billing plan this subscription is based on. Must match a plan configured in the Braintree Control Panel.
status string The current lifecycle status of the subscription.
price string The amount charged per billing cycle as a decimal string. May override the plan's base price.
merchant_account_id string Identifier of the Braintree merchant account used to process this subscription's charges.
payment_method_token string Token of the vaulted payment method charged each billing cycle.
current_billing_cycle integer The current billing cycle number, starting at 1 on the first charge.
number_of_billing_cycles integernull Total number of billing cycles before the subscription expires. Null if the subscription never expires.
never_expires boolean If true, this subscription continues indefinitely regardless of the plan's number_of_billing_cycles setting.
trial_period boolean Whether this subscription includes a trial period before the first charge.
trial_duration integernull Duration of the trial period, measured in units specified by trial_duration_unit.
trial_duration_unit stringnull Unit for the trial duration.
first_billing_date string Date of the first billing charge. Subscriptions created with this date begin in Pending status until the date arrives.
next_billing_date string Date of the next scheduled billing charge.
next_billing_amount string Amount that will be charged on the next billing date, including applied add-ons and discounts.
paid_through_date string The date through which the subscription has been paid. The next billing date is typically the day after this date.
billing_day_of_month integer Day of the month on which recurring charges occur. Valid values are 1–28 or 31 (31 means the last day of the month).
failure_count integer Number of consecutive failed billing attempts for the current billing cycle.
add_ons array Add-ons currently applied to this subscription that increase the billing amount.
discounts array Discounts currently applied to this subscription that decrease the billing amount.
transactions array The most recent transactions associated with this subscription, up to 20.
descriptor object Dynamic descriptor fields for this subscription's charges on the customer's statement.
created_at string Timestamp when the subscription was created, in ISO 8601 format.
updated_at string Timestamp when the subscription was last updated, in ISO 8601 format.
View JSON Schema on GitHub

JSON Schema

braintree-subscription-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://api-evangelist.github.io/braintree/schemas/subscription.json",
  "title": "Braintree Subscription",
  "description": "Represents a recurring billing subscription that automatically charges a customer's vaulted payment method on a schedule defined by a billing plan. Subscriptions support configurable trial periods, add-ons and discounts, and mid-cycle proration. Status changes are communicated through webhook notifications.",
  "type": "object",
  "required": ["id", "plan_id", "status"],
  "properties": {
    "id": {
      "type": "string",
      "description": "Unique identifier for the subscription. Auto-generated by Braintree if not specified at creation.",
      "maxLength": 36
    },
    "plan_id": {
      "type": "string",
      "description": "Identifier of the billing plan this subscription is based on. Must match a plan configured in the Braintree Control Panel."
    },
    "status": {
      "type": "string",
      "description": "The current lifecycle status of the subscription.",
      "enum": ["Active", "Canceled", "Expired", "Past Due", "Pending"]
    },
    "price": {
      "type": "string",
      "description": "The amount charged per billing cycle as a decimal string. May override the plan's base price.",
      "pattern": "^\\d+\\.\\d{2}$",
      "example": "9.99"
    },
    "merchant_account_id": {
      "type": "string",
      "description": "Identifier of the Braintree merchant account used to process this subscription's charges."
    },
    "payment_method_token": {
      "type": "string",
      "description": "Token of the vaulted payment method charged each billing cycle.",
      "maxLength": 36
    },
    "current_billing_cycle": {
      "type": "integer",
      "description": "The current billing cycle number, starting at 1 on the first charge.",
      "minimum": 1
    },
    "number_of_billing_cycles": {
      "type": ["integer", "null"],
      "description": "Total number of billing cycles before the subscription expires. Null if the subscription never expires.",
      "minimum": 1
    },
    "never_expires": {
      "type": "boolean",
      "description": "If true, this subscription continues indefinitely regardless of the plan's number_of_billing_cycles setting."
    },
    "trial_period": {
      "type": "boolean",
      "description": "Whether this subscription includes a trial period before the first charge."
    },
    "trial_duration": {
      "type": ["integer", "null"],
      "description": "Duration of the trial period, measured in units specified by trial_duration_unit.",
      "minimum": 1
    },
    "trial_duration_unit": {
      "type": ["string", "null"],
      "description": "Unit for the trial duration.",
      "enum": ["day", "month", null]
    },
    "first_billing_date": {
      "type": "string",
      "format": "date",
      "description": "Date of the first billing charge. Subscriptions created with this date begin in Pending status until the date arrives."
    },
    "next_billing_date": {
      "type": "string",
      "format": "date",
      "description": "Date of the next scheduled billing charge."
    },
    "next_billing_amount": {
      "type": "string",
      "description": "Amount that will be charged on the next billing date, including applied add-ons and discounts.",
      "pattern": "^\\d+\\.\\d{2}$"
    },
    "paid_through_date": {
      "type": "string",
      "format": "date",
      "description": "The date through which the subscription has been paid. The next billing date is typically the day after this date."
    },
    "billing_day_of_month": {
      "type": "integer",
      "description": "Day of the month on which recurring charges occur. Valid values are 1–28 or 31 (31 means the last day of the month).",
      "minimum": 1,
      "maximum": 31
    },
    "failure_count": {
      "type": "integer",
      "description": "Number of consecutive failed billing attempts for the current billing cycle.",
      "minimum": 0
    },
    "add_ons": {
      "type": "array",
      "description": "Add-ons currently applied to this subscription that increase the billing amount.",
      "items": {
        "$ref": "#/$defs/AppliedModification"
      }
    },
    "discounts": {
      "type": "array",
      "description": "Discounts currently applied to this subscription that decrease the billing amount.",
      "items": {
        "$ref": "#/$defs/AppliedModification"
      }
    },
    "transactions": {
      "type": "array",
      "description": "The most recent transactions associated with this subscription, up to 20.",
      "maxItems": 20,
      "items": {
        "$ref": "#/$defs/TransactionSummary"
      }
    },
    "descriptor": {
      "$ref": "#/$defs/Descriptor",
      "description": "Dynamic descriptor fields for this subscription's charges on the customer's statement."
    },
    "created_at": {
      "type": "string",
      "format": "date-time",
      "description": "Timestamp when the subscription was created, in ISO 8601 format."
    },
    "updated_at": {
      "type": "string",
      "format": "date-time",
      "description": "Timestamp when the subscription was last updated, in ISO 8601 format."
    }
  },
  "$defs": {
    "AppliedModification": {
      "type": "object",
      "description": "An add-on or discount currently applied to a subscription, with its effective amount and billing cycle scope.",
      "required": ["id"],
      "properties": {
        "id": {
          "type": "string",
          "description": "Identifier matching the base add-on or discount definition in the Braintree Control Panel."
        },
        "name": {
          "type": "string",
          "description": "Human-readable name for this modification."
        },
        "description": {
          "type": "string",
          "description": "Description of what this add-on or discount represents."
        },
        "amount": {
          "type": "string",
          "description": "Amount applied per billing cycle as a decimal string.",
          "pattern": "^\\d+\\.\\d{2}$",
          "example": "1.00"
        },
        "never_expires": {
          "type": "boolean",
          "description": "If true, this modification continues indefinitely."
        },
        "number_of_billing_cycles": {
          "type": ["integer", "null"],
          "description": "Total number of billing cycles this modification applies. Null if it never expires.",
          "minimum": 1
        },
        "current_billing_cycle": {
          "type": "integer",
          "description": "The billing cycle on which this modification began, used to track remaining cycles.",
          "minimum": 1
        },
        "quantity": {
          "type": "integer",
          "description": "Number of times this add-on amount is applied per billing cycle.",
          "minimum": 1
        }
      }
    },
    "TransactionSummary": {
      "type": "object",
      "description": "A brief summary of a transaction associated with a subscription.",
      "required": ["id"],
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique transaction identifier."
        },
        "amount": {
          "type": "string",
          "description": "Transaction amount as a decimal string.",
          "pattern": "^\\d+\\.\\d{2}$"
        },
        "status": {
          "type": "string",
          "description": "Current status of this transaction.",
          "enum": [
            "authorization_expired",
            "authorized",
            "authorizing",
            "settlement_confirmed",
            "settlement_declined",
            "settlement_pending",
            "settled",
            "settling",
            "submitted_for_settlement",
            "voided",
            "processor_declined",
            "failed",
            "gateway_rejected"
          ]
        },
        "subscription_id": {
          "type": "string",
          "description": "Identifier of the subscription this transaction belongs to."
        },
        "created_at": {
          "type": "string",
          "format": "date-time",
          "description": "Timestamp when this transaction was created."
        }
      }
    },
    "Descriptor": {
      "type": "object",
      "description": "Dynamic descriptor fields that appear on the cardholder's bank or credit card statement to identify the charge.",
      "properties": {
        "name": {
          "type": "string",
          "description": "Merchant name as it appears on the customer's statement.",
          "maxLength": 22
        },
        "phone": {
          "type": "string",
          "description": "Merchant phone number as it appears on the customer's statement.",
          "maxLength": 14,
          "pattern": "^\\d{10,14}$"
        },
        "url": {
          "type": "string",
          "description": "Merchant URL as it appears on the customer's statement.",
          "maxLength": 13
        }
      }
    }
  }
}