Performance Management Reports Explore API
Two report types, one APIThis guide covers both
pm_result_analysisandpm_improvement_and_attainment. They share the same endpoints, authentication, and rate limits — the only difference is the output schema of each report.
Overview
The Performance Management (PM) Reports API lets you generate and retrieve two related report types:
pm_result_analysis— agent-level performance results against goals and team meanspm_improvement_and_attainment— month-over-month improvement and attainment metrics, aggregated at the queue/interval level
Both report types share the same endpoints, authentication model, rate limits, and job lifecycle. The only difference between them is the schema of the output file each produces.
Authentication
All requests are authenticated using JWT via API Gateway. Requests must include a token with the appropriate scope.
| Scope | Required for |
|---|---|
data-reports:read | GET operations (status checks, file downloads) |
data-reports:write | POST operations (job creation) |
Report Lifecycle
Reports are generated asynchronously using a job-based model:
- Create a job — submit a
POSTrequest specifying the report type, format, timezone, and timespan. - Poll for status — check the job's status via
GETuntil it reachesdone. - Download the file — once the job is
done, retrieve the output file via the file endpoint.
Create a Job
POST /data/reports/{report_type}/jobs
{
"name": "pm",
"format": "csv",
"timezone": "UTC",
"timespan": {
"from": "2026-01-01T02:00:00",
"to": "2026-02-01T04:00:00"
}
}{
"job": {
"id": "f8f7fc12-5ed8-4976-a128-200eecbdafab",
"name": "pm",
"created_at": "2026-07-31T07:11:31",
"status": "created",
"type": "pm_improvement_and_attainment",
"format": "csv",
"timespan": {
"from": "2026-01-01T02:00:00",
"to": "2026-02-01T04:00:00"
},
"timezone": "UTC"
}
}Check Job Status
GET /data/reports/{report_type}/jobs
{
"_embedded": {
"jobs": [
{
"id": "c5e1c32c-312d-49ae-82a8-ffdb03548d33",
"name": "pm",
"created_at": "2026-07-17T09:11:05",
"status": "done",
"type": "pm_result_analysis",
"format": "csv",
"timespan": {
"from": "2026-01-01T02:00:00",
"to": "2026-02-01T04:00:00"
},
"timezone": "UTC",
"_links": {
"self": { "href": "https://api.talkdeskapp.com/data/reports/pm_result_analysis/jobs/c5e1c32c-312d-49ae-82a8-ffdb03548d33" },
"files": { "href": "https://api.talkdeskapp.com/data/reports/pm_result_analysis/files/c5e1c32c-312d-49ae-82a8-ffdb03548d33" }
}
}
]
}
}Download the Report File
GET /data/reports/{report_type}/files/{job_id}
Returns the generated report file in the requested format (csv, json, or json_bulk).
Report Schemas
pm_result_analysis
pm_result_analysisReturns agent-level rows with performance results against goals and team means.
| Column | Description |
|---|---|
| Agent | Display identifier for the agent |
| Agent ID | Unique agent identifier |
| Agent Email | Agent's email address |
| Agent Name | Agent's name |
| Measure Name | Name of the performance measure |
| Team ID | Unique team identifier |
| Team Name | Team display name |
| Queue Type | Type of queue (e.g., "All") |
| Queue Name | Name of the queue, if applicable |
| Volume | Volume associated with the result |
| Result Value | Agent's measured result |
| Goal Value | Target goal value |
| Mean Value | Team mean value |
| Interval Type | Reporting interval (e.g., Monthly) |
| LeaderBoard Date | Date associated with the leaderboard period |
Agent,Agent ID,Agent Email,Agent Name,Measure Name,Team ID,Team Name,Queue Type,Queue Name,Volume,Result Value,Goal Value,Mean Value,Interval Type,LeaderBoard Date
AGENT-PLACEHOLDER-001,AGENT-ID-PLACEHOLDER-001,[email protected],AGENT-NAME-PLACEHOLDER-001,SCHEDULE ADHERENCE,TEAM-ID-PLACEHOLDER-001,Example Team,All,,63000,17.14,31.25,15.21,Monthly,2026-02-01
Contains personal dataThis report contains agent-level personal data (name, email, ID). Handle exported files according to your organization's data handling and retention policies.
pm_improvement_and_attainment
pm_improvement_and_attainmentReturns aggregated month-over-month improvement and attainment metrics.
| Column | Description |
|---|---|
| Month Comparison - Current vs Previous Month | The two months being compared |
| Measure Name | Name of the performance measure |
| Interval Type | Reporting interval (e.g., Monthly) |
| Queue Type | Type of queue (e.g., "All") |
| Count Agent Positive Result - Current vs Previous Month | Count of agents with a positive result change |
| Count Agent NON Positive Result - Current vs Previous Month | Count of agents without a positive result change |
| Improvement | Improvement ratio |
| Count Agent Positive Attainment - Improvement and Goal | Count of agents meeting improvement/goal attainment |
| Count Agent NON Positive Attainment - Improvement and Goal | Count of agents not meeting improvement/goal attainment |
| leaderboard_pm_trend.attainment_1 | Attainment trend indicator |
| Count Distinct Agent | Distinct agent count in the aggregation |
Month Comparison - Current vs Previous Month,Measure Name,Interval Type,Queue Type,Count Agent Positive Result - Current vs Previous Month,Count Agent NON Positive Result - Current vs Previous Month,Improvement,Count Agent Positive Attainment - Improvement and Goal,Count Agent NON Positive Attainment - Improvement and Goal,leaderboard_pm_trend.attainment_1,Count Distinct Agent
January-2026 - February-2026,SCHEDULE ADHERENCE,Monthly,All,4,10,0.2857142857142857,0,14,0.0,14
First month is excludedRows for the first month in a requested timespan are excluded, since there is no prior month available for comparison.
Supported Formats
Reports can be generated in the following formats:
csvjsonjson_bulk
Rate Limits
- 25 requests/second per account across all
/data/reports/**endpoints, shared between both report types.
Job Quotas
- Maximum of 15 simultaneous report jobs per account, across all report types combined.
- Exceeding this quota returns an HTTP
429with error code familydata_reports_not_enough_quota_error.
Service Level Objectives
| Metric | Target |
|---|---|
| Availability | ≥ 99.9% |
| Job creation latency (P99) | < 5s |
| Status/file query latency (P99) | < 500ms |
Audit Logging
Access to report data is audited. A get_report_data event is recorded whenever a report file is fetched via the file download endpoint. Job creation and status polling are not separately audited.
Error Handling
| Scenario | Response |
|---|---|
| Job quota exceeded | 429 Too Many Requests with error code family data_reports_not_enough_quota_error |
Updated about 8 hours ago