Comprehensive API documentation for managing subscriptions, payments, and related operations. These APIs allow you to programmatically manage subscription lifecycles, handle payments, configure products, and integrate subscription functionality into your applications.
- Update subscription delivery method
External APIs (0.0.1)
Request
Updates the maximum number of billing cycles (orders) after which a subscription will automatically terminate. This creates a fixed-duration subscription that ends after a specific number of orders.
What are Maximum Cycles? Maximum cycles define subscription duration limits where:
- Subscription automatically cancels after the specified number of orders
- No further orders are generated once maximum is reached
- Useful for fixed-term offers, trials, or seasonal subscriptions
- Customer is notified before final order (if configured)
Key Features:
- Cannot set below current cycle count (prevents immediate cancellation)
- Setting to null creates an indefinite subscription
- Automatically reschedules order queue based on new limit
- Preserves all other subscription settings
- Validates against current subscription progress
Current Cycle Calculation:
- Current cycle = Successful billing attempts + 1
- Failed payments don't count toward maximum
- First order is cycle 1, second is cycle 2, etc.
- System prevents setting max below current position
Common Use Cases:
- Trial Subscriptions: '3-box trial' that auto-ends
- Seasonal Programs: '6-month summer subscription'
- Limited Series: '12-issue magazine subscription'
- Promotional Offers: 'First 5 boxes at special price'
- Gift Subscriptions: Fixed duration gifts that don't renew
What Happens at Maximum: When a subscription reaches its maximum cycles:
- Final order is processed normally
- Subscription status changes to CANCELLED
- No future orders are scheduled
- Customer receives cancellation notification
- Cannot be reactivated (new subscription required)
Interaction with Min Cycles:
- Can have both min and max (e.g., 3 min, 12 max)
- Min cycles enforces commitment period
- Max cycles enforces termination
- Common pattern: Commitment with defined end
Queue Management: After updating max cycles:
- System recalculates future order schedule
- Removes orders beyond the new maximum
- Adjusts upcoming order notifications
- Updates subscription end date projections
Important Notes:
- Validation prevents accidental immediate cancellation
- Changes apply to future billing cycles only
- Activity log tracks old and new values
- Consider customer communication for changes
- Setting null removes any duration limit
Authentication: Requires valid X-API-Key header
Maximum Cycles. The total number of orders after which the subscription will automatically terminate. Must be greater than or equal to the current cycle count and any configured minimum cycles. Common values:
- 3: Three-order trial
- 6: Six-month seasonal subscription
- 12: Annual subscription
- 24: Two-year commitment
- null: Ongoing subscription with no end date
- https://subscription-admin.appstle.com/api/external/v2/subscription-contracts-update-max-cycles
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
'https://subscription-admin.appstle.com/api/external/v2/subscription-contracts-update-max-cycles?contractId=0&api_key=string&maxCycles=12' \
-H 'X-API-Key: string'{ "id": "gid://shopify/SubscriptionContract/123456789", "status": "ACTIVE", "nextBillingDate": "2024-04-01T00:00:00Z", "createdAt": "2024-01-01T00:00:00Z", "customer": { "id": "gid://shopify/Customer/987654321", "email": "customer@example.com", "displayName": "John Doe" }, "billingPolicy": { "interval": "MONTH", "intervalCount": 1, "minCycles": 3, "maxCycles": 12, "anchors": [ … ] }, "deliveryPolicy": { "interval": "MONTH", "intervalCount": 1 }, "lastBillingAttemptDate": "2024-03-01T00:00:00Z", "orders": { "edges": [ … ] }, "lines": { "edges": [ … ] } }
Request
Updates the delivery method for a subscription contract, supporting standard shipping, local delivery, and customer pickup options. The delivery method determines how future orders will be fulfilled.
Delivery Method Types: The system automatically determines the type based on the subscription's current delivery address:
- SHIPPING: Standard shipping to customer address (default)
- LOCAL: Local delivery within merchant's delivery zones
- PICK_UP: Customer pickup at designated location
Two Ways to Update:
- Manual Parameters: Provide title, code, and presentment title directly
- Delivery Method ID: Provide a Shopify DeliveryMethodDefinition ID to auto-populate all fields
Using Delivery Method ID: When providing a delivery-method-id:
- System fetches the method from Shopify's delivery profiles
- Automatically sets title, code, and presentment title
- Applies associated delivery price if defined
- ID can be numeric or full GraphQL ID format
Delivery Type Requirements:
- Standard Shipping: No additional requirements
- Local Delivery: Phone number must exist in delivery address
- Pickup: Pickup location must be configured in subscription
Price Updates:
- If using delivery-method-id with a fixed price, updates delivery price
- Manual updates don't change the delivery price
- Price changes affect all future orders
Side Effects:
- Creates activity log entry with method details
- May remove invalid discount codes automatically
- Updates apply to all future orders immediately
- No customer notification sent
Common Use Cases:
- Switch from standard shipping to express shipping
- Change pickup location for customer convenience
- Update local delivery options based on availability
- Apply seasonal delivery methods
Important Notes:
- Cannot change the delivery type (shipping/local/pickup) - only the method within that type
- Delivery methods must be configured in Shopify's shipping settings
- Changes don't affect orders already in fulfillment
Authentication: Requires valid X-API-Key header
Subscription contract ID to update
Display name of the delivery method. This is what customers see. Ignored if delivery-method-id is provided.
Internal code for the delivery method. Often same as title. Used for system identification. Ignored if delivery-method-id is provided.
Localized version of the title for multi-language stores. Often same as title for single-language stores. Ignored if delivery-method-id is provided.
Optional Shopify DeliveryMethodDefinition ID. When provided, automatically fetches and applies the delivery method's title, code, presentment title, and price. Can be numeric ID or full GraphQL ID (gid://shopify/DeliveryMethodDefinition/123).
- https://subscription-admin.appstle.com/api/external/v2/subscription-contracts-update-delivery-method
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
'https://subscription-admin.appstle.com/api/external/v2/subscription-contracts-update-delivery-method?contractId=123456789&delivery-method-title=Express+Shipping&delivery-method-code=EXPRESS_SHIP&delivery-method-presentment-title=Express+Shipping&delivery-method-id=123456' \
-H 'X-API-Key: sk_live_1234567890abcdef'No contentRequest
Updates the delivery interval for the specified subscription contract. This endpoint allows external API consumers to change the delivery interval count and type (of type SellingPlanInterval) used for scheduling deliveries.
The service validates that the contract exists, that the new delivery interval differs from the current setting, and that it meets all business rules.
Authentication is enforced via the X-API-Key header (the 'api_key' parameter is deprecated).
- https://subscription-admin.appstle.com/api/external/v2/subscription-contracts-update-delivery-interval
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
'https://subscription-admin.appstle.com/api/external/v2/subscription-contracts-update-delivery-interval?contractId=0&api_key=string&deliveryIntervalCount=0&deliveryInterval=DAY' \
-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" }, "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": [ … ] } }