APIAPI referenceLeads and back in stock
List Leads
Leads with their consent records (newest first).
GET/v1/stores/{store_id}/leadsScope leads:read
- Scope:
leads:read(scopes and plan access) - Rate limit: 600 requests/min per API key (test keys: 60/min) (rate limits)
Leads with their consent records (newest first).
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| store_idrequired | path | string | |
| updated_since | query | string | null | |
| newsletter_status | query | "none" | "pending_confirmation" | "confirmed" | "unsubscribed" | null | |
| limit | query | integer | Page size |
| cursor | query | string | null | Cursor from the previous page |
Example request
curl -X GET "https://api.shopassist.coec.dk/v1/stores/sto_01j8000000e008000000000000/leads" \
-H "Authorization: Bearer $SHOPASSIST_API_KEY"Response 200 (Page_Lead_)
| Field | Type | Description |
|---|---|---|
| datarequired | Lead[] | |
| data[].confirmed_atrequired | string | null | format date-time |
| data[].consentsrequired | ConsentRecordView[] | |
| data[].consents[].confirmed_atrequired | string | null | format date-time |
| data[].consents[].consent_textrequired | string | |
| data[].consents[].consent_text_versionrequired | string | |
| data[].consents[].created_atrequired | string | format date-time |
| data[].consents[].idrequired | string | pattern `^cns_[0-9a-hjkmnp-tv-z]{26}$` |
| data[].consents[].is_grantedrequired | boolean | |
| data[].consents[].localerequired | string | |
| data[].consents[].purposerequired | string (enum) | one of newsletter, marketing_email, back_in_stock, transcript_email, handoff_share, analytics, preferences |
| data[].consents[].sourcerequired | string (enum) | one of widget_form, chat, cmp, double_opt_in, unsubscribe, dashboard, api |
| data[].consents[].withdrawn_atrequired | string | null | format date-time |
| data[].conversation_idrequired | string | null | pattern `^conv_[0-9a-hjkmnp-tv-z]{26}$` |
| data[].created_atrequired | string | format date-time |
| data[].emailrequired | string | |
| data[].idrequired | string | pattern `^lead_[0-9a-hjkmnp-tv-z]{26}$` |
| data[].localerequired | string | null | |
| data[].namerequired | string | null | |
| data[].newsletter_statusrequired | "none" | "pending_confirmation" | "confirmed" | "unsubscribed" | |
| data[].platform_sync_statusrequired | "not_required" | "pending" | "synced" | "failed" | |
| data[].purposesrequired | ("newsletter" | "contact_request" | "back_in_stock" | "transcript")[] | |
| data[].sourcerequired | "lead_form" | "chat_tool" | "handoff" | "back_in_stock" | |
| data[].unsubscribed_atrequired | string | null | format date-time |
| has_morerequired | boolean | |
| next_cursorrequired | string | null | Opaque cursor for the next page; null on the last page |
{
"data": [
{
"confirmed_at": "2026-09-28T10:15:30.123Z",
"consents": [
{
"confirmed_at": "2026-09-28T10:15:30.123Z",
"consent_text": "string",
"consent_text_version": "string",
"created_at": "2026-09-28T10:15:30.123Z",
"id": "cns_01j8000000e008000000000000",
"is_granted": true,
"locale": "da-DK",
"purpose": "newsletter",
"source": "widget_form",
"withdrawn_at": "2026-09-28T10:15:30.123Z"
}
],
"conversation_id": "conv_01j8000000e008000000000000",
"created_at": "2026-09-28T10:15:30.123Z",
"email": "string",
"id": "lead_01j8000000e008000000000000",
"locale": "da-DK",
"name": "string",
"newsletter_status": "none",
"platform_sync_status": "not_required",
"purposes": [
"newsletter"
],
"source": "lead_form",
"unsubscribed_at": "2026-09-28T10:15:30.123Z"
}
],
"has_more": true,
"next_cursor": "string"
}Errors
Every error uses the error envelope; the code field is stable.
400Bad Request401Unauthorized403Forbidden404Not Found422Unprocessable Content429Too Many Requests
Last updated on