List and filter intents
API v1 is the older API. It still works, but new integrations should use API v2. Migrating from v1 to v2
/external/intentsCosts 1 rate-limit point · Rate limits
List back-in-stock intents (signups) for the shop, newest first. Supports filtering by Shopify product or variant, customer email or phone, creation date range, and notification status, with page-based pagination (up to 500 per page). Returns the matching intents alongside pagination metadata.
Query parameters
shopify_variant_idintegerFilter by Shopify Variant ID
shopify_product_idintegerFilter by Shopify Product ID
emailstringFilter by customer email
phonestringFilter by customer phone
start_datestringFilter by start date (YYYY-MM-DD)
end_datestringFilter by end date (YYYY-MM-DD)
notifiedbooleanFilter by notification status (true = notified, false = not notified)
pageintegerPage number for pagination
per_pageintegerNumber of items per page (maximum 500)
Headers
X-Auth-TokenstringRequiredAPI key for authentication
Returns
intentsarray of objectsShow 27 child attributesHide child attributes
idstringUnique identifier for the intent
blocked_atstring, nullableTimestamp when the intent was blocked from sending
channelstringCommunication channel used for notifications (e.g., Email, SMS)
emailstringCustomer's email address for notifications
notified_atstring, nullableTimestamp of the notification sent
optin_confirmedbooleanWhether the customer has confirmed their GDPR opt-in for notifications
phonestringCustomer's phone number for SMS notifications
quantityintegerRequested quantity of the product when back in stock
sent_notifications_countintegerNumber of notifications sent for this intent
sourcestringExample:apitypestringType of the intent (e.g., restock, wishlist_reminder)
unsubscribed_atstring, nullableTimestamp when the customer unsubscribed from notifications
created_atstringTimestamp when the intent was created
updated_atstringTimestamp when the intent was last updated
customer_idstringUnique identifier for the customer
intent_trigger_idstring, nullableIdentifier for the trigger that created this intent
product_variant_idstring, nullableInternal product variant identifier
shop_idstringUnique identifier for the shop
shopify_inventory_item_idinteger, nullableShopify's inventory item identifier
shopify_market_idinteger, nullableShopify's market identifier for multi-market stores
shopify_product_idinteger, nullableShopify's product identifier
shopify_variant_idinteger, nullableShopify's variant identifier
customer_namestring, nullableCustomer's full name
contactstring, nullableCustomer's contact information
customer_unsubscribed_atstring, nullableTimestamp when the customer unsubscribed from all notifications
accepts_marketingboolean, nullableWhether the customer has opted in to receive marketing communications
notifications_countinteger, nullableTotal number of notifications sent for this intent
metaobjectShow 4 child attributesHide child attributes
total_countintegerExample:128pageintegerExample:1per_pageintegerExample:25total_pagesintegerExample:6
Errors
Bad request
Unauthorized
curl "https://app.stoqapp.com/api/v1/external/intents" \
-H "X-Auth-Token: $STOQ_API_KEY"const res = await fetch("https://app.stoqapp.com/api/v1/external/intents", {
headers: {
"X-Auth-Token": process.env.STOQ_API_KEY,
},
});
const data = await res.json();import os
import requests
res = requests.get(
"https://app.stoqapp.com/api/v1/external/intents",
headers={"X-Auth-Token": os.environ["STOQ_API_KEY"]},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://app.stoqapp.com/api/v1/external/intents")
req = Net::HTTP::Get.new(uri, "X-Auth-Token" => ENV["STOQ_API_KEY"])
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body){
"intents": [
{
"id": "8f3c2b1a-7d4e-4c2a-9f10-2b3c4d5e6f70",
"channel": "email",
"email": "shopper@example.com",
"phone": null,
"quantity": 1,
"notified_at": null,
"optin_confirmed": true,
"source": "api",
"type": "restock",
"sent_notifications_count": 0,
"created_at": "2026-06-20T14:30:00Z",
"updated_at": "2026-06-20T14:30:00Z",
"customer_id": "c1d2e3f4-5a6b-7c8d-9e0f-1a2b3c4d5e6f",
"shop_id": "a1b2c3d4-5e6f-7081-92a3-b4c5d6e7f809",
"shopify_product_id": 7891234567890,
"shopify_variant_id": 43900910010503,
"accepts_marketing": true
}
],
"meta": {
"total_count": 128,
"page": 1,
"per_page": 25,
"total_pages": 6
}
}