Skip to content
Menu
SilktideDevelopers

Get how often each event was sent, step by step

GET/v1/results/analytics/events-over-time
View as Markdown

Counts how often events were sent across the period, one line per event in multiSeries, and every event together in total and series. Send type=custom for only the events your site sends, or type=built-in for only those the Silktide Script records itself.

Send a period other than all. A series needs a start date, and all, the default, has none: the answer is an error with status 200 and type Error. Check for error before reading result.

How long a step is depends on the period: an hour when it covers a single day, a month for last-12-months, and a day otherwise.

Without limit, every event sent in the period has a series of its own, which for a busy site can be dozens. limit=5 keeps the four busiest and adds the rest together as one series keyed other. total and series are the same either way.

key is the event as your site sends it, the value to filter by (filters[event]=is:newsletter_signup); label is the name shown for it in Silktide. For view, period and filters, see Analytics.

Request
curl "https://api.eu.silktide.com/v1/results/analytics/events-over-time?view=all&period=custom&from=2026-11-01&to=2026-11-03&type=custom&limit=2" \
  -H "Authorization: silktide token=$SILKTIDE_API_KEY"
Response: Your own events over three days
{
  "result": {
    "multiSeries": [
      {
        "label": "Newsletter sign-up",
        "key": "newsletter_signup",
        "total": 19,
        "series": [
          {
            "time": "2026-11-01 00:00:00",
            "events": 4
          },
          {
            "time": "2026-11-02 00:00:00",
            "events": 9
          },
          {
            "time": "2026-11-03 00:00:00",
            "events": 6
          }
        ]
      },
      {
        "label": "Other",
        "key": "other",
        "total": 12,
        "series": [
          {
            "time": "2026-11-01 00:00:00",
            "events": 3
          },
          {
            "time": "2026-11-02 00:00:00",
            "events": 0
          },
          {
            "time": "2026-11-03 00:00:00",
            "events": 9
          }
        ]
      }
    ],
    "range": {
      "start": "2026-11-01 00:00:00",
      "end": "2026-11-04 00:00:00"
    },
    "total": 31,
    "series": [
      {
        "time": "2026-11-01 00:00:00",
        "events": 7
      },
      {
        "time": "2026-11-02 00:00:00",
        "events": 9
      },
      {
        "time": "2026-11-03 00:00:00",
        "events": 15
      }
    ]
  },
  "selector": "/v1/results/analytics/events-over-time",
  "duration": 0.021
}

Request

Query parameters

  • viewstringmatches ^(all|[1-9]\d*)$

    The analytics view to read: its id, the number after /analytics/ in its address in Silktide, or all for all of the account's analytics. Send this or websiteId.

  • websiteIdintegerat least 1

    Instead of view, a website whose analytics to read. The website must have Analytics set up.

  • sectionIdinteger

    With websiteId, a section of the website. Defaults to 0, the whole website.

  • periodstring

    The date range. Defaults to all. The spaced forms (-7 days, month to date) are older names that keep working. custom needs from and to.

    One ofalltodaylast-7-dayslast-30-dayslast-90-daysmonth-to-datelast-monthyear-to-datelast-12-monthscustom-7 days-30 days-90 days-1 monthmonth to dateyear to date-12 months

  • fromstring

    With period=custom, the first day, such as 2026-10-01.

  • tostring

    With period=custom, the last day.

  • timezonestring

    The IANA time zone days are read in, such as America/New_York. Defaults to UTC.

  • filtersmap of strings

    Only visits matching every filter, keyed by what is filtered: filters[url]=contains:/blog. Each value is {operator}:{value}, with operator is, not, contains, starts, gt or lt. Keys include url, hostName, entryUrl, exitUrl, event, outgoingUrl, referrer, source, medium, campaign, content, term, countryCode, regionCode, language, deviceType (desktop, tablet or mobile), operatingSystem and browser.

  • typestring

    custom for only the events your site sends, built-in for only those the Silktide Script records itself, such as page_load and click. Left out, both.

    One ofcustombuilt-in

  • limitinteger2 to 50

    The most series multiSeries holds, counting Other: the busiest events less one, then the rest added together as Other. Left out, every event has its own series.

  • intervalstring

    With period=custom, the length of each step: an hour, a day, a week starting on Monday, a month or a year. Ignored with any other period. Left out, steps are hours for a single day, months for exactly twelve months, and days otherwise.

    One ofPT1HP1DP7DP1MP1Y

  • previousPeriodstring

    1 to add the figures of the period before, the same length and ending where this one starts, as previous… fields. Left out or 0, none. Needs a period with a start: with all, nothing is added.

    One of01

Response

200JSON.

  • resultobjectrequired

    The answer.

    Show 5 fields
    • multiSerieslist of objectsrequired

      One series per event sent in the period, most sent first. Empty when none were.

      Show 5 fields
      • labelstringrequired

        What the event is called in Silktide, as eventName in Get events. Other for the series limit adds the rest into.

      • keystringrequired

        The event, by the name your site sends or a built-in one such as page_load. other for Other.

      • totalintegerrequired

        How many times it was sent in the period.

      • serieslist of objectsrequired

        One entry per step, oldest first, with a 0 for a step with none.

        Show 3 fields
        • timestringrequiredmatches ^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$

          When the step starts, as YYYY-MM-DD HH:MM:SS in the request's timezone.

        • eventsintegerrequired

          How many times events were sent in the step.

        • previousEventsinteger

          With previousPeriod=1, events in the matching step of the period before.

      • previousTotalinteger

        With previousPeriod=1, total in the period before.

    • rangeobjectrequired

      The dates the series covers.

      Show 2 fields
      • startstringrequiredmatches ^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$

        When the first step starts, as YYYY-MM-DD HH:MM:SS in the request's timezone.

      • endstringrequiredmatches ^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$

        When the range ends, as YYYY-MM-DD HH:MM:SS: midnight after its last day, so the range runs up to but not including it.

    • totalintegerrequired

      How many times any event was sent in the period: every series added together.

    • serieslist of objectsrequired

      Every series added together, one entry per step, oldest first. Empty when no event was sent.

      Show 3 fields
      • timestringrequiredmatches ^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$

        When the step starts, as YYYY-MM-DD HH:MM:SS in the request's timezone.

      • eventsintegerrequired

        How many times events were sent in the step.

      • previousEventsinteger

        With previousPeriod=1, events in the matching step of the period before.

    • previousTotalinteger

      With previousPeriod=1, total in the period before.

  • selectorstringrequired

    The query that answered, as its path: /v1/results/scores.

  • durationnumberrequired

    Seconds Silktide took to answer.

Errors

StatusTypeWhen
404ModelNotFoundNo view or website with that id exists in the account, or the API key's user cannot see it.
403AccessDeniedThe API key's user cannot read that analytics view.
200ModelNotFoundThe website has no Analytics set up. The body is an error despite the status.
200InvalidRequestNeither view nor websiteId was sent. The error's own status is 400 and properties.field is view. The body is an error despite the status.
200InvalidArgumentA filter names a key or operator Analytics does not know. The body is an error despite the status.
200Errorperiod is all or left out, which means all. Over-time queries need a period with a start. The body is an error despite the status.
401NotLoggedInNo API key was sent, or it is not a key for this region.(any operation)
429TooManyRequestsToo many requests to this path in five seconds. Retry after the number of seconds in the Retry-After header, which properties.retryAfter repeats.(any operation)
503-Silktide is busy. Retry after the number of seconds in the Retry-After header.(any operation)

Every error has the same body. See Errors.

Access

Permission
View analytics view (View all analytics for `view=all`)
Plan feature
None
Edition
Silktide 4 and Silktide 5
Cost
Free
Available since
v1.0.0

Try it

Sends a real request to your account from this browser. Your key stays in this tab and goes only to the Silktide API.