Analytics report
A period's analytics as the Analytics page PDF, or every measure as CSV or Excel.
- PriceFree
- Typical time5 s to 2 min
- Scope
reports:read - Runs asA background job
Run analytics report in the sandbox
No key and nothing to pay. The sandbox returns a realistic example in a couple of seconds; no AI runs and no data is kept.
- Queued202 and a job id, straight away
- ProcessingPoll, stream or wait for a webhook
- SucceededResult and files on the job
PDF: the Analytics page report (marking turnaround, throughput, first-time pass rate, AI agreement). CSV or Excel: one row per measure, with the period before and exactly what each counts. Uses the key creator's analytics access. Free. Download the file from GET /jobs/{job_id}/files/analytics.pdf (or .csv / .xlsx).
Requires reports:read. Free. Send a unique Idempotency-Key; reuse it with the identical body when retrying. Returns 202 with a job: poll GET /jobs/{job_id}, stream GET /jobs/{job_id}/events, or use a signed webhook.
Analytics report
POST/v1/reports/analytics
Scope reports:read
Headers
| Field | Details |
|---|---|
Idempotency-Key | stringRequiredA unique key per new operation; reuse it with the identical body when retrying. |
EduMark-Version | enumAPI version. Defaults to the latest.One of 2026-10-21 |
Request body
| Field | Details |
|---|---|
start_date | string (date)Required |
end_date | string (date)Required |
format | enumpdf: the Analytics page report. csv or xlsx: one row per measure.One of xlsx, csv, pdfDefault "pdf" |
title | stringPDF title.Up to 160 charactersDefault "Analytics report" |
parts | array of enumPDF sections: marking turnaround, throughput, first-time pass rate, AI agreement.1 to 4 items |
metrics | array of string, optionalCSV/Excel: measures from GET /v1/analytics/metrics. Default: a progress and marking set.1 to 30 items |
course_id | string, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
cohort | string, optionalUp to 200 charactersPattern ^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$ |
Responses
| Status | Meaning |
|---|---|
| 202 | Successful Response |
| 400 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 401 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 402 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 403 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 404 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 409 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 410 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 413 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 415 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 422 | Validation Error |
| 429 | Request rejected. Inspect error.code and request_id; failed work is not billed. |
| 503 | Request rejected. Inspect error.code and request_id; failed work is not billed. |