APIs for managing Shopify delivery profiles, shipping rates, zones, and free shipping configuration for subscription memberships
- Add product to recurring subscription
External (0.0.1)
Request
Applies an existing Shopify discount code to a subscription contract. The discount code must already exist in Shopify and be valid for subscription usage.
Discount Application Process:
- Code Validation: Verifies discount code exists in Shopify
- Eligibility Check: Ensures code is valid for subscription use
- Contract Update: Applies discount to subscription contract
- Price Recalculation: Updates subscription pricing with discount applied
- Activity Logging: Records discount application event
Key Features:
- Existing Code Support: Uses Shopify discount codes already created in admin
- Automatic Validation: Checks code validity and subscription eligibility
- Immediate Application: Discount applies to next billing cycle
- Contract Synchronization: Keeps Shopify contract in sync with discount
Discount Code Requirements:
- Must exist in Shopify admin
- Must be active and not expired
- Must be eligible for subscription purchases
- Usage limits must not be exceeded
Use Cases:
- Allow customers to apply promotional codes to existing subscriptions
- Customer service applying retention discounts
- Reward program integration with discount codes
- Referral program discount application
- Seasonal promotion code application
- Win-back campaign discount codes
Returns: Updated subscription contract object with discount applied
Authentication: Requires API key authentication via X-API-Key header or api_key parameter
- https://membership-admin.appstle.com/api/external/v2/subscription-contracts-apply-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-apply-discount?contractId=123456789&api_key=string&discountCode=SUMMER2024' \
-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
Adds a new product variant to a subscription contract's recurring line items. The product will be included in all future recurring orders.
Product Addition Process:
- Variant Validation: Verifies product variant exists and is available
- Add to Contract: Adds line item to subscription's recurring products
- Quantity Setting: Sets initial quantity for the product
- Price Calculation: Calculates pricing including any applicable discounts
- Shipping Update: May recalculate shipping if weight/dimensions change
- Activity Logging: Records product addition event
Key Features:
- Recurring Addition: Product added to every future order
- Quantity Control: Specify exact quantity to add
- Discount Inheritance: New item inherits subscription-level discounts
- Immediate Effect: Applies to next billing cycle
- Freeze Protection: Validates subscription isn't frozen before minimum cycles
Variant ID Format:
- Accepts Shopify variant ID as string
- Can be numeric ID or GraphQL format
- Example: "12345678" or "gid://shopify/ProductVariant/12345678"
Use Cases:
- Customer upgrades subscription to include more products
- Cross-sell additional products to existing subscribers
- Allow customers to customize subscriptions in portal
- Add seasonal products to subscriptions
- Build-a-box subscription customization
- Upsell workflows during customer interactions
Important Notes:
- Product must be available for purchase
- Subscription must not be frozen (before min cycles)
- Price updates automatically with subscription billing
- Quantity must be positive integer
Returns: Updated subscription contract object with new line item
Authentication: Requires API key authentication via X-API-Key header or api_key parameter
- https://membership-admin.appstle.com/api/external/v2/subscription-contracts-add-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-add-line-item?contractId=123456789&api_key=string&quantity=2&variantId=12345678' \
-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
Creates a custom discount and applies it to a subscription contract. This endpoint allows you to create on-the-fly discounts without requiring pre-existing discount codes in Shopify.
Discount Creation & Application:
- Custom Discount: Creates discount directly on subscription contract
- Flexible Types: Supports percentage off or fixed amount off
- Cycle Limits: Optional limit on number of billing cycles discount applies
- Item-Level Control: Option to apply discount to each item vs entire order
- Immediate Effect: Discount applies to next billing cycle
Discount Parameters:
- Percentage: Percentage discount (e.g., 15 for 15% off) - use for discountType='PERCENTAGE'
- Amount: Fixed amount discount (e.g., 10.00 for $10 off) - use for discountType='FIXED_AMOUNT'
- Title: Display name for the discount (e.g., 'Loyalty Discount')
- Cycle Limit: Number of billing cycles discount applies (null = unlimited)
- Applies On Each Item: true = per-item discount, false = order-level discount
Discount Types:
- PERCENTAGE: Percentage-based discount (use 'percentage' parameter)
- FIXED_AMOUNT: Fixed dollar amount discount (use 'amount' parameter)
Cycle Limit Examples:
recurringCycleLimit=1: Discount for first order onlyrecurringCycleLimit=3: Discount for first 3 ordersrecurringCycleLimit=null: Discount applies forever
Use Cases:
- Customer retention offers (e.g., 20% off next 3 orders)
- Loyalty rewards and point redemptions
- Win-back campaigns with limited-time discounts
- Customer service compensation discounts
- Referral program rewards
- First-order discounts for new subscribers
- Seasonal promotions on existing subscriptions
Example Scenarios:
- Retention Offer: 25% off for 2 billing cycles
- percentage=25, recurringCycleLimit=2, discountType='PERCENTAGE'
- Loyalty Reward: $5 off every order forever
- amount=5.00, recurringCycleLimit=null, discountType='FIXED_AMOUNT'
- First Order Deal: 50% off first order only
- percentage=50, recurringCycleLimit=1, discountType='PERCENTAGE'
Returns: Updated subscription contract object with discount applied
Authentication: Requires API key authentication via X-API-Key header or api_key parameter
Subscription contract ID to add discount to
Percentage discount value (use with discountType=PERCENTAGE)
Number of billing cycles discount applies (null for unlimited)
Fixed amount discount value (use with discountType=FIXED_AMOUNT)
- https://membership-admin.appstle.com/api/external/v2/subscription-contracts-add-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-add-discount?contractId=123456789&api_key=string&percentage=15&discountTitle=Loyalty+Discount&recurringCycleLimit=3&appliesOnEachItem=true&amount=10&discountType=PERCENTAGE' \
-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": [ … ] } }