Returns CSAT summary metrics for the current organization over the selected period. The response includes average score, total responses, response rate, score distribution, per-operator averages, and a daily trend. The `period` query defaults to `30d` and accepts `7d`, `30d`, or `90d`.
/api/csat/analyticsOrganization API key supplied as Authorization: Bearer convor_sk_....
In: header
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
{
"averageScore": 4.25,
"totalResponses": 12,
"responseRate": 60,
"scoreDistribution": {
"1": 0,
"2": 1,
"3": 2,
"4": 4,
"5": 5
},
"operatorPerformance": [
{
"operatorId": "66666666-6666-4666-8666-666666666666",
"averageScore": 4.5,
"totalResponses": 4
}
],
"trend": [
{
"date": "2026-06-23",
"averageScore": 4.25,
"totalResponses": 12
}
]
}{
"error": {
"code": "string",
"message": "string",
"fields": {
"property1": "string",
"property2": "string"
},
"details": {},
"correlationId": "string"
}
}{
"error": {
"code": "string",
"message": "string",
"fields": {
"property1": "string",
"property2": "string"
},
"details": {},
"correlationId": "string"
}
}{
"error": {
"code": "string",
"message": "string",
"fields": {
"property1": "string",
"property2": "string"
},
"details": {},
"correlationId": "string"
}
}{
"error": {
"code": "string",
"message": "string",
"fields": {
"property1": "string",
"property2": "string"
},
"details": {},
"correlationId": "string"
}
}{
"error": {
"code": "string",
"message": "string",
"fields": {
"property1": "string",
"property2": "string"
},
"details": {},
"correlationId": "string"
}
}{
"error": {
"code": "string",
"message": "string",
"fields": {
"property1": "string",
"property2": "string"
},
"details": {},
"correlationId": "string"
}
}{
"error": {
"code": "string",
"message": "string",
"fields": {
"property1": "string",
"property2": "string"
},
"details": {},
"correlationId": "string"
}
}{
"error": {
"code": "string",
"message": "string",
"fields": {
"property1": "string",
"property2": "string"
},
"details": {},
"correlationId": "string"
}
}curl --request GET \
'https://api.convor.io/api/csat/analytics' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer convor_sk_...'const response = await fetch("https://api.convor.io/api/csat/analytics", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": "Bearer convor_sk_..."
},
});
const contentType = response.headers.get("content-type") ?? "";
const data = response.status === 204
? null
: contentType.includes("json")
? await response.json()
: contentType.startsWith("text/")
? await response.text()
: await response.blob();
if (!response.ok) {
const message = typeof data === "object" && data !== null
&& "error" in data && typeof data.error === "object"
&& data.error !== null && "message" in data.error
? String(data.error.message)
: "Convor API request failed (" + response.status + ")";
throw new Error(message);
}
console.log(data);Was this page helpful?
Delete a survey
Soft-deletes one survey in the current organization by setting `isActive` to `false`. The survey record stays in storage, but it is no longer treated as an active response. Use this when a response should be excluded without removing the underlying record entirely. Authenticate with an organization API key sent in `X-API-Key` or as a Bearer token and carrying the exact `surveys:write` scope. API-key access also requires the Automation & API module (`automation_api`). Authorized dashboard sessions remain supported where the route already permits them. The request is isolated to the authenticated organization. Resource and site/project identifiers must belong to that organization; out-of-scope identifiers are not disclosed. Deletion is soft: the survey remains stored and `isActive` becomes false. Repeating the request returns success as long as the organization-owned record still exists. The visitor submission uniqueness rule applies only to active responses. Soft-deleting the current response allows the visitor protocol to create a new active response for the same conversation and visitor. Retry behavior: Repeating the same request converges on the same resource state, but a retry may return a conflict or not-found response after the first request succeeds.
Get CSAT statistics for an operator
Returns aggregate CSAT metrics for one operator in the current organization. The response includes the average rating, the total number of ratings, and a 1-3 rating distribution based on surveys linked to conversations assigned to that operator. When the operator has no survey responses yet, `averageRating` is `null` and the distribution counts stay at 0. Authenticate with an organization API key sent in `X-API-Key` or as a Bearer token and carrying the exact `surveys:read` scope. API-key access also requires the Automation & API module (`automation_api`). Authorized dashboard sessions remain supported where the route already permits them. The request is isolated to the authenticated organization. Resource and site/project identifiers must belong to that organization; out-of-scope identifiers are not disclosed. The operator must belong to the authenticated organization. Ratings use the stable integer values 1, 2, and 3; an operator with no linked responses returns `averageRating: null`, `totalRatings: 0`, and zero counts for every distribution bucket. Retry behavior: This read-only operation is safe to retry.