{
"uploads": [
{
"id": "e7d35b19-04c2-4a8f-93e6-b1f2c8a4d057",
"filename": "STU-10A-0142-science.pdf",
"upload_url": "https://uploads.example-storage.com/eval/...signed...",
"method": "PUT",
"headers": {
"Content-Type": "application/pdf"
},
"expires_at": "2026-10-14T06:58:41Z",
"status": "pending"
}
]
}{
"error": {
"code": "invalid_api_key",
"message": "The API key is not valid.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f"
}
}{
"error": {
"code": "insufficient_scope",
"message": "This API key lacks the evaluation:write scope.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f",
"details": {
"required_scope": "evaluation:write"
}
}
}{
"error": {
"code": "validation_failed",
"message": "questions[0].max_marks is required.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f",
"details": {
"errors": [
{
"field": "questions[0].max_marks",
"code": "required",
"message": "max_marks is required."
}
]
}
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests. Retry after 2 s.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f"
}
}Create uploads
Returns presigned upload URLs for one PDF (top-level fields) or up to 100 PDFs (files). Each URL is valid for 1 hour. PUT the raw file bytes to upload_url with the returned headers, then pass the upload id as upload_id when you submit.
PDF only, up to 50 MB each. Image types return 422 feature_not_available. On an idempotent replay the URLs are not repeated (upload_url_redacted: true); request new uploads instead.
Scope: evaluation:write
{
"uploads": [
{
"id": "e7d35b19-04c2-4a8f-93e6-b1f2c8a4d057",
"filename": "STU-10A-0142-science.pdf",
"upload_url": "https://uploads.example-storage.com/eval/...signed...",
"method": "PUT",
"headers": {
"Content-Type": "application/pdf"
},
"expires_at": "2026-10-14T06:58:41Z",
"status": "pending"
}
]
}{
"error": {
"code": "invalid_api_key",
"message": "The API key is not valid.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f"
}
}{
"error": {
"code": "insufficient_scope",
"message": "This API key lacks the evaluation:write scope.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f",
"details": {
"required_scope": "evaluation:write"
}
}
}{
"error": {
"code": "validation_failed",
"message": "questions[0].max_marks is required.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f",
"details": {
"errors": [
{
"field": "questions[0].max_marks",
"code": "required",
"message": "max_marks is required."
}
]
}
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests. Retry after 2 s.",
"request_id": "req_4f9c2a7e1b3d4c8a9e6f0b2d5a7c1e3f"
}
}Authorizations
Your institute's API key, vak_eval_ followed by 48 hex characters. An institute admin creates keys in the dashboard under Settings -> Integrations -> API keys.
Headers
Optional. Any unique string of 1-255 printable ASCII characters (a UUID works). Retrying with the same key within 48 hours replays the first response with Idempotent-Replayed: true.
255"exam-cbse-sci-10a-2026-10-14"
Body
Response
Created
Show child attributes
Show child attributes