Skip to content

External APIs (0.0.1)

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.

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

Subscription Management

Core APIs for managing the complete subscription lifecycle including creation, updates, pausing, resuming, and cancellation of subscriptions.

Operations

Get subscription contract analytics and revenue metrics

Request

Retrieves comprehensive analytics for a specific subscription contract, including total revenue generated, number of successful orders, and formatted revenue display. This endpoint provides key performance metrics for understanding the financial impact of individual subscriptions.

What This Endpoint Returns: Financial and operational analytics for a single subscription contract, calculated from all successful billing attempts throughout the subscription's lifetime. Unlike realtime contract queries, this provides historical aggregated data.

Metrics Included:

Revenue Metrics:

  • totalOrderAmount: Total revenue in decimal format (e.g., 299.95)
  • totalOrderRevenue: Formatted currency string (e.g., "$299.95")
  • Calculated from all SUCCESS status billing attempts
  • Includes taxes, shipping, and discounts
  • Does NOT include failed or pending payments

Order Count:

  • totalOrders: Count of successful billing attempts
  • Represents number of orders generated by subscription
  • Does NOT include failed billing attempts
  • Starts at 0 for brand new subscriptions

Currency Formatting:

  • Uses shop's configured money_format
  • Respects shop's currency code (USD, EUR, GBP, etc.)
  • Handles currency symbols and decimal places correctly
  • Falls back to USD if currency unknown

Calculation Logic:

Data Source:

SELECT 
  COUNT(*) as totalOrders,
  SUM(order_amount) as totalOrderAmount
FROM subscription_billing_attempt
WHERE shop = ? 
  AND contract_id = ?
  AND status = 'SUCCESS'

What Gets Counted:

  • ✅ Initial subscription order
  • ✅ All successful recurring orders
  • ✅ Manual billing attempts that succeeded
  • ✅ Retry attempts that eventually succeeded
  • ❌ Failed payment attempts
  • ❌ Skipped billing cycles
  • ❌ Cancelled/voided orders
  • ❌ Pending/in-progress billing

Use Cases:

1. Customer Lifetime Value:

  • Calculate total revenue from specific customer
  • Measure subscription ROI
  • Identify high-value subscriptions
  • Track revenue growth over time

2. Subscription Performance:

  • Analyze revenue per subscription
  • Compare subscriptions by total value
  • Identify most profitable subscription types
  • Calculate average order value

3. Customer Portal:

  • Display "You've saved $XXX" messaging
  • Show "X orders delivered" stats
  • Celebrate subscription milestones
  • Build customer loyalty through transparency

4. Reporting & Analytics:

  • Build subscription revenue dashboards
  • Generate customer value reports
  • Track subscription health metrics
  • Forecast future revenue

5. Business Intelligence:

  • Segment customers by subscription value
  • Identify churn risk (low order count)
  • Calculate retention rates
  • Measure subscription program success

Response Format:

{
  "totalOrders": 12,
  "totalOrderAmount": 599.88,
  "totalOrderRevenue": "$599.88"
}

Response Fields:

  • totalOrders (integer): Count of successful billing attempts
  • totalOrderAmount (decimal): Numeric revenue total
  • totalOrderRevenue (string): Formatted currency display

Example Scenarios:

Brand New Subscription:

{
  "totalOrders": 0,
  "totalOrderAmount": 0.00,
  "totalOrderRevenue": "$0.00"
}

After First Successful Order:

{
  "totalOrders": 1,
  "totalOrderAmount": 49.99,
  "totalOrderRevenue": "$49.99"
}

Established Subscription (EUR):

{
  "totalOrders": 24,
  "totalOrderAmount": 1199.76,
  "totalOrderRevenue": "€1.199,76"
}

Integration Examples:

Customer Portal - Loyalty Display:

const analytics = await fetch(
  `/api/external/v2/subscription-contract-details/analytics/${contractId}`,
  { headers: { 'X-API-Key': 'your-key' } }
).then(r => r.json());

const loyaltyMessage = `
  <div class="loyalty-badge">
    <h3>Thank you for your loyalty!</h3>
    <p>You've received ${analytics.totalOrders} orders</p>
    <p>Total value: ${analytics.totalOrderRevenue}</p>
  </div>
`;

Revenue Dashboard:

// Fetch analytics for multiple subscriptions
const contractIds = [123, 456, 789];
const analyticsPromises = contractIds.map(id => 
  getContractAnalytics(id)
);

const allAnalytics = await Promise.all(analyticsPromises);
const totalRevenue = allAnalytics.reduce(
  (sum, a) => sum + a.totalOrderAmount, 0
);

console.log(`Total subscription revenue: $${totalRevenue.toFixed(2)}`);

Important Considerations:

Data Accuracy:

  • Based on Appstle's billing attempt records
  • May differ slightly from Shopify order totals
  • Includes only what Appstle successfully billed
  • Updated after each billing attempt completes

Currency Handling:

  • Formatting uses shop's money_format setting
  • Different shops may have different decimal separators
  • Currency symbol placement varies by locale
  • Always use totalOrderAmount for calculations

Performance:

  • Fast database aggregation query
  • Typical response time: 100-300ms
  • Indexed by shop and contract ID
  • Suitable for real-time display

Best Practices:

  1. Use for Display: Use totalOrderRevenue for customer-facing display
  2. Calculate with Amount: Use totalOrderAmount for mathematical operations
  3. Cache Strategically: Cache for dashboards, fetch real-time for critical displays
  4. Handle Zero: Gracefully handle new subscriptions with 0 orders
  5. Validate Contract: Ensure contract exists before querying analytics

Limitations:

What's NOT Included:

  • Future projected revenue
  • Failed payment attempt counts
  • Refunds or chargebacks
  • Pending/processing orders
  • Orders from other subscriptions

Related Calculations:

Average Order Value:

const aov = analytics.totalOrderAmount / analytics.totalOrders;
console.log(`Average order value: $${aov.toFixed(2)}`);

Customer Lifetime Value (projected):

const monthsActive = calculateMonthsActive(contract.createdAt);
const monthlyRevenue = analytics.totalOrderAmount / monthsActive;
const projectedLTV = monthlyRevenue * 12; // Annual LTV

Authentication: Requires valid X-API-Key header

Path
contractIdstringrequired

Contract ID

Query
api_keystring

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

Headers
X-API-Keystring
curl -i -X GET \
  'https://subscription-admin.appstle.com/api/external/v2/subscription-contract-details/analytics/{contractId}?api_key=string' \
  -H 'X-API-Key: string'

Responses

Successfully retrieved contract analytics

Bodyapplication/json
totalOrderCountinteger(int64)
totalOrderAmountnumber(double)
totalOrderRevenuestring
Response
application/json
{ "totalOrders": 12, "totalOrderAmount": 599.88, "totalOrderRevenue": "$599.88" }

Get delivery options for subscription contract

Request

Retrieves all valid delivery methods available for a specific subscription contract. Returns shipping profiles and delivery options based on the contract's delivery address and product characteristics.

Delivery Information Returned:

  • Available shipping profiles
  • Delivery methods for each profile
  • Shipping rates and costs
  • Delivery speed (standard, express, etc.)
  • Method names and descriptions
  • Eligibility based on address and products

Filtering Behavior: By default, returns only delivery methods valid for the contract:

  • Matches delivery address country/region
  • Compatible with subscription products
  • Available for contract weight/dimensions

Include All Methods: Use header X-Include-All-Methods: true to return all delivery methods regardless of eligibility. Useful for admin UIs where you want to show all options.

Use Cases:

  • Display delivery method selector in customer portal
  • Allow customers to change shipping method
  • Calculate shipping costs for subscription
  • Validate delivery method during subscription updates
  • Show upgrade options (standard to express)

Common Scenarios:

Customer Portal - Change Delivery Speed:

  1. Call this endpoint with contractId
  2. Display available methods to customer
  3. Customer selects preferred method
  4. Update subscription with new delivery method ID

Subscription Creation - Delivery Selection:

  1. Get delivery options for draft contract
  2. Present options during checkout/signup
  3. Create subscription with selected method

Important Notes:

  • Delivery options depend on current contract address
  • Changing address may change available methods
  • Costs may vary based on products in subscription
  • Some methods may have minimum order requirements
  • International shipping may have additional restrictions

Authentication: Requires X-API-Key header

Query
contractIdinteger(int64)required

Contract Id

Headers
X-API-Keystring
X-Include-All-Methodsstring
curl -i -X GET \
  'https://subscription-admin.appstle.com/api/external/v2/data/contract-delivery-options?contractId=0' \
  -H 'X-API-Key: string' \
  -H 'X-Include-All-Methods: string'

Responses

Delivery options retrieved successfully

Bodyapplication/json
Response
application/json
[ { "profileId": 12345, "profileName": "Standard Shipping", "methods": [] } ]

Subscription Payments

APIs for managing subscription payment methods, processing payments, handling payment retries, and updating billing information.

Operations

Subscription Contracts

APIs for managing subscription contracts including delivery schedules, pricing, order notes, billing cycles, and shipping addresses.

Operations

Subscription Products

APIs for managing products within subscriptions including adding, removing, updating quantities, and swapping products.

Operations

Billing & Payments

APIs for handling billing operations, payment processing, and financial transactions related to subscriptions.

Operations

Subscription Discounts

APIs for managing discounts and promotional codes applied to subscriptions.

Operations

Subscription One-Time Products

APIs for managing one-time add-on products that can be purchased alongside recurring subscription items.

Operations

Subscription Plans

APIs for managing subscription plans, pricing tiers, and plan configurations.

Operations

Build-a-Box & Bundles

APIs for managing customizable product boxes and bundles where customers can select multiple items.

Operations

Product Catalog

APIs for managing the product catalog including product information, variants, and inventory.

Operations

Operations & Settings

APIs for managing operational settings, configurations, and administrative functions.

Operations

Customer Portal

APIs powering the customer-facing portal where subscribers can manage their own subscriptions.

Operations

Customers

APIs for managing customer information, profiles, and account details.

Operations