Docs·Reports
GET
/api/v1/spreelytics/reportsList reports
Returns saved reports in the audience, newest first, each with its full config. Pass dashboardId to get only the cards on one dashboard, which is how the app loads a board. Without it you get every report in the audience.
Every role can call it, Viewer included.
Keys: an account key or an audience key. Getting started explains both kinds.
Parameters
| Prop | In | Type | Notes |
|---|---|---|---|
contactListId | query | string | The audience id, a UUID. With an audience key it must be that key's own audience. |
dashboardId? | query | string | Optional. Only the reports on this dashboard. An id that is not a dashboard here returns an empty list. |
Response
An array of SpreelyticsReportDto.
| Prop | Type | Notes |
|---|---|---|
id | string | The report id. |
name | string | The report name. |
dashboardId | string | The dashboard it sits on. Every report sits on one. |
config | SpreelyticsSavedReportConfig | The saved settings, exactly as they were sent. POST /reports describes them. |
layout | object | Its slot on the dashboard grid as { x, y, w, h }, or null when the app places it. |
createdAt | string | When it was created. Only the create call answers in ISO 8601 (2026-09-30T09:00:00.000Z). Every other call returns the database form (2026-09-30 09:00:00+00), so parse both. |
updatedAt | string | When it last changed. Create and update calls answer in ISO 8601, lists and reads in the database form, as with createdAt. |
Request
curl 'https://app.spreelytics.com/api/v1/spreelytics/reports?contactListId=…' \
-H 'Authorization: Bearer YOUR_API_KEY'
const url = new URL('https://app.spreelytics.com/api/v1/spreelytics/reports');
url.searchParams.set('contactListId', '…');
const res = await fetch(url, {
headers: { Authorization: 'Bearer YOUR_API_KEY' },
});
const data = await res.json();
import requests
res = requests.get(
"https://app.spreelytics.com/api/v1/spreelytics/reports",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"contactListId": "…"},
)
data = res.json()
Response
[
{
"id": "string",
"name": "string",
"dashboardId": "string",
"config": {
"kind": "chart",
"chartType": "line",
"interval": "minute",
"range": "30min",
"startDate": "string",
"endDate": "string",
"series": [
{
"id": null,
"type": null,
"event": null,
"events": null,
"eventLabels": null,
"stepsBefore": null,
"stepsAfter": null,
"displayName": null,
"segment": null,
"property": null,
"cohortId": null,
"filters": null,
"formula": null,
"hideSeries": null
}
],
"breakdowns": [
"string"
],
"breakdown": "string",
"globalFilters": [
{
"id": null,
"name": null,
"operator": null,
"value": null,
"event": null
}
],
"previous": true,
"customDays": 0,
"limit": 0,
"funnelWindowSeconds": 0,
"funnelStrictOrder": true,
"retentionCriteria": "on",
"sankeyExclude": [
"string"
],
"stacked": true,
"tabKeys": [
"string"
],
"metrics": [
"string"
],
"showChart": true
},
"layout": "string",
"createdAt": "string",
"updatedAt": "string"
}
]