Site automation statistics over time
const url = 'https://api.getsitecontrol.com/v1/sites/1/automations/stats/timeline?interval=day&from=2026-04-15';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.getsitecontrol.com/v1/sites/1/automations/stats/timeline?interval=day&from=2026-04-15' \ --header 'Authorization: Bearer <token>'The numbers of get_automations_stats, split into buckets. Buckets are
consecutive days, calendar weeks (Monday to Sunday) or calendar months; the
first and the last are cut to the period. Every bucket is present, an empty
one with zeros.
E-mails are those sent by the steps of automations, by follow-ups of widgets
and as double opt-in confirmations; without filters deleted automations count
too. automation_ids, is_active, trigger_type, widget_id, search,
created_since and folder_id narrow the count to the live automations
that match every one given, and then the e-mails are those sent by their
steps; matched says how many, and matched: 0 means no automation
matched.
rates next to each total gives the delivery, open, click, click-to-open,
unsubscribe, complaint and bounce rates of the e-mails, rounded to 4 places;
a rate is null when its denominator is 0, as it is undefined, not zero.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Query Parameters
Section titled “Query Parameters”Bucket length: day, week (a calendar week, Monday to Sunday) or month (a calendar month)
Bucket length: day, week (a calendar week, Monday to Sunday) or month (a calendar month)
First day of the period, UTC, included
First day of the period, UTC, included
Last day of the period, UTC, included; today when omitted
Last day of the period, UTC, included; today when omitted
Only these automation ids from list_automations, up to 100; repeat for several
Only these automation ids from list_automations, up to 100; repeat for several
True: only automations that are on; false: off
True: only automations that are on; false: off
Only automations started by any of these trigger types; repeat for several
Only automations started by any of these trigger types; repeat for several
Only automations started by a form submit of this widget; widget id from list_widgets
Only automations started by a form submit of this widget; widget id from list_widgets
Part of the name, case ignored, or the exact id
Part of the name, case ignored, or the exact id
Only automations created at or after this moment; without an offset, taken as UTC; a plain date means its start
Only automations created at or after this moment; without an offset, taken as UTC; a plain date means its start
Only the items of this folder, an id from list_folders; 0 is General
Only the items of this folder, an id from list_folders; 0 is General
Responses
Section titled “Responses”object
object
First day, UTC, included
Last day, UTC, included
How many live automations the filters or ids matched; null without them. 0 means nothing matched, not that nothing happened: check the filters or ids
Day, calendar week (Monday to Sunday) or calendar month.
Every bucket of the period in order, empty ones with zeros
One timeline item; the first and the last are clipped to the period.
object
E-mail counts; every key is always present.
open, click and the rest count each e-mail once. send includes
e-mails rejected on sending, which are also counted in bounce.
complaint is spam complaints reported by mail providers.
For a period, each number counts the events dated in it, so the numbers
are independent: a bounce may fall in a later period than its sending.
deliver is send minus bounce, never below zero.
object
Rates computed from total, so the open rate is rates.open; every key is always present, null when its denominator is 0
object
Delivery rate: deliver / send; null when send is 0: the rate is undefined, not zero
Open rate: open / deliver; null when deliver is 0: the rate is undefined, not zero
Click rate: click / deliver; null when deliver is 0: the rate is undefined, not zero
Click-to-open rate: click / open; null when open is 0: the rate is undefined, not zero. A click is counted without an open when the recipient’s mail app does not load images, so it can exceed 1
Unsubscribe rate: unsubscribe / deliver; null when deliver is 0: the rate is undefined, not zero
Spam complaint rate: complaint / deliver; null when deliver is 0: the rate is undefined, not zero
Bounce rate: bounce / send; null when send is 0: the rate is undefined, not zero
Runs started in the period, each counted once by its current status.
object
Waiting to start; a bulk start counts only once it is split into runs
Running, waiting in a delay step or on hold
Finished
Finished by being skipped
Finished with an error, or failed before the start. A failure followed by a new run of the contact through the API is not counted
{ "interval": "day"}Headers
Section titled “Headers”API version the response was produced for
Request id, echoed from the request when valid
Limit of the tightest bucket
Requests left in its window
End of its window, epoch seconds
The documented shape of every error body on the versioned surface.
object
object
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "reason": "example", "next": "example", "request_id": "example", "errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ], "metadata": {}}Headers
Section titled “Headers”API version the response was produced for
Request id, echoed from the request when valid
Limit of the tightest bucket
Requests left in its window
End of its window, epoch seconds
The documented shape of every error body on the versioned surface.
object
object
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "reason": "example", "next": "example", "request_id": "example", "errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ], "metadata": {}}Headers
Section titled “Headers”API version the response was produced for
Request id, echoed from the request when valid
Limit of the tightest bucket
Requests left in its window
End of its window, epoch seconds
Authentication scheme: Bearer
The documented shape of every error body on the versioned surface.
object
object
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "reason": "example", "next": "example", "request_id": "example", "errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ], "metadata": {}}Headers
Section titled “Headers”API version the response was produced for
Request id, echoed from the request when valid
Limit of the tightest bucket
Requests left in its window
End of its window, epoch seconds
The documented shape of every error body on the versioned surface.
object
object
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "reason": "example", "next": "example", "request_id": "example", "errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ], "metadata": {}}Headers
Section titled “Headers”API version the response was produced for
Request id, echoed from the request when valid
Limit of the tightest bucket
Requests left in its window
End of its window, epoch seconds
The documented shape of every error body on the versioned surface.
object
object
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "reason": "example", "next": "example", "request_id": "example", "errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ], "metadata": {}}Headers
Section titled “Headers”API version the response was produced for
Request id, echoed from the request when valid
Limit of the tightest bucket
Requests left in its window
End of its window, epoch seconds
The documented shape of every error body on the versioned surface.
object
object
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "reason": "example", "next": "example", "request_id": "example", "errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ], "metadata": {}}Headers
Section titled “Headers”API version the response was produced for
Request id, echoed from the request when valid
Limit of the tightest bucket
Requests left in its window
End of its window, epoch seconds
Seconds until the bucket refills
temporarily_unavailable: the statistics took longer than 25 seconds or rate limits cannot be enforced; narrow the period or retry later. The heavy request is spent all the same
The documented shape of every error body on the versioned surface.
object
object
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example", "reason": "example", "next": "example", "request_id": "example", "errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ], "metadata": {}}Headers
Section titled “Headers”API version the response was produced for
Request id, echoed from the request when valid
Limit of the tightest bucket
Requests left in its window
End of its window, epoch seconds