Automation statistics per automation
const url = 'https://api.getsitecontrol.com/v1/sites/1/automations/stats/by-automation';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/by-automation \ --header 'Authorization: Bearer <token>'E-mails and runs per automation. Call it to compare automations or to read the numbers of several at once.
With automation_ids (up to 100, ids from list_automations):
every listed live automation of the site in the order given, zeros without
activity; repeated ids count once, unknown, deleted and foreign ids and
follow-ups of widgets are left out. The period is optional here: without
from and to the numbers cover the whole life, and period is null.
Without automation_ids the period is required: up to 100 live
automations with activity in the period, by the sum of runs, then by
send, most first. Deleted automations and follow-ups of widgets are left
out, so the sum may be below the total of get_automations_stats.
is_active, trigger_type, widget_id, search, created_since and
folder_id narrow either way to the automations that match every one given,
and then every matched automation is listed, zero ones too: one call gives
the numbers of a folder or of the active automations. total and runs are
the sums of the listed automations; use them rather than adding the items
up.
E-mails of an automation are those sent by its steps; double opt-in confirmations are counted only in the site total.
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”Automation ids from list_automations; repeat for several, up to 100
Automation ids from list_automations; repeat for several, up to 100
UTC day, included; omit for the whole life
UTC day, included; omit for the whole life
UTC day, included; with from, today when omitted
UTC day, included; with from, today when omitted
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
Null when the numbers cover the whole life of the automations
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
The e-mail counters of the listed automations summed: the numbers of the set, use them rather than adding the items up
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
The runs of the listed automations summed
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
object
Automation id
E-mails sent by the steps of the automation
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 }, "items": [ { "id": 1, "name": "example", "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