curl --request POST \
--url https://demo.enneo.ai/api/mind/ticket/{ticketId}/quality/check \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"draftText": "<div>Hallo Susanne, vielen Dank für Ihre Nachricht...</div>"
}
'{
"scorecards": [
{
"scorecardId": 1,
"name": "Compliance",
"percentage": 92,
"threshold": 90,
"passed": true,
"aiSummary": "All required disclaimers present.",
"categories": [
{
"categoryId": 1,
"label": "Disclaimers",
"score": 18,
"maxPoints": 20,
"criteria": [
{
"criterionId": 101,
"label": "Privacy notice",
"score": 9,
"maxPoints": 10,
"reason": "Mentioned with link.",
"makeOrBreakForCategory": false,
"makeOrBreakForAssessment": false
},
{
"criterionId": 102,
"label": "Legal opt-out",
"score": 9,
"maxPoints": 10,
"reason": "Included verbatim.",
"makeOrBreakForCategory": true,
"makeOrBreakForAssessment": false
}
]
}
]
},
{
"scorecardId": 7,
"name": "Empathy",
"percentage": 68,
"threshold": 75,
"passed": false,
"aiSummary": "Polite but lacks acknowledgement of frustration.",
"categories": [
{
"categoryId": 5,
"label": "Customer Orientation",
"score": 13,
"maxPoints": 20,
"criteria": [
{
"criterionId": 501,
"label": "Acknowledgement",
"score": 5,
"maxPoints": 10,
"reason": "Generic apology only.",
"makeOrBreakForCategory": false,
"makeOrBreakForAssessment": false
},
{
"criterionId": 502,
"label": "Tone",
"score": 8,
"maxPoints": 10,
"reason": "Polite but distant.",
"makeOrBreakForCategory": false,
"makeOrBreakForAssessment": false
}
]
}
]
}
]
}Score an unsent draft reply against every applicable scorecard whose
liveCoach.enabled is true. Nothing is persisted. Used by the Quality Coach
panel to render live scores per scorecard.
One ticket may match multiple live-enabled scorecards (e.g. Compliance, Empathy,
Tone) — every match is scored and returned in scorecards, ordered by
scorecardId ascending so the FE can rely on positional rendering.
Scorecards without any AI-evaluable criteria are silently skipped. When no
applicable scorecard has Live Coach enabled for this ticket, scorecards is empty.
Either every applicable scorecard is scored successfully, or — if cortex fails on any of them — the whole request fails with 502; no partial results are returned.
curl --request POST \
--url https://demo.enneo.ai/api/mind/ticket/{ticketId}/quality/check \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"draftText": "<div>Hallo Susanne, vielen Dank für Ihre Nachricht...</div>"
}
'{
"scorecards": [
{
"scorecardId": 1,
"name": "Compliance",
"percentage": 92,
"threshold": 90,
"passed": true,
"aiSummary": "All required disclaimers present.",
"categories": [
{
"categoryId": 1,
"label": "Disclaimers",
"score": 18,
"maxPoints": 20,
"criteria": [
{
"criterionId": 101,
"label": "Privacy notice",
"score": 9,
"maxPoints": 10,
"reason": "Mentioned with link.",
"makeOrBreakForCategory": false,
"makeOrBreakForAssessment": false
},
{
"criterionId": 102,
"label": "Legal opt-out",
"score": 9,
"maxPoints": 10,
"reason": "Included verbatim.",
"makeOrBreakForCategory": true,
"makeOrBreakForAssessment": false
}
]
}
]
},
{
"scorecardId": 7,
"name": "Empathy",
"percentage": 68,
"threshold": 75,
"passed": false,
"aiSummary": "Polite but lacks acknowledgement of frustration.",
"categories": [
{
"categoryId": 5,
"label": "Customer Orientation",
"score": 13,
"maxPoints": 20,
"criteria": [
{
"criterionId": 501,
"label": "Acknowledgement",
"score": 5,
"maxPoints": 10,
"reason": "Generic apology only.",
"makeOrBreakForCategory": false,
"makeOrBreakForAssessment": false
},
{
"criterionId": 502,
"label": "Tone",
"score": 8,
"maxPoints": 10,
"reason": "Polite but distant.",
"makeOrBreakForCategory": false,
"makeOrBreakForAssessment": false
}
]
}
]
}
]
}Documentation Index
Fetch the complete documentation index at: https://docs.enneo.ai/llms.txt
Use this file to discover all available pages before exploring further.
JWT-based authentication
Ticket ID
Draft reply text (HTML allowed) to score
Optional override — score against a specific scorecard revision only.
When set, applicability and liveCoach.enabled are ignored; the result
always contains exactly one entry. When omitted, every applicable
live-enabled scorecard is scored.
Live coach evaluation results
One entry per applicable live-enabled scorecard with at least one
AI-evaluable criterion. Empty when nothing applies. Ordered by
scorecardId ascending.
Show child attributes