Customers
Get customer details with subscriptions
Retrieves comprehensive customer information including their subscription contracts. This endpoint provides customer profile data along with a paginated list of their active and historical subscriptions.
Key Features:
- Customer profile information (name, email, phone, addresses)
- Complete subscription history with pagination
- Payment method details
- Customer account state and metadata
- Order history related to subscriptions
- Customer tags and notes
Subscription Data Included:
- All subscription contracts (active, paused, cancelled)
- Contract details with line items
- Billing and delivery policies
- Next billing dates and amounts
- Applied discounts
Pagination:
- Subscription contracts are paginated
- Default page size varies by Shopify plan
- Use cursor for subsequent pages
- Cursor-based pagination ensures consistency
Use Cases:
- Customer service representatives viewing customer details
- Integration with CRM systems
- Customer analytics and reporting
- Subscription management interfaces
- Billing reconciliation
Important Notes:
- Customer ID is numeric (without gid:// prefix)
- Returns null if customer not found
- Includes both active and inactive subscriptions
- Payment methods may be masked for security
Authentication: Requires valid X-API-Key header
GET
/
api
/
external
/
v2
/
subscription-customers
/
{id}
Get customer details with subscriptions
curl --request GET \
--url https://subscription-admin.appstle.com/api/external/v2/subscription-customers/{id} \
--header 'X-API-Key: <x-api-key>'import requests
url = "https://subscription-admin.appstle.com/api/external/v2/subscription-customers/{id}"
headers = {"X-API-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<x-api-key>'}};
fetch('https://subscription-admin.appstle.com/api/external/v2/subscription-customers/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://subscription-admin.appstle.com/api/external/v2/subscription-customers/{id}';
const options = {method: 'GET', headers: {'X-API-Key': '<x-api-key>'}};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://subscription-admin.appstle.com/api/external/v2/subscription-customers/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://subscription-admin.appstle.com/api/external/v2/subscription-customers/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}require 'uri'
require 'net/http'
url = URI("https://subscription-admin.appstle.com/api/external/v2/subscription-customers/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"__typename": "Customer",
"id": "gid://shopify/Customer/10053873467694",
"productSubscriberStatus": "ACTIVE",
"subscriptionContracts": {
"__typename": "SubscriptionContractConnection",
"nodes": [
{
"__typename": "SubscriptionContract",
"billingPolicy": {
"__typename": "SubscriptionBillingPolicy",
"interval": "MONTH",
"intervalCount": 1
},
"createdAt": "2026-06-02T22:22:01Z",
"deliveryPrice": {
"__typename": "MoneyV2",
"amount": "4.9"
},
"id": "gid://shopify/SubscriptionContract/34053357870",
"lastPaymentStatus": null,
"lines": {
"__typename": "SubscriptionLineConnection",
"nodes": [
{
"__typename": "SubscriptionLine",
"currentPrice": {
"__typename": "MoneyV2",
"amount": "22.5",
"currencyCode": "USD"
},
"customAttributes": [
{
"__typename": "Attribute",
"key": "products",
"value": "1x Apple Macbook Air M3 13, 1x Bottle - 10ml, 9x Bottle - 20ml, 10x Bottle - 30ml"
},
{
"__typename": "Attribute",
"key": "_appstle-bb-id",
"value": "tvksrgmrfd"
},
{
"__typename": "Attribute",
"key": "__appstle-bb-name",
"value": "New Fixed one"
},
{
"__typename": "Attribute",
"key": "__appstle-bb-variants",
"value": "51533106970926:1,51652244832558:1,51652244865326:9,51652244898094:10"
},
{
"__typename": "Attribute",
"key": "_appstle-bb-product-sku",
"value": ""
},
{
"__typename": "Attribute",
"key": "_appstle_bundles_type",
"value": "SINGLE_PRODUCT_BUILD_A_BOX"
}
],
"discountAllocations": [],
"id": "gid://shopify/SubscriptionLine/5d22da79-2b9e-49ae-9af6-f010d791c09a",
"lineDiscountedPrice": {
"__typename": "MoneyV2",
"amount": "22.5",
"currencyCode": "USD"
},
"pricingPolicy": {
"__typename": "SubscriptionPricingPolicy",
"basePrice": {
"__typename": "MoneyV2",
"amount": "25.0",
"currencyCode": "USD"
},
"cycleDiscounts": [
{
"__typename": "SubscriptionCyclePriceAdjustment",
"adjustmentType": "PERCENTAGE",
"adjustmentValue": {
"__typename": "SellingPlanPricingPolicyPercentageValue",
"percentage": 10
},
"afterCycle": 0,
"computedPrice": {
"__typename": "MoneyV2",
"amount": "22.5",
"currencyCode": "USD"
}
}
]
},
"productId": "gid://shopify/Product/10295267918126",
"quantity": 1,
"sellingPlanId": "gid://shopify/SellingPlan/692806091054",
"sellingPlanName": "Monthly Subscription",
"sku": null,
"taxable": true,
"title": "Custom 7-Day Meal Plan",
"variantId": "gid://shopify/ProductVariant/51533108379950",
"variantImage": {
"__typename": "Image",
"url": "https://cdn.shopify.com/s/files/1/0874/3157/7902/files/vegan-lunch-chocolate-smoothie-bowl-buddha-bowl-with-tofu-chickpeas-and-quinoa-lentil-soup_fe298f9d-152b-4d0b-85bd-11611d20701d.jpg?v=1766604366"
},
"variantTitle": null
}
],
"pageInfo": {
"__typename": "PageInfo",
"endCursor": "eyJsYXN0X2lkIjoiNWQyMmRhNzktMmI5ZS00OWFlLTlhZjYtZjAxMGQ3OTFjMDlhIiwibGFzdF92YWx1ZSI6IjVkMjJkYTc5LTJiOWUtNDlhZS05YWY2LWYwMTBkNzkxYzA5YSJ9",
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "eyJsYXN0X2lkIjoiNWQyMmRhNzktMmI5ZS00OWFlLTlhZjYtZjAxMGQ3OTFjMDlhIiwibGFzdF92YWx1ZSI6IjVkMjJkYTc5LTJiOWUtNDlhZS05YWY2LWYwMTBkNzkxYzA5YSJ9"
}
},
"nextBillingDate": "2026-07-02T22:00:00Z",
"status": "ACTIVE"
}
],
"pageInfo": {
"__typename": "PageInfo",
"endCursor": "eyJsYXN0X2lkIjo1NDQxMDA1ODE2NzgsImxhc3RfdmFsdWUiOiIyMDI2LTA2LTAyIDIyOjIyOjAxLjc3Njg1NiJ9",
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "eyJsYXN0X2lkIjo1NDQxMDA1ODE2NzgsImxhc3RfdmFsdWUiOiIyMDI2LTA2LTAyIDIyOjIyOjAxLjc3Njg1NiJ9"
}
},
"tags": [
"Angel",
"APPSTLE_ONE_TIME278044475564",
"appstle_subscription_active_customer",
"Silver",
"source: appstle℠ subscriptions"
]
}Headers
API Key for authentication
Path Parameters
Customer ID to retrieve. Provide the numeric ID without the gid:// prefix
Required range:
x >= 1Query Parameters
API Key (Deprecated - Use X-API-Key header instead)
Pagination cursor for subscription contracts. Use the cursor from previous response's pageInfo.endCursor to get the next page
⌘I
Get customer details with subscriptions
curl --request GET \
--url https://subscription-admin.appstle.com/api/external/v2/subscription-customers/{id} \
--header 'X-API-Key: <x-api-key>'import requests
url = "https://subscription-admin.appstle.com/api/external/v2/subscription-customers/{id}"
headers = {"X-API-Key": "<x-api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<x-api-key>'}};
fetch('https://subscription-admin.appstle.com/api/external/v2/subscription-customers/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://subscription-admin.appstle.com/api/external/v2/subscription-customers/{id}';
const options = {method: 'GET', headers: {'X-API-Key': '<x-api-key>'}};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://subscription-admin.appstle.com/api/external/v2/subscription-customers/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://subscription-admin.appstle.com/api/external/v2/subscription-customers/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<x-api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}require 'uri'
require 'net/http'
url = URI("https://subscription-admin.appstle.com/api/external/v2/subscription-customers/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<x-api-key>'
response = http.request(request)
puts response.read_body{
"__typename": "Customer",
"id": "gid://shopify/Customer/10053873467694",
"productSubscriberStatus": "ACTIVE",
"subscriptionContracts": {
"__typename": "SubscriptionContractConnection",
"nodes": [
{
"__typename": "SubscriptionContract",
"billingPolicy": {
"__typename": "SubscriptionBillingPolicy",
"interval": "MONTH",
"intervalCount": 1
},
"createdAt": "2026-06-02T22:22:01Z",
"deliveryPrice": {
"__typename": "MoneyV2",
"amount": "4.9"
},
"id": "gid://shopify/SubscriptionContract/34053357870",
"lastPaymentStatus": null,
"lines": {
"__typename": "SubscriptionLineConnection",
"nodes": [
{
"__typename": "SubscriptionLine",
"currentPrice": {
"__typename": "MoneyV2",
"amount": "22.5",
"currencyCode": "USD"
},
"customAttributes": [
{
"__typename": "Attribute",
"key": "products",
"value": "1x Apple Macbook Air M3 13, 1x Bottle - 10ml, 9x Bottle - 20ml, 10x Bottle - 30ml"
},
{
"__typename": "Attribute",
"key": "_appstle-bb-id",
"value": "tvksrgmrfd"
},
{
"__typename": "Attribute",
"key": "__appstle-bb-name",
"value": "New Fixed one"
},
{
"__typename": "Attribute",
"key": "__appstle-bb-variants",
"value": "51533106970926:1,51652244832558:1,51652244865326:9,51652244898094:10"
},
{
"__typename": "Attribute",
"key": "_appstle-bb-product-sku",
"value": ""
},
{
"__typename": "Attribute",
"key": "_appstle_bundles_type",
"value": "SINGLE_PRODUCT_BUILD_A_BOX"
}
],
"discountAllocations": [],
"id": "gid://shopify/SubscriptionLine/5d22da79-2b9e-49ae-9af6-f010d791c09a",
"lineDiscountedPrice": {
"__typename": "MoneyV2",
"amount": "22.5",
"currencyCode": "USD"
},
"pricingPolicy": {
"__typename": "SubscriptionPricingPolicy",
"basePrice": {
"__typename": "MoneyV2",
"amount": "25.0",
"currencyCode": "USD"
},
"cycleDiscounts": [
{
"__typename": "SubscriptionCyclePriceAdjustment",
"adjustmentType": "PERCENTAGE",
"adjustmentValue": {
"__typename": "SellingPlanPricingPolicyPercentageValue",
"percentage": 10
},
"afterCycle": 0,
"computedPrice": {
"__typename": "MoneyV2",
"amount": "22.5",
"currencyCode": "USD"
}
}
]
},
"productId": "gid://shopify/Product/10295267918126",
"quantity": 1,
"sellingPlanId": "gid://shopify/SellingPlan/692806091054",
"sellingPlanName": "Monthly Subscription",
"sku": null,
"taxable": true,
"title": "Custom 7-Day Meal Plan",
"variantId": "gid://shopify/ProductVariant/51533108379950",
"variantImage": {
"__typename": "Image",
"url": "https://cdn.shopify.com/s/files/1/0874/3157/7902/files/vegan-lunch-chocolate-smoothie-bowl-buddha-bowl-with-tofu-chickpeas-and-quinoa-lentil-soup_fe298f9d-152b-4d0b-85bd-11611d20701d.jpg?v=1766604366"
},
"variantTitle": null
}
],
"pageInfo": {
"__typename": "PageInfo",
"endCursor": "eyJsYXN0X2lkIjoiNWQyMmRhNzktMmI5ZS00OWFlLTlhZjYtZjAxMGQ3OTFjMDlhIiwibGFzdF92YWx1ZSI6IjVkMjJkYTc5LTJiOWUtNDlhZS05YWY2LWYwMTBkNzkxYzA5YSJ9",
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "eyJsYXN0X2lkIjoiNWQyMmRhNzktMmI5ZS00OWFlLTlhZjYtZjAxMGQ3OTFjMDlhIiwibGFzdF92YWx1ZSI6IjVkMjJkYTc5LTJiOWUtNDlhZS05YWY2LWYwMTBkNzkxYzA5YSJ9"
}
},
"nextBillingDate": "2026-07-02T22:00:00Z",
"status": "ACTIVE"
}
],
"pageInfo": {
"__typename": "PageInfo",
"endCursor": "eyJsYXN0X2lkIjo1NDQxMDA1ODE2NzgsImxhc3RfdmFsdWUiOiIyMDI2LTA2LTAyIDIyOjIyOjAxLjc3Njg1NiJ9",
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "eyJsYXN0X2lkIjo1NDQxMDA1ODE2NzgsImxhc3RfdmFsdWUiOiIyMDI2LTA2LTAyIDIyOjIyOjAxLjc3Njg1NiJ9"
}
},
"tags": [
"Angel",
"APPSTLE_ONE_TIME278044475564",
"appstle_subscription_active_customer",
"Silver",
"source: appstle℠ subscriptions"
]
}