API reference
Analytics
Messaging, template, broadcast, inbox, commerce, drip, AI agent and API usage reports.
x-tenant-id and an API key or OAuth token. Channel IDs are copied from Settings → Developer in the app. See Authentication.Messaging analytics
/api/public/v1/analytics/messagesInbound and outbound message volume with delivery, read and failure counts for the range, broken down by day (zero-filled), channel and message type.
Query parameters
fromstringStart of the range (ISO 8601 date or date-time, inclusive). Defaults to 30 days before `to`.
tostringEnd of the range (exclusive; a date-only value includes that whole UTC day). Defaults to now. Max range 92 days.
timezonestringIANA timezone used to label per-day buckets (default UTC).
channelIdstringOnly include this channel (24-char id from GET /channels).
Response 200Messaging analytics
successbooleandataobject5 child fields
rangeobject3 child fields
fromstring (date-time)tostring (date-time)timezonestring
totalsobject12 child fields
totalintegerinboundintegeroutboundintegersentintegerOutbound messages that reached sent, delivered or read.
deliveredintegerOutbound messages that reached delivered or read.
readintegerfailedintegerbroadcastintegerOutbound messages sent by broadcasts.
sessionintegerOther outbound messages (agent, API, automation).
deliveryRatePercentnumber | nullreadRatePercentnumber | nullfailureRatePercentnumber | null
byDayobject[]13 child fields
datestringtotalintegerinboundintegeroutboundintegersentintegerOutbound messages that reached sent, delivered or read.
deliveredintegerOutbound messages that reached delivered or read.
readintegerfailedintegerbroadcastintegerOutbound messages sent by broadcasts.
sessionintegerOther outbound messages (agent, API, automation).
deliveryRatePercentnumber | nullreadRatePercentnumber | nullfailureRatePercentnumber | null
byChannelobject[]15 child fields
channelIdstringchannelTypestring | nullchannelNamestring | nulltotalintegerinboundintegeroutboundintegersentintegerOutbound messages that reached sent, delivered or read.
deliveredintegerOutbound messages that reached delivered or read.
readintegerfailedintegerbroadcastintegerOutbound messages sent by broadcasts.
sessionintegerOther outbound messages (agent, API, automation).
deliveryRatePercentnumber | nullreadRatePercentnumber | nullfailureRatePercentnumber | null
byTypeobject[]4 child fields
typestringtotalintegerinboundintegeroutboundinteger
metaobject1 child field
apiVersionstring
requestIdstring | nulltimestampstring (date-time)
Errors
400Malformed request or missing tenant context401Missing or invalid API key / access token403Forbidden — plan, scope, key status, or tenant mismatch422Validation failed429Too many requests — rate limit exceeded500Unexpected server error
curl -X GET "https://api.inaiy.com/api/public/v1/analytics/messages" \
-H "x-tenant-id: demo" \
-H "x-api-key: wp_live_xxxxxxxxxxxxxxxxxxxx"{
"success": true,
"data": {
"range": {
"from": "2026-07-12T09:30:00.000Z",
"to": "2026-07-12T09:30:00.000Z",
"timezone": "UTC"
},
"totals": {
"total": 1240,
"inbound": 410,
"outbound": 830,
"sent": 812,
"delivered": 790,
"read": 512,
"failed": 18,
"broadcast": 600,
"session": 230,
"deliveryRatePercent": 97.29,
"readRatePercent": 63.05,
"failureRatePercent": 2.17
},
"byDay": [
{
"date": "2026-10-28",
"total": 1240,
"inbound": 410,
"outbound": 830,
"sent": 812,
"delivered": 790,
"read": 512,
"failed": 18,
"broadcast": 600,
"session": 230,
"deliveryRatePercent": 97.29,
"readRatePercent": 63.05,
"failureRatePercent": 2.17
}
],
"byChannel": [
{
"channelId": "string",
"channelType": "WHATSAPP",
"channelName": "string",
"total": 1240,
"inbound": 410,
"outbound": 830,
"sent": 812,
"delivered": 790,
"read": 512,
"failed": 18,
"broadcast": 600,
"session": 230,
"deliveryRatePercent": 97.29,
"readRatePercent": 63.05,
"failureRatePercent": 2.17
}
],
"byType": [
{
"type": "template",
"total": 0,
"inbound": 0,
"outbound": 0
}
]
},
"meta": {
"apiVersion": "v1"
},
"requestId": "string",
"timestamp": "2026-07-12T09:30:00.000Z"
}Template analytics
/api/public/v1/analytics/templatesDelivery, read, failure and quick-reply click counts per template (name + language) for template messages sent in the range, from broadcasts, the API and automations. Pass `name` to also get a per-day series. URL-button taps are not reported by WhatsApp, so they are not counted.
Query parameters
fromstringStart of the range (ISO 8601 date or date-time, inclusive). Defaults to 30 days before `to`.
tostringEnd of the range (exclusive; a date-only value includes that whole UTC day). Defaults to now. Max range 92 days.
timezonestringIANA timezone used to label per-day buckets (default UTC).
channelIdstringOnly include this channel (24-char id from GET /channels).
namestringOnly this template name (exact).
languagestringOnly this template language.
Response 200Template analytics
successbooleandataobject5 child fields
rangeobject3 child fields
fromstring (date-time)tostring (date-time)timezonestring
totalsobject10 child fields
sentintegerdeliveredintegerreadintegerfailedintegerpendingintegerAccepted but not yet sent.
clicksintegerQuick-reply button taps on these messages.
deliveryRatePercentnumber | nullreadRatePercentnumber | nullRead / delivered.
failureRatePercentnumber | nullclickRatePercentnumber | nullClicks / delivered.
templatesobject[]16 child fields
namestringlanguagestring | nullcategorystring | nulltemplateIdstring | nulllastSentAtstring (date-time) | nullsentintegerdeliveredintegerreadintegerfailedintegerpendingintegerAccepted but not yet sent.
clicksintegerQuick-reply button taps on these messages.
deliveryRatePercentnumber | nullreadRatePercentnumber | nullRead / delivered.
failureRatePercentnumber | nullclickRatePercentnumber | nullClicks / delivered.
buttonsobject[]2 child fields
textstringclicksinteger
byDayobject[]Only when `name` is given.
truncatedbooleanTrue when the result was capped (over 500 templates or 20,000 button taps).
metaobject1 child field
apiVersionstring
requestIdstring | nulltimestampstring (date-time)
Errors
400Malformed request or missing tenant context401Missing or invalid API key / access token403Forbidden — plan, scope, key status, or tenant mismatch422Validation failed429Too many requests — rate limit exceeded500Unexpected server error
curl -X GET "https://api.inaiy.com/api/public/v1/analytics/templates" \
-H "x-tenant-id: demo" \
-H "x-api-key: wp_live_xxxxxxxxxxxxxxxxxxxx"{
"success": true,
"data": {
"range": {
"from": "2026-07-12T09:30:00.000Z",
"to": "2026-07-12T09:30:00.000Z",
"timezone": "UTC"
},
"totals": {
"sent": 500,
"delivered": 480,
"read": 300,
"failed": 6,
"pending": 0,
"clicks": 42,
"deliveryRatePercent": 0,
"readRatePercent": 0,
"failureRatePercent": 0,
"clickRatePercent": 0
},
"templates": [
{
"name": "order_update",
"language": "en_US",
"category": "UTILITY",
"templateId": "string",
"lastSentAt": "2026-07-12T09:30:00.000Z",
"sent": 500,
"delivered": 480,
"read": 300,
"failed": 6,
"pending": 0,
"clicks": 42,
"deliveryRatePercent": 0,
"readRatePercent": 0,
"failureRatePercent": 0,
"clickRatePercent": 0,
"buttons": [
{
"text": "Track order",
"clicks": 30
}
]
}
],
"byDay": [
{}
],
"truncated": true
},
"meta": {
"apiVersion": "v1"
},
"requestId": "string",
"timestamp": "2026-07-12T09:30:00.000Z"
}Broadcast analytics summary
/api/public/v1/analytics/broadcastsAggregate delivery metrics across broadcasts (drafts excluded unless `status` is set), plus a paginated per-broadcast table and highlights. `from`/`to` filter on the broadcast start time. Use GET /broadcasts/{id}/recipients for per-recipient statuses.
Query parameters
fromstringBroadcasts started at or after (ISO 8601).
tostringBroadcasts started at or before (ISO 8601; a date-only value includes that whole UTC day).
statusstringDRAFTSCHEDULEDRUNNINGPAUSEDCOMPLETEDCANCELLEDFAILEDchannelIdstringtemplateIdstringpageintegerPage number (default 1).
limitintegerPage size (default 25, max 100).
sortstringstartedAtnamestatustotalRecipientssentdeliveredreadfaileddeliveryRatereadRatecompletionorderstringascdesc
Response 200Broadcast analytics summary
successbooleandataobject5 child fields
summaryobject | nullTotals and rates across all matching broadcasts.
highlightsobject | nullbroadcastsobject[]15 child fields
idstringnamestring | nullstatusstring | nulltemplateIdstring | nulltemplateNamestring | nulltotalRecipientsintegersentintegerdeliveredintegerreadintegerfailedintegersuccessRatenumberfailureRatenumberdeliveryRatenumberreadRatenumberstartedAtstring (date-time) | null
paginationobjecttruncatedboolean
metaobject1 child field
apiVersionstring
requestIdstring | nulltimestampstring (date-time)
Errors
400Malformed request or missing tenant context401Missing or invalid API key / access token403Forbidden — plan, scope, key status, or tenant mismatch422Validation failed429Too many requests — rate limit exceeded500Unexpected server error
curl -X GET "https://api.inaiy.com/api/public/v1/analytics/broadcasts" \
-H "x-tenant-id: demo" \
-H "x-api-key: wp_live_xxxxxxxxxxxxxxxxxxxx"{
"success": true,
"data": {
"summary": {},
"highlights": {},
"broadcasts": [
{
"id": "string",
"name": "string",
"status": "COMPLETED",
"templateId": "string",
"templateName": "string",
"totalRecipients": 0,
"sent": 0,
"delivered": 0,
"read": 0,
"failed": 0,
"successRate": 0,
"failureRate": 0,
"deliveryRate": 0,
"readRate": 0,
"startedAt": "2026-07-12T09:30:00.000Z"
}
],
"pagination": {},
"truncated": true
},
"meta": {
"apiVersion": "v1"
},
"requestId": "string",
"timestamp": "2026-07-12T09:30:00.000Z"
}Inbox analytics
/api/public/v1/analytics/inboxConversation counts by status, priority, channel, team, label and source; first-response and resolution times; per-agent load; message volume; and SLA compliance for conversations created in the range. The range is day-granular: `to` covers through the end of its UTC day.
Query parameters
fromstringStart of the range (ISO 8601 date or date-time, inclusive). Defaults to 30 days before `to`.
tostringEnd of the range (exclusive; a date-only value includes that whole UTC day). Defaults to now. Max range 92 days.
channelIdstringOnly include this channel (24-char id from GET /channels).
teamIdstringOnly conversations of this team (id from GET /teams).
Response 200Inbox analytics
successbooleandataobject6 child fields
rangeobject3 child fields
fromstring (date-time)tostring (date-time)timezonestring
overviewobject8 child fields
totalintegeropenintegerpendingintegerresolvedintegerclosedintegerunassignedintegeravgFirstResponseMsnumber | nullavgResolutionHoursnumber | null
breakdownsobjectagentsobject[]9 child fields
agentIdstring | nullnamestring | nullemailstring | nullopenintegerpendingintegerresolvedintegerclosedintegertotalintegeravgFirstResponseMsnumber | null
messagesobjectslaobject
metaobject1 child field
apiVersionstring
requestIdstring | nulltimestampstring (date-time)
Errors
400Malformed request or missing tenant context401Missing or invalid API key / access token403Forbidden — plan, scope, key status, or tenant mismatch422Validation failed429Too many requests — rate limit exceeded500Unexpected server error
curl -X GET "https://api.inaiy.com/api/public/v1/analytics/inbox" \
-H "x-tenant-id: demo" \
-H "x-api-key: wp_live_xxxxxxxxxxxxxxxxxxxx"{
"success": true,
"data": {
"range": {
"from": "2026-07-12T09:30:00.000Z",
"to": "2026-07-12T09:30:00.000Z",
"timezone": "UTC"
},
"overview": {
"total": 0,
"open": 0,
"pending": 0,
"resolved": 0,
"closed": 0,
"unassigned": 0,
"avgFirstResponseMs": 0,
"avgResolutionHours": 0
},
"breakdowns": {},
"agents": [
{
"agentId": "string",
"name": "string",
"email": "string",
"open": 0,
"pending": 0,
"resolved": 0,
"closed": 0,
"total": 0,
"avgFirstResponseMs": 0
}
],
"messages": {},
"sla": {}
},
"meta": {
"apiVersion": "v1"
},
"requestId": "string",
"timestamp": "2026-07-12T09:30:00.000Z"
}Plan usage
/api/public/v1/analytics/usageCurrent plan and usage against each plan limit (contacts, messages this month, API calls, storage, and more).
Response 200Plan usage
successbooleandataobject3 child fields
periodstring | nullplanobject3 child fields
codestring | nullnamestring | nullstatusstring | null
metricsobject[]8 child fields
keystringlabelstringusednumberlimitnumber | nullNull when unlimited.
remainingnumber | nullpercentUsednumber | nullunlimitedbooleanresetsMonthlyboolean
metaobject1 child field
apiVersionstring
requestIdstring | nulltimestampstring (date-time)
Errors
400Malformed request or missing tenant context401Missing or invalid API key / access token403Forbidden — plan, scope, key status, or tenant mismatch429Too many requests — rate limit exceeded500Unexpected server error
curl -X GET "https://api.inaiy.com/api/public/v1/analytics/usage" \
-H "x-tenant-id: demo" \
-H "x-api-key: wp_live_xxxxxxxxxxxxxxxxxxxx"{
"success": true,
"data": {
"period": "2026-10",
"plan": {
"code": "string",
"name": "string",
"status": "string"
},
"metrics": [
{
"key": "messages_per_month",
"label": "Messages Per Month",
"used": 1200,
"limit": 10000,
"remaining": 0,
"percentUsed": 0,
"unlimited": true,
"resetsMonthly": true
}
]
},
"meta": {
"apiVersion": "v1"
},
"requestId": "string",
"timestamp": "2026-07-12T09:30:00.000Z"
}Commerce analytics
/api/public/v1/analytics/commerce/{report}Commerce reports, the same as the in-app commerce dashboard. `overview`: net/gross sales, orders, AOV, customers and conversion with previous-period comparison. `revenue` and `orders`: totals plus a time series. `customers`: new/repeat and top customers. `products`: top/lowest products, variants and categories. `inventory`: stock summary and out-of-stock items with recent sales. `promotions`: promotion performance. `funnel`: cart-to-order funnel. Amounts are in the order currency; when several currencies exist, pass `currency`.
Path parameters
reportstringrequiredoverviewrevenueorderscustomersproductsinventorypromotionsfunnel
Query parameters
periodstringPreset range (default this_month). Ignored when from/to are given.
todayyesterdaythis_weeklast_weekthis_monthlast_monththis_yearfromstringCustom range start, YYYY-MM-DD in `timezone` (requires `to`).
tostringCustom range end, YYYY-MM-DD inclusive (max 366 days).
timezonestringIANA timezone (default: the workspace timezone).
granularitystringSeries bucket size for revenue/orders.
dayweekmonthcurrencystringchannelstringOrder channel filter.
categoryIdstringcollectionIdstringcatalogProductIdstringCatalog product filter.
promotionIdstringlimitintegerRows in top-N lists (default 10).
Response 200Commerce report
successbooleandataobjectmetaobject1 child field
apiVersionstring
requestIdstring | nulltimestampstring (date-time)
Errors
400Malformed request or missing tenant context401Missing or invalid API key / access token403Forbidden — plan, scope, key status, or tenant mismatch422Validation failed429Too many requests — rate limit exceeded500Unexpected server error
curl -X GET "https://api.inaiy.com/api/public/v1/analytics/commerce/6650a1b2c3d4e5f6a7b8c9d0" \
-H "x-tenant-id: demo" \
-H "x-api-key: wp_live_xxxxxxxxxxxxxxxxxxxx"{
"success": true,
"data": {},
"meta": {
"apiVersion": "v1"
},
"requestId": "string",
"timestamp": "2026-07-12T09:30:00.000Z"
}Drip campaign analytics
/api/public/v1/analytics/dripsDrip campaigns with enrollment outcomes (enrolled, completed, stopped by reply or opt-out, failed, cancelled).
Query parameters
pageintegerPage number (default 1).
limitintegerPage size (default 25, max 100).
statusstringDRAFTSCHEDULEDRUNNINGPAUSEDCOMPLETEDCANCELLED
Response 200Drip campaigns
successbooleandataobject[]8 child fields
idstringnamestring | nullstatusstring | nullchannelIdstring | nullstepCountintegercountsobject6 child fields
enrolledintegercompletedintegerstoppedReplyintegerstoppedOptOutintegerfailedintegercancelledinteger
startedAtstring (date-time) | nullcompletedAtstring (date-time) | null
paginationobject8 child fields
pageintegerlimitintegertotalintegertotalPagesintegerhasNextPagebooleanhasPrevPagebooleannextCursorstring | nullprevCursorstring | null
metaobject1 child field
apiVersionstring
requestIdstring | nulltimestampstring (date-time)
Errors
400Malformed request or missing tenant context401Missing or invalid API key / access token403Forbidden — plan, scope, key status, or tenant mismatch422Validation failed429Too many requests — rate limit exceeded500Unexpected server error
curl -X GET "https://api.inaiy.com/api/public/v1/analytics/drips" \
-H "x-tenant-id: demo" \
-H "x-api-key: wp_live_xxxxxxxxxxxxxxxxxxxx"{
"success": true,
"data": [
{
"id": "string",
"name": "string",
"status": "RUNNING",
"channelId": "string",
"stepCount": 0,
"counts": {
"enrolled": 0,
"completed": 0,
"stoppedReply": 0,
"stoppedOptOut": 0,
"failed": 0,
"cancelled": 0
},
"startedAt": "2026-07-12T09:30:00.000Z",
"completedAt": "2026-07-12T09:30:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 25,
"total": 3,
"totalPages": 1,
"hasNextPage": false,
"hasPrevPage": false,
"nextCursor": null,
"prevCursor": null
},
"meta": {
"apiVersion": "v1"
},
"requestId": "string",
"timestamp": "2026-07-12T09:30:00.000Z"
}Drip campaign step analytics
/api/public/v1/analytics/drips/{id}Enrollments by status and sent / failed / queued counts for each step of one drip campaign.
Path parameters
idstringrequired24-char drip id
Response 200Drip step analytics
successbooleandataobject4 child fields
dripobject8 child fields
idstringnamestring | nullstatusstring | nullchannelIdstring | nullstepCountintegercountsobject6 child fields
enrolledintegercompletedintegerstoppedReplyintegerstoppedOptOutintegerfailedintegercancelledinteger
startedAtstring (date-time) | nullcompletedAtstring (date-time) | null
totalEnrollmentsintegerenrollmentsByStatusobjectstepsobject[]7 child fields
orderintegertemplateIdstring | nulltemplateNamestring | nulldelayMsintegersentintegerfailedintegerqueuedinteger
metaobject1 child field
apiVersionstring
requestIdstring | nulltimestampstring (date-time)
Errors
400Malformed request or missing tenant context401Missing or invalid API key / access token403Forbidden — plan, scope, key status, or tenant mismatch404Resource not found422Validation failed429Too many requests — rate limit exceeded500Unexpected server error
curl -X GET "https://api.inaiy.com/api/public/v1/analytics/drips/6650a1b2c3d4e5f6a7b8c9d0" \
-H "x-tenant-id: demo" \
-H "x-api-key: wp_live_xxxxxxxxxxxxxxxxxxxx"{
"success": true,
"data": {
"drip": {
"id": "string",
"name": "string",
"status": "RUNNING",
"channelId": "string",
"stepCount": 0,
"counts": {
"enrolled": 0,
"completed": 0,
"stoppedReply": 0,
"stoppedOptOut": 0,
"failed": 0,
"cancelled": 0
},
"startedAt": "2026-07-12T09:30:00.000Z",
"completedAt": "2026-07-12T09:30:00.000Z"
},
"totalEnrollments": 0,
"enrollmentsByStatus": {},
"steps": [
{
"order": 0,
"templateId": "string",
"templateName": "string",
"delayMs": 0,
"sent": 0,
"failed": 0,
"queued": 0
}
]
},
"meta": {
"apiVersion": "v1"
},
"requestId": "string",
"timestamp": "2026-07-12T09:30:00.000Z"
}AI agent analytics
/api/public/v1/analytics/ai-agentsReplies, handoffs, unanswered questions, containment rate and token usage for each AI agent (up to 50) over the look-back window.
Query parameters
sinceDaysintegerLook-back window in days (default 7).
Response 200AI agent analytics
successbooleandataobject2 child fields
sinceDaysintegeragentsobject[]13 child fields
idstringnamestring | nullstatusstring | nullmodestring | nullchannelIdstring | nullconversationsTouchedintegerrepliesintegerTurns the AI answered.
handoffsintegerTurns escalated to a human.
unansweredintegerskippedintegercontainmentRatenumber | nullReplies / (replies + handoffs + no-answer), 0-1.
escalationTotalintegertokensobject3 child fields
promptintegercompletionintegertotalinteger
metaobject1 child field
apiVersionstring
requestIdstring | nulltimestampstring (date-time)
Errors
400Malformed request or missing tenant context401Missing or invalid API key / access token403Forbidden — plan, scope, key status, or tenant mismatch422Validation failed429Too many requests — rate limit exceeded500Unexpected server error
curl -X GET "https://api.inaiy.com/api/public/v1/analytics/ai-agents" \
-H "x-tenant-id: demo" \
-H "x-api-key: wp_live_xxxxxxxxxxxxxxxxxxxx"{
"success": true,
"data": {
"sinceDays": 0,
"agents": [
{
"id": "string",
"name": "string",
"status": "LIVE",
"mode": "string",
"channelId": "string",
"conversationsTouched": 0,
"replies": 0,
"handoffs": 0,
"unanswered": 0,
"skipped": 0,
"containmentRate": 0,
"escalationTotal": 0,
"tokens": {
"prompt": 0,
"completion": 0,
"total": 0
}
}
]
},
"meta": {
"apiVersion": "v1"
},
"requestId": "string",
"timestamp": "2026-07-12T09:30:00.000Z"
}AI agent analytics (single)
/api/public/v1/analytics/ai-agents/{id}One AI agent: metrics, escalation reasons, CSAT survey results and the most recent unanswered customer questions.
Path parameters
idstringrequired24-char AI agent id
Query parameters
sinceDaysintegerLook-back window in days (default 7).
Response 200AI agent analytics
successbooleandataobject13 child fields
agentIdstringsinceDaysintegerconversationsTouchedintegerrepliesintegerTurns the AI answered.
handoffsintegerTurns escalated to a human.
unansweredintegerskippedintegercontainmentRatenumber | nullReplies / (replies + handoffs + no-answer), 0-1.
escalationTotalintegertokensobject3 child fields
promptintegercompletionintegertotalinteger
escalationBreakdownobject[]csatobject | nulltopUnansweredobject[]
metaobject1 child field
apiVersionstring
requestIdstring | nulltimestampstring (date-time)
Errors
400Malformed request or missing tenant context401Missing or invalid API key / access token403Forbidden — plan, scope, key status, or tenant mismatch404Resource not found422Validation failed429Too many requests — rate limit exceeded500Unexpected server error
curl -X GET "https://api.inaiy.com/api/public/v1/analytics/ai-agents/6650a1b2c3d4e5f6a7b8c9d0" \
-H "x-tenant-id: demo" \
-H "x-api-key: wp_live_xxxxxxxxxxxxxxxxxxxx"{
"success": true,
"data": {
"agentId": "string",
"sinceDays": 0,
"conversationsTouched": 0,
"replies": 0,
"handoffs": 0,
"unanswered": 0,
"skipped": 0,
"containmentRate": 0,
"escalationTotal": 0,
"tokens": {
"prompt": 0,
"completion": 0,
"total": 0
},
"escalationBreakdown": [
{}
],
"csat": {},
"topUnanswered": [
{}
]
},
"meta": {
"apiVersion": "v1"
},
"requestId": "string",
"timestamp": "2026-07-12T09:30:00.000Z"
}Public API usage
/api/public/v1/analytics/api-usageYour Public API traffic: calls, success and error counts, average and p95 latency, by day (zero-filled), endpoint, API key / OAuth app and status code, plus the monthly api_calls quota. Only authenticated requests are counted.
Query parameters
fromstringStart of the range (ISO 8601 date or date-time, inclusive). Defaults to 30 days before `to`.
tostringEnd of the range (exclusive; a date-only value includes that whole UTC day). Defaults to now. Max range 92 days.
timezonestringIANA timezone used to label per-day buckets (default UTC).
keyIdstringOnly this API key id, or `oauth:<clientId>` for an OAuth app.
Response 200Public API usage
successbooleandataobject7 child fields
rangeobject3 child fields
fromstring (date-time)tostring (date-time)timezonestring
totalsobject10 child fields
callsintegersuccessintegererrorsintegerclientErrorsintegerserverErrorsintegerrateLimitedintegersuccessRatePercentnumber | nullerrorRatePercentnumber | nullavgLatencyMsinteger | nullp95LatencyMsinteger | null
byDayobject[]byEndpointobject[]byKeyobject[]byStatusobject[]quotaobject | null
metaobject1 child field
apiVersionstring
requestIdstring | nulltimestampstring (date-time)
Errors
400Malformed request or missing tenant context401Missing or invalid API key / access token403Forbidden — plan, scope, key status, or tenant mismatch422Validation failed429Too many requests — rate limit exceeded500Unexpected server error
curl -X GET "https://api.inaiy.com/api/public/v1/analytics/api-usage" \
-H "x-tenant-id: demo" \
-H "x-api-key: wp_live_xxxxxxxxxxxxxxxxxxxx"{
"success": true,
"data": {
"range": {
"from": "2026-07-12T09:30:00.000Z",
"to": "2026-07-12T09:30:00.000Z",
"timezone": "UTC"
},
"totals": {
"calls": 10520,
"success": 10220,
"errors": 300,
"clientErrors": 297,
"serverErrors": 3,
"rateLimited": 0,
"successRatePercent": 0,
"errorRatePercent": 0,
"avgLatencyMs": 84,
"p95LatencyMs": 240
},
"byDay": [
{}
],
"byEndpoint": [
{}
],
"byKey": [
{}
],
"byStatus": [
{}
],
"quota": {}
},
"meta": {
"apiVersion": "v1"
},
"requestId": "string",
"timestamp": "2026-07-12T09:30:00.000Z"
}