I am having an issue calculating the Open Rate using the Klaviyo API.
To calculate Open Rate, I divide Unique Email Opens by Received Emails. This usually works as expected, but in some cases it produces illogical results.
For example, when querying data for December (2025-12-01 to 2025-12-23):
-
Unique Opens returned: 2,787
-
Received Emails returned: 2
This results in an Open Rate greater than 100 percent, which is not possible.
Below are the request bodies and responses I am using.
Open (Unique) request body
{
"data": {
"type": "metric-aggregate",
"attributes": {
"measurements": [
"unique",
"sum_value",
"count"
],
"filter": [
"greater-or-equal(datetime,2025-12-01)",
"less-than(datetime,2025-12-23)"
],
"by": [
"$message"
],
"interval": "month",
"metric_id": "MzHMir",
"page_size": 500
}
}
}
Open (Unique) response
{
"dimensions": [
"01KA"
],
"measurements": {
"unique": [2787.0],
"sum_value": [0.0],
"count": [3378.0]
}
}
Received request body
{
"data": {
"type": "metric-aggregate",
"attributes": {
"measurements": [
"unique",
"sum_value",
"count"
],
"filter": [
"greater-or-equal(datetime,2025-12-01)",
"less-than(datetime,2025-12-23)"
],
"by": [
"$message"
],
"interval": "month",
"metric_id": "KMhTMW",
"page_size": 500
}
}
}
Received response
{
"dimensions": [
"01KA"
],
"measurements": {
"unique": [2.0],
"sum_value": [0.0],
"count": [2.0]
}
}
I would like to understand why the Received metric returns such a low value when grouped by $message and aggregated monthly, and which metric should be used to correctly calculate Open Rate in this scenario.
Please let me know if I am using the wrong metric, aggregation level, or grouping configuration.
Thanks.

