Analytics
50 endpoints. Each needs an API key or OAuth token with the scope shown; the key already names its store, so paths start at /v1/store. Generated from the live contract; also in openapi.json.
KPIs, daily series, top products, methods, countries, funnel
/v1/store/analyticsOr name the store: GET /v1/stores/{storeId}/analytics
Parameters
range"7d" | "30d" | "90d"query
Response AnalyticsOverview
rangeAnalyticsRangerequiredcurrencyCurrencyCoderequiredfromIsoDaterequiredtoIsoDaterequiredkpisobjectrequiredrevenueMinorKpirequiredordersKpirequiredvisitorsKpirequiredconversionBpsKpirequiredaverageOrderMinorKpirequirednewCustomersKpirequiredrefundsMinorKpirequiredmedianDeliveryMsKpirequired
seriesobject[]requireddateIsoDaterequiredrevenueMinorMinorUnitsrequiredordersintegerrequiredvisitorsintegerrequired
topProductsobject[]requiredproductIdProductIdrequirednamestringrequiredunitsSoldintegerrequiredrevenueMinorMinorUnitsrequired
paymentMethodsobject[]requiredmethodPaymentMethodrequiredordersintegerrequiredrevenueMinorMinorUnitsrequired
countriesobject[]requiredcountryCountryCoderequiredordersintegerrequiredrevenueMinorMinorUnitsrequired
funnelobjectrequiredvisitorsintegerrequiredproductViewsintegerrequiredaddedToCartintegerrequiredcheckoutsintegerrequiredpaidintegerrequired
timezonestringrequiredtrafficobjectrequiredsessionsintegerrequiredconvertedSessionsintegerrequiredsource"pipeline" | "visits"required
Example
curl "https://api.shopfa.st/v1/store/analytics" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Home KPIs, series, funnel and top lists for any date preset
/v1/store/analytics/overviewOr name the store: GET /v1/stores/{storeId}/analytics/overview
Parameters
range"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"queryfromstring | nullquerytostring | nullquerybucket"hour" | "day" | "week" | "month" | nullquery
Response GrowthOverview
rangeGrowthRangerequiredfromIsoDaterequiredtoIsoDaterequiredperiodAnalyticsPeriodrequiredcurrencyCurrencyCoderequiredkpisobjectrequiredrevenueMinorobjectrequiredvaluenumberrequiredpreviousnumberrequired
ordersobjectrequiredvaluenumberrequiredpreviousnumberrequired
visitorsobjectrequiredvaluenumberrequiredpreviousnumberrequired
conversionBpsobjectrequiredvaluenumberrequiredpreviousnumberrequired
averageOrderMinorobjectrequiredvaluenumberrequiredpreviousnumberrequired
newCustomersobjectrequiredvaluenumberrequiredpreviousnumberrequired
refundsMinorobjectrequiredvaluenumberrequiredpreviousnumberrequired
medianDeliveryMsobjectrequiredvaluenumberrequiredpreviousnumberrequired
seriesobject[]requireddateIsoDaterequiredhourinteger | nullrequiredrevenueMinorMinorUnitsrequiredordersintegerrequiredvisitorsintegerrequired
topProductsobject[]requiredproductIdProductIdrequirednamestringrequiredunitsSoldintegerrequiredrevenueMinorMinorUnitsrequired
paymentMethodsobject[]requiredmethodPaymentMethodrequiredordersintegerrequiredrevenueMinorMinorUnitsrequired
countriesobject[]requiredcountryCountryCoderequiredordersintegerrequiredrevenueMinorMinorUnitsrequired
funnelobjectrequiredvisitorsintegerrequiredproductViewsintegerrequiredaddedToCartintegerrequiredcheckoutsintegerrequiredpaidintegerrequired
Example
curl "https://api.shopfa.st/v1/store/analytics/overview" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/overview', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/overview",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/overview", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Gross to net, refunds, disputes, methods and hours
/v1/store/analytics/salesOr name the store: GET /v1/stores/{storeId}/analytics/sales
Parameters
range"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"queryfromstring | nullquerytostring | nullquerybucket"hour" | "day" | "week" | "month" | nullquery
Response SalesAnalytics
rangeGrowthRangerequiredfromIsoDaterequiredtoIsoDaterequiredperiodAnalyticsPeriodrequiredcurrencyCurrencyCoderequiredtotalsobjectrequiredgrossMinorobjectrequiredvaluenumberrequiredpreviousnumberrequired
discountsMinorobjectrequiredvaluenumberrequiredpreviousnumberrequired
netMinorobjectrequiredvaluenumberrequiredpreviousnumberrequired
taxMinorobjectrequiredvaluenumberrequiredpreviousnumberrequired
feesMinorobjectrequiredvaluenumberrequiredpreviousnumberrequired
sellerNetMinorobjectrequiredvaluenumberrequiredpreviousnumberrequired
ordersobjectrequiredvaluenumberrequiredpreviousnumberrequired
unitsSoldobjectrequiredvaluenumberrequiredpreviousnumberrequired
averageOrderMinorobjectrequiredvaluenumberrequiredpreviousnumberrequired
refundsMinorobjectrequiredvaluenumberrequiredpreviousnumberrequired
refundsobjectrequiredvaluenumberrequiredpreviousnumberrequired
disputesMinorobjectrequiredvaluenumberrequiredpreviousnumberrequired
disputesobjectrequiredvaluenumberrequiredpreviousnumberrequired
dailyobject[]requireddateIsoDaterequiredhourinteger | nullrequiredordersintegerrequiredunitsintegerrequiredgrossMinorMinorUnitsrequirednetMinorMinorUnitsrequiredrefundsMinorMinorUnitsrequiredfeesMinorMinorUnitsrequired
byStatusobject[]requiredstatusOrderStatusrequiredordersintegerrequiredtotalMinorMinorUnitsrequired
byMethodobject[]requiredmethodPaymentMethodrequiredordersintegerrequirednetMinorMinorUnitsrequired
byHourobject[]requiredhourintegerrequiredordersintegerrequired
Example
curl "https://api.shopfa.st/v1/store/analytics/sales" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/sales', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/sales",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/sales", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Per-product units, revenue, refunds and ratings
/v1/store/analytics/productsOr name the store: GET /v1/stores/{storeId}/analytics/products
Parameters
range"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"queryfromstring | nullquerytostring | nullquerybucket"hour" | "day" | "week" | "month" | nullquery
Response ProductAnalytics
rangeGrowthRangerequiredfromIsoDaterequiredtoIsoDaterequiredperiodAnalyticsPeriodrequiredcurrencyCurrencyCoderequiredbucketsBucketKey[]requiredproductsobject[]requiredproductIdProductIdrequirednamestringrequiredtypeProductTyperequiredimageUrlstringrequiredordersintegerrequiredunitsintegerrequiredrevenueMinorMinorUnitsrequiredpreviousRevenueMinorMinorUnitsrequiredrefundsintegerrequiredrefundRateBpsBpsrequiredratingnumberrequiredreviewsintegerrequiredshareBpsBpsrequireddailyinteger[]required
byTypeobject[]requiredtypeProductTyperequiredunitsintegerrequiredrevenueMinorMinorUnitsrequired
Example
curl "https://api.shopfa.st/v1/store/analytics/products" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/products', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/products",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/products", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
New and returning customers, lifetime value, top buyers
/v1/store/analytics/customersOr name the store: GET /v1/stores/{storeId}/analytics/customers
Parameters
range"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"queryfromstring | nullquerytostring | nullquerybucket"hour" | "day" | "week" | "month" | nullquerycustomerstring | nullquerytopSort"customer" | "country" | "orders" | "spent"querytopDir"asc" | "desc"querycountrystring | nullquerycountriesSort"country" | "customers" | "revenue"querycountriesDir"asc" | "desc"query
Response CustomerAnalytics
rangeGrowthRangerequiredfromIsoDaterequiredtoIsoDaterequiredperiodAnalyticsPeriodrequiredcurrencyCurrencyCoderequiredtotalsobjectrequiredcustomersobjectrequiredvaluenumberrequiredpreviousnumberrequired
newCustomersobjectrequiredvaluenumberrequiredpreviousnumberrequired
returningCustomersobjectrequiredvaluenumberrequiredpreviousnumberrequired
repeatRateBpsobjectrequiredvaluenumberrequiredpreviousnumberrequired
averageLifetimeMinorobjectrequiredvaluenumberrequiredpreviousnumberrequired
ordersPerCustomerobjectrequiredvaluenumberrequiredpreviousnumberrequired
dailyobject[]requireddateIsoDaterequiredhourinteger | nullrequirednewCustomersintegerrequiredreturningCustomersintegerrequired
segmentsCustomerCountsrequiredtopCustomersobject[]requiredcustomerIdCustomerIdrequirednamestringrequiredemailstringrequiredordersintegerrequiredspentMinorMinorUnitsrequiredcountrystringrequired
countriesobject[]requiredcountrystringrequiredcustomersintegerrequiredrevenueMinorMinorUnitsrequired
Example
curl "https://api.shopfa.st/v1/store/analytics/customers" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/customers', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/customers",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/customers", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Visitors, the funnel, sources, referrers and landing pages
/v1/store/analytics/trafficOr name the store: GET /v1/stores/{storeId}/analytics/traffic
Parameters
range"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"queryfromstring | nullquerytostring | nullquerybucket"hour" | "day" | "week" | "month" | nullquery
Response TrafficAnalytics
rangeGrowthRangerequiredfromIsoDaterequiredtoIsoDaterequiredperiodAnalyticsPeriodrequiredcurrencyCurrencyCoderequiredtotalsobjectrequiredvisitorsobjectrequiredvaluenumberrequiredpreviousnumberrequired
visitsobjectrequiredvaluenumberrequiredpreviousnumberrequired
pageViewsobjectrequiredvaluenumberrequiredpreviousnumberrequired
productViewsobjectrequiredvaluenumberrequiredpreviousnumberrequired
checkoutsobjectrequiredvaluenumberrequiredpreviousnumberrequired
ordersobjectrequiredvaluenumberrequiredpreviousnumberrequired
conversionBpsobjectrequiredvaluenumberrequiredpreviousnumberrequired
checkoutRateBpsobjectrequiredvaluenumberrequiredpreviousnumberrequired
bounceRateBpsobjectrequiredvaluenumberrequiredpreviousnumberrequired
pagesPerVisitorobjectrequiredvaluenumberrequiredpreviousnumberrequired
funnelobjectrequiredvisitorsintegerrequiredproductViewersintegerrequiredcartAddersintegerrequiredcheckoutStartersintegerrequiredordersintegerrequired
dailyobject[]requireddateIsoDaterequiredhourinteger | nullrequiredvisitorsintegerrequiredpageViewsintegerrequiredproductViewsintegerrequiredcheckoutsintegerrequiredordersintegerrequired
sourcesobject[]requiredsourcestringrequiredmediumstringrequiredvisitsintegerrequiredordersintegerrequiredrevenueMinorMinorUnitsrequiredconversionBpsBpsrequired
referrersobject[]requiredhoststringrequiredvisitsintegerrequired
6 more fields
landingPagesobject[]requiredpathstringrequiredvisitsintegerrequired
pagesobject[]requiredpathstringrequiredviewsintegerrequiredentriesintegerrequired
devicesobject[]requireddeviceVisitorDevicerequiredvisitorsintegerrequired
browsersobject[]requirednamestringrequiredvisitorsintegerrequired
systemsobject[]requirednamestringrequiredvisitorsintegerrequired
countriesobject[]requiredcountrystringrequiredvisitorsintegerrequiredordersintegerrequiredrevenueMinorMinorUnitsrequired
Example
curl "https://api.shopfa.st/v1/store/analytics/traffic" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/traffic', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/traffic",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/traffic", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
UTM campaigns, promotions and affiliates
/v1/store/analytics/campaignsOr name the store: GET /v1/stores/{storeId}/analytics/campaigns
Parameters
range"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"queryfromstring | nullquerytostring | nullquerybucket"hour" | "day" | "week" | "month" | nullquerydetailsstring | nullquerydetailsSort"campaign" | "term" | "content" | "visitors" | "orders" | "revenue"querydetailsDir"asc" | "desc"query
Response CampaignAnalytics
rangeGrowthRangerequiredfromIsoDaterequiredtoIsoDaterequiredperiodAnalyticsPeriodrequiredcurrencyCurrencyCoderequiredutmobject[]requiredcampaignstringrequiredsourcestringrequiredmediumstringrequiredvisitsintegerrequiredordersintegerrequiredrevenueMinorMinorUnitsrequiredconversionBpsBpsrequired
utmDetailsobject[]requiredcampaignstringrequiredtermstringrequiredcontentstringrequiredvisitorsintegerrequiredordersintegerrequiredrevenueMinorMinorUnitsrequired
promotionsobject[]requiredidPromotionIdrequirednamestringrequiredstatePromotionStaterequiredpercentOffBpsBpsrequiredordersintegerrequiredrevenueMinorMinorUnitsrequiredsavingsMinorMinorUnitsrequired
affiliatesobject[]requiredidAffiliateIdrequirednamestringrequiredcodestringrequiredclicksintegerrequiredordersintegerrequiredrevenueMinorMinorUnitsrequiredcommissionMinorMinorUnitsrequired
totalsobjectrequiredattributedOrdersintegerrequiredattributedRevenueMinorMinorUnitsrequiredattributedShareBpsBpsrequired
Example
curl "https://api.shopfa.st/v1/store/analytics/campaigns" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/campaigns', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/campaigns",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/campaigns", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
One analytics tab as CSV
/v1/store/analytics/exportOr name the store: GET /v1/stores/{storeId}/analytics/export
Parameters
range"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"queryfromstring | nullquerytostring | nullquerybucket"hour" | "day" | "week" | "month" | nullquerytab"overview" | "sales" | "products" | "customers" | "traffic" | "campaigns"queryrequired
Response GrowthCsv
filenamestringrequiredcsvstringrequiredrowsintegerrequired
Example
curl "https://api.shopfa.st/v1/store/analytics/export" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/export', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/export",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/export", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Breakdowns, pivots and time series over sessions, with filters, a segment and the period before
/v1/store/analytics/queryOr name the store: POST /v1/stores/{storeId}/analytics/query
Body
periodobjectrequiredrange"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"fromstring | nulltostring | nullbucket"hour" | "day" | "week" | "month" | null
comparebooleansegmentIdasg_… | nullfiltersobject[]dimension"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate"requiredop"is" | "is_not" | "contains" | "not_contains" | "starts_with"requiredvaluesstring[]required
queriesobject[]requiredidstringrequireddimension"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate" | nullrequiredpivot"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate" | nullmetrics"visitors" | "sessions" | "new_visitors" | "pageviews" | "bounce_rate" | "avg_duration" | "pages_per_session" | "engaged_sessions" | "cart_adds" | "checkouts" | "conversions" | "conversion_rate" | "orders" | "revenue" | "revenue_per_visitor" | "aov"[]requiredfiltersobject[]dimension"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate"requiredop"is" | "is_not" | "contains" | "not_contains" | "starts_with"requiredvaluesstring[]required
sort"visitors" | "sessions" | "new_visitors" | "pageviews" | "bounce_rate" | "avg_duration" | "pages_per_session" | "engaged_sessions" | "cart_adds" | "checkouts" | "conversions" | "conversion_rate" | "orders" | "revenue" | "revenue_per_visitor" | "aov" | "dimension" | nullsortDir"asc" | "desc"searchstring | nulllimitintegerseriesboolean
Response AnalyticsQueryResult
periodAnalyticsPeriodrequiredcurrencyCurrencyCoderequiredresultsReportResult[]requiredannotationsAnnotation[]requiredmsintegerrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/analytics/query" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"period": {},
"compare": true,
"segmentId": null,
"filters": [],
"queries": [
{
"id": "string",
"dimension": "channel",
"metrics": [
"visitors"
]
}
]
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/query', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"period": {},
"compare": true,
"segmentId": null,
"filters": [],
"queries": [
{
"id": "string",
"dimension": "channel",
"metrics": [
"visitors"
]
}
]
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"POST",
"https://api.shopfa.st/v1/store/analytics/query",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"period": {},
"compare": True,
"segmentId": None,
"filters": [],
"queries": [
{
"id": "string",
"dimension": "channel",
"metrics": [
"visitors"
]
}
]
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/analytics/query", strings.NewReader(`{
"period": {},
"compare": true,
"segmentId": null,
"filters": [],
"queries": [
{
"id": "string",
"dimension": "channel",
"metrics": [
"visitors"
]
}
]
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
The same queries as CSV or JSON
/v1/store/analytics/query/exportOr name the store: POST /v1/stores/{storeId}/analytics/query/export
Body
periodobjectrequiredrange"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"fromstring | nulltostring | nullbucket"hour" | "day" | "week" | "month" | null
comparebooleansegmentIdasg_… | nullfiltersobject[]dimension"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate"requiredop"is" | "is_not" | "contains" | "not_contains" | "starts_with"requiredvaluesstring[]required
queriesobject[]requiredidstringrequireddimension"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate" | nullrequiredpivot"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate" | nullmetrics"visitors" | "sessions" | "new_visitors" | "pageviews" | "bounce_rate" | "avg_duration" | "pages_per_session" | "engaged_sessions" | "cart_adds" | "checkouts" | "conversions" | "conversion_rate" | "orders" | "revenue" | "revenue_per_visitor" | "aov"[]requiredfiltersobject[]dimension"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate"requiredop"is" | "is_not" | "contains" | "not_contains" | "starts_with"requiredvaluesstring[]required
sort"visitors" | "sessions" | "new_visitors" | "pageviews" | "bounce_rate" | "avg_duration" | "pages_per_session" | "engaged_sessions" | "cart_adds" | "checkouts" | "conversions" | "conversion_rate" | "orders" | "revenue" | "revenue_per_visitor" | "aov" | "dimension" | nullsortDir"asc" | "desc"searchstring | nulllimitintegerseriesboolean
format"csv" | "json"namestring
Response AnalyticsExport
filenamestringrequiredmime"text/csv" | "application/json"requiredcontentstringrequiredrowsintegerrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/analytics/query/export" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"period": {},
"compare": true,
"segmentId": null,
"filters": [],
"queries": [
{
"id": "string",
"dimension": "channel",
"metrics": [
"visitors"
]
}
],
"format": "csv",
"name": "report"
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/query/export', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"period": {},
"compare": true,
"segmentId": null,
"filters": [],
"queries": [
{
"id": "string",
"dimension": "channel",
"metrics": [
"visitors"
]
}
],
"format": "csv",
"name": "report"
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"POST",
"https://api.shopfa.st/v1/store/analytics/query/export",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"period": {},
"compare": True,
"segmentId": None,
"filters": [],
"queries": [
{
"id": "string",
"dimension": "channel",
"metrics": [
"visitors"
]
}
],
"format": "csv",
"name": "report"
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/analytics/query/export", strings.NewReader(`{
"period": {},
"compare": true,
"segmentId": null,
"filters": [],
"queries": [
{
"id": "string",
"dimension": "channel",
"metrics": [
"visitors"
]
}
],
"format": "csv",
"name": "report"
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Visitors right now and the last 30 minutes
/v1/store/analytics/realtimeOr name the store: GET /v1/stores/{storeId}/analytics/realtime
Response RealtimeReport
atTimestamprequiredactiveNowintegerrequiredactiveLast30integerrequiredperMinuteobject[]requiredminuteTimestamprequiredvisitorsintegerrequiredpageviewsintegerrequired
pagesobject[]requiredpathstringrequiredvisitorsintegerrequired
sourcesobject[]requiredchannelChannelrequiredsourcestringrequiredvisitorsintegerrequired
countriesobject[]requiredcountrystringrequiredvisitorsintegerrequired
devicesobject[]requireddevicestringrequiredvisitorsintegerrequired
eventsobject[]requirednameAnalyticsEventNamerequiredpathstringrequiredcountrystringrequireddevicestringrequiredatTimestamprequiredvalueMinorinteger | nullrequired
botHitsLastHourintegerrequiredcurrencyCurrencyCoderequired
Example
curl "https://api.shopfa.st/v1/store/analytics/realtime" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/realtime', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/realtime",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/realtime", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Pages, landing and exit pages, time on page and scroll depth
/v1/store/analytics/pagesOr name the store: GET /v1/stores/{storeId}/analytics/pages
Parameters
range"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"queryfromstring | nullquerytostring | nullquerybucket"hour" | "day" | "week" | "month" | nullquerypathstring | nullquerypagesSort"path" | "views" | "visitors" | "entries" | "exit_rate" | "time" | "scroll"querypagesDir"asc" | "desc"querylandingSort"path" | "sessions" | "bounce_rate" | "conversion_rate" | "revenue"querylandingDir"asc" | "desc"queryexitsSort"path" | "exits" | "exit_rate"queryexitsDir"asc" | "desc"query
Response PagesReport
periodAnalyticsPeriodrequiredcurrencyCurrencyCoderequiredtotalsobjectrequiredviewsintegerrequiredpreviousViewsintegerrequiredavgTimeMsintegerrequiredavgScrollPctintegerrequireduniquePathsintegerrequired
pagesPageRow[]requiredlandingobject[]requiredpathstringrequiredsessionsintegerrequiredbounceRateBpsintegerrequiredconversionsintegerrequiredconversionRateBpsintegerrequiredrevenueMinorintegerrequired
exitsobject[]requiredpathstringrequiredexitsintegerrequiredviewsintegerrequiredexitRateBpsintegerrequired
scrollobject[]requireddepthintegerrequiredleavesintegerrequiredshareBpsintegerrequired
timeobject[]requiredlabelstringrequiredmaxMsintegerrequiredleavesintegerrequired
Example
curl "https://api.shopfa.st/v1/store/analytics/pages" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/pages', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/pages",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/pages", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Crawler traffic: verified, declared, spoofed and suspicious, by bot
/v1/store/analytics/botsOr name the store: GET /v1/stores/{storeId}/analytics/bots
Parameters
range"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"queryfromstring | nullquerytostring | nullquerybucket"hour" | "day" | "week" | "month" | nullquerybotstring | nullquerycategory"search" | "ai_answers" | "ai_training" | "seo" | "social_preview" | "monitoring" | "feed" | "automation" | "other" | nullqueryverification"verified" | "spoofed" | "declared" | nullquerybotsSort"name" | "verification" | "hits" | "paths" | "last_seen"querybotsDir"asc" | "desc"querydevice"desktop" | "mobile" | "tablet" | nullquerysuspiciousSort"who" | "sessions" | "pageviews" | "score"querysuspiciousDir"asc" | "desc"query
Response BotsReport
periodAnalyticsPeriodrequiredtotalsobjectrequiredhitsintegerrequiredhumanHitsintegerrequiredbotHitsintegerrequiredbotShareBpsintegerrequiredpreviousBotHitsintegerrequiredverifiedintegerrequireddeclaredintegerrequiredspoofedintegerrequiredsuspiciousintegerrequired
byClassobject[]requiredtrafficTrafficClassrequiredhitsintegerrequired
categoriesobject[]requiredcategoryBotCategoryrequiredhitsintegerrequiredbotsintegerrequired
botsobject[]requirednamestringrequiredownerstringrequiredcategoryBotCategoryrequiredhitsintegerrequiredverifiedHitsintegerrequiredspoofedHitsintegerrequireddeclaredHitsintegerrequiredpathsintegerrequiredlastSeenAtTimestamprequiredpreviousHitsintegerrequired
seriesobject[]requireddateIsoDaterequiredhourinteger | nullrequiredhumanintegerrequiredverifiedintegerrequireddeclaredintegerrequiredspoofedintegerrequiredsuspiciousintegerrequired
pathsobject[]requiredpathstringrequiredhitsintegerrequiredbotsintegerrequired
suspiciousobject[]requiredcountrystringrequireddevicestringrequiredbrowserstringrequiredsessionsintegerrequiredpageviewsintegerrequiredavgScoreintegerrequired
Example
curl "https://api.shopfa.st/v1/store/analytics/bots" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/bots', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/bots",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/bots", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Orders credited to channels, sources and campaigns under six models
/v1/store/analytics/attributionOr name the store: GET /v1/stores/{storeId}/analytics/attribution
Parameters
range"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"queryfromstring | nullquerytostring | nullquerybucket"hour" | "day" | "week" | "month" | nullquerydimension"channel" | "source" | "campaign" | "source_medium" | "affiliate" | "landing"querylookbackDaysinteger | stringqueryqstring | nullquerysort"key" | "first_touch" | "last_touch" | "last_non_direct" | "linear" | "position_based" | "time_decay"querydir"asc" | "desc"queryby"revenue" | "conversions"query
Response AttributionReport
periodAnalyticsPeriodrequiredcurrencyCurrencyCoderequireddimensionAttributionDimensionrequiredlookbackDaysintegerrequiredmodelsAttributionModel[]requiredordersintegerrequireduntrackedintegerrequiredrevenueMinorintegerrequiredrowsobject[]requiredkeystringrequiredconversionsnumber[]requiredrevenueMinorinteger[]required
pathsobject[]requiredpathChannel[]requiredconversionsintegerrequiredrevenueMinorintegerrequired
avgTouchesnumberrequiredavgHoursToConvertnumberrequired
Example
curl "https://api.shopfa.st/v1/store/analytics/attribution" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/attribution', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/attribution",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/attribution", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Customer cohorts by first order, retention and lifetime value
/v1/store/analytics/cohortsOr name the store: GET /v1/stores/{storeId}/analytics/cohorts
Parameters
granularity"week" | "month"querymetric"customers" | "orders" | "revenue"queryperiodsinteger | stringquerychannelSort"key" | "customers" | "repeat_rate" | "orders_per_customer" | "ltv"querychannelDir"asc" | "desc"queryproductSort"key" | "customers" | "repeat_rate" | "orders_per_customer" | "ltv"queryproductDir"asc" | "desc"queryproductstring | nullquery
Response CohortReport
granularityCohortGranularityrequiredmetricCohortMetricrequiredcurrencyCurrencyCoderequiredtimezonestringrequiredcohortsobject[]requiredstartIsoDaterequiredsizeintegerrequiredvaluesinteger[]required
ltvobject[]requiredoffsetintegerrequiredavgRevenueMinorintegerrequiredcustomersintegerrequired
byChannelobject[]requiredkeystringrequiredcustomersintegerrequiredltvMinorintegerrequiredordersPerCustomernumberrequiredrepeatRateBpsintegerrequired
byProductobject[]requiredkeystringrequiredproductIdProductId | nullrequiredcustomersintegerrequiredltvMinorintegerrequiredordersPerCustomernumberrequiredrepeatRateBpsintegerrequired
totalsobjectrequiredcustomersintegerrequiredrepeatRateBpsintegerrequiredltvMinorintegerrequiredmedianDaysToSecondOrderinteger | nullrequired
Example
curl "https://api.shopfa.st/v1/store/analytics/cohorts" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/cohorts', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/cohorts",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/cohorts", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Product views to cart to orders, per product and type
/v1/store/analytics/product-conversionOr name the store: GET /v1/stores/{storeId}/analytics/product-conversion
Parameters
range"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"queryfromstring | nullquerytostring | nullquerybucket"hour" | "day" | "week" | "month" | nullquerytermstring | nullquerysearchesSort"term" | "searches" | "viewed"querysearchesDir"asc" | "desc"query
Response ProductConversionReport
periodAnalyticsPeriodrequiredcurrencyCurrencyCoderequiredtotalsobjectrequiredviewsintegerrequiredviewersintegerrequiredcartAddsintegerrequiredordersintegerrequiredrevenueMinorintegerrequiredviewToOrderBpsintegerrequired
productsProductConversionRow[]requiredbyTypeobject[]requiredtypeProductTyperequiredviewsintegerrequiredordersintegerrequiredrevenueMinorintegerrequiredviewToOrderBpsintegerrequired
searchesobject[]requiredtermstringrequiredsearchesintegerrequiredproductViewsintegerrequired
Example
curl "https://api.shopfa.st/v1/store/analytics/product-conversion" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/product-conversion', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/product-conversion",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/product-conversion", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Ad spend with CPM, CPC, CPA and ROAS per campaign
/v1/store/analytics/adsOr name the store: GET /v1/stores/{storeId}/analytics/ads
Parameters
range"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"queryfromstring | nullquerytostring | nullquerybucket"hour" | "day" | "week" | "month" | nullquerymodel"first_touch" | "last_touch" | "last_non_direct" | "linear" | "position_based" | "time_decay"query
Response AdsReport
periodAnalyticsPeriodrequiredcurrencyCurrencyCoderequiredmodelAttributionModelrequiredtotalsobjectrequiredimpressionsintegerrequiredclicksintegerrequiredspendMinorintegerrequiredpreviousSpendMinorintegerrequiredsessionsintegerrequiredconversionsnumberrequiredrevenueMinorintegerrequiredpreviousRevenueMinorintegerrequiredctrBpsintegerrequiredcpmMinorintegerrequiredcpcMinorintegerrequiredcpaMinorinteger | nullrequiredroasBpsinteger | nullrequired
campaignsAdCampaignRow[]requiredplatformsobject[]requiredplatformAdPlatformrequiredspendMinorintegerrequiredrevenueMinorintegerrequiredroasBpsinteger | nullrequired
dailyobject[]requireddateIsoDaterequiredhourinteger | nullrequiredspendMinorintegerrequiredrevenueMinorintegerrequiredimpressionsintegerrequiredclicksintegerrequired
importsAdImport[]requiredrowsAdSpendRow[]required
Example
curl "https://api.shopfa.st/v1/store/analytics/ads" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/ads', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/ads",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/ads", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Add one day of spend for a campaign
/v1/store/analytics/ads/spendOr name the store: POST /v1/stores/{storeId}/analytics/ads/spend
Body
daystringrequiredplatform"google" | "meta" | "tiktok" | "x" | "reddit" | "microsoft" | "linkedin" | "pinterest" | "snapchat" | "youtube" | "discord" | "newsletter" | "other"requiredcampaignstringrequiredimpressionsintegerrequiredclicksintegerrequiredspendMinorintegerrequired
Response AdSpendRow
dayIsoDaterequiredplatformAdPlatformrequiredcampaignstringrequiredimpressionsintegerrequiredclicksintegerrequiredspendMinorintegerrequiredidAdSpendIdrequiredcurrencyCurrencyCoderequiredimportIdAdImportId | nullrequiredcreatedAtTimestamprequired
Example
curl -X POST "https://api.shopfa.st/v1/store/analytics/ads/spend" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"day": "string",
"platform": "google",
"campaign": "string",
"impressions": 0,
"clicks": 0,
"spendMinor": 0
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/ads/spend', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"day": "string",
"platform": "google",
"campaign": "string",
"impressions": 0,
"clicks": 0,
"spendMinor": 0
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"POST",
"https://api.shopfa.st/v1/store/analytics/ads/spend",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"day": "string",
"platform": "google",
"campaign": "string",
"impressions": 0,
"clicks": 0,
"spendMinor": 0
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/analytics/ads/spend", strings.NewReader(`{
"day": "string",
"platform": "google",
"campaign": "string",
"impressions": 0,
"clicks": 0,
"spendMinor": 0
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Remove a spend row
/v1/store/analytics/ads/spend/{spendId}Or name the store: DELETE /v1/stores/{storeId}/analytics/ads/spend/{spendId}
Parameters
spendIdads_…pathrequired
Response Ok
okbooleanrequired
Example
curl -X DELETE "https://api.shopfa.st/v1/store/analytics/ads/spend/ads_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/ads/spend/ads_0123456789abcdefghjk', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"DELETE",
"https://api.shopfa.st/v1/store/analytics/ads/spend/ads_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("DELETE", "https://api.shopfa.st/v1/store/analytics/ads/spend/ads_0123456789abcdefghjk", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Import spend from a CSV export of an ad platform
/v1/store/analytics/ads/importsOr name the store: POST /v1/stores/{storeId}/analytics/ads/imports
Body
filenamestringrequiredcsvstringrequiredplatform"google" | "meta" | "tiktok" | "x" | "reddit" | "microsoft" | "linkedin" | "pinterest" | "snapchat" | "youtube" | "discord" | "newsletter" | "other"
Response AdImportResult
importIdAdImportId | nullrequiredimportedintegerrequiredskippedintegerrequirederrorsobject[]requiredlineintegerrequiredmessagestringrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/analytics/ads/imports" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filename": "string",
"csv": "string",
"platform": "other"
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/ads/imports', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"filename": "string",
"csv": "string",
"platform": "other"
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"POST",
"https://api.shopfa.st/v1/store/analytics/ads/imports",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"filename": "string",
"csv": "string",
"platform": "other"
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/analytics/ads/imports", strings.NewReader(`{
"filename": "string",
"csv": "string",
"platform": "other"
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Remove an import and its rows
/v1/store/analytics/ads/imports/{importId}Or name the store: DELETE /v1/stores/{storeId}/analytics/ads/imports/{importId}
Parameters
importIdadi_…pathrequired
Response Ok
okbooleanrequired
Example
curl -X DELETE "https://api.shopfa.st/v1/store/analytics/ads/imports/adi_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/ads/imports/adi_0123456789abcdefghjk', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"DELETE",
"https://api.shopfa.st/v1/store/analytics/ads/imports/adi_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("DELETE", "https://api.shopfa.st/v1/store/analytics/ads/imports/adi_0123456789abcdefghjk", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Run a funnel definition over the period
/v1/store/analytics/funnels/runOr name the store: POST /v1/stores/{storeId}/analytics/funnels/run
Body
periodobjectrequiredrange"today" | "yesterday" | "7d" | "30d" | "90d" | "this_month" | "last_month" | "6mo" | "ytd" | "365d" | "custom"fromstring | nulltostring | nullbucket"hour" | "day" | "week" | "month" | null
comparebooleandefinitionobjectrequiredstepsobject[]requiredevent"page_view" | "product_view" | "add_to_cart" | "begin_checkout" | "payment_attempt" | "purchase" | "signup" | "search" | "outbound_click" | "custom"requiredlabelstringrequiredfiltersobject[]
windowMinutesintegerrequiredscope"session" | "visitor"requiredsegmentobject[]dimension"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate"requiredop"is" | "is_not" | "contains" | "not_contains" | "starts_with"requiredvaluesstring[]required
breakdown"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate" | null
Response FunnelResult
periodAnalyticsPeriodrequiredstepsobject[]requiredlabelstringrequiredeventFunnelEventNamerequiredentitiesintegerrequiredconversionBpsintegerrequiredstepBpsintegerrequireddropOffintegerrequiredmedianMsFromPreviousinteger | nullrequired
previousinteger[] | nullrequiredbreakdownobject[]requiredkeystringrequiredstepsinteger[]required
entitiesintegerrequiredconvertedintegerrequiredoverallBpsintegerrequiredmsintegerrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/analytics/funnels/run" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"period": {},
"compare": true,
"definition": {
"steps": [
{
"event": "page_view",
"label": "string"
}
],
"windowMinutes": 1,
"scope": "session"
}
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/funnels/run', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"period": {},
"compare": true,
"definition": {
"steps": [
{
"event": "page_view",
"label": "string"
}
],
"windowMinutes": 1,
"scope": "session"
}
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"POST",
"https://api.shopfa.st/v1/store/analytics/funnels/run",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"period": {},
"compare": True,
"definition": {
"steps": [
{
"event": "page_view",
"label": "string"
}
],
"windowMinutes": 1,
"scope": "session"
}
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/analytics/funnels/run", strings.NewReader(`{
"period": {},
"compare": true,
"definition": {
"steps": [
{
"event": "page_view",
"label": "string"
}
],
"windowMinutes": 1,
"scope": "session"
}
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Saved funnels
/v1/store/analytics/funnelsOr name the store: GET /v1/stores/{storeId}/analytics/funnels
Response ListFunnelsResponse
itemsSavedFunnel[]required
Example
curl "https://api.shopfa.st/v1/store/analytics/funnels" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/funnels', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/funnels",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/funnels", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Save a funnel (from the builder or a template)
/v1/store/analytics/funnelsOr name the store: POST /v1/stores/{storeId}/analytics/funnels
Body
namestringrequireddescriptionstringtemplateIdstring | nulldefinitionobjectrequiredstepsobject[]requiredevent"page_view" | "product_view" | "add_to_cart" | "begin_checkout" | "payment_attempt" | "purchase" | "signup" | "search" | "outbound_click" | "custom"requiredlabelstringrequiredfiltersobject[]
windowMinutesintegerrequiredscope"session" | "visitor"requiredsegmentobject[]dimension"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate"requiredop"is" | "is_not" | "contains" | "not_contains" | "starts_with"requiredvaluesstring[]required
breakdown"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate" | null
pinnedboolean
Response SavedFunnel
idFunnelIdrequirednamestringrequireddescriptionstringrequiredtemplateIdstringrequireddefinitionFunnelDefinitionrequiredpinnedbooleanrequiredcreatedAtTimestamprequiredupdatedAtTimestamprequired
Example
curl -X POST "https://api.shopfa.st/v1/store/analytics/funnels" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"description": "",
"templateId": null,
"definition": {
"steps": [
{
"event": "page_view",
"label": "string"
}
],
"windowMinutes": 1,
"scope": "session"
},
"pinned": false
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/funnels', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "string",
"description": "",
"templateId": null,
"definition": {
"steps": [
{
"event": "page_view",
"label": "string"
}
],
"windowMinutes": 1,
"scope": "session"
},
"pinned": false
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"POST",
"https://api.shopfa.st/v1/store/analytics/funnels",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"name": "string",
"description": "",
"templateId": None,
"definition": {
"steps": [
{
"event": "page_view",
"label": "string"
}
],
"windowMinutes": 1,
"scope": "session"
},
"pinned": False
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/analytics/funnels", strings.NewReader(`{
"name": "string",
"description": "",
"templateId": null,
"definition": {
"steps": [
{
"event": "page_view",
"label": "string"
}
],
"windowMinutes": 1,
"scope": "session"
},
"pinned": false
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Change a saved funnel
/v1/store/analytics/funnels/{funnelId}Or name the store: PUT /v1/stores/{storeId}/analytics/funnels/{funnelId}
Parameters
funnelIdafn_…pathrequired
Body
namestringrequireddescriptionstringtemplateIdstring | nulldefinitionobjectrequiredstepsobject[]requiredevent"page_view" | "product_view" | "add_to_cart" | "begin_checkout" | "payment_attempt" | "purchase" | "signup" | "search" | "outbound_click" | "custom"requiredlabelstringrequiredfiltersobject[]
windowMinutesintegerrequiredscope"session" | "visitor"requiredsegmentobject[]dimension"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate"requiredop"is" | "is_not" | "contains" | "not_contains" | "starts_with"requiredvaluesstring[]required
breakdown"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate" | null
pinnedboolean
Response SavedFunnel
idFunnelIdrequirednamestringrequireddescriptionstringrequiredtemplateIdstringrequireddefinitionFunnelDefinitionrequiredpinnedbooleanrequiredcreatedAtTimestamprequiredupdatedAtTimestamprequired
Example
curl -X PUT "https://api.shopfa.st/v1/store/analytics/funnels/afn_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"description": "",
"templateId": null,
"definition": {
"steps": [
{
"event": "page_view",
"label": "string"
}
],
"windowMinutes": 1,
"scope": "session"
},
"pinned": false
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/funnels/afn_0123456789abcdefghjk', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "string",
"description": "",
"templateId": null,
"definition": {
"steps": [
{
"event": "page_view",
"label": "string"
}
],
"windowMinutes": 1,
"scope": "session"
},
"pinned": false
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"PUT",
"https://api.shopfa.st/v1/store/analytics/funnels/afn_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"name": "string",
"description": "",
"templateId": None,
"definition": {
"steps": [
{
"event": "page_view",
"label": "string"
}
],
"windowMinutes": 1,
"scope": "session"
},
"pinned": False
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("PUT", "https://api.shopfa.st/v1/store/analytics/funnels/afn_0123456789abcdefghjk", strings.NewReader(`{
"name": "string",
"description": "",
"templateId": null,
"definition": {
"steps": [
{
"event": "page_view",
"label": "string"
}
],
"windowMinutes": 1,
"scope": "session"
},
"pinned": false
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Delete a saved funnel
/v1/store/analytics/funnels/{funnelId}Or name the store: DELETE /v1/stores/{storeId}/analytics/funnels/{funnelId}
Parameters
funnelIdafn_…pathrequired
Response Ok
okbooleanrequired
Example
curl -X DELETE "https://api.shopfa.st/v1/store/analytics/funnels/afn_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/funnels/afn_0123456789abcdefghjk', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"DELETE",
"https://api.shopfa.st/v1/store/analytics/funnels/afn_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("DELETE", "https://api.shopfa.st/v1/store/analytics/funnels/afn_0123456789abcdefghjk", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Saved segments
/v1/store/analytics/segmentsOr name the store: GET /v1/stores/{storeId}/analytics/segments
Response ListSegmentsResponse
itemsSegment[]required
Example
curl "https://api.shopfa.st/v1/store/analytics/segments" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/segments', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/segments",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/segments", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Save a segment
/v1/store/analytics/segmentsOr name the store: POST /v1/stores/{storeId}/analytics/segments
Body
namestringrequireddescriptionstringfiltersobject[]requireddimension"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate"requiredop"is" | "is_not" | "contains" | "not_contains" | "starts_with"requiredvaluesstring[]required
Response Segment
idSegmentIdrequirednamestringrequireddescriptionstringrequiredfiltersSessionFilter[]requiredcreatedAtTimestamprequiredupdatedAtTimestamprequired
Example
curl -X POST "https://api.shopfa.st/v1/store/analytics/segments" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"description": "",
"filters": [
{
"dimension": "channel",
"op": "is",
"values": [
"string"
]
}
]
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/segments', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "string",
"description": "",
"filters": [
{
"dimension": "channel",
"op": "is",
"values": [
"string"
]
}
]
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"POST",
"https://api.shopfa.st/v1/store/analytics/segments",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"name": "string",
"description": "",
"filters": [
{
"dimension": "channel",
"op": "is",
"values": [
"string"
]
}
]
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/analytics/segments", strings.NewReader(`{
"name": "string",
"description": "",
"filters": [
{
"dimension": "channel",
"op": "is",
"values": [
"string"
]
}
]
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Change a segment
/v1/store/analytics/segments/{segmentId}Or name the store: PUT /v1/stores/{storeId}/analytics/segments/{segmentId}
Parameters
segmentIdasg_…pathrequired
Body
namestringrequireddescriptionstringfiltersobject[]requireddimension"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate"requiredop"is" | "is_not" | "contains" | "not_contains" | "starts_with"requiredvaluesstring[]required
Response Segment
idSegmentIdrequirednamestringrequireddescriptionstringrequiredfiltersSessionFilter[]requiredcreatedAtTimestamprequiredupdatedAtTimestamprequired
Example
curl -X PUT "https://api.shopfa.st/v1/store/analytics/segments/asg_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"description": "",
"filters": [
{
"dimension": "channel",
"op": "is",
"values": [
"string"
]
}
]
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/segments/asg_0123456789abcdefghjk', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "string",
"description": "",
"filters": [
{
"dimension": "channel",
"op": "is",
"values": [
"string"
]
}
]
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"PUT",
"https://api.shopfa.st/v1/store/analytics/segments/asg_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"name": "string",
"description": "",
"filters": [
{
"dimension": "channel",
"op": "is",
"values": [
"string"
]
}
]
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("PUT", "https://api.shopfa.st/v1/store/analytics/segments/asg_0123456789abcdefghjk", strings.NewReader(`{
"name": "string",
"description": "",
"filters": [
{
"dimension": "channel",
"op": "is",
"values": [
"string"
]
}
]
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Delete a segment
/v1/store/analytics/segments/{segmentId}Or name the store: DELETE /v1/stores/{storeId}/analytics/segments/{segmentId}
Parameters
segmentIdasg_…pathrequired
Response Ok
okbooleanrequired
Example
curl -X DELETE "https://api.shopfa.st/v1/store/analytics/segments/asg_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/segments/asg_0123456789abcdefghjk', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"DELETE",
"https://api.shopfa.st/v1/store/analytics/segments/asg_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("DELETE", "https://api.shopfa.st/v1/store/analytics/segments/asg_0123456789abcdefghjk", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Chart notes (launches, campaigns, outages)
/v1/store/analytics/annotationsOr name the store: GET /v1/stores/{storeId}/analytics/annotations
Response ListAnnotationsResponse
itemsAnnotation[]required
Example
curl "https://api.shopfa.st/v1/store/analytics/annotations" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/annotations', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/annotations",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/annotations", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Add a chart note
/v1/store/analytics/annotationsOr name the store: POST /v1/stores/{storeId}/analytics/annotations
Body
datestringrequiredtitlestringrequiredbodystringtone"neutral" | "accent" | "good" | "warn" | "danger"
Response Annotation
idAnnotationIdrequireddateIsoDaterequiredtitlestringrequiredbodystringrequiredtoneAnnotationTonerequiredcreatedAtTimestamprequiredcreatedBystringrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/analytics/annotations" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"date": "string",
"title": "string",
"body": "",
"tone": "accent"
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/annotations', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"date": "string",
"title": "string",
"body": "",
"tone": "accent"
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"POST",
"https://api.shopfa.st/v1/store/analytics/annotations",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"date": "string",
"title": "string",
"body": "",
"tone": "accent"
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/analytics/annotations", strings.NewReader(`{
"date": "string",
"title": "string",
"body": "",
"tone": "accent"
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Change a chart note
/v1/store/analytics/annotations/{annotationId}Or name the store: PUT /v1/stores/{storeId}/analytics/annotations/{annotationId}
Parameters
annotationIdano_…pathrequired
Body
datestringrequiredtitlestringrequiredbodystringtone"neutral" | "accent" | "good" | "warn" | "danger"
Response Annotation
idAnnotationIdrequireddateIsoDaterequiredtitlestringrequiredbodystringrequiredtoneAnnotationTonerequiredcreatedAtTimestamprequiredcreatedBystringrequired
Example
curl -X PUT "https://api.shopfa.st/v1/store/analytics/annotations/ano_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"date": "string",
"title": "string",
"body": "",
"tone": "accent"
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/annotations/ano_0123456789abcdefghjk', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"date": "string",
"title": "string",
"body": "",
"tone": "accent"
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"PUT",
"https://api.shopfa.st/v1/store/analytics/annotations/ano_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"date": "string",
"title": "string",
"body": "",
"tone": "accent"
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("PUT", "https://api.shopfa.st/v1/store/analytics/annotations/ano_0123456789abcdefghjk", strings.NewReader(`{
"date": "string",
"title": "string",
"body": "",
"tone": "accent"
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Delete a chart note
/v1/store/analytics/annotations/{annotationId}Or name the store: DELETE /v1/stores/{storeId}/analytics/annotations/{annotationId}
Parameters
annotationIdano_…pathrequired
Response Ok
okbooleanrequired
Example
curl -X DELETE "https://api.shopfa.st/v1/store/analytics/annotations/ano_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/annotations/ano_0123456789abcdefghjk', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"DELETE",
"https://api.shopfa.st/v1/store/analytics/annotations/ano_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("DELETE", "https://api.shopfa.st/v1/store/analytics/annotations/ano_0123456789abcdefghjk", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Alert rules and what they found lately
/v1/store/analytics/alertsOr name the store: GET /v1/stores/{storeId}/analytics/alerts
Response ListAlertsResponse
itemsAlert[]requiredeventsAlertEvent[]required
Example
curl "https://api.shopfa.st/v1/store/analytics/alerts" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/alerts', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/alerts",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/alerts", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Add an alert (anomaly or threshold, emailed)
/v1/store/analytics/alertsOr name the store: POST /v1/stores/{storeId}/analytics/alerts
Body
namestringrequiredmetric"visitors" | "sessions" | "pageviews" | "conversions" | "conversion_rate" | "orders" | "revenue" | "bounce_rate" | "bot_share"requiredrule"anomaly" | "drops_below" | "rises_above" | "change_pct"requiredthresholdnumberrequiredcadence"hourly" | "daily"requiredfiltersobject[]dimension"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate"requiredop"is" | "is_not" | "contains" | "not_contains" | "starts_with"requiredvaluesstring[]required
recipientsstring[]requiredenabledboolean
Response Alert
namestringrequiredmetricAlertMetricrequiredruleAlertRulerequiredthresholdnumberrequiredcadenceAlertCadencerequiredfiltersSessionFilter[]requiredrecipientsEmail[]requiredenabledbooleanrequiredidAlertIdrequiredlastCheckedAtTimestamp | nullrequired
3 more fields
lastFiredAtTimestamp | nullrequiredlastValuenumberrequiredcreatedAtTimestamprequired
Example
curl -X POST "https://api.shopfa.st/v1/store/analytics/alerts" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"metric": "visitors",
"rule": "anomaly",
"threshold": 0,
"cadence": "hourly",
"filters": [],
"recipients": [
"[email protected]"
],
"enabled": true
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/alerts', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "string",
"metric": "visitors",
"rule": "anomaly",
"threshold": 0,
"cadence": "hourly",
"filters": [],
"recipients": [
"[email protected]"
],
"enabled": true
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"POST",
"https://api.shopfa.st/v1/store/analytics/alerts",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"name": "string",
"metric": "visitors",
"rule": "anomaly",
"threshold": 0,
"cadence": "hourly",
"filters": [],
"recipients": [
"[email protected]"
],
"enabled": True
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/analytics/alerts", strings.NewReader(`{
"name": "string",
"metric": "visitors",
"rule": "anomaly",
"threshold": 0,
"cadence": "hourly",
"filters": [],
"recipients": [
"[email protected]"
],
"enabled": true
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Change an alert
/v1/store/analytics/alerts/{alertId}Or name the store: PUT /v1/stores/{storeId}/analytics/alerts/{alertId}
Parameters
alertIdalr_…pathrequired
Body
namestringrequiredmetric"visitors" | "sessions" | "pageviews" | "conversions" | "conversion_rate" | "orders" | "revenue" | "bounce_rate" | "bot_share"requiredrule"anomaly" | "drops_below" | "rises_above" | "change_pct"requiredthresholdnumberrequiredcadence"hourly" | "daily"requiredfiltersobject[]dimension"channel" | "source" | "medium" | "campaign" | "term" | "content" | "source_medium" | "referrer" | "landing" | "exit" | "country" | "region" | "city" | "device" | "browser" | "os" | "language" | "screen" | "visitor_type" | "consent" | "affiliate"requiredop"is" | "is_not" | "contains" | "not_contains" | "starts_with"requiredvaluesstring[]required
recipientsstring[]requiredenabledboolean
Response Alert
namestringrequiredmetricAlertMetricrequiredruleAlertRulerequiredthresholdnumberrequiredcadenceAlertCadencerequiredfiltersSessionFilter[]requiredrecipientsEmail[]requiredenabledbooleanrequiredidAlertIdrequiredlastCheckedAtTimestamp | nullrequired
3 more fields
lastFiredAtTimestamp | nullrequiredlastValuenumberrequiredcreatedAtTimestamprequired
Example
curl -X PUT "https://api.shopfa.st/v1/store/analytics/alerts/alr_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"metric": "visitors",
"rule": "anomaly",
"threshold": 0,
"cadence": "hourly",
"filters": [],
"recipients": [
"[email protected]"
],
"enabled": true
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/alerts/alr_0123456789abcdefghjk', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "string",
"metric": "visitors",
"rule": "anomaly",
"threshold": 0,
"cadence": "hourly",
"filters": [],
"recipients": [
"[email protected]"
],
"enabled": true
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"PUT",
"https://api.shopfa.st/v1/store/analytics/alerts/alr_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"name": "string",
"metric": "visitors",
"rule": "anomaly",
"threshold": 0,
"cadence": "hourly",
"filters": [],
"recipients": [
"[email protected]"
],
"enabled": True
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("PUT", "https://api.shopfa.st/v1/store/analytics/alerts/alr_0123456789abcdefghjk", strings.NewReader(`{
"name": "string",
"metric": "visitors",
"rule": "anomaly",
"threshold": 0,
"cadence": "hourly",
"filters": [],
"recipients": [
"[email protected]"
],
"enabled": true
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Delete an alert
/v1/store/analytics/alerts/{alertId}Or name the store: DELETE /v1/stores/{storeId}/analytics/alerts/{alertId}
Parameters
alertIdalr_…pathrequired
Response Ok
okbooleanrequired
Example
curl -X DELETE "https://api.shopfa.st/v1/store/analytics/alerts/alr_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/alerts/alr_0123456789abcdefghjk', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"DELETE",
"https://api.shopfa.st/v1/store/analytics/alerts/alr_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("DELETE", "https://api.shopfa.st/v1/store/analytics/alerts/alr_0123456789abcdefghjk", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Evaluate an alert now (emails only if it fires)
/v1/store/analytics/alerts/{alertId}/checkOr name the store: POST /v1/stores/{storeId}/analytics/alerts/{alertId}/check
Parameters
alertIdalr_…pathrequired
Response CheckAlertResponse
firedbooleanrequiredvaluenumberrequiredexpectednumberrequiredmessagestringrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/analytics/alerts/alr_0123456789abcdefghjk/check" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/alerts/alr_0123456789abcdefghjk/check', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"POST",
"https://api.shopfa.st/v1/store/analytics/alerts/alr_0123456789abcdefghjk/check",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/analytics/alerts/alr_0123456789abcdefghjk/check", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Reports emailed on a schedule
/v1/store/analytics/reportsOr name the store: GET /v1/stores/{storeId}/analytics/reports
Response ListScheduledReportsResponse
itemsScheduledReport[]required
Example
curl "https://api.shopfa.st/v1/store/analytics/reports" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/reports', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/reports",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/reports", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Schedule a report
/v1/store/analytics/reportsOr name the store: POST /v1/stores/{storeId}/analytics/reports
Body
namestringrequiredkind"overview" | "traffic" | "pages" | "geography" | "bots" | "ads" | "funnel" | "financial"requiredfunnelIdafn_… | nullcadence"daily" | "weekly" | "monthly"requiredweekdayintegerhourintegerrecipientsstring[]requiredformat"summary" | "csv"enabledboolean
Response ScheduledReport
namestringrequiredkindReportKindrequiredfunnelIdFunnelId | nullrequiredcadenceReportCadencerequiredweekdayintegerrequiredhourintegerrequiredrecipientsEmail[]requiredformat"summary" | "csv"requiredenabledbooleanrequiredidScheduledReportIdrequired
3 more fields
lastSentAtTimestamp | nullrequirednextAtTimestamprequiredcreatedAtTimestamprequired
Example
curl -X POST "https://api.shopfa.st/v1/store/analytics/reports" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"kind": "overview",
"funnelId": null,
"cadence": "daily",
"weekday": 1,
"hour": 8,
"recipients": [
"[email protected]"
],
"format": "summary",
"enabled": true
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/reports', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "string",
"kind": "overview",
"funnelId": null,
"cadence": "daily",
"weekday": 1,
"hour": 8,
"recipients": [
"[email protected]"
],
"format": "summary",
"enabled": true
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"POST",
"https://api.shopfa.st/v1/store/analytics/reports",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"name": "string",
"kind": "overview",
"funnelId": None,
"cadence": "daily",
"weekday": 1,
"hour": 8,
"recipients": [
"[email protected]"
],
"format": "summary",
"enabled": True
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/analytics/reports", strings.NewReader(`{
"name": "string",
"kind": "overview",
"funnelId": null,
"cadence": "daily",
"weekday": 1,
"hour": 8,
"recipients": [
"[email protected]"
],
"format": "summary",
"enabled": true
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Change a scheduled report
/v1/store/analytics/reports/{reportId}Or name the store: PUT /v1/stores/{storeId}/analytics/reports/{reportId}
Parameters
reportIdsrp_…pathrequired
Body
namestringrequiredkind"overview" | "traffic" | "pages" | "geography" | "bots" | "ads" | "funnel" | "financial"requiredfunnelIdafn_… | nullcadence"daily" | "weekly" | "monthly"requiredweekdayintegerhourintegerrecipientsstring[]requiredformat"summary" | "csv"enabledboolean
Response ScheduledReport
namestringrequiredkindReportKindrequiredfunnelIdFunnelId | nullrequiredcadenceReportCadencerequiredweekdayintegerrequiredhourintegerrequiredrecipientsEmail[]requiredformat"summary" | "csv"requiredenabledbooleanrequiredidScheduledReportIdrequired
3 more fields
lastSentAtTimestamp | nullrequirednextAtTimestamprequiredcreatedAtTimestamprequired
Example
curl -X PUT "https://api.shopfa.st/v1/store/analytics/reports/srp_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string",
"kind": "overview",
"funnelId": null,
"cadence": "daily",
"weekday": 1,
"hour": 8,
"recipients": [
"[email protected]"
],
"format": "summary",
"enabled": true
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/reports/srp_0123456789abcdefghjk', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "string",
"kind": "overview",
"funnelId": null,
"cadence": "daily",
"weekday": 1,
"hour": 8,
"recipients": [
"[email protected]"
],
"format": "summary",
"enabled": true
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"PUT",
"https://api.shopfa.st/v1/store/analytics/reports/srp_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"name": "string",
"kind": "overview",
"funnelId": None,
"cadence": "daily",
"weekday": 1,
"hour": 8,
"recipients": [
"[email protected]"
],
"format": "summary",
"enabled": True
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("PUT", "https://api.shopfa.st/v1/store/analytics/reports/srp_0123456789abcdefghjk", strings.NewReader(`{
"name": "string",
"kind": "overview",
"funnelId": null,
"cadence": "daily",
"weekday": 1,
"hour": 8,
"recipients": [
"[email protected]"
],
"format": "summary",
"enabled": true
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Stop a scheduled report
/v1/store/analytics/reports/{reportId}Or name the store: DELETE /v1/stores/{storeId}/analytics/reports/{reportId}
Parameters
reportIdsrp_…pathrequired
Response Ok
okbooleanrequired
Example
curl -X DELETE "https://api.shopfa.st/v1/store/analytics/reports/srp_0123456789abcdefghjk" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/reports/srp_0123456789abcdefghjk', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"DELETE",
"https://api.shopfa.st/v1/store/analytics/reports/srp_0123456789abcdefghjk",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("DELETE", "https://api.shopfa.st/v1/store/analytics/reports/srp_0123456789abcdefghjk", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Send a scheduled report now
/v1/store/analytics/reports/{reportId}/sendOr name the store: POST /v1/stores/{storeId}/analytics/reports/{reportId}/send
Parameters
reportIdsrp_…pathrequired
Response SendScheduledReportResponse
sentintegerrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/analytics/reports/srp_0123456789abcdefghjk/send" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/reports/srp_0123456789abcdefghjk/send', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"POST",
"https://api.shopfa.st/v1/store/analytics/reports/srp_0123456789abcdefghjk/send",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/analytics/reports/srp_0123456789abcdefghjk/send", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Tracking settings and pipeline health
/v1/store/analytics/settingsOr name the store: GET /v1/stores/{storeId}/analytics/settings
Response AnalyticsHealth
settingsAnalyticsSettingsrequiredlast24hobject[]requirednameAnalyticsEventNamerequiredeventsintegerrequired
lastEventAtTimestamp | nullrequiredrollupsobjectrequireddaysintegerrequiredlastRolledAtTimestamp | nullrequiredoldestIsoDate | nullrequired
storageobjectrequiredeventsintegerrequiredsessionsintegerrequiredpartitionsintegerrequired
consentobject[]requiredconsentConsentStaterequiredsessionsintegerrequired
Example
curl "https://api.shopfa.st/v1/store/analytics/settings" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/settings', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/settings",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/settings", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Change consent mode, sessions and bot filtering
/v1/store/analytics/settingsOr name the store: PUT /v1/stores/{storeId}/analytics/settings
Body
consentMode"cookieless" | "consent" | "first_party" | "off"requiredrespectGpcbooleanrequiredsessionTimeoutMinintegerrequiredbotFilter"standard" | "strict"requiredexcludedPathsstring[]requireddefaultModel"first_touch" | "last_touch" | "last_non_direct" | "linear" | "position_based" | "time_decay"requiredlookbackDaysintegerrequired
Response AnalyticsHealth
settingsAnalyticsSettingsrequiredlast24hobject[]requirednameAnalyticsEventNamerequiredeventsintegerrequired
lastEventAtTimestamp | nullrequiredrollupsobjectrequireddaysintegerrequiredlastRolledAtTimestamp | nullrequiredoldestIsoDate | nullrequired
storageobjectrequiredeventsintegerrequiredsessionsintegerrequiredpartitionsintegerrequired
consentobject[]requiredconsentConsentStaterequiredsessionsintegerrequired
Example
curl -X PUT "https://api.shopfa.st/v1/store/analytics/settings" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"consentMode": "cookieless",
"respectGpc": false,
"sessionTimeoutMin": 5,
"botFilter": "standard",
"excludedPaths": [
"string"
],
"defaultModel": "first_touch",
"lookbackDays": 1
}'const res = await fetch('https://api.shopfa.st/v1/store/analytics/settings', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"consentMode": "cookieless",
"respectGpc": false,
"sessionTimeoutMin": 5,
"botFilter": "standard",
"excludedPaths": [
"string"
],
"defaultModel": "first_touch",
"lookbackDays": 1
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"PUT",
"https://api.shopfa.st/v1/store/analytics/settings",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"consentMode": "cookieless",
"respectGpc": False,
"sessionTimeoutMin": 5,
"botFilter": "standard",
"excludedPaths": [
"string"
],
"defaultModel": "first_touch",
"lookbackDays": 1
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("PUT", "https://api.shopfa.st/v1/store/analytics/settings", strings.NewReader(`{
"consentMode": "cookieless",
"respectGpc": false,
"sessionTimeoutMin": 5,
"botFilter": "standard",
"excludedPaths": [
"string"
],
"defaultModel": "first_touch",
"lookbackDays": 1
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Recurring revenue from auto-renewing subscriptions (MRR), retries and recoveries
/v1/store/analytics/auto-renewOr name the store: GET /v1/stores/{storeId}/analytics/auto-renew
Response AutoRenewMetrics
currencyCurrencyCoderequiredmrrMinorMinorUnitsrequiredactiveAutoRenewintegerrequiredautoRenewShareBpsintegerrequiredretryingintegerrequiredcharged30dMinorMinorUnitsrequiredrecovered30dMinorMinorUnitsrequiredfailed30dintegerrequiredupcoming7dMinorMinorUnitsrequiredupcoming7dintegerrequiredallowedProductsintegerrequired
Example
curl "https://api.shopfa.st/v1/store/analytics/auto-renew" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/analytics/auto-renew', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/analytics/auto-renew",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/analytics/auto-renew", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)