# Get detailed customer subscription information Retrieves comprehensive details for all subscription contracts associated with a specific customer. This endpoint returns complete subscription contract data including products, pricing, billing schedule, and status. Key Information Returned: - Contract Details: Contract ID, status (active, paused, cancelled), creation date - Products: Line items with product names, variants, quantities, and prices - Billing Information: Next billing date, billing frequency, payment method - Delivery Details: Shipping address, delivery method, delivery frequency - Pricing: Subtotal, discounts applied, total amount per cycle - Membership Plan: Associated subscription plan name and details - Order History: Past billing attempts and fulfillment records Subscription Contract Details Include: - Contract ID: Unique identifier for the subscription - Customer ID: Shopify customer ID associated with the contract - Status: ACTIVE, PAUSED, CANCELLED, EXPIRED - Billing Cycle: Number of completed billing cycles - Next Billing Date: When the next payment will be charged - Delivery Date: When the next order will be shipped - Products: All line items in the subscription with pricing - Discount Codes: Applied discount codes and their values - Custom Attributes: Any custom metadata or tags Common Use Cases: - Display full subscription list in customer account dashboard - Retrieve all contract details for customer support inquiries - Build custom customer portal with subscription management - Sync subscription data to external CRM or analytics systems - Generate customer subscription reports and analytics - Validate customer's active subscriptions before offering upgrades - Show subscription history and upcoming deliveries Response Format: Returns a List of SubscriptionContractDetailsDTO objects, one per active/paused contract. If customer has no subscriptions, returns an empty list. Authentication: Requires API key authentication via X-API-Key header or api_key parameter Endpoint: GET /api/external/v2/subscription-customers-detail/valid/{customerId} Version: 0.0.1 ## Path parameters: - `customerId` (integer, required) Shopify customer ID Example: 6789012345 ## Query parameters: - `api_key` (string) API Key (Deprecated - Use Header X-API-Key instead) ## Header parameters: - `X-API-Key` (string) ## Response 200 fields (application/json): - `id` (integer) - `shop` (string, required) - `graphSubscriptionContractId` (string) - `subscriptionContractId` (integer) - `billingPolicyInterval` (string) - `billingPolicyIntervalCount` (integer) - `currencyCode` (string) - `customerId` (integer) - `graphCustomerId` (string) - `deliveryPolicyInterval` (string) - `deliveryPolicyIntervalCount` (integer) - `status` (string) - `graphOrderId` (string) - `orderId` (integer) - `createdAt` (string) - `updatedAt` (string) - `nextBillingDate` (string) - `orderAmount` (number) - `orderName` (string) - `customerName` (string) - `customerEmail` (string) - `subscriptionCreatedEmailSent` (boolean) - `endsAt` (string) - `startsAt` (string) - `subscriptionCreatedEmailSentStatus` (string) Enum: "SENT", "UNSENT", "FAILED", "EMAIL_SETTINGS_DISABLED", "CUSTOMER_PAYMENT_EMPTY", "CONTRACT_PAUSED_STATUS" - `minCycles` (integer) - `maxCycles` (integer) - `customerFirstName` (string) - `customerLastName` (string) - `autoCharge` (boolean) - `importedId` (string) - `stopUpComingOrderEmail` (boolean) - `pausedFromActive` (boolean) - `subscriptionCreatedSmsSentStatus` (string) Enum: "SENT", "UNSENT", "FAILED", "SMS_SETTINGS_DISABLED", "CUSTOMER_PAYMENT_EMPTY", "CONTRACT_PAUSED_STATUS", "PHONE_NUMBER_EMPTY" - `phone` (string) - `activatedOn` (string) - `pausedOn` (string) - `cancelledOn` (string) - `contractDetailsJSON` (string) - `cancellationFeedback` (string) - `orderNote` (string) - `orderNoteAttributes` (string) - `allowDeliveryPriceOverride` (boolean) - `orderAmountUSD` (number) - `billingDateAfterTrial` (string) - `trialEndDate` (string) - `pausedBySecurityChallenge` (boolean) - `dunning` (boolean) - `contractAmount` (number) - `contractAmountUSD` (number) - `upcomingSwapRule` (string) - `emailBouncedOrFailed` (boolean) ## Response 400 fields (*/*): - `id` (integer) - `shop` (string, required) - `graphSubscriptionContractId` (string) - `subscriptionContractId` (integer) - `billingPolicyInterval` (string) - `billingPolicyIntervalCount` (integer) - `currencyCode` (string) - `customerId` (integer) - `graphCustomerId` (string) - `deliveryPolicyInterval` (string) - `deliveryPolicyIntervalCount` (integer) - `status` (string) - `graphOrderId` (string) - `orderId` (integer) - `createdAt` (string) - `updatedAt` (string) - `nextBillingDate` (string) - `orderAmount` (number) - `orderName` (string) - `customerName` (string) - `customerEmail` (string) - `subscriptionCreatedEmailSent` (boolean) - `endsAt` (string) - `startsAt` (string) - `subscriptionCreatedEmailSentStatus` (string) Enum: "SENT", "UNSENT", "FAILED", "EMAIL_SETTINGS_DISABLED", "CUSTOMER_PAYMENT_EMPTY", "CONTRACT_PAUSED_STATUS" - `minCycles` (integer) - `maxCycles` (integer) - `customerFirstName` (string) - `customerLastName` (string) - `autoCharge` (boolean) - `importedId` (string) - `stopUpComingOrderEmail` (boolean) - `pausedFromActive` (boolean) - `subscriptionCreatedSmsSentStatus` (string) Enum: "SENT", "UNSENT", "FAILED", "SMS_SETTINGS_DISABLED", "CUSTOMER_PAYMENT_EMPTY", "CONTRACT_PAUSED_STATUS", "PHONE_NUMBER_EMPTY" - `phone` (string) - `activatedOn` (string) - `pausedOn` (string) - `cancelledOn` (string) - `contractDetailsJSON` (string) - `cancellationFeedback` (string) - `orderNote` (string) - `orderNoteAttributes` (string) - `allowDeliveryPriceOverride` (boolean) - `orderAmountUSD` (number) - `billingDateAfterTrial` (string) - `trialEndDate` (string) - `pausedBySecurityChallenge` (boolean) - `dunning` (boolean) - `contractAmount` (number) - `contractAmountUSD` (number) - `upcomingSwapRule` (string) - `emailBouncedOrFailed` (boolean) ## Response 401 fields (*/*): - `id` (integer) - `shop` (string, required) - `graphSubscriptionContractId` (string) - `subscriptionContractId` (integer) - `billingPolicyInterval` (string) - `billingPolicyIntervalCount` (integer) - `currencyCode` (string) - `customerId` (integer) - `graphCustomerId` (string) - `deliveryPolicyInterval` (string) - `deliveryPolicyIntervalCount` (integer) - `status` (string) - `graphOrderId` (string) - `orderId` (integer) - `createdAt` (string) - `updatedAt` (string) - `nextBillingDate` (string) - `orderAmount` (number) - `orderName` (string) - `customerName` (string) - `customerEmail` (string) - `subscriptionCreatedEmailSent` (boolean) - `endsAt` (string) - `startsAt` (string) - `subscriptionCreatedEmailSentStatus` (string) Enum: "SENT", "UNSENT", "FAILED", "EMAIL_SETTINGS_DISABLED", "CUSTOMER_PAYMENT_EMPTY", "CONTRACT_PAUSED_STATUS" - `minCycles` (integer) - `maxCycles` (integer) - `customerFirstName` (string) - `customerLastName` (string) - `autoCharge` (boolean) - `importedId` (string) - `stopUpComingOrderEmail` (boolean) - `pausedFromActive` (boolean) - `subscriptionCreatedSmsSentStatus` (string) Enum: "SENT", "UNSENT", "FAILED", "SMS_SETTINGS_DISABLED", "CUSTOMER_PAYMENT_EMPTY", "CONTRACT_PAUSED_STATUS", "PHONE_NUMBER_EMPTY" - `phone` (string) - `activatedOn` (string) - `pausedOn` (string) - `cancelledOn` (string) - `contractDetailsJSON` (string) - `cancellationFeedback` (string) - `orderNote` (string) - `orderNoteAttributes` (string) - `allowDeliveryPriceOverride` (boolean) - `orderAmountUSD` (number) - `billingDateAfterTrial` (string) - `trialEndDate` (string) - `pausedBySecurityChallenge` (boolean) - `dunning` (boolean) - `contractAmount` (number) - `contractAmountUSD` (number) - `upcomingSwapRule` (string) - `emailBouncedOrFailed` (boolean) ## Response 404 fields (*/*): - `id` (integer) - `shop` (string, required) - `graphSubscriptionContractId` (string) - `subscriptionContractId` (integer) - `billingPolicyInterval` (string) - `billingPolicyIntervalCount` (integer) - `currencyCode` (string) - `customerId` (integer) - `graphCustomerId` (string) - `deliveryPolicyInterval` (string) - `deliveryPolicyIntervalCount` (integer) - `status` (string) - `graphOrderId` (string) - `orderId` (integer) - `createdAt` (string) - `updatedAt` (string) - `nextBillingDate` (string) - `orderAmount` (number) - `orderName` (string) - `customerName` (string) - `customerEmail` (string) - `subscriptionCreatedEmailSent` (boolean) - `endsAt` (string) - `startsAt` (string) - `subscriptionCreatedEmailSentStatus` (string) Enum: "SENT", "UNSENT", "FAILED", "EMAIL_SETTINGS_DISABLED", "CUSTOMER_PAYMENT_EMPTY", "CONTRACT_PAUSED_STATUS" - `minCycles` (integer) - `maxCycles` (integer) - `customerFirstName` (string) - `customerLastName` (string) - `autoCharge` (boolean) - `importedId` (string) - `stopUpComingOrderEmail` (boolean) - `pausedFromActive` (boolean) - `subscriptionCreatedSmsSentStatus` (string) Enum: "SENT", "UNSENT", "FAILED", "SMS_SETTINGS_DISABLED", "CUSTOMER_PAYMENT_EMPTY", "CONTRACT_PAUSED_STATUS", "PHONE_NUMBER_EMPTY" - `phone` (string) - `activatedOn` (string) - `pausedOn` (string) - `cancelledOn` (string) - `contractDetailsJSON` (string) - `cancellationFeedback` (string) - `orderNote` (string) - `orderNoteAttributes` (string) - `allowDeliveryPriceOverride` (boolean) - `orderAmountUSD` (number) - `billingDateAfterTrial` (string) - `trialEndDate` (string) - `pausedBySecurityChallenge` (boolean) - `dunning` (boolean) - `contractAmount` (number) - `contractAmountUSD` (number) - `upcomingSwapRule` (string) - `emailBouncedOrFailed` (boolean)