# Get raw Shopify GraphQL contract response Retrieves the complete, unprocessed subscription contract data directly from Shopify's GraphQL API. This endpoint returns the full Shopify subscription contract object exactly as Shopify provides it, including all nested fields, relationships, and GraphQL metadata. What This Endpoint Returns: Unlike processed/transformed endpoints, this returns Shopify's raw SubscriptionContract GraphQL object with all available fields. This is the same data structure you would receive if querying Shopify's GraphQL API directly, making it ideal for: - Debugging Shopify data synchronization issues - Accessing fields not exposed in other endpoints - Understanding complete Shopify contract structure - Building custom integrations requiring full data - Comparing Shopify source data with processed data Data Included: Contract Core: - Full subscription contract object from Shopify - All GraphQL __typename fields preserved - Complete nested object structures - All available Shopify contract fields Customer Information: - Complete customer object with all fields - Default address details - Customer tags and metadata - Marketing preferences Line Items: - Full line item details with edges/nodes structure - Product and variant complete objects - Pricing policies with all cycle discounts - Line item custom attributes - Current and original prices Billing & Delivery: - Complete billing policy object - Full delivery policy details - Delivery method with all fields - Delivery price breakdown - Billing anchor details Payment Information: - Payment method details (if available) - Customer payment instrument - Payment gateway information Orders & History: - Origin order details - Last payment status - Historical billing attempts (in Appstle) Use Cases: 1. Debugging & Troubleshooting: - Investigate data sync discrepancies - Verify what Shopify actually stores - Debug webhook payload issues - Compare expected vs actual data 2. Advanced Integrations: - Access Shopify-specific fields not in standard APIs - Build custom analytics using raw data - Integrate with Shopify GraphQL directly - Extract fields for custom processing 3. Data Analysis: - Analyze complete contract structure - Extract all available metadata - Build comprehensive data exports - Perform deep data audits 4. Development & Testing: - Understand Shopify's data model - Test new feature development - Verify API responses - Documentation and examples Response Structure: Returns SubscriptionContractQuery.SubscriptionContract object: json { "id": "gid://shopify/SubscriptionContract/123456789", "status": "ACTIVE", "nextBillingDate": "2024-03-15T00:00:00Z", "customer": { "id": "gid://shopify/Customer/987654321", "email": "customer@example.com", "displayName": "John Doe", "__typename": "Customer" }, "lines": { "edges": [ { "node": { "id": "gid://shopify/SubscriptionLine/111111", "quantity": 2, "variantId": "gid://shopify/ProductVariant/222222", "title": "Monthly Coffee Box", "variantTitle": "Medium Roast", "currentPrice": { "amount": "29.99", "currencyCode": "USD" }, "pricingPolicy": {...}, "__typename": "SubscriptionLine" } } ] }, "billingPolicy": { "interval": "MONTH", "intervalCount": 1, "minCycles": 3, "maxCycles": 12 }, "deliveryPolicy": {...}, "deliveryMethod": {...}, "__typename": "SubscriptionContract" } Important Considerations: Data Source: - Queries Shopify GraphQL API in real-time - NOT cached in Appstle database - Always returns current Shopify state - Subject to Shopify API rate limits Performance: - Slower than database queries (500-1500ms typical) - Makes real-time call to Shopify - Response size can be large (10-50 KB) - Use sparingly to avoid rate limits GraphQL Structure: - Includes __typename fields throughout - Uses GraphQL ID format (gid://shopify/...) - Nested edges/nodes structure for lists - All fields as defined in Shopify's schema Best Practices: 1. Use for Debugging: Perfect for troubleshooting data issues 2. Avoid Polling: Don't call repeatedly - use cached/processed endpoints instead 3. Cache Response: Cache the response if using for display 4. Parse Carefully: Handle GraphQL structure (edges/nodes) 5. Monitor Rate Limits: Each call counts against Shopify API limits When to Use vs Other Endpoints: Use this endpoint when: - Need complete Shopify contract data - Debugging synchronization issues - Accessing Shopify-specific fields - Building Shopify GraphQL integrations Use /api/external/v2/subscription-contract-details when: - Need processed, filtered contract data - Want faster response times - Querying multiple contracts - Building customer-facing UIs Authentication: Requires valid X-API-Key header Endpoint: GET /api/external/v2/subscription-contracts/contract-external/{contractId} Version: 0.0.1 ## Path parameters: - `contractId` (integer, required) Contract ID ## 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): - `get__typename` (string) - `id` (string) - `createdAt` (object) - `updatedAt` (object) - `nextBillingDate` (object) - `status` (string) Enum: "ACTIVE", "PAUSED", "CANCELLED", "EXPIRED", "FAILED", "$UNKNOWN" - `deliveryPrice` (object) - `deliveryPrice.amount` (object) - `deliveryPrice.currencyCode` (string) Enum: "USD", "EUR", "GBP", "CAD", "AFN", "ALL", "DZD", "AOA", "ARS", "AMD", "AWG", "AUD", "BBD", "AZN", "BDT", "BSD", "BHD", "BIF", "BYN", "BZD", "BMD", "BTN", "BAM", "BRL", "BOB", "BWP", "BND", "BGN", "MMK", "KHR", "CVE", "KYD", "XAF", "CLP", "CNY", "COP", "KMF", "CDF", "CRC", "HRK", "CZK", "DKK", "DJF", "DOP", "XCD", "EGP", "ERN", "ETB", "FKP", "XPF", "FJD", "GIP", "GMD", "GHS", "GTQ", "GYD", "GEL", "GNF", "HTG", "HNL", "HKD", "HUF", "ISK", "INR", "IDR", "ILS", "IRR", "IQD", "JMD", "JPY", "JEP", "JOD", "KZT", "KES", "KID", "KWD", "KGS", "LAK", "LVL", "LBP", "LSL", "LRD", "LYD", "LTL", "MGA", "MKD", "MOP", "MWK", "MVR", "MRU", "MXN", "MYR", "MUR", "MDL", "MAD", "MNT", "MZN", "NAD", "NPR", "ANG", "NZD", "NIO", "NGN", "NOK", "OMR", "PAB", "PKR", "PGK", "PYG", "PEN", "PHP", "PLN", "QAR", "RON", "RUB", "RWF", "WST", "SHP", "SAR", "RSD", "SCR", "SLL", "SGD", "SDG", "SOS", "SYP", "ZAR", "KRW", "SSP", "SBD", "LKR", "SRD", "SZL", "SEK", "CHF", "TWD", "THB", "TJS", "TZS", "TOP", "TTD", "TND", "TRY", "TMT", "UGX", "UAH", "AED", "UYU", "UZS", "VUV", "VES", "VND", "XOF", "YER", "ZMW", "USDC", "BYR", "STD", "STN", "VED", "VEF", "XXX", "$UNKNOWN" - `lastPaymentStatus` (string) Enum: "SUCCEEDED", "FAILED", "$UNKNOWN" - `billingPolicy` (object) - `billingPolicy.interval` (string) Enum: "DAY", "WEEK", "MONTH", "YEAR", "$UNKNOWN" - `billingPolicy.intervalCount` (integer) - `billingPolicy.anchors` (array) - `billingPolicy.anchors.cutoffDay` (integer) - `billingPolicy.anchors.day` (integer) - `billingPolicy.anchors.month` (integer) - `billingPolicy.anchors.type` (string) Enum: "WEEKDAY", "MONTHDAY", "YEARDAY", "$UNKNOWN" - `billingPolicy.maxCycles` (integer) - `billingPolicy.minCycles` (integer) - `deliveryPolicy` (object) - `lines` (object) - `lines.nodes` (array) - `lines.nodes.sellingPlanId` (string) - `lines.nodes.sellingPlanName` (string) - `lines.nodes.productId` (string) - `lines.nodes.sku` (string) - `lines.nodes.title` (string) - `lines.nodes.variantId` (string) - `lines.nodes.quantity` (integer) - `lines.nodes.customAttributes` (array) - `lines.nodes.customAttributes.key` (string) - `lines.nodes.customAttributes.value` (string) - `lines.nodes.lineDiscountedPrice` (object) - `lines.nodes.variantImage` (object) - `lines.nodes.variantImage.transformedSrc` (object) - `lines.nodes.variantTitle` (string) - `lines.nodes.currentPrice` (object) - `lines.nodes.discountAllocations` (array) - `lines.nodes.discountAllocations.discount` (object) - `lines.nodes.pricingPolicy` (object) - `lines.nodes.pricingPolicy.basePrice` (object) - `lines.nodes.pricingPolicy.cycleDiscounts` (array) - `lines.nodes.pricingPolicy.cycleDiscounts.afterCycle` (integer) - `lines.nodes.pricingPolicy.cycleDiscounts.computedPrice` (object) - `lines.nodes.pricingPolicy.cycleDiscounts.adjustmentType` (string) Enum: "PERCENTAGE", "FIXED_AMOUNT", "PRICE", "$UNKNOWN" - `lines.nodes.pricingPolicy.cycleDiscounts.adjustmentValue` (object) - `lines.nodes.taxable` (boolean) - `lines.pageInfo` (object) - `lines.pageInfo.hasPreviousPage` (boolean) - `lines.pageInfo.hasNextPage` (boolean) - `lines.pageInfo.startCursor` (string) - `lines.pageInfo.endCursor` (string) - `customerPaymentMethod` (object) - `customerPaymentMethod.instrument` (object) - `customerPaymentMethod.revokedAt` (object) - `customerPaymentMethod.revokedReason` (string) Enum: "AUTHORIZE_NET_GATEWAY_NOT_ENABLED", "AUTHORIZE_NET_RETURNED_NO_PAYMENT_METHOD", "FAILED_TO_UPDATE_CREDIT_CARD", "STRIPE_API_AUTHENTICATION_ERROR", "STRIPE_API_INVALID_REQUEST_ERROR", "STRIPE_GATEWAY_NOT_ENABLED", "STRIPE_RETURNED_NO_PAYMENT_METHOD", "STRIPE_PAYMENT_METHOD_NOT_CARD", "BRAINTREE_API_AUTHENTICATION_ERROR", "BRAINTREE_GATEWAY_NOT_ENABLED", "BRAINTREE_RETURNED_NO_PAYMENT_METHOD", "BRAINTREE_PAYMENT_METHOD_NOT_CARD", "PAYMENT_METHOD_VERIFICATION_FAILED", "THREE_D_SECURE_FLOW_IN_VERIFICATION_NOT_IMPLEMENTED", "MANUALLY_REVOKED", "FAILED_TO_RETRIEVE_BILLING_ADDRESS", "MERGED", "CUSTOMER_REDACTED", "TOO_MANY_CONSECUTIVE_FAILURES", "CVV_ATTEMPTS_LIMIT_EXCEEDED", "$UNKNOWN" - `deliveryMethod` (object) - `originOrder` (object) - `originOrder.name` (string) - `originOrder.fulfillmentOrders` (object) - `customer` (object) - `customer.displayName` (string) - `customer.firstName` (string) - `customer.lastName` (string) - `customer.email` (string) - `customer.phone` (string) - `discounts` (object) - `note` (string) - `billingAttempts` (object) ## Response 400 fields ## Response 401 fields ## Response 403 fields ## Response 404 fields ## Response 429 fields ## Response 502 fields