Analytics overview

get/v1/analytics/overview

The figures on the dashboard's analytics page for the last days days, counted in the organization's reporting timezone: totals, the same totals for the period before, the funnel from seeing the assistant to adding to cart, a daily series and breakdowns.

Freshness

The figures are read from daily rollups the server builds through the day, not from raw events, so today's numbers trail by up to a few minutes. coverage says how many of the days have been built; a day not built yet appears in series with missing: true, which is not the same as a day with no traffic.

Private keyapi.v1.analytics.overviewNo demo

Query parameters

1
daysinteger

How many days, ending today.

default: 3073090

Response

200The overview.
timezonestringrequired

The timezone the days are counted in.

rangeintegerrequired

The number of days.

startDaystringrequired

The first day, YYYY-MM-DD.

endDaystringrequired

The last day, today, YYYY-MM-DD.

totalsobjectrequired

Totals for the range, grouped: audience, engagement, commerce, catalogue, health and integrity. A rate is null when what it divides by is zero.

previousobjectrequired

The same totals for the equally long period just before, for comparison.

array<object>required

From seeing the assistant to Stylor adding to cart. rate is against the first step.

keystring

The event counted.

labelstring

The step's name.

countinteger

How many.

ratenumbernullable

Count over the first step's count.

tierinteger

How strongly the step is verified; lower is stronger.

array<object>required

One entry per day, oldest first.

daystring

YYYY-MM-DD.

missingboolean

The day has not been built yet; its counts are not zeros.

sessionsinteger

Sessions.

turnsinteger

Answers the assistant gave.

searchesinteger

Searches.

emptySearchesinteger

Searches that found nothing.

cartAddsinteger

Products Stylor added to cart.

productClicksinteger

Product clicks.

breakdownsobjectrequired

Top values for cartByArticleFamily, closedByReason, messagesByInput, requestsByRoute and searchesByDataset.

objectrequired

How much of the range has been built.

daysExpectedinteger

Days in the range.

daysBuiltinteger

Days built so far.

lastComputedAtstring (date-time)nullable

When a day in the range was last built.

Errors

20

Every error is JSON with a single error string unless noted. Match on the status code; the message is for humans.

422
days must be one of 7, 30, 90.

days is something else.

curl -X GET "https://stylor.ai/api/v1/analytics/overview" \
  -H "Authorization: Bearer $STYLOR_API_KEY"
Response · 200
{
  "timezone": "America/Denver",
  "range": 7,
  "startDay": "2026-09-28",
  "endDay": "2026-10-04",
  "totals": {
    "engagement": {
      "widgetLoads": 18240,
      "widgetOpens": 1312,
      "openRate": 0.0719,
      "messages": 2210
    }
  },
  "previous": {
    "engagement": {
      "widgetLoads": 16980,
      "widgetOpens": 1180,
      "openRate": 0.0695,
      "messages": 1984
    }
  },
  "funnel": [
    {
      "key": "widget.loaded",
      "label": "Saw the assistant",
      "count": 18240,
      "rate": 1,
      "tier": 1
    }
  ],
  "series": [
    {
      "day": "2026-09-28",
      "missing": false,
      "sessions": 2410,
      "turns": 301,
      "searches": 512,
      "emptySearches": 14,
      "cartAdds": 22,
      "productClicks": 188
    }
  ],
  "breakdowns": {
    "searchesByDataset": []
  },
  "coverage": {
    "daysExpected": 7,
    "daysBuilt": 7,
    "lastComputedAt": "2026-10-04T18:15:00.000Z"
  }
}