Skip to main content
Every way of starting evaluators — the dashboard, the run endpoints, Tests-as-Code, the CLI, the SDK, the CI plugins — creates one result that groups the runs it started. Starting a run returns as soon as the runs are queued: nothing has been dialled yet. A pipeline that stops there passes while the agent is broken, so poll the result until it is finished, then decide pass or fail from its counts. This page is the reference for both steps. The GitHub Actions, GitLab and Bitbucket integrations and cekura run start --wait already follow it; use it when you call the API yourself.

The result ID

Every run endpoint responds with the result object. Its id is the result ID you poll — there is no separate result_id or run_id key.

Result statuses

A result stays in a non-terminal status until every one of its runs has ended. It then settles at exactly one terminal status and does not change again. Poll until the status is one of completed, failed, timeout or cancelled. A loop that stops only on completed or failed keeps polling a timed-out result until its own deadline.

Deciding pass or fail

status alone is not a verdict. Read these fields from the finished result: A run that errored, never connected, timed out or was cancelled is counted in total_runs_count but in neither success_runs_count nor failed_runs_count. So failed_runs_count == 0 does not mean every run passed. A result passes when:
To allow some failures, compare success_rate (0–100) against your threshold instead of requiring every run — but still fail on any status other than completed. Poll every 15–30 seconds. Individual runs are listed under runs in the result, keyed by run ID; each has status, success and, when it could not connect, error_message.
The AI summary of a result’s failures (ai_summary) is written shortly after the result reaches a terminal status. If you post it somewhere, wait while ai_summary_status is pending; it becomes completed, or skipped_no_failures when every run passed.

Examples

The last command exits non-zero unless every run passed, which fails the job.
The same polling applies to a Tests-as-Code run: POST /test_framework/v1/scenarios/run_scenarios_json/ returns the same result object.