Simulation Run Plan Job

Get simulation run results

Changed on

Everything the run report shows, in one request: the summary and score, the pass/fail verdict, per-metric aggregates, every simulation with its check results, breakdowns by agent and persona, the comparison against the previous run (or compareToJobId), the sweep attribution, and the written debrief with its executive summary, failure themes and recommendations.

Safe to call while the run is in progress: counts reflect what has landed so far. verdict and sweepAttribution stay null until the run ends. The debrief is generated automatically a few minutes after a run with graded calls settles; poll until debrief.status is READY, or request one with POST /v1/simulation/plan/job/{jobId}/debrief.

get/v1/simulation/plan/job/{jobId}/results

Request

  • Base URL
    https://api.roark.ai
  • URL
    https://api.roark.ai/v1/simulation/plan/job/{jobId}/results
  • Auth
    HTTP bearer

Path parameters

jobIdstring required

Query parameters

compareToJobIdstring uuid

Simulation run plan job to compare this run against, e.g. the last run on your main branch. Defaults to the plan's previous settled run. Any run in the project works, including another plan's: checks are matched by metric, and a check only one run graded reads null on the other side.

Example:9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d

Response

The run’s results

Example response

{
  "data": {
    "run": {
      "simulationRunPlanJobId": "7f3e4d2c-8a91-4b5c-9e6f-1a2b3c4d5e6f",
      "simulationRunPlanId": "550e8400-e29b-41d4-a716-446655440000",
      "simulationRunPlanName": "Appointment booking regression",
      "runNumber": 42,
      "status": "COMPLETED",
      "triggeredBy": "TRIGGERED_FROM_API",
      "createdAt": "2026-10-11T14:00:00.000Z",
      "startedAt": "2026-10-11T14:00:03.000Z",
      "endedAt": "2026-10-11T14:04:41.000Z",
      "durationMs": 278000
    },
    "summary": {
      "totalCalls": 10,
      "countedCalls": 10,
      "completedCalls": 10,
      "evaluatedCalls": 10,
      "passedCalls": 7,
      "failedCalls": 3,
      "callPassRate": 70,
      "score": 85,
      "checkPassRate": 85
    },
    "verdict": null,
    "attemptSummary": {
      "testCaseCount": 10,
      "attemptCount": 10,
      "silentAttemptCount": 0,
      "retryCount": 0,
      "stillSilentTestCaseCount": 0
    },
    "metrics": [
      {
        "metricDefinitionId": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
        "metricId": "booked_appointment_check",
        "name": "Booked appointment",
        "outputType": "BOOLEAN",
        "isCheck": true,
        "unitSymbol": null,
        "evaluatedCalls": 10,
        "sampleSize": 10,
        "check": {
          "passedCalls": 7,
          "failedCalls": 3,
          "evaluatedCalls": 10,
          "passRate": 70
        },
        "numeric": null,
        "distribution": [
          {
            "value": "true",
            "count": 7
          },
          {
            "value": "false",
            "count": 3
          }
        ]
      }
    ],
    "calls": [
      {
        "simulationJobId": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
        "callId": "6e7f8a9b-0c1d-4e2f-9a3b-4c5d6e7f8a9b",
        "status": "COMPLETED",
        "counted": true,
        "attemptNumber": 1,
        "retryOfSimulationJobId": null,
        "personaName": "Ana",
        "agentName": "Front desk",
        "durationMs": 94000,
        "passed": false,
        "checks": [
          {
            "metricDefinitionId": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
            "metricName": "Booked appointment",
            "passed": false
          }
        ],
        "values": []
      }
    ],
    "breakdowns": {
      "byAgent": [],
      "byPersona": []
    },
    "comparison": null,
    "sweepAttribution": null,
    "debrief": null
  }
}

Changes