The legacy diff route is header-gated (X-Requested-With: XMLHttpRequest), not role-gated. The 403 seen on direct browser requests was a header-check artifact. This endpoint wraps the XHR logic and returns structured JSON — no HTML, no 50-line truncation.
Path parameters
-
Numeric run ID
Minimum value is
1. -
Numeric sample or regression result ID
Minimum value is
1.
GET
/runs/{run_id}/samples/{sample_id}/diff
curl \
--request GET 'https://sampleplatform.ccextractor.org/api/v1/runs/{run_id}/samples/{sample_id}/diff?regression_id=42&output_id=42' \
--header "Authorization: Bearer $ACCESS_TOKEN"
Response examples (200)
{
"run_id": 42,
"sample_id": 42,
"regression_id": 42,
"output_id": 42,
"status": "identical",
"summary": {
"added_lines": 42,
"removed_lines": 42,
"changed_hunks": 42
},
"hunks": [
{
"expected_start": 42,
"actual_start": 42,
"lines": [
{
"kind": "context",
"expected_line": 42,
"actual_line": 42,
"text": "string"
}
]
}
]
}
Response examples (401)
{
"code": "unauthorized",
"message": "Bearer token is missing, expired, or invalid.",
"details": {}
}
Response examples (404)
{
"code": "not_found",
"message": "Run 9317 not found.",
"details": {
"resource": "run",
"id": 9317
}
}
Response examples (429)
{
"code": "rate_limited",
"message": "Rate limit exceeded. Retry after 30 seconds.",
"details": {
"retry_after": 30,
"limit": 120,
"window": "60s"
}
}
Response examples (default)
{
"code": "not_found",
"message": "Run 9317 not found.",
"details": {}
}