APIs for managing Shopify delivery profiles, shipping rates, zones, and free shipping configuration for subscription memberships
- Remove product from recurring subscription
External (0.0.1)
Request
Updates the next billing date for a subscription contract. This reschedules when the next payment will be charged for the membership.
Key Features:
- Flexible Rescheduling: Move billing date forward or backward
- Immediate Effect: Changes take effect immediately in the billing schedule
- Automatic Adjustments: Future billing dates recalculate based on frequency
- Customer Portal Compatible: Can be triggered from customer self-service portal
- Activity Logging: All changes are tracked in activity logs
Billing Date Update Rules:
- New date must be in the future (past dates are rejected)
- Cannot update if contract is paused or cancelled
- Cannot update if minimum billing cycles enforcement is active
- Date format must be ISO 8601 with timezone (e.g., 2024-12-25T10:00:00Z)
- Subsequent billing dates auto-calculate based on delivery frequency
Common Use Cases:
- Customer requests to postpone next delivery/billing
- Align billing date with customer payday or preference
- Skip a billing cycle due to vacation or temporary hold
- Synchronize multiple subscriptions to bill on same day
- Resolve payment timing conflicts or scheduling issues
- Adjust for seasonal demand or customer availability
Important Notes:
- Changing billing date does NOT change the billing cycle frequency
- If minimum cycles are configured, this may be restricted
- Activity logs capture old date, new date, and change source
- Customer receives updated billing schedule notification
Authentication: Requires API key authentication via X-API-Key header or api_key parameter
- https://membership-admin.appstle.com/api/external/v2/subscription-contracts-update-billing-date
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
'https://membership-admin.appstle.com/api/external/v2/subscription-contracts-update-billing-date?contractId=12345&api_key=string&nextBillingDate=2024-12-25T10%3A00%3A00Z' \
-H 'X-API-Key: string'{ "get__typename": "string", "id": "string", "createdAt": {}, "updatedAt": {}, "nextBillingDate": {}, "status": "ACTIVE", "deliveryPrice": { "get__typename": "string", "amount": {}, "currencyCode": "USD" }, "lastPaymentStatus": "SUCCEEDED", "billingPolicy": { "get__typename": "string", "interval": "DAY", "intervalCount": 0, "anchors": [ … ], "maxCycles": 0, "minCycles": 0 }, "deliveryPolicy": { "get__typename": "string", "interval": "DAY", "intervalCount": 0, "anchors": [ … ] }, "lines": { "get__typename": "string", "nodes": [ … ], "pageInfo": { … } }, "customerPaymentMethod": { "get__typename": "string", "id": "string", "instrument": { … }, "revokedAt": {}, "revokedReason": "AUTHORIZE_NET_GATEWAY_NOT_ENABLED" }, "deliveryMethod": { "get__typename": "string", "id": "string", "methodType": "SHIPPING", "serviceCode": "string", "minDeliveryDateTime": {}, "maxDeliveryDateTime": {}, "additionalInformation": { … }, "brandedPromise": { … } }, "originOrder": { "get__typename": "string", "id": "string", "name": "string", "fulfillmentOrders": { … } }, "customer": { "get__typename": "string", "id": "string", "email": "string", "displayName": "string", "firstName": "string", "lastName": "string", "phone": "string" }, "discounts": { "get__typename": "string", "nodes": [ … ], "pageInfo": { … } }, "note": "string", "customAttributes": [ { … } ], "billingAttempts": { "get__typename": "string", "nodes": [ … ] } }
Request
Removes a line item (product) from a subscription contract. The product will no longer be included in future recurring orders.
Product Removal Process:
- Line Item Identification: Locates specific line item using GraphQL line ID
- Contract Update: Removes line item from subscription
- Discount Handling: Optionally removes associated line-item discounts
- Price Recalculation: Updates subscription total after removal
- Activity Logging: Records product removal event
Key Features:
- Selective Removal: Remove specific products by line ID
- Discount Control: Choose whether to remove product-specific discounts
- Immediate Effect: Changes apply to next billing cycle
- Price Updates: Automatically adjusts subscription pricing
Discount Removal Option:
- removeDiscount=true (default): Removes discounts tied to this line item
- removeDiscount=false: Keeps discounts (may apply to other items if applicable)
- Only affects line-item-specific discounts, not subscription-level discounts
Line ID Format:
- GraphQL ID format:
gid://shopify/SubscriptionLine/[ID] - Retrieve from subscription contract details endpoint
- Each line item has unique ID
Use Cases:
- Customer downgrades subscription to fewer products
- Remove seasonal products at end of season
- Customer portal product removal workflows
- Discontinued product cleanup
- Subscription simplification (too many items)
- Build-a-box customization changes
Important Notes:
- Cannot remove last line item (subscription needs at least one product)
- Subscription must not be frozen
- Removal is permanent (re-add if needed)
- May affect shipping costs if weight/volume changes
Returns: Updated subscription contract object with line item removed
Authentication: Requires API key authentication via X-API-Key header or api_key parameter
- https://membership-admin.appstle.com/api/external/v2/subscription-contracts-remove-line-item
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
'https://membership-admin.appstle.com/api/external/v2/subscription-contracts-remove-line-item?contractId=123456789&api_key=string&lineId=gid%3A%2F%2Fshopify%2FSubscriptionLine%2F987654321&removeDiscount=true' \
-H 'X-API-Key: string'{ "get__typename": "string", "id": "string", "createdAt": {}, "updatedAt": {}, "nextBillingDate": {}, "status": "ACTIVE", "deliveryPrice": { "get__typename": "string", "amount": {}, "currencyCode": "USD" }, "lastPaymentStatus": "SUCCEEDED", "billingPolicy": { "get__typename": "string", "interval": "DAY", "intervalCount": 0, "anchors": [ … ], "maxCycles": 0, "minCycles": 0 }, "deliveryPolicy": { "get__typename": "string", "interval": "DAY", "intervalCount": 0, "anchors": [ … ] }, "lines": { "get__typename": "string", "nodes": [ … ], "pageInfo": { … } }, "customerPaymentMethod": { "get__typename": "string", "id": "string", "instrument": { … }, "revokedAt": {}, "revokedReason": "AUTHORIZE_NET_GATEWAY_NOT_ENABLED" }, "deliveryMethod": { "get__typename": "string", "id": "string", "methodType": "SHIPPING", "serviceCode": "string", "minDeliveryDateTime": {}, "maxDeliveryDateTime": {}, "additionalInformation": { … }, "brandedPromise": { … } }, "originOrder": { "get__typename": "string", "id": "string", "name": "string", "fulfillmentOrders": { … } }, "customer": { "get__typename": "string", "id": "string", "email": "string", "displayName": "string", "firstName": "string", "lastName": "string", "phone": "string" }, "discounts": { "get__typename": "string", "nodes": [ … ], "pageInfo": { … } }, "note": "string", "customAttributes": [ { … } ], "billingAttempts": { "get__typename": "string", "nodes": [ … ] } }
Request
Removes a discount from a subscription contract. This endpoint allows you to remove previously applied discounts, restoring the subscription to full price.
Discount Removal Process:
- Identify Discount: Uses discount ID to locate specific discount on contract
- Remove From Contract: Removes discount allocation from subscription
- Recalculate Pricing: Updates subscription pricing to remove discount
- Activity Logging: Records discount removal event
- Immediate Effect: Changes apply to next billing cycle
Key Features:
- Selective Removal: Remove specific discounts by ID
- Price Restoration: Returns subscription to original or remaining discount pricing
- Multiple Discount Support: Works with subscriptions having multiple discounts
- Activity Tracking: Logs removal for audit trail
Finding Discount ID:
- Retrieve subscription contract details to see applied discounts
- Each discount has a unique Shopify GraphQL ID
- Format:
gid://shopify/SubscriptionManualDiscount/[ID]
Use Cases:
- End limited-time promotional discounts
- Remove expired retention offers
- Customer service discount adjustments
- Clean up incorrectly applied discounts
- Remove trial period pricing
- End referral program bonuses
Returns: Updated subscription contract object with discount removed
Authentication: Requires API key authentication via X-API-Key header or api_key parameter
- https://membership-admin.appstle.com/api/external/v2/subscription-contracts-remove-discount
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
'https://membership-admin.appstle.com/api/external/v2/subscription-contracts-remove-discount?contractId=123456789&api_key=string&discountId=gid%3A%2F%2Fshopify%2FSubscriptionManualDiscount%2F123456789' \
-H 'X-API-Key: string'{ "get__typename": "string", "id": "string", "createdAt": {}, "updatedAt": {}, "nextBillingDate": {}, "status": "ACTIVE", "deliveryPrice": { "get__typename": "string", "amount": {}, "currencyCode": "USD" }, "lastPaymentStatus": "SUCCEEDED", "billingPolicy": { "get__typename": "string", "interval": "DAY", "intervalCount": 0, "anchors": [ … ], "maxCycles": 0, "minCycles": 0 }, "deliveryPolicy": { "get__typename": "string", "interval": "DAY", "intervalCount": 0, "anchors": [ … ] }, "lines": { "get__typename": "string", "nodes": [ … ], "pageInfo": { … } }, "customerPaymentMethod": { "get__typename": "string", "id": "string", "instrument": { … }, "revokedAt": {}, "revokedReason": "AUTHORIZE_NET_GATEWAY_NOT_ENABLED" }, "deliveryMethod": { "get__typename": "string", "id": "string", "methodType": "SHIPPING", "serviceCode": "string", "minDeliveryDateTime": {}, "maxDeliveryDateTime": {}, "additionalInformation": { … }, "brandedPromise": { … } }, "originOrder": { "get__typename": "string", "id": "string", "name": "string", "fulfillmentOrders": { … } }, "customer": { "get__typename": "string", "id": "string", "email": "string", "displayName": "string", "firstName": "string", "lastName": "string", "phone": "string" }, "discounts": { "get__typename": "string", "nodes": [ … ], "pageInfo": { … } }, "note": "string", "customAttributes": [ { … } ], "billingAttempts": { "get__typename": "string", "nodes": [ … ] } }