Skip to content

External (0.0.1)

Languages
Servers
https://membership-admin.appstle.com

Shipping & Delivery Profiles

APIs for managing Shopify delivery profiles, shipping rates, zones, and free shipping configuration for subscription memberships

Operations

Customer Discount History

APIs for retrieving historical discount code usage and redemption information for membership contracts

Operations

Cancellation Flow Configuration

APIs for managing membership cancellation flow settings including retention offers, survey questions, and cancel confirmation screens

Operations

Billing & Orders

APIs for managing membership billing attempts, recurring orders, payment retries, order history, and order skipping

Operations

One-Time Add-Ons

APIs for managing one-time product additions to upcoming subscription orders, including adding, retrieving, and removing one-off items

Operations

Membership Plans

APIs for managing membership/subscription plan groups, including creating plans, configuring discounts, billing intervals, and assigning products to plans

Operations

Product Bundles

APIs for managing subscription product bundles, bundle configurations, item grouping, and bundle-specific discount codes

Operations

Custom CSS Styling

APIs for retrieving custom CSS styles applied to subscription widgets and customer portal for theme customization

Operations

Customer Portal Configuration

APIs for managing customer portal settings including UI customization, text labels, feature toggles, and branding options for the member self-service portal

Operations

Membership Contracts

APIs for managing membership/subscription contracts including creation, updates, status changes, line items, discounts, and billing operations

Operations

Create and add custom discount to subscription

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 only
  • recurringCycleLimit=3: Discount for first 3 orders
  • recurringCycleLimit=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:

  1. Retention Offer: 25% off for 2 billing cycles
    • percentage=25, recurringCycleLimit=2, discountType='PERCENTAGE'
  2. Loyalty Reward: $5 off every order forever
    • amount=5.00, recurringCycleLimit=null, discountType='FIXED_AMOUNT'
  3. 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

Query
contractIdinteger(int64)required

Subscription contract ID to add discount to

Example: contractId=123456789
api_keystring

API Key (Deprecated - Use Header X-API-Key instead)

percentageinteger(int32)

Percentage discount value (use with discountType=PERCENTAGE)

Example: percentage=15
discountTitlestring

Display title for the discount

Example: discountTitle=Loyalty Discount
recurringCycleLimitinteger(int32)

Number of billing cycles discount applies (null for unlimited)

Example: recurringCycleLimit=3
appliesOnEachItemboolean

Apply discount to each item individually (true) or entire order (false)

amountnumber(double)

Fixed amount discount value (use with discountType=FIXED_AMOUNT)

Example: amount=10
discountTypestring

Discount type: PERCENTAGE or FIXED_AMOUNT

Example: discountType=PERCENTAGE
Headers
X-API-Keystring
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'

Responses

Discount successfully created and applied to subscription

Bodyapplication/json
get__typenamestring
idstring
createdAtobject
updatedAtobject
nextBillingDateobject
statusstring
Enum"ACTIVE""PAUSED""CANCELLED""EXPIRED""FAILED""$UNKNOWN"
deliveryPriceobject(DeliveryPrice)
lastPaymentStatusstring
Enum"SUCCEEDED""FAILED""$UNKNOWN"
billingPolicyobject(BillingPolicy)
deliveryPolicyobject(DeliveryPolicy)
linesobject(Lines)
customerPaymentMethodobject(CustomerPaymentMethod)
deliveryMethodobject(DeliveryMethod)
originOrderobject(OriginOrder)
customerobject(Customer)
discountsobject(Discounts)
notestring
customAttributesArray of objects(CustomAttribute1)
billingAttemptsobject(BillingAttempts)
Response
application/json
{ "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": [] } }

Update product variant in subscription contract

Request

Replaces an existing product variant with a new variant in a subscription contract. This allows customers to swap products in their membership while maintaining their subscription.

Key Features:

  • Product Swapping: Replace any line item's variant with a different variant
  • Quantity Preservation: Maintains the same quantity after variant swap
  • Price Updates: New variant pricing is applied automatically
  • Flexible Identification: Identify old variant by lineId OR variantId
  • Activity Logging: All variant changes are logged for audit trail

Identification Methods: You can identify the old variant using either:

  • oldLineId: The Shopify line item ID from the subscription contract
  • oldVariantId: The Shopify product variant ID At least one of these must be provided.

Common Use Cases:

  • Customer wants to change product flavor/color/size in their membership
  • Swap discontinued products with new alternatives
  • Change product preferences mid-subscription
  • Update seasonal product selections
  • Replace out-of-stock variants with alternatives

Important Notes:

  • Immediate Effect: Variant change applies to the next billing cycle
  • Validation: System validates new variant exists and is available
  • Same Product: Old and new variants can be from different products
  • Price Changes: Customer is charged the new variant's price

Variant ID Format:

  • Accepts both numeric IDs and GraphQL IDs (gid://shopify/ProductVariant/...)
  • System automatically converts to correct format

Authentication: Requires API key authentication via X-API-Key header or api_key parameter

Query
contractIdinteger(int64)required

Subscription contract ID

Example: contractId=12345
api_keystring

API Key (Deprecated - Use Header X-API-Key instead)

oldLineIdstring

Line item ID to replace (provide either oldLineId or oldVariantId)

Example: oldLineId=gid://shopify/SubscriptionLine/123
oldVariantIdstring

Old variant ID to replace (provide either oldLineId or oldVariantId)

Example: oldVariantId=40123456789
newVariantIdstringrequired

New variant ID to use as replacement

Example: newVariantId=40987654321
skipBillingboolean

Skip billing on plan change (no charge or refund)

Default false
Headers
X-API-Keystring
curl -i -X PUT \
  'https://membership-admin.appstle.com/api/external/v2/subscription-contract-update-variant?contractId=12345&api_key=string&oldLineId=gid%3A%2F%2Fshopify%2FSubscriptionLine%2F123&oldVariantId=40123456789&newVariantId=40987654321&skipBilling=false' \
  -H 'X-API-Key: string'

Responses

Variant successfully updated in subscription contract

Bodyapplication/json
get__typenamestring
idstring
createdAtobject
updatedAtobject
nextBillingDateobject
statusstring
Enum"ACTIVE""PAUSED""CANCELLED""EXPIRED""FAILED""$UNKNOWN"
deliveryPriceobject(DeliveryPrice)
lastPaymentStatusstring
Enum"SUCCEEDED""FAILED""$UNKNOWN"
billingPolicyobject(BillingPolicy)
deliveryPolicyobject(DeliveryPolicy)
linesobject(Lines)
customerPaymentMethodobject(CustomerPaymentMethod)
deliveryMethodobject(DeliveryMethod)
originOrderobject(OriginOrder)
customerobject(Customer)
discountsobject(Discounts)
notestring
customAttributesArray of objects(CustomAttribute1)
billingAttemptsobject(BillingAttempts)
Response
application/json
{ "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": [] } }

Add product line item to subscription contract

Request

Adds a new product (line item) to an existing subscription contract. This allows customers or merchants to add products to their recurring subscription orders.

Key Features:

  • Add Products: Include new products in future subscription deliveries
  • Quantity Control: Specify how many units of the product to add
  • Price Override: Set custom pricing for the added product
  • Immediate Effect: Changes apply to next billing cycle
  • Activity Logging: All additions are tracked in activity logs

Required Parameters:

  • contractId: Subscription contract ID to modify
  • variantId: Shopify product variant ID (with gid:// prefix or numeric)
  • quantity: Number of units to add (must be positive integer)
  • price: Price per unit in shop's base currency

Product Variant ID Format: Accepts two formats:

  • Shopify GID: gid://shopify/ProductVariant/12345678901
  • Numeric ID: 12345678901

Price Behavior:

  • Price is per unit, not total
  • Must be in shop's base currency (USD, EUR, etc.)
  • Can override product's default price
  • Does not include taxes or shipping
  • Total line item cost = price × quantity

Line Item Addition Rules:

  • Product variant must exist in Shopify catalog
  • Product must be active and available
  • Variant must have sufficient inventory (if tracked)
  • Contract must be ACTIVE or PAUSED (not CANCELLED)
  • Cannot add duplicate variants (use update quantity instead)

Common Use Cases:

  • Customer adds complementary product to existing subscription
  • Upsell additional products through customer portal
  • Merchant adds bonus items to customer subscriptions
  • Build custom "add-on" product selection interfaces
  • Cross-sell related products to existing subscribers
  • Create bundle upgrades (add multiple products at once)

Post-Addition Effects:

  • Next billing amount increases by (price × quantity)
  • Product appears in all future subscription deliveries
  • Customer receives confirmation of subscription update
  • Activity log records the addition with source (portal/merchant)
  • Contract's next billing date remains unchanged

Integration Example:

PUT /api/external/v2/subscription-contract-add-line-item?
  contractId=123456&
  variantId=gid://shopify/ProductVariant/987654321&
  quantity=2&
  price=19.99

This adds 2 units of variant 987654321 at $19.99 each ($39.98 total) to contract 123456.

Important Notes:

  • Changes apply to NEXT billing cycle, not current/past orders
  • If product is out of stock, order may be delayed or skipped
  • Price changes don't affect historical orders
  • Consider inventory availability before adding products

Authentication: Requires API key authentication via X-API-Key header or api_key parameter

Query
contractIdinteger(int64)required

Subscription contract ID

Example: contractId=12345
api_keystring

API Key (Deprecated - Use Header X-API-Key instead)

quantityinteger(int32)required

Quantity of product to add

Example: quantity=2
variantIdstringrequired

Shopify product variant ID (with or without gid:// prefix)

Example: variantId=gid://shopify/ProductVariant/987654321
pricenumber(double)required

Price per unit in shop's base currency

Example: price=19.99
Headers
X-API-Keystring
curl -i -X PUT \
  'https://membership-admin.appstle.com/api/external/v2/subscription-contract-add-line-item?contractId=12345&api_key=string&quantity=2&variantId=gid%3A%2F%2Fshopify%2FProductVariant%2F987654321&price=19.99' \
  -H 'X-API-Key: string'

Responses

Line item successfully added to subscription contract

Bodyapplication/json
get__typenamestring
idstring
createdAtobject
updatedAtobject
nextBillingDateobject
statusstring
Enum"ACTIVE""PAUSED""CANCELLED""EXPIRED""FAILED""$UNKNOWN"
deliveryPriceobject(DeliveryPrice)
lastPaymentStatusstring
Enum"SUCCEEDED""FAILED""$UNKNOWN"
billingPolicyobject(BillingPolicy)
deliveryPolicyobject(DeliveryPolicy)
linesobject(Lines)
customerPaymentMethodobject(CustomerPaymentMethod)
deliveryMethodobject(DeliveryMethod)
originOrderobject(OriginOrder)
customerobject(Customer)
discountsobject(Discounts)
notestring
customAttributesArray of objects(CustomAttribute1)
billingAttemptsobject(BillingAttempts)
Response
application/json
{ "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": [] } }

Bundle Settings

APIs for managing subscription bundle configuration settings including bundle behavior, pricing rules, and display options

Operations

Customer Payment Methods

APIs for managing customer payment methods, payment tokens, and payment method retrieval for subscriptions

Operations

Product Swap Rules

APIs for retrieving product swap/substitution options allowing members to exchange subscription items based on configured swap rules and variant groups

Operations

Subscription Contract Management

Operations

Subscription Billing

Operations

Billing Attempts

Operations