diff --git a/lib/recurly.d.ts b/lib/recurly.d.ts index 52c1cd91..687bbd73 100644 --- a/lib/recurly.d.ts +++ b/lib/recurly.d.ts @@ -174,6 +174,10 @@ export declare class Account { * Used to determine the language and locale of emails sent on behalf of the merchant to the customer. */ preferredLocale?: string | null; + /** + * The [IANA time zone name](https://docs.recurly.com/docs/email-time-zones-and-time-stamps#supported-api-iana-time-zone-names) used to determine the time zone of emails sent on behalf of the merchant to the customer. + */ + preferredTimeZone?: string | null; /** * Additional email address that should receive account correspondence. These should be separated only by commas. These CC emails will receive all emails that the `email` field also receives. */ @@ -1142,7 +1146,7 @@ export declare class Invoice { */ subscriptionIds?: string[] | null; /** - * On refund invoices, this value will exist and show the invoice ID of the purchase invoice the refund was created from. + * On refund invoices, this value will exist and show the invoice ID of the purchase invoice the refund was created from. This field is only populated for sites without the [Only Bill What Changed](https://docs.recurly.com/docs/only-bill-what-changed) feature enabled. Sites with Only Bill What Changed enabled should use the [related_invoices endpoint](https://recurly.com/developers/api/v2021-02-25/index.html#operation/list_related_invoices) to see purchase invoices refunded by this invoice. */ previousInvoiceId?: string | null; /** @@ -2029,7 +2033,7 @@ export declare class SubscriptionAddOn { */ tiers?: SubscriptionAddOnTier[] | null; /** - * If percentage tiers are provided in the request, all existing percentage tiers on the Subscription Add-on will be removed and replaced by the percentage tiers in the request. Use only if add_on.tier_type is tiered or volume and add_on.usage_type is percentage. There must be one tier without an `ending_amount` value which represents the final tier. + * If percentage tiers are provided in the request, all existing percentage tiers on the Subscription Add-on will be removed and replaced by the percentage tiers in the request. Use only if add_on.tier_type is tiered or volume and add_on.usage_type is percentage. There must be one tier without an `ending_amount` value which represents the final tier. This feature is currently in development and requires approval and enablement, please contact support. */ percentageTiers?: SubscriptionAddOnPercentageTier[] | null; /** @@ -2822,7 +2826,7 @@ export declare class AddOn { */ tiers?: Tier[] | null; /** - * Percentage Tiers + * This feature is currently in development and requires approval and enablement, please contact support. */ percentageTiers?: PercentageTiersByCurrency[] | null; /** @@ -2987,7 +2991,7 @@ export declare class Usage { */ tiers?: SubscriptionAddOnTier[] | null; /** - * The percentage tiers of the subscription based on the usage_timestamp. If tier_type = flat, percentage_tiers = [] + * The percentage tiers of the subscription based on the usage_timestamp. If tier_type = flat, percentage_tiers = []. This feature is currently in development and requires approval and enablement, please contact support. */ percentageTiers?: SubscriptionAddOnPercentageTier[] | null; /** @@ -3314,6 +3318,10 @@ export interface AccountCreate { * Used to determine the language and locale of emails sent on behalf of the merchant to the customer. The list of locales is restricted to those the merchant has enabled on the site. */ preferredLocale?: string | null; + /** + * Used to determine the time zone of emails sent on behalf of the merchant to the customer. Must be a [supported IANA time zone name](https://docs.recurly.com/docs/email-time-zones-and-time-stamps#supported-api-iana-time-zone-names) + */ + preferredTimeZone?: string | null; /** * Additional email address that should receive account correspondence. These should be separated only by commas. These CC emails will receive all emails that the `email` field also receives. */ @@ -3607,6 +3615,10 @@ export interface AccountUpdate { * Used to determine the language and locale of emails sent on behalf of the merchant to the customer. The list of locales is restricted to those the merchant has enabled on the site. */ preferredLocale?: string | null; + /** + * Used to determine the time zone of emails sent on behalf of the merchant to the customer. Must be a [supported IANA time zone name](https://docs.recurly.com/docs/email-time-zones-and-time-stamps#supported-api-iana-time-zone-names) + */ + preferredTimeZone?: string | null; /** * Additional email address that should receive account correspondence. These should be separated only by commas. These CC emails will receive all emails that the `email` field also receives. */ @@ -4572,7 +4584,7 @@ export interface AddOnCreate { */ tiers?: Tier[] | null; /** - * Array of objects which must have at least one set of tiers per currency and the currency code. The tier_type must be `volume` or `tiered`, if not, it must be absent. There must be one tier without an `ending_amount` value which represents the final tier. + * Array of objects which must have at least one set of tiers per currency and the currency code. The tier_type must be `volume` or `tiered`, if not, it must be absent. There must be one tier without an `ending_amount` value which represents the final tier. This feature is currently in development and requires approval and enablement, please contact support. */ percentageTiers?: PercentageTiersByCurrency[] | null; @@ -4820,7 +4832,7 @@ export interface AddOnUpdate { */ tiers?: Tier[] | null; /** - * `percentage_tiers` is an array of objects, which must have the set of tiers per currency and the currency code. The tier_type must be `volume` or `tiered`, if not, it must be absent. There must be one tier without an `ending_amount` value which represents the final tier. + * `percentage_tiers` is an array of objects, which must have the set of tiers per currency and the currency code. The tier_type must be `volume` or `tiered`, if not, it must be absent. There must be one tier without an `ending_amount` value which represents the final tier. This feature is currently in development and requires approval and enablement, please contact support. */ percentageTiers?: PercentageTiersByCurrency[] | null; @@ -5022,7 +5034,7 @@ export interface SubscriptionAddOnCreate { */ tiers?: SubscriptionAddOnTier[] | null; /** - * If percentage tiers are provided in the request, all existing percentage tiers on the Subscription Add-on will be removed and replaced by the percentage tiers in the request. There must be one tier without ending_amount value which represents the final tier. Use only if add_on.tier_type is tiered or volume and add_on.usage_type is percentage. + * If percentage tiers are provided in the request, all existing percentage tiers on the Subscription Add-on will be removed and replaced by the percentage tiers in the request. There must be one tier without ending_amount value which represents the final tier. Use only if add_on.tier_type is tiered or volume and add_on.usage_type is percentage. This feature is currently in development and requires approval and enablement, please contact support. */ percentageTiers?: SubscriptionAddOnPercentageTier[] | null; /** @@ -5293,7 +5305,7 @@ export interface SubscriptionAddOnUpdate { */ tiers?: SubscriptionAddOnTier[] | null; /** - * If percentage tiers are provided in the request, all existing percentage tiers on the Subscription Add-on will be removed and replaced by the percentage tiers in the request. Use only if add_on.tier_type is tiered or volume and add_on.usage_type is percentage. There must be one tier without an `ending_amount` value which represents the final tier. + * If percentage tiers are provided in the request, all existing percentage tiers on the Subscription Add-on will be removed and replaced by the percentage tiers in the request. Use only if add_on.tier_type is tiered or volume and add_on.usage_type is percentage. There must be one tier without an `ending_amount` value which represents the final tier. This feature is currently in development and requires approval and enablement, please contact support. */ percentageTiers?: SubscriptionAddOnPercentageTier[] | null; /** @@ -5423,6 +5435,10 @@ export interface AccountPurchase { * Used to determine the language and locale of emails sent on behalf of the merchant to the customer. The list of locales is restricted to those the merchant has enabled on the site. */ preferredLocale?: string | null; + /** + * Used to determine the time zone of emails sent on behalf of the merchant to the customer. Must be a [supported IANA time zone name](https://docs.recurly.com/docs/email-time-zones-and-time-stamps#supported-api-iana-time-zone-names) + */ + preferredTimeZone?: string | null; /** * Additional email address that should receive account correspondence. These should be separated only by commas. These CC emails will receive all emails that the `email` field also receives. */ @@ -7666,6 +7682,21 @@ endpoint to obtain only the newly generated `UniqueCouponCodes`. * * API docs: https://developers.recurly.com/api/v2021-02-25#operation/apply_credit_balance * + * @example + * try { + * const invoice = await client.applyCreditBalance(invoiceId) + * console.log('Applied credit balance to invoice: ', invoice) + * } catch (err) { + * if (err instanceof recurly.errors.ValidationError) { + * // If the request was not valid, you may want to tell your user + * // why. You can find the invalid params and reasons in err.params + * console.log('Failed validation', err.params) + * } else { + * // If we don't know what to do with the err, we should + * // probably re-raise and let our web framework and logger handle it + * console.log('Unknown Error: ', err) + * } + * } * * @param {string} invoiceId - Invoice ID or number. For ID no prefix is used e.g. `e28zov4fw0v2`. For number use prefix `number-`, e.g. `number-1000`. * @return {Promise} The updated invoice. diff --git a/lib/recurly/Client.js b/lib/recurly/Client.js index 49015ef2..edcd0ffe 100644 --- a/lib/recurly/Client.js +++ b/lib/recurly/Client.js @@ -2458,6 +2458,21 @@ endpoint to obtain only the newly generated `UniqueCouponCodes`. * * API docs: {@link https://developers.recurly.com/api/v2021-02-25#operation/apply_credit_balance} * + * @example + * try { + * const invoice = await client.applyCreditBalance(invoiceId) + * console.log('Applied credit balance to invoice: ', invoice) + * } catch (err) { + * if (err instanceof recurly.errors.ValidationError) { + * // If the request was not valid, you may want to tell your user + * // why. You can find the invalid params and reasons in err.params + * console.log('Failed validation', err.params) + * } else { + * // If we don't know what to do with the err, we should + * // probably re-raise and let our web framework and logger handle it + * console.log('Unknown Error: ', err) + * } + * } * * @param {string} invoiceId - Invoice ID or number. For ID no prefix is used e.g. `e28zov4fw0v2`. For number use prefix `number-`, e.g. `number-1000`. * @return {Promise} The updated invoice. diff --git a/lib/recurly/resources/Account.js b/lib/recurly/resources/Account.js index 70fd61b2..881e1d39 100644 --- a/lib/recurly/resources/Account.js +++ b/lib/recurly/resources/Account.js @@ -38,6 +38,7 @@ const Resource = require('../Resource') * @prop {string} object - Object type * @prop {string} parentAccountId - The UUID of the parent account associated with this account. * @prop {string} preferredLocale - Used to determine the language and locale of emails sent on behalf of the merchant to the customer. + * @prop {string} preferredTimeZone - The [IANA time zone name](https://docs.recurly.com/docs/email-time-zones-and-time-stamps#supported-api-iana-time-zone-names) used to determine the time zone of emails sent on behalf of the merchant to the customer. * @prop {Array.} shippingAddresses - The shipping addresses on the account. * @prop {string} state - Accounts can be either active or inactive. * @prop {boolean} taxExempt - The tax status of the account. `true` exempts tax on the account, `false` applies tax on the account. @@ -74,6 +75,7 @@ class Account extends Resource { object: String, parentAccountId: String, preferredLocale: String, + preferredTimeZone: String, shippingAddresses: ['ShippingAddress'], state: String, taxExempt: Boolean, diff --git a/lib/recurly/resources/AddOn.js b/lib/recurly/resources/AddOn.js index 4075f910..7a27879a 100644 --- a/lib/recurly/resources/AddOn.js +++ b/lib/recurly/resources/AddOn.js @@ -29,7 +29,7 @@ const Resource = require('../Resource') * @prop {string} name - Describes your add-on and will appear in subscribers' invoices. * @prop {string} object - Object type * @prop {boolean} optional - Whether the add-on is optional for the customer to include in their purchase on the hosted payment page. If false, the add-on will be included when a subscription is created through the Recurly UI. However, the add-on will not be included when a subscription is created through the API. - * @prop {Array.} percentageTiers - Percentage Tiers + * @prop {Array.} percentageTiers - This feature is currently in development and requires approval and enablement, please contact support. * @prop {string} planId - Plan ID * @prop {string} revenueScheduleType - When this add-on is invoiced, the line item will use this revenue schedule. If `item_code`/`item_id` is part of the request then `revenue_schedule_type` must be absent in the request as the value will be set from the item. * @prop {string} state - Add-ons can be either active or inactive. diff --git a/lib/recurly/resources/Invoice.js b/lib/recurly/resources/Invoice.js index 4fc6133f..74581f78 100644 --- a/lib/recurly/resources/Invoice.js +++ b/lib/recurly/resources/Invoice.js @@ -36,7 +36,7 @@ const Resource = require('../Resource') * @prop {string} origin - The event that created the invoice. * @prop {number} paid - The total amount of successful payments transaction on this invoice. * @prop {string} poNumber - For manual invoicing, this identifies the PO number associated with the subscription. - * @prop {string} previousInvoiceId - On refund invoices, this value will exist and show the invoice ID of the purchase invoice the refund was created from. + * @prop {string} previousInvoiceId - On refund invoices, this value will exist and show the invoice ID of the purchase invoice the refund was created from. This field is only populated for sites without the [Only Bill What Changed](https://docs.recurly.com/docs/only-bill-what-changed) feature enabled. Sites with Only Bill What Changed enabled should use the [related_invoices endpoint](https://recurly.com/developers/api/v2021-02-25/index.html#operation/list_related_invoices) to see purchase invoices refunded by this invoice. * @prop {number} refundableAmount - The refundable amount on a charge invoice. It will be null for all other invoices. * @prop {ShippingAddress} shippingAddress * @prop {string} state - Invoice state diff --git a/lib/recurly/resources/SubscriptionAddOn.js b/lib/recurly/resources/SubscriptionAddOn.js index 7eed42b3..922538b6 100644 --- a/lib/recurly/resources/SubscriptionAddOn.js +++ b/lib/recurly/resources/SubscriptionAddOn.js @@ -18,7 +18,7 @@ const Resource = require('../Resource') * @prop {Date} expiredAt - Expired at * @prop {string} id - Subscription Add-on ID * @prop {string} object - Object type - * @prop {Array.} percentageTiers - If percentage tiers are provided in the request, all existing percentage tiers on the Subscription Add-on will be removed and replaced by the percentage tiers in the request. Use only if add_on.tier_type is tiered or volume and add_on.usage_type is percentage. There must be one tier without an `ending_amount` value which represents the final tier. + * @prop {Array.} percentageTiers - If percentage tiers are provided in the request, all existing percentage tiers on the Subscription Add-on will be removed and replaced by the percentage tiers in the request. Use only if add_on.tier_type is tiered or volume and add_on.usage_type is percentage. There must be one tier without an `ending_amount` value which represents the final tier. This feature is currently in development and requires approval and enablement, please contact support. * @prop {number} quantity - Add-on quantity * @prop {string} revenueScheduleType - Revenue schedule type * @prop {string} subscriptionId - Subscription ID diff --git a/lib/recurly/resources/Usage.js b/lib/recurly/resources/Usage.js index a990cff4..5a76a1f6 100644 --- a/lib/recurly/resources/Usage.js +++ b/lib/recurly/resources/Usage.js @@ -19,7 +19,7 @@ const Resource = require('../Resource') * @prop {string} measuredUnitId - The ID of the measured unit associated with the add-on the usage record is for. * @prop {string} merchantTag - Custom field for recording the id in your own system associated with the usage, so you can provide auditable usage displays to your customers using a GET on this endpoint. * @prop {string} object - Object type - * @prop {Array.} percentageTiers - The percentage tiers of the subscription based on the usage_timestamp. If tier_type = flat, percentage_tiers = [] + * @prop {Array.} percentageTiers - The percentage tiers of the subscription based on the usage_timestamp. If tier_type = flat, percentage_tiers = []. This feature is currently in development and requires approval and enablement, please contact support. * @prop {Date} recordingTimestamp - When the usage was recorded in your system. * @prop {string} tierType - The pricing model for the add-on. For more information, [click here](https://docs.recurly.com/docs/billing-models#section-quantity-based). See our [Guide](https://recurly.com/developers/guides/item-addon-guide.html) for an overview of how to configure quantity-based pricing models. * @prop {Array.} tiers - The tiers and prices of the subscription based on the usage_timestamp. If tier_type = flat, tiers = [] diff --git a/openapi/api.yaml b/openapi/api.yaml index bd3d8a0a..f0bb176f 100644 --- a/openapi/api.yaml +++ b/openapi/api.yaml @@ -343,13 +343,13 @@ tags: - name: external_subscriptions x-displayName: External Subscription description: A subscription from an external resource that is not managed by the - Recurly platform and instead is managed by third-party platforms like Apple Store - and Google Play. + Recurly platform and instead is managed by third-party platforms like Apple App + Store and Google Play Store. - name: external_products x-displayName: External Product description: A product from an external resource that is not managed by the Recurly - platform and instead is managed by third-party platforms like Apple Store and - Google Play. + platform and instead is managed by third-party platforms like Apple App Store + and Google Play Store. paths: "/sites": get: @@ -8092,6 +8092,8 @@ paths: summary: Apply available credit to a pending or past due charge invoice description: Apply credit payment to the outstanding balance on an existing charge invoice from an account’s available balance from existing credit invoices. + Credit that was refunded from the invoice cannot be applied back to the invoice + as payment. parameters: - "$ref": "#/components/parameters/site_id" - "$ref": "#/components/parameters/invoice_id" @@ -8110,7 +8112,8 @@ paths: "$ref": "#/components/schemas/Error" '422': description: Tried applying credit to a legacy or closed invoice or there - was an error processing the credit payment. + was an error processing the credit payment, such as no available credit + on the account. content: application/json: schema: @@ -8121,7 +8124,95 @@ paths: application/json: schema: "$ref": "#/components/schemas/Error" - x-code-samples: [] + x-code-samples: + - lang: Node.js + source: | + try { + const invoice = await client.applyCreditBalance(invoiceId) + console.log('Applied credit balance to invoice: ', invoice) + } catch (err) { + if (err instanceof recurly.errors.ValidationError) { + // If the request was not valid, you may want to tell your user + // why. You can find the invalid params and reasons in err.params + console.log('Failed validation', err.params) + } else { + // If we don't know what to do with the err, we should + // probably re-raise and let our web framework and logger handle it + console.log('Unknown Error: ', err) + } + } + - lang: Python + source: | + try: + invoice = client.apply_credit_balance(invoice_id) + print("Applied credit balance to invoice %s" % invoice.id) + except recurly.errors.NotFoundError: + # If the resource was not found, you may want to alert the user or + # just return nil + print("Resource Not Found") + - lang: ".NET" + source: | + try + { + Invoice invoice = client.ApplyCreditBalance(invoiceId); + Console.WriteLine($"Applied credit balance to invoice #{invoice.Number}"); + } + catch (Recurly.Errors.Validation ex) + { + // If the request was not valid, you may want to tell your user + // why. You can find the invalid params and reasons in ex.Error.Params + Console.WriteLine($"Failed validation: {ex.Error.Message}"); + } + catch (Recurly.Errors.ApiError ex) + { + // Use ApiError to catch a generic error from the API + Console.WriteLine($"Unexpected Recurly Error: {ex.Error.Message}"); + } + - lang: Ruby + source: | + begin + invoice = @client.apply_credit_balance(invoice_id: invoice_id) + puts "Applied credit balance to invoice #{invoice}" + rescue Recurly::Errors::NotFoundError + # If the resource was not found, you may want to alert the user or + # just return nil + puts "Resource Not Found" + end + - lang: Java + source: | + try { + final Invoice invoice = client.applyCreditBalance(invoiceId); + System.out.println("Applied credit balance to invoice " + invoice.getId()); + } catch (final ValidationException e) { + // If the request was not valid, you may want to tell your user + // why. You can find the invalid params and reasons in e.getError().getParams() + System.out.println("Failed validation: " + e.getError().getMessage()); + } catch (final ApiException e) { + // Use ApiException to catch a generic error from the API + System.out.println("Unexpected Recurly Error: " + e.getError().getMessage()); + } + - lang: PHP + source: | + try { + $invoice = $client->applyCreditBalance($invoice_id); + + echo 'Applied credit balance to invoice:' . PHP_EOL; + var_dump($invoice); + } catch (\Recurly\Errors\Validation $e) { + // If the request was not valid, you may want to tell your user + // why. You can find the invalid params and reasons in err.params + var_dump($e); + } catch (\Recurly\RecurlyError $e) { + // If we don't know what to do with the err, we should + // probably re-raise and let our web framework and logger handle it + var_dump($e); + } + - lang: Go + source: "invoice, err := client.ApplyCreditBalance(invoiceID)\nif e, ok := + err.(*recurly.Error); ok {\n\tif e.Type == recurly.ErrorTypeValidation {\n\t\tfmt.Printf(\"Failed + validation: %v\", e)\n\t\treturn nil, err\n\t}\n\tfmt.Printf(\"Unexpected + Recurly error: %v\", e)\n\treturn nil, err\n}\n\nfmt.Printf(\"Applied credit + balance to invoice: %v\", invoice)" "/invoices/{invoice_id}/collect": put: tags: @@ -16177,6 +16268,11 @@ components: behalf of the merchant to the customer. The list of locales is restricted to those the merchant has enabled on the site. "$ref": "#/components/schemas/PreferredLocaleEnum" + preferred_time_zone: + type: string + example: America/Los_Angeles + description: Used to determine the time zone of emails sent on behalf of + the merchant to the customer. Must be a [supported IANA time zone name](https://docs.recurly.com/docs/email-time-zones-and-time-stamps#supported-api-iana-time-zone-names) cc_emails: type: string description: Additional email address that should receive account correspondence. @@ -16279,6 +16375,12 @@ components: description: Used to determine the language and locale of emails sent on behalf of the merchant to the customer. "$ref": "#/components/schemas/PreferredLocaleEnum" + preferred_time_zone: + type: string + example: America/Los_Angeles + description: The [IANA time zone name](https://docs.recurly.com/docs/email-time-zones-and-time-stamps#supported-api-iana-time-zone-names) + used to determine the time zone of emails sent on behalf of the merchant + to the customer. cc_emails: type: string description: Additional email address that should receive account correspondence. @@ -16684,6 +16786,8 @@ components: percentage_tiers: type: array title: Percentage Tiers + description: This feature is currently in development and requires approval + and enablement, please contact support. items: "$ref": "#/components/schemas/PercentageTiersByCurrency" external_sku: @@ -16877,7 +16981,8 @@ components: Array of objects which must have at least one set of tiers per currency and the currency code. The tier_type must be `volume` or `tiered`, if not, it must be absent. There must be one tier without an `ending_amount` value - which represents the final tier. + which represents the final tier. This feature is currently in development and + requires approval and enablement, please contact support. required: - code - name @@ -17018,7 +17123,8 @@ components: `percentage_tiers` is an array of objects, which must have the set of tiers per currency and the currency code. The tier_type must be `volume` or `tiered`, if not, it must be absent. There must be one tier without an `ending_amount` value - which represents the final tier. + which represents the final tier. This feature is currently in development and + requires approval and enablement, please contact support. BillingInfo: type: object properties: @@ -18256,7 +18362,11 @@ components: type: string title: Previous invoice ID description: On refund invoices, this value will exist and show the invoice - ID of the purchase invoice the refund was created from. + ID of the purchase invoice the refund was created from. This field is + only populated for sites without the [Only Bill What Changed](https://docs.recurly.com/docs/only-bill-what-changed) + feature enabled. Sites with Only Bill What Changed enabled should use + the [related_invoices endpoint](https://recurly.com/developers/api/v2021-02-25/index.html#operation/list_related_invoices) + to see purchase invoices refunded by this invoice. maxLength: 13 number: type: string @@ -20662,8 +20772,8 @@ components: description: | If percentage tiers are provided in the request, all existing percentage tiers on the Subscription Add-on will be removed and replaced by the percentage tiers in the request. Use only if add_on.tier_type is tiered or volume and - add_on.usage_type is percentage. - There must be one tier without an `ending_amount` value which represents the final tier. + add_on.usage_type is percentage. There must be one tier without an `ending_amount` value which represents the final tier. + This feature is currently in development and requires approval and enablement, please contact support. usage_percentage: type: number format: float @@ -20740,8 +20850,9 @@ components: minItems: 1 description: | If percentage tiers are provided in the request, all existing percentage tiers on the Subscription Add-on will be - removed and replaced by the percentage tiers in the request. There must be one tier without ending_amount value which represents the final tier. - Use only if add_on.tier_type is tiered or volume and add_on.usage_type is percentage. + removed and replaced by the percentage tiers in the request. There must be one tier without ending_amount value + which represents the final tier. Use only if add_on.tier_type is tiered or volume and add_on.usage_type is + percentage. This feature is currently in development and requires approval and enablement, please contact support. usage_percentage: type: number format: float @@ -20820,8 +20931,8 @@ components: description: | If percentage tiers are provided in the request, all existing percentage tiers on the Subscription Add-on will be removed and replaced by the percentage tiers in the request. Use only if add_on.tier_type is tiered or volume and - add_on.usage_type is percentage. - There must be one tier without an `ending_amount` value which represents the final tier. + add_on.usage_type is percentage. There must be one tier without an `ending_amount` value which represents the + final tier. This feature is currently in development and requires approval and enablement, please contact support. usage_percentage: type: number format: float @@ -22002,7 +22113,8 @@ components: items: "$ref": "#/components/schemas/SubscriptionAddOnPercentageTier" description: The percentage tiers of the subscription based on the usage_timestamp. - If tier_type = flat, percentage_tiers = [] + If tier_type = flat, percentage_tiers = []. This feature is currently + in development and requires approval and enablement, please contact support. measured_unit_id: type: string description: The ID of the measured unit associated with the add-on the @@ -22416,7 +22528,8 @@ components: description: Time the object was last updated ExternalProduct: type: object - description: Product from an external resource such as Apple App or Google Play. + description: Product from an external resource such as Apple App Store or Google + Play Store. properties: id: type: string @@ -22496,8 +22609,8 @@ components: description: When the external product was updated in Recurly. ExternalSubscription: type: object - description: Subscription from an external resource such as Apple App or Google - Play. + description: Subscription from an external resource such as Apple App Store + or Google Play Store. properties: id: type: string