---
title: "Grade an eval run with LLM as Judge"
method: POST
path: "/projects/{projectId}/eval-runs/{runId}/judge"
tags: ["Evals"]
---

# Grade an eval run with LLM as Judge

`POST /projects/{projectId}/eval-runs/{runId}/judge`

**Spends.** Runs the goal-completion judge over the finished run, scoring each case's final answer against its expected output.

`202`: scheduled, not done. Read the grades from the run detail's `judges.goalCompletion` rather than re-requesting — a second POST only spends again.

A run's grading config is pinned when the run is created, so turning the judge on for the suite does not reach an already-recorded run: `enable: true` is what grades one, and it changes nothing beyond that run. Omitting `model` and `threshold` clears any override a previous request left on the run.

## Request body

- EvalRunJudgeRequest — Optional. A bodyless POST grades with the suite's own config.
  - `force` boolean — Re-grade a run that already has a result. SPENDS AGAIN. Must be a real boolean — `"false"` is rejected rather than read as consent.
  - `enable` boolean — Grade this run even though the judge was off when it ran. A per-RUN answer, not a suite edit: grading reads the config pinned when the run was created, so enabling the judge on the suite does not reach an already-recorded run.
  - `model` string — Judge model for this run only.
  - `threshold` number — Pass threshold for this run only.

## Response `202`

Scheduled.

- EvalRunJudgeRequested
  - `runId` string, required
  - `projectId` string, required
  - `status` 'pending', required

## Other responses

- `400` — Malformed body or parameters.
- `401` — Missing, invalid, revoked, or orphaned key (`UNAUTHORIZED`) — or the **target MCP server** needs an OAuth grant (`OAUTH_REQUIRED`), which is a property of the server, not your key.
- `403` — Key is valid but not allowed to do this.
- `404` — Unknown project, server, or resource.
- `429` — Per-key rate limit exceeded (60 requests/minute sustained, bursts up to 10). Honor `Retry-After` and back off with jitter.
- `500` — Something failed on MCPJam's side.

---

[API](https://skmtc.net/mcpjam/apis/mcpjam-api.md) · [All operations](https://skmtc.net/mcpjam/apis/mcpjam-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/mcpjam/mcpjam-api/revisions/a0fa11827b5e/schema)
