Site automation statistics
const url = 'https://api.getsitecontrol.com/v1/sites/1/automations/stats?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?from=2026-04-15' \ --header 'Authorization: Bearer <token>'E-mails and runs of the automations of the site in the period, summed.
Without filters the count covers the whole site: deleted automations and
follow-ups of widgets are included, and e-mails are those sent by the steps
of automations, by follow-ups of widgets and as double opt-in confirmations.
With a filter, follow-ups of widgets, deleted automations and double opt-in
confirmations are not counted. runs counts the runs started in the period,
each by its current status. 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.
Per automation: get_automations_stats_by_automation; over time:
get_automations_stats_timeline; one automation:
get_automation_stats.
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”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
E-mails sent by the steps of automations, by follow-ups of widgets and as double opt-in confirmations
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
{ "period": { "date_from": "2026-04-15", "date_to": "2026-04-15" }, "matched": 1, "total": { "send": 1, "deliver": 1, "bounce": 1, "open": 1, "click": 1, "unsubscribe": 1, "complaint": 1 }, "rates": { "deliver": 1, "open": 1, "click": 1, "click_to_open": 1, "unsubscribe": 1, "complaint": 1, "bounce": 1 }, "runs": { "queued": 1, "ongoing": 1, "done": 1, "ineligible": 1, "failed": 1 }}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