Product Agents analytics¶
See how your Product Agents perform per channel: messages sent, revenue, engagement rates, a per-agent breakdown, and a daily series. Numbers mirror the Product Agents Analytics page.
Prerequisite: Set up a Klaviyo conversion metric
Before you can fetch analytics, you must set up a metric ID on my.helloretail.com. Go to Product Agents → Analytics, open a Klaviyo channel's Configure conversion metric dialog, and select the relevant metric to use — if you are unsure, it's likely "Placed orders".
Tips & tricks
List a website's channels first to get a channelId, then ask for that channel's analytics.
List the Product Agent channels for my website, then show last month's analytics for the active one.
Compare agents by asking for the breakdown — it ranks each agent (flow) by revenue.
getProductAgentChannels¶
List a customer website's Product Agent channels — the destinations agents send through (a Klaviyo account or a webhook). Returns each channel's id, name, type and state, and for Klaviyo channels whether a conversion metric is configured (analytics are unavailable until one is). Use the id as the channelId for getProductAgentAnalytics.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use getWebsiteInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
Example request & response
getProductAgentAnalytics¶
Get one Product Agent channel's analytics for a customer website using Hello Retail: KPI totals (messages sent, revenue, revenue per message, click/open/conversion rates), a per-agent breakdown, and a daily series of messages sent and revenue. Numbers mirror the Product Agents Analytics page.
Limits
- Window: cannot exceed 13 months — longer ranges are rejected. Applies to all channel types.
- Klaviyo rate limits: Klaviyo channels read from Klaviyo's Reporting API — burst 1/s, steady 2/min, daily 225/day. Warm reports are served from cache, so only cache misses count against those limits. When Klaviyo is temporarily rate-limited, the response comes back with
unavailableset (andretryAfterSecondswhen Klaviyo supplies it) instead of failing — render what you have and retry later.
Rate fields depend on the channel type: openRate and unsubscribeRate are Klaviyo-only, conversionRate is for non-Klaviyo (webhook) channels, and the ones that don't apply come back null.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use getWebsiteInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
channelId | string | No | The channel to report on (from getProductAgentChannels). Omit to use the website's first channel. |
startDate | string | No | Start of the window, inclusive, ISO YYYY-MM-DD. Defaults to a 30-day window ending on endDate. |
endDate | string | No | End of the window, inclusive, ISO YYYY-MM-DD. Defaults to today. |
limit | integer | No | Maximum number of breakdown rows to return. Default 20, capped at 100. |
Example request & response
{
"channel": {
"channelId": "<string>",
"name": "<string>",
"channelType": "KLAVIYO",
"state": "ACTIVE",
"conversionMetricConfigured": true
},
"totals": {
"messagesSent": 0,
"revenue": 0.0,
"conversions": 0,
"revenuePerMessage": 0.0,
"clickRate": 0.0,
"openRate": 0.0,
"conversionRate": null,
"unsubscribeRate": 0.0
},
"breakdown": [
{
"id": "<string>",
"messageType": "<string>",
"displayName": "<string>",
"metrics": {
"messagesSent": 0,
"revenue": 0.0,
"conversions": 0,
"revenuePerMessage": 0.0,
"clickRate": 0.0,
"openRate": 0.0,
"conversionRate": null,
"unsubscribeRate": 0.0
}
}
],
"series": [
{
"date": "<string>",
"messagesSent": 0,
"revenue": 0.0
}
],
"unavailable": null,
"retryAfterSeconds": null
}