Update Subscription
Updates one or more attributes of a subscription.
Update Subscription Payment Method
Change the card that your subscriber uses for their subscription. You can also use this method to change the expiration date of the card if your gateway allows.
Do not use real card information for testing. See the Sites articles that cover testing your site setup for more details on testing in your sandbox.
Note that collecting and sending raw card details in production requires PCI compliance on your end. If your business is not PCI compliant, use Chargify.js to collect credit card or bank account information.
Note: Partial card updates for Authorize.Net are not allowed via this endpoint. The existing Payment Profile must be directly updated instead.
Update Product
You also use this method to change the subscription to a different product by setting a new value for product_handle. A product change can be done in two different ways, product change or delayed product change.
Product Change
You can change a subscription's product. The new payment amount is calculated and charged at the normal start of the next period. If you require complex product changes or prorated upgrades and downgrades instead, please see the documentation on Migrating Subscription Products.
To perform a product change, set either the product_handle or product_id attribute to that of a different product from the same site as the subscription. You can also change the price point by passing in either product_price_point_id or product_price_point_handle - otherwise the new product's default price point is used.
Delayed Product Change
This method also changes the product and/or price point, and the new payment amount is calculated and charged at the normal start of the next period.
This method schedules the product change to happen automatically at the subscription’s next renewal date. To perform a delayed product change, set the product_handle attribute as you would in a regular product change, but also set the product_change_delayed attribute to true. No proration applies in this case.
You can also perform a delayed change to the price point by passing in either product_price_point_id or product_price_point_handle
Note: To cancel a delayed product change, set
next_product_idto an empty string.
Billing Date Changes
You can update dates for a subscription.
Regular Billing Date Changes
Send the next_billing_at to set the next billing date for the subscription. After that date passes and the subscription is processed, the following billing date will be set according to the subscription's product period.
Note: If you pass an invalid date, the correct date is automatically set to the correct date. For example, if February 30 is passed, the next billing would be set to March 2nd in a non-leap year.
The server response will not return data under the key/value pair of next_billing_at. View the key/value pair of current_period_ends_at to verify that the next_billing_at date has been changed successfully.
Calendar Billing and Snap Day Changes
For a subscription using Calendar Billing, setting the next billing date is a bit different. Send the snap_day attribute to change the calendar billing date for a subscription using a product eligible for calendar billing.
Note: If you change the product associated with a subscription that contains a
snap_dayand immediately READ/GET the subscription data, it will still contain the originalsnap_day. Thesnap_daywill be reset tonullon the next billing cycle. This is because a product change is instantaneous and only affects the product associated with a subscription.
If you have the new Catalog experience enabled, some subscriptions may not have an associated product. For subscriptions without an associated product, product, product_price_point_id, and product_price_point_type are returned as null.
Authorization
BasicAuth The username is a Maxio Chargify API key. The password is x.
In: header
Path Parameters
The Chargify id of the subscription.
Request Body
application/json
Response Body
application/json
application/json
curl -X PUT "https://example.com/subscriptions/0.json" \ -H "Content-Type: application/json" \ -d '{ "subscription": { "payment_collection_method": "remittance", "next_billing_at": "2010-08-06T15:34:00Z" } }'{ "subscription": { "id": 18220670, "state": "active", "trial_started_at": null, "trial_ended_at": null, "activated_at": "2017-06-27T13:45:15-05:00", "created_at": "2017-06-27T13:45:13-05:00", "updated_at": "2017-06-30T09:26:50-05:00", "expires_at": null, "balance_in_cents": 10000, "current_period_ends_at": "2017-06-30T12:00:00-05:00", "next_assessment_at": "2017-06-30T12:00:00-05:00", "canceled_at": null, "cancellation_message": null, "next_product_id": null, "cancel_at_end_of_period": false, "payment_collection_method": "automatic", "snap_day": "end", "cancellation_method": null, "current_period_started_at": "2017-06-27T13:45:13-05:00", "previous_state": "active", "signup_payment_id": 191819284, "signup_revenue": "0.00", "delayed_cancel_at": null, "coupon_code": null, "total_revenue_in_cents": 0, "product_price_in_cents": 0, "product_version_number": 1, "payment_type": null, "referral_code": "d3pw7f", "coupon_use_count": null, "coupon_uses_allowed": null, "reason_code": null, "automatically_resume_at": null, "current_billing_amount_in_cents": 10000, "receives_invoice_emails": false, "customer": { "id": 17780587, "first_name": "Catie", "last_name": "Test", "organization": "Acme, Inc.", "email": "catie@example.com", "created_at": "2017-06-27T13:01:05-05:00", "updated_at": "2017-06-30T09:23:10-05:00", "reference": "123ABC", "address": "123 Anywhere Street", "address_2": "Apartment #10", "city": "Los Angeles", "state": "CA", "zip": "90210", "country": "US", "phone": "555-555-5555", "portal_invite_last_sent_at": "2017-06-27T13:45:16-05:00", "portal_invite_last_accepted_at": null, "verified": true, "portal_customer_created_at": "2017-06-27T13:01:08-05:00", "cc_emails": "support@example.com", "tax_exempt": true }, "product": { "id": 4470347, "name": "Zero Dollar Product", "handle": "zero-dollar-product", "description": "", "accounting_code": "", "request_credit_card": true, "expiration_interval": null, "expiration_interval_unit": "never", "created_at": "2017-03-23T10:54:12-05:00", "updated_at": "2017-04-20T15:18:46-05:00", "price_in_cents": 0, "interval": 1, "interval_unit": "month", "initial_charge_in_cents": null, "trial_price_in_cents": null, "trial_interval": null, "trial_interval_unit": "month", "archived_at": null, "require_credit_card": false, "return_params": "", "taxable": false, "update_return_url": "", "tax_code": "", "initial_charge_after_trial": false, "version_number": 1, "update_return_params": "", "product_family": { "id": 997233, "name": "Acme Products", "description": "", "handle": "acme-products", "accounting_code": null }, "public_signup_pages": [ { "id": 316810, "return_url": "", "return_params": "", "url": "https://general-goods.chargify.com/subscribe/69x825m78v3d/zero-dollar-product" } ] } }}Read Subscription GET
Retrieves subscription details. If you have the new [Catalog experience](https://maxio-test-wp.pages.dev/support/announcements/2026-announcements#new-catalog-experience-and-terminology) enabled, some subscriptions may not have an associated product. For subscriptions without an associated product, 'product', 'product_price_point_id', and 'product_price_point_type' are returned as 'null'. ## Self-Service Page token Self-Service Page token for the subscription is not returned by default. If this information is desired, the include[]=self_service_page_token parameter must be provided with the request.
Override Subscription PUT
Sets certain subscription fields that are usually managed automatically. Some of the fields can be set via the normal Subscriptions Update API, but others can only be set using this endpoint. This endpoint is provided for cases where you need to “align” Advanced Billing data with data that happened in your system, perhaps before you started using Advanced Billing. For example, you may choose to import your historical subscription data, and would like the activation and cancellation dates in Advanced Billing to match your existing historical dates. Advanced Billing does not backfill historical events (i.e. from the Events API), but some static data can be changed via this API. Why are some fields only settable from this endpoint, and not the normal subscription create and update endpoints? Because we want users of this endpoint to be aware that these fields are usually managed by Advanced Billing, and using this API means **you are stepping out on your own.** Changing these fields will not affect any other attributes. For example, adding an expiration date will not affect the next assessment date on the subscription. If you regularly need to override the current_period_starts_at for new subscriptions, this can also be accomplished by setting both `previous_billing_at` and `next_billing_at` at subscription creation. See the documentation on [Importing Subscriptions](https://maxio-test-wp.pages.dev/api/openapi/subscriptions/createSubscription) for more information. ## Limitations When passing `current_period_starts_at` some validations are made: 1. The subscription needs to be unbilled (no statements or invoices). 2. The value passed must be a valid date/time. We recommend using the iso 8601 format. 3. The value passed must be before the current date/time. If unpermitted parameters are sent, a 400 HTTP response is sent along with a string giving the reason for the problem.