--- title: RecurringApplicationCharge description: |- Charge a shop a subscription fee to use your app. Charged every 30 days. api_version: 2025-10 api_name: admin-rest api_type: rest source_url: html: https://shopify.dev/docs/api/admin-rest/latest/resources/recurringapplicationcharge md: https://shopify.dev/docs/api/admin-rest/latest/resources/recurringapplicationcharge.md --- ![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg) The REST Admin API is a legacy API as of October 1, 2024. Starting April 1, 2025, all new public apps must be built exclusively with the [GraphQL Admin API](https://shopify.dev/docs/api/admin-graphql). For details and migration steps, visit our [migration guide](https://shopify.dev/docs/apps/build/graphql/migrate). # Recurring​Application​Charge The RecurringApplicationCharge resource facilitates a fixed-value, 30-day recurring charge. You can create an application charge by sending a request with the name the charge should appear under, the price your app is charging, and a return URL where Shopify redirects the merchant after the charge is accepted. After you've created the charge, redirect the merchant to the confirmation URL returned by Shopify. If the charge is declined, then Shopify redirects the merchant and provides a notification message that the app charge was declined. Note For testing purposes you can include `"test": true` when creating the charge. This prevents the credit card from being charged. Test shops and demo shops cannot be charged. ### Updating an application charge Each shop can have only one recurring charge per app. When a new recurring application charge is activated for a shop that already has one, the existing recurring charge is canceled and replaced by the new charge. The new recurring charge is then activated. For example, if you want to offer discounted pricing to a specific merchant, then you can create a new application charge for the shop. This will prompt the shop to accept the new charge in order to continue using the app. The new charge replaces the old billing going forward. \# ## Endpoints * [post](https://shopify.dev/docs/api/admin-rest/latest/resources/recurringapplicationcharge#post-recurring-application-charges) [/admin/api/latest/recurring\_​application\_​charges.​json](https://shopify.dev/docs/api/admin-rest/latest/resources/recurringapplicationcharge#post-recurring-application-charges) Creates a recurring application charge [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/mutations/appSubscriptionCreate?example=creates-a-recurring-application-charge) [appSubscriptionCreate](https://shopify.dev/docs/api/admin-graphql/latest/mutations/appSubscriptionCreate?example=creates-a-recurring-application-charge) * [get](https://shopify.dev/docs/api/admin-rest/latest/resources/recurringapplicationcharge#get-recurring-application-charges) [/admin/api/latest/recurring\_​application\_​charges.​json](https://shopify.dev/docs/api/admin-rest/latest/resources/recurringapplicationcharge#get-recurring-application-charges) Retrieves a list of recurring application charges [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/queries/currentAppInstallation?example=retrieves-a-list-of-recurring-application-charges) [currentAppInstallation](https://shopify.dev/docs/api/admin-graphql/latest/queries/currentAppInstallation?example=retrieves-a-list-of-recurring-application-charges) * [get](https://shopify.dev/docs/api/admin-rest/latest/resources/recurringapplicationcharge#get-recurring-application-charges-recurring-application-charge-id) [/admin/api/latest/recurring\_​application\_​charges/{recurring\_​application\_​charge\_​id}.​json](https://shopify.dev/docs/api/admin-rest/latest/resources/recurringapplicationcharge#get-recurring-application-charges-recurring-application-charge-id) Retrieves a single charge * [put](https://shopify.dev/docs/api/admin-rest/latest/resources/recurringapplicationcharge#put-recurring-application-charges-recurring-application-charge-id-customize?recurring-application-charge\[capped-amount]=200) [/admin/api/latest/recurring\_​application\_​charges/{recurring\_​application\_​charge\_​id}/customize.​json?recurring\_​application\_​charge\[capped\_​amount\]=200](https://shopify.dev/docs/api/admin-rest/latest/resources/recurringapplicationcharge#put-recurring-application-charges-recurring-application-charge-id-customize?recurring-application-charge\[capped-amount]=200) Updates the capped amount of a recurring application charge [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/mutations/appSubscriptionLineItemUpdate?example=updates-the-capped-amount-of-a-recurring-application-charge) [appSubscriptionLineItemUpdate](https://shopify.dev/docs/api/admin-graphql/latest/mutations/appSubscriptionLineItemUpdate?example=updates-the-capped-amount-of-a-recurring-application-charge) * [del](https://shopify.dev/docs/api/admin-rest/latest/resources/recurringapplicationcharge#delete-recurring-application-charges-recurring-application-charge-id) [/admin/api/latest/recurring\_​application\_​charges/{recurring\_​application\_​charge\_​id}.​json](https://shopify.dev/docs/api/admin-rest/latest/resources/recurringapplicationcharge#delete-recurring-application-charges-recurring-application-charge-id) Cancels a recurring application charge [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/mutations/appSubscriptionCancel?example=cancels-a-recurring-application-charge) [appSubscriptionCancel](https://shopify.dev/docs/api/admin-graphql/latest/mutations/appSubscriptionCancel?example=cancels-a-recurring-application-charge) *** ## The RecurringApplicationCharge resource ### Properties *** activated\_on -> [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppSubscription#field-AppSubscription.fields.createdAt) [createdAt](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppSubscription#field-AppSubscription.fields.createdAt) The date and time ([ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format) when the customer activated the recurring application charge.\ **Note:** The recurring application charge must be activated or the returned value is `null`. *** billing\_on -> [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppSubscription#field-AppSubscription.fields.currentPeriodEnd) [currentPeriodEnd](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppSubscription#field-AppSubscription.fields.currentPeriodEnd) The date and time ([ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format) when the customer is billed.\ **Note:** The recurring application charge must be accepted or the returned value is `null`. *** cancelled\_on deprecated The date and time ([ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format) when the merchant canceled their recurring application charge.\ **Note:** Returns `null` when the recurring application charge is not canceled. *** capped\_amount -> [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppUsagePricing#field-AppUsagePricing.fields.cappedAmount) [cappedAmount](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppUsagePricing#field-AppUsagePricing.fields.cappedAmount) The limit a customer can be charged for usage based billing. If this property is provided, then you must also provide the `terms` property. See [usage charges](https://shopify.dev/docs/admin-api/rest/reference/billing/usagecharge) for more information. *** confirmation\_url The URL where the merchant accepts or declines the recurring application charge. *** created\_at -> [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppSubscription#field-AppSubscription.fields.createdAt) [createdAt](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppSubscription#field-AppSubscription.fields.createdAt) The date and time ([ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format) when the recurring application charge was created. *** id -> [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppSubscription#field-AppSubscription.fields.id) [id](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppSubscription#field-AppSubscription.fields.id) The ID of the recurring application charge. *** name -> [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppSubscription#field-AppSubscription.fields.name) [name](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppSubscription#field-AppSubscription.fields.name) The name of the recurring application charge. *** price -> [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppRecurringPricing#field-AppRecurringPricing.fields.price) [price](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppRecurringPricing#field-AppRecurringPricing.fields.price) The price of the recurring application charge. The maximum price is 10,000. *** return\_url -> [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppSubscription#field-AppSubscription.fields.returnUrl) [returnUrl](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppSubscription#field-AppSubscription.fields.returnUrl) The URL where the merchant is redirected after accepting the charge. *** status -> [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppSubscription#field-AppSubscription.fields.status) [status](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppSubscription#field-AppSubscription.fields.status) The status of the recurring charge. Valid values: Show status properties * **pending**: The recurring charge is pending. * **accepted**: **Removed in version 2021-01**. The recurring charge has been accepted. As of API version 2021-01, when a merchant accepts a charge, the charge immediately transitions from `pending` to `active`. * **active**: The recurring charge is activated. This is the only status that actually causes a merchant to be charged. As of API version 2021-01, when a merchant accepts a charge, the charge immediately transitions from `pending` to `active`. * **declined**: The recurring charge has been declined. * **expired**: The recurring charge was not accepted within 2 days of being created. * **frozen**: The recurring charge is on hold due to a shop subscription non-payment. The charge will re-activate once subscription payments resume. * **cancelled**: The developer cancelled the charge. *** terms -> [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppUsagePricing#field-AppUsagePricing.fields.terms) [terms](https://shopify.dev/docs/api/admin-graphql/latest/objects/AppUsagePricing#field-AppUsagePricing.fields.terms) The terms and conditions of usage based billing charges. Must be present in order to create usage charges, for example when the `capped_amount` property is provided. Presented to the merchant when they approve an app's usage charges. *** {} ## The RecurringApplicationCharge resource ```json { "activated_on": null, "billing_on": null, "cancelled_on": null, "capped_amount": "100", "confirmation_url": "https://jsmith.myshopify.com/admin/charges/confirm_recurring_application_charge?id=654381177&signature=BAhpBHkQASc%3D--374c02da2ea0371b23f40781b8a6d5f4a520e77b", "created_at": "2013-06-27T08:48:27-04:00", "id": 675931192, "name": "Super Duper Expensive action", "price": "100.00", "return_url": "http://super-duper.shopifyapps.com", "status": "accepted", "terms": "$1 for 1000 emails", "test": null, "trial_days": 0, "trial_ends_on": null, "updated_at": "2013-06-27T08:48:27-04:00", "currency": "USD" } ``` *** ## postCreates a recurring application charge [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/mutations/appSubscriptionCreate?example=creates-a-recurring-application-charge) [appSubscriptionCreate](https://shopify.dev/docs/api/admin-graphql/latest/mutations/appSubscriptionCreate?example=creates-a-recurring-application-charge) Creates a recurring application charge. Make sure to include a valid `return_url` property to ensure the merchant is redirected after accepting the charge (an invalid or missing `return_url` property may lead to unstable behaviour in the charge approval flow). ### Parameters *** api\_version string required *** ### Examples Create a new charge with a trial period. The trial period will go into effect at the time the recurring charge is activated. Request body recurring\_​application\_​charge​ Recurring\_application\_charge resource Show recurring\_application\_charge properties recurring\_​application\_​charge.name:​"Super Duper Plan" The name of the recurring application charge. recurring\_​application\_​charge.price:​10 The price of the recurring application charge. The maximum price is 10,000. recurring\_​application\_​charge.return\_​url:​"http\://super-duper.shopifyapps.com" The URL where the merchant is redirected after accepting the charge. recurring\_​application\_​charge.trial\_​days:​5 The number of days that the customer is eligible for a free trial. Create a new charge with terms and a capped amount Request body recurring\_​application\_​charge​ Recurring\_application\_charge resource Show recurring\_application\_charge properties recurring\_​application\_​charge.name:​"Super Duper Plan" The name of the recurring application charge. recurring\_​application\_​charge.price:​10 The price of the recurring application charge. The maximum price is 10,000. recurring\_​application\_​charge.return\_​url:​"http\://super-duper.shopifyapps.com" The URL where the merchant is redirected after accepting the charge. recurring\_​application\_​charge.capped\_​amount:​100 The limit a customer can be charged for usage based billing. If this property is provided, then you must also provide the `terms` property. See [usage charges](https://shopify.dev/docs/admin-api/rest/reference/billing/usagecharge) for more information. recurring\_​application\_​charge.terms:​"$1 for 1000 emails" The terms and conditions of usage based billing charges. Must be present in order to create usage charges, for example when the `capped_amount` property is provided. Presented to the merchant when they approve an app's usage charges. Create a recurring application charge Request body recurring\_​application\_​charge​ Recurring\_application\_charge resource Show recurring\_application\_charge properties recurring\_​application\_​charge.name:​"Super Duper Plan" The name of the recurring application charge. recurring\_​application\_​charge.price:​10 The price of the recurring application charge. The maximum price is 10,000. recurring\_​application\_​charge.return\_​url:​"http\://super-duper.shopifyapps.com" The URL where the merchant is redirected after accepting the charge. Create a recurring test charge that will not cause a credit card to be charged Request body recurring\_​application\_​charge​ Recurring\_application\_charge resource Show recurring\_application\_charge properties recurring\_​application\_​charge.name:​"Super Duper Plan" The name of the recurring application charge. recurring\_​application\_​charge.price:​10 The price of the recurring application charge. The maximum price is 10,000. recurring\_​application\_​charge.return\_​url:​"http\://super-duper.shopifyapps.com" The URL where the merchant is redirected after accepting the charge. recurring\_​application\_​charge.test:​true Whether the application charge is a test transaction. Valid values: `true`,`null`. Trying to create a charge without a price and name will return an error Request body recurring\_​application\_​charge​ Recurring\_application\_charge resource Show recurring\_application\_charge properties recurring\_​application\_​charge.name:​"" The name of the recurring application charge. post ## /admin/api/2025-10/recurring\_​application\_​charges.​json ```bash curl -d '{"recurring_application_charge":{"name":"Super Duper Plan","price":10.0,"return_url":"http://super-duper.shopifyapps.com","trial_days":5}}' \ -X POST "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges.json" \ -H "X-Shopify-Access-Token: {access_token}" \ -H "Content-Type: application/json" ``` {} ## Response JSON ```json HTTP/1.1 201 Created { "recurring_application_charge": { "id": 1029266963, "name": "Super Duper Plan", "price": "10.00", "billing_on": null, "status": "pending", "created_at": "2025-10-01T15:12:51-04:00", "updated_at": "2025-10-01T15:12:51-04:00", "activated_on": null, "return_url": "http://super-duper.shopifyapps.com/", "test": null, "cancelled_on": null, "trial_days": 5, "trial_ends_on": null, "api_client_id": 755357713, "decorated_return_url": "http://super-duper.shopifyapps.com/?charge_id=1029266963", "confirmation_url": "https://jsmith.myshopify.com/admin/charges/755357713/1029266963/RecurringApplicationCharge/confirm_recurring_application_charge?signature=BAh7BzoHaWRpBBNeWT06EmF1dG9fYWN0aXZhdGVU--8587e6af2a850936ee7ed0279a8daa2b2d9e34f7", "currency": "USD" } } ``` ### examples * #### Create a new charge with a trial period. The trial period will go into effect at the time the recurring charge is activated. ##### ```curl curl -d '{"recurring_application_charge":{"name":"Super Duper Plan","price":10.0,"return_url":"http://super-duper.shopifyapps.com","trial_days":5}}' \ -X POST "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges.json" \ -H "X-Shopify-Access-Token: {access_token}" \ -H "Content-Type: application/json" ``` ##### ```remix const { admin, session } = await authenticate.admin(request); const recurring_application_charge = new admin.rest.resources.RecurringApplicationCharge({session: session}); recurring_application_charge.name = "Super Duper Plan"; recurring_application_charge.price = 10.0; recurring_application_charge.return_url = "http://super-duper.shopifyapps.com"; recurring_application_charge.trial_days = 5; await recurring_application_charge.save({ update: true, }); ``` ##### ```ruby # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session recurring_application_charge = ShopifyAPI::RecurringApplicationCharge.new(session: test_session) recurring_application_charge.name = "Super Duper Plan" recurring_application_charge.price = 10.0 recurring_application_charge.return_url = "http://super-duper.shopifyapps.com" recurring_application_charge.trial_days = 5 recurring_application_charge.save! ``` ##### ```node // Session is built by the OAuth process const recurring_application_charge = new shopify.rest.RecurringApplicationCharge({session: session}); recurring_application_charge.name = "Super Duper Plan"; recurring_application_charge.price = 10.0; recurring_application_charge.return_url = "http://super-duper.shopifyapps.com"; recurring_application_charge.trial_days = 5; await recurring_application_charge.save({ update: true, }); ``` #### response ```json HTTP/1.1 201 Created{"recurring_application_charge":{"id":1029266963,"name":"Super Duper Plan","price":"10.00","billing_on":null,"status":"pending","created_at":"2025-10-01T15:12:51-04:00","updated_at":"2025-10-01T15:12:51-04:00","activated_on":null,"return_url":"http://super-duper.shopifyapps.com/","test":null,"cancelled_on":null,"trial_days":5,"trial_ends_on":null,"api_client_id":755357713,"decorated_return_url":"http://super-duper.shopifyapps.com/?charge_id=1029266963","confirmation_url":"https://jsmith.myshopify.com/admin/charges/755357713/1029266963/RecurringApplicationCharge/confirm_recurring_application_charge?signature=BAh7BzoHaWRpBBNeWT06EmF1dG9fYWN0aXZhdGVU--8587e6af2a850936ee7ed0279a8daa2b2d9e34f7","currency":"USD"}} ``` * #### Create a new charge with terms and a capped amount ##### ```curl curl -d '{"recurring_application_charge":{"name":"Super Duper Plan","price":10.0,"return_url":"http://super-duper.shopifyapps.com","capped_amount":100,"terms":"$1 for 1000 emails"}}' \ -X POST "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges.json" \ -H "X-Shopify-Access-Token: {access_token}" \ -H "Content-Type: application/json" ``` ##### ```remix const { admin, session } = await authenticate.admin(request); const recurring_application_charge = new admin.rest.resources.RecurringApplicationCharge({session: session}); recurring_application_charge.name = "Super Duper Plan"; recurring_application_charge.price = 10.0; recurring_application_charge.return_url = "http://super-duper.shopifyapps.com"; recurring_application_charge.capped_amount = 100; recurring_application_charge.terms = "$1 for 1000 emails"; await recurring_application_charge.save({ update: true, }); ``` ##### ```ruby # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session recurring_application_charge = ShopifyAPI::RecurringApplicationCharge.new(session: test_session) recurring_application_charge.name = "Super Duper Plan" recurring_application_charge.price = 10.0 recurring_application_charge.return_url = "http://super-duper.shopifyapps.com" recurring_application_charge.capped_amount = 100 recurring_application_charge.terms = "$1 for 1000 emails" recurring_application_charge.save! ``` ##### ```node // Session is built by the OAuth process const recurring_application_charge = new shopify.rest.RecurringApplicationCharge({session: session}); recurring_application_charge.name = "Super Duper Plan"; recurring_application_charge.price = 10.0; recurring_application_charge.return_url = "http://super-duper.shopifyapps.com"; recurring_application_charge.capped_amount = 100; recurring_application_charge.terms = "$1 for 1000 emails"; await recurring_application_charge.save({ update: true, }); ``` #### response ```json HTTP/1.1 201 Created{"recurring_application_charge":{"id":1029266965,"name":"Super Duper Plan","price":"10.00","billing_on":null,"status":"pending","created_at":"2025-10-01T15:12:57-04:00","updated_at":"2025-10-01T15:12:57-04:00","activated_on":null,"return_url":"http://super-duper.shopifyapps.com/","test":null,"cancelled_on":null,"trial_days":0,"trial_ends_on":null,"api_client_id":755357713,"decorated_return_url":"http://super-duper.shopifyapps.com/?charge_id=1029266965","capped_amount":"100.00","balance_used":0,"balance_remaining":"100.00","risk_level":0,"confirmation_url":"https://jsmith.myshopify.com/admin/charges/755357713/1029266965/RecurringApplicationCharge/confirm_recurring_application_charge?signature=BAh7BzoHaWRpBBVeWT06EmF1dG9fYWN0aXZhdGVU--503e80d93f87903e7ce2dc2deb0f736925051490","currency":"USD"}} ``` * #### Create a recurring application charge ##### ```curl curl -d '{"recurring_application_charge":{"name":"Super Duper Plan","price":10.0,"return_url":"http://super-duper.shopifyapps.com"}}' \ -X POST "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges.json" \ -H "X-Shopify-Access-Token: {access_token}" \ -H "Content-Type: application/json" ``` ##### ```remix const { admin, session } = await authenticate.admin(request); const recurring_application_charge = new admin.rest.resources.RecurringApplicationCharge({session: session}); recurring_application_charge.name = "Super Duper Plan"; recurring_application_charge.price = 10.0; recurring_application_charge.return_url = "http://super-duper.shopifyapps.com"; await recurring_application_charge.save({ update: true, }); ``` ##### ```ruby # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session recurring_application_charge = ShopifyAPI::RecurringApplicationCharge.new(session: test_session) recurring_application_charge.name = "Super Duper Plan" recurring_application_charge.price = 10.0 recurring_application_charge.return_url = "http://super-duper.shopifyapps.com" recurring_application_charge.save! ``` ##### ```node // Session is built by the OAuth process const recurring_application_charge = new shopify.rest.RecurringApplicationCharge({session: session}); recurring_application_charge.name = "Super Duper Plan"; recurring_application_charge.price = 10.0; recurring_application_charge.return_url = "http://super-duper.shopifyapps.com"; await recurring_application_charge.save({ update: true, }); ``` #### response ```json HTTP/1.1 201 Created{"recurring_application_charge":{"id":1029266968,"name":"Super Duper Plan","price":"10.00","billing_on":null,"status":"pending","created_at":"2025-10-01T15:13:05-04:00","updated_at":"2025-10-01T15:13:05-04:00","activated_on":null,"return_url":"http://super-duper.shopifyapps.com/","test":null,"cancelled_on":null,"trial_days":0,"trial_ends_on":null,"api_client_id":755357713,"decorated_return_url":"http://super-duper.shopifyapps.com/?charge_id=1029266968","confirmation_url":"https://jsmith.myshopify.com/admin/charges/755357713/1029266968/RecurringApplicationCharge/confirm_recurring_application_charge?signature=BAh7BzoHaWRpBBheWT06EmF1dG9fYWN0aXZhdGVU--7d620225e0f16102726faa92df1f93ae87cea029","currency":"USD"}} ``` * #### Create a recurring test charge that will not cause a credit card to be charged ##### ```curl curl -d '{"recurring_application_charge":{"name":"Super Duper Plan","price":10.0,"return_url":"http://super-duper.shopifyapps.com","test":true}}' \ -X POST "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges.json" \ -H "X-Shopify-Access-Token: {access_token}" \ -H "Content-Type: application/json" ``` ##### ```remix const { admin, session } = await authenticate.admin(request); const recurring_application_charge = new admin.rest.resources.RecurringApplicationCharge({session: session}); recurring_application_charge.name = "Super Duper Plan"; recurring_application_charge.price = 10.0; recurring_application_charge.return_url = "http://super-duper.shopifyapps.com"; recurring_application_charge.test = true; await recurring_application_charge.save({ update: true, }); ``` ##### ```ruby # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session recurring_application_charge = ShopifyAPI::RecurringApplicationCharge.new(session: test_session) recurring_application_charge.name = "Super Duper Plan" recurring_application_charge.price = 10.0 recurring_application_charge.return_url = "http://super-duper.shopifyapps.com" recurring_application_charge.test = true recurring_application_charge.save! ``` ##### ```node // Session is built by the OAuth process const recurring_application_charge = new shopify.rest.RecurringApplicationCharge({session: session}); recurring_application_charge.name = "Super Duper Plan"; recurring_application_charge.price = 10.0; recurring_application_charge.return_url = "http://super-duper.shopifyapps.com"; recurring_application_charge.test = true; await recurring_application_charge.save({ update: true, }); ``` #### response ```json HTTP/1.1 201 Created{"recurring_application_charge":{"id":1029266967,"name":"Super Duper Plan","price":"10.00","billing_on":null,"status":"pending","created_at":"2025-10-01T15:13:03-04:00","updated_at":"2025-10-01T15:13:03-04:00","activated_on":null,"return_url":"http://super-duper.shopifyapps.com/","test":true,"cancelled_on":null,"trial_days":0,"trial_ends_on":null,"api_client_id":755357713,"decorated_return_url":"http://super-duper.shopifyapps.com/?charge_id=1029266967","confirmation_url":"https://jsmith.myshopify.com/admin/charges/755357713/1029266967/RecurringApplicationCharge/confirm_recurring_application_charge?signature=BAh7BzoHaWRpBBdeWT06EmF1dG9fYWN0aXZhdGVU--f5d83d6cf1f1fb9aff24616ddaa0132141bfc645","currency":"USD"}} ``` * #### Trying to create a charge without a price and name will return an error ##### ```curl curl -d '{"recurring_application_charge":{"name":""}}' \ -X POST "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges.json" \ -H "X-Shopify-Access-Token: {access_token}" \ -H "Content-Type: application/json" ``` ##### ```remix const { admin, session } = await authenticate.admin(request); const recurring_application_charge = new admin.rest.resources.RecurringApplicationCharge({session: session}); recurring_application_charge.name = ""; await recurring_application_charge.save({ update: true, }); ``` ##### ```ruby # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session recurring_application_charge = ShopifyAPI::RecurringApplicationCharge.new(session: test_session) recurring_application_charge.name = "" recurring_application_charge.save! ``` ##### ```node // Session is built by the OAuth process const recurring_application_charge = new shopify.rest.RecurringApplicationCharge({session: session}); recurring_application_charge.name = ""; await recurring_application_charge.save({ update: true, }); ``` #### response ```json HTTP/1.1 422 Unprocessable Entity{"errors":{"name":["can't be blank"],"price":["must be greater than zero"]}} ``` *** ## getRetrieves a list of recurring application charges [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/queries/currentAppInstallation?example=retrieves-a-list-of-recurring-application-charges) [currentAppInstallation](https://shopify.dev/docs/api/admin-graphql/latest/queries/currentAppInstallation?example=retrieves-a-list-of-recurring-application-charges) Retrieves a list of recurring application charges ### Parameters *** api\_version string required *** fields A comma-separated list of fields to include in the response. *** since\_id Restrict results to after the specified ID. *** ### Examples Retrieve all recurring application charges Retrieve all recurring charges since a specified ID Query parameters since\_​id=​455696195 Restrict results to after the specified ID. get ## /admin/api/2025-10/recurring\_​application\_​charges.​json ```bash curl -X GET "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges.json" \ -H "X-Shopify-Access-Token: {access_token}" ``` {} ## Response JSON ```json HTTP/1.1 200 OK { "recurring_application_charges": [ { "id": 455696195, "name": "Super Mega Plan", "price": "15.00", "billing_on": "2025-10-01", "status": "accepted", "created_at": "2025-10-01T15:07:00-04:00", "updated_at": "2025-10-01T15:13:04-04:00", "activated_on": null, "return_url": "http://yourapp.example.org", "test": null, "cancelled_on": null, "trial_days": 0, "trial_ends_on": null, "api_client_id": 755357713, "decorated_return_url": "http://yourapp.example.org?charge_id=455696195", "currency": "USD" } ] } ``` ### examples * #### Retrieve all recurring application charges ##### ```curl curl -X GET "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges.json" \ -H "X-Shopify-Access-Token: {access_token}" ``` ##### ```remix await admin.rest.resources.RecurringApplicationCharge.all({ session: session, }); ``` ##### ```ruby # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session ShopifyAPI::RecurringApplicationCharge.all( session: test_session, ) ``` ##### ```node // Session is built by the OAuth process await shopify.rest.RecurringApplicationCharge.all({ session: session, }); ``` #### response ```json HTTP/1.1 200 OK{"recurring_application_charges":[{"id":455696195,"name":"Super Mega Plan","price":"15.00","billing_on":"2025-10-01","status":"accepted","created_at":"2025-10-01T15:07:00-04:00","updated_at":"2025-10-01T15:13:04-04:00","activated_on":null,"return_url":"http://yourapp.example.org","test":null,"cancelled_on":null,"trial_days":0,"trial_ends_on":null,"api_client_id":755357713,"decorated_return_url":"http://yourapp.example.org?charge_id=455696195","currency":"USD"}]} ``` * #### Retrieve all recurring charges since a specified ID ##### ```curl curl -X GET "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges.json?since_id=455696195" \ -H "X-Shopify-Access-Token: {access_token}" ``` ##### ```remix await admin.rest.resources.RecurringApplicationCharge.all({ session: session, since_id: "455696195", }); ``` ##### ```ruby # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session ShopifyAPI::RecurringApplicationCharge.all( session: test_session, since_id: "455696195", ) ``` ##### ```node // Session is built by the OAuth process await shopify.rest.RecurringApplicationCharge.all({ session: session, since_id: "455696195", }); ``` #### response ```json HTTP/1.1 200 OK{"recurring_application_charges":[{"id":1029266969,"name":"Super Duper Plan","price":"10.00","billing_on":null,"status":"pending","created_at":"2025-10-01T15:13:07-04:00","updated_at":"2025-10-01T15:13:07-04:00","activated_on":null,"return_url":"http://super-duper.shopifyapps.com/","test":null,"cancelled_on":null,"trial_days":0,"trial_ends_on":null,"api_client_id":755357713,"decorated_return_url":"http://super-duper.shopifyapps.com/?charge_id=1029266969","confirmation_url":"https://jsmith.myshopify.com/admin/charges/755357713/1029266969/RecurringApplicationCharge/confirm_recurring_application_charge?signature=BAh7BzoHaWRpBBleWT06EmF1dG9fYWN0aXZhdGVU--3e442719c3020b857140bd456b04a2e3ba26ee20","currency":"USD"}]} ``` *** ## getRetrieves a single charge Retrieves a single charge ### Parameters *** api\_version string required *** recurring\_application\_charge\_id string required *** fields A comma-separated list of fields to include in the response. *** ### Examples Retrieve a single charge Path parameters recurring\_​application\_​charge\_​id=​455696195 string required get ## /admin/api/2025-10/recurring\_​application\_​charges/455696195.​json ```bash curl -X GET "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges/455696195.json" \ -H "X-Shopify-Access-Token: {access_token}" ``` {} ## Response JSON ```json HTTP/1.1 200 OK { "recurring_application_charge": { "id": 455696195, "name": "Super Mega Plan", "price": "15.00", "billing_on": "2025-10-01", "status": "pending", "created_at": "2025-10-01T15:07:00-04:00", "updated_at": "2025-10-01T15:07:00-04:00", "activated_on": null, "return_url": "http://yourapp.example.org", "test": null, "cancelled_on": null, "trial_days": 0, "trial_ends_on": null, "api_client_id": 755357713, "decorated_return_url": "http://yourapp.example.org?charge_id=455696195", "confirmation_url": "https://jsmith.myshopify.com/admin/charges/755357713/455696195/RecurringApplicationCharge/confirm_recurring_application_charge?signature=BAh7BzoHaWRpBENfKRs6EmF1dG9fYWN0aXZhdGVU--b5f90d04779cc5242b396e4054f2e650c5dace1c", "currency": "USD" } } ``` ### examples * #### Retrieve a single charge ##### ```curl curl -X GET "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges/455696195.json" \ -H "X-Shopify-Access-Token: {access_token}" ``` ##### ```remix await admin.rest.resources.RecurringApplicationCharge.find({ session: session, id: 455696195, }); ``` ##### ```ruby # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session ShopifyAPI::RecurringApplicationCharge.find( session: test_session, id: 455696195, ) ``` ##### ```node // Session is built by the OAuth process await shopify.rest.RecurringApplicationCharge.find({ session: session, id: 455696195, }); ``` #### response ```json HTTP/1.1 200 OK{"recurring_application_charge":{"id":455696195,"name":"Super Mega Plan","price":"15.00","billing_on":"2025-10-01","status":"pending","created_at":"2025-10-01T15:07:00-04:00","updated_at":"2025-10-01T15:07:00-04:00","activated_on":null,"return_url":"http://yourapp.example.org","test":null,"cancelled_on":null,"trial_days":0,"trial_ends_on":null,"api_client_id":755357713,"decorated_return_url":"http://yourapp.example.org?charge_id=455696195","confirmation_url":"https://jsmith.myshopify.com/admin/charges/755357713/455696195/RecurringApplicationCharge/confirm_recurring_application_charge?signature=BAh7BzoHaWRpBENfKRs6EmF1dG9fYWN0aXZhdGVU--b5f90d04779cc5242b396e4054f2e650c5dace1c","currency":"USD"}} ``` *** ## putUpdates the capped amount of a recurring application charge [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/mutations/appSubscriptionLineItemUpdate?example=updates-the-capped-amount-of-a-recurring-application-charge) [appSubscriptionLineItemUpdate](https://shopify.dev/docs/api/admin-graphql/latest/mutations/appSubscriptionLineItemUpdate?example=updates-the-capped-amount-of-a-recurring-application-charge) Updates the capped amount of an active recurring application charge. Note that you cannot use this endpoint to update any other proprty on a recurring application charge or the capped amount on an [Annual subscription](https://shopify.dev/apps/billing/subscriptions/annual#limitations). ### Parameters *** api\_version string required *** recurring\_application\_charge\_id string required *** ### Examples Increase the capped amount for a shop Query parameters put ## /admin/api/2025-10/recurring\_​application\_​charges/455696195/customize.​json?recurring\_​application\_​charge\[capped\_​amount]=​200 ```bash curl -X PUT "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges/455696195/customize.json?recurring_application_charge%5Bcapped_amount%5D=200" \ -H "X-Shopify-Access-Token: {access_token}" ``` {} ## Response JSON ```json HTTP/1.1 200 OK { "recurring_application_charge": { "id": 455696195, "name": "Super Mega Plan", "price": "15.00", "billing_on": null, "status": "active", "created_at": "2025-10-01T15:07:00-04:00", "updated_at": "2025-10-01T15:13:02-04:00", "activated_on": "2025-10-01", "return_url": "http://yourapp.example.org", "test": null, "cancelled_on": null, "trial_days": 0, "trial_ends_on": "2025-10-01", "api_client_id": 755357713, "decorated_return_url": "http://yourapp.example.org?charge_id=455696195", "capped_amount": "100.00", "balance_used": "0.0", "balance_remaining": "100.00", "risk_level": 0, "update_capped_amount_url": "https://jsmith.myshopify.com/admin/charges/755357713/455696195/RecurringApplicationCharge/confirm_update_capped_amount?signature=BAh7BzoHaWRpBENfKRs6EmF1dG9fYWN0aXZhdGVG--ed509ae028276b844e42be815137720a3c798aa5", "currency": "USD" } } ``` ### examples * #### Increase the capped amount for a shop ##### ```curl curl -X PUT "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges/455696195/customize.json?recurring_application_charge%5Bcapped_amount%5D=200" \ -H "X-Shopify-Access-Token: {access_token}" ``` ##### ```remix const { admin, session } = await authenticate.admin(request); const recurring_application_charge = new admin.rest.resources.RecurringApplicationCharge({session: session}); recurring_application_charge.id = 455696195; await recurring_application_charge.customize({ recurring_application_charge: {"capped_amount": "200"}, }); ``` ##### ```ruby # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session recurring_application_charge = ShopifyAPI::RecurringApplicationCharge.new(session: test_session) recurring_application_charge.id = 455696195 recurring_application_charge.customize( session: test_session, recurring_application_charge: {"capped_amount" => "200"}, ) ``` ##### ```node // Session is built by the OAuth process const recurring_application_charge = new shopify.rest.RecurringApplicationCharge({session: session}); recurring_application_charge.id = 455696195; await recurring_application_charge.customize({ recurring_application_charge: {"capped_amount": "200"}, }); ``` #### response ```json HTTP/1.1 200 OK{"recurring_application_charge":{"id":455696195,"name":"Super Mega Plan","price":"15.00","billing_on":null,"status":"active","created_at":"2025-10-01T15:07:00-04:00","updated_at":"2025-10-01T15:13:02-04:00","activated_on":"2025-10-01","return_url":"http://yourapp.example.org","test":null,"cancelled_on":null,"trial_days":0,"trial_ends_on":"2025-10-01","api_client_id":755357713,"decorated_return_url":"http://yourapp.example.org?charge_id=455696195","capped_amount":"100.00","balance_used":"0.0","balance_remaining":"100.00","risk_level":0,"update_capped_amount_url":"https://jsmith.myshopify.com/admin/charges/755357713/455696195/RecurringApplicationCharge/confirm_update_capped_amount?signature=BAh7BzoHaWRpBENfKRs6EmF1dG9fYWN0aXZhdGVG--ed509ae028276b844e42be815137720a3c798aa5","currency":"USD"}} ``` *** ## delCancels a recurring application charge [![](https://shopify.dev/images/logos/GraphQL.svg)![](https://shopify.dev/images/logos/GraphQL-dark.svg)](https://shopify.dev/docs/api/admin-graphql/latest/mutations/appSubscriptionCancel?example=cancels-a-recurring-application-charge) [appSubscriptionCancel](https://shopify.dev/docs/api/admin-graphql/latest/mutations/appSubscriptionCancel?example=cancels-a-recurring-application-charge) Cancels a recurring application charge ### Parameters *** api\_version string required *** recurring\_application\_charge\_id string required *** ### Examples Cancel the current recurring charge for a shop Path parameters recurring\_​application\_​charge\_​id=​455696195 string required del ## /admin/api/2025-10/recurring\_​application\_​charges/455696195.​json ```bash curl -X DELETE "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges/455696195.json" \ -H "X-Shopify-Access-Token: {access_token}" ``` {} ## Response JSON ```json HTTP/1.1 200 OK ``` ### examples * #### Cancel the current recurring charge for a shop ##### ```curl curl -X DELETE "https://your-development-store.myshopify.com/admin/api/2025-10/recurring_application_charges/455696195.json" \ -H "X-Shopify-Access-Token: {access_token}" ``` ##### ```remix await admin.rest.resources.RecurringApplicationCharge.delete({ session: session, id: 455696195, }); ``` ##### ```ruby # Session is activated via Authentication test_session = ShopifyAPI::Context.active_session ShopifyAPI::RecurringApplicationCharge.delete( session: test_session, id: 455696195, ) ``` ##### ```node // Session is built by the OAuth process await shopify.rest.RecurringApplicationCharge.delete({ session: session, id: 455696195, }); ``` #### response ```json HTTP/1.1 200 OK ```