GET /api/result/{id}#
Retrieve execution result for a submission.
Request#
curl -s "https://api.rustbox.sh/api/result/550e8400-e29b-41d4-a716-446655440000" \
-H "X-API-Key: rb_live_your_key_here" | jq
Response#
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"schema_version": "2.0",
"language": "python",
"profile": "judge",
"status": "completed",
"timestamps": {
"created_at": "2026-04-02T12:00:00.000Z",
"started_at": "2026-04-02T12:00:00.001Z",
"completed_at": "2026-04-02T12:00:00.053Z"
},
"result": {
"verdict": "AC",
"cause": "normal_exit",
"actor": "runtime",
"exit_code": 0,
"signal": null,
"error_message": null
},
"output": {
"stdout": "hello world\n",
"stderr": "",
"integrity": "complete"
},
"metrics": {
"cpu_time_secs": 0.015,
"wall_time_secs": 0.018,
"memory_peak_bytes": 8400000,
"cpu_wall_ratio": 0.833,
"divergence": "cpu_bound"
},
"evidence": {
"isolation": {
"mode": "strict",
"controls_applied": ["pid_namespace", "mount_namespace", "network_namespace", "memory_limit", "process_limit", "no_new_privileges"],
"controls_missing": [],
"proc_policy": "hardened",
"sys_policy": "builtin-deny",
"pidfd_mode": "native",
"reason": "All configured controls applied"
},
"limits": {
"cgroup_backend": "cgroup_v2",
"cgroup": {
"memory_limit_bytes": 268435456,
"memory_peak_bytes": 8400000,
"oom_events": 0,
"oom_kill_events": 0,
"cpu_usage_usec": 15000,
"process_count": 0,
"process_limit": 10
}
},
"teardown": {
"reap_status": "clean",
"descendant_containment": "ok",
"zombie_count": 0,
"cleanup_verified": true,
"residual_mounts": [],
"collection_errors": []
}
}
}
Response fields#
The response is grouped into timestamps, result, output, metrics, and evidence. Identity fields stay at the top level.
Top-level fields#
Field Type Present Description idstring (UUID) always Submission identifier schema_versionstring always Response schema version (currently "2.0") languagestring always Language used for execution profilestring always Execution profile (judge or agent) statusstring always pending, running, completed, or error
timestamps object#
Field Type Present Description created_atstring always ISO 8601 timestamp when the submission was created started_atstring or null when started ISO 8601 timestamp when execution began completed_atstring or null when completed ISO 8601 timestamp when execution finished
result object#
Field Type Present Description verdictstring or null when completed Verdict code: AC, RE, TLE, MLE, PLE, FSE, SIG, IE causestring or null when completed Why the run ended (e.g. normal_exit, oom_kill, wall_timeout) actorstring or null when completed What ended the run (runtime, kernel, judge) exit_codeinteger or null when completed Process exit code signalinteger or null when completed Signal number that killed the process, or null error_messagestring or null when completed Human-readable error description, or null on success
output object#
Field Type Present Description stdoutstring or null when completed Captured standard output stderrstring or null when completed Captured standard error integritystring or null when completed complete, truncated_by_judge_limit, crash_mid_write, or write_error
output.integrity values#
Value Meaning completeAll output was captured without loss truncated_by_judge_limitOutput exceeded the capture limit and was truncated crash_mid_writeProcess crashed while writing output write_errorAn I/O error occurred during output capture
metrics object#
Field Type Present Description cpu_time_secsnumber or null when completed CPU time consumed in seconds wall_time_secsnumber or null when completed Wall clock time in seconds memory_peak_bytesinteger or null when completed Peak resident memory in bytes cpu_wall_rationumber or null when completed CPU time divided by wall time divergencestring or null when completed Pattern: cpu_bound, sleep_or_block_bound, or host_interference_suspected
evidence object#
Kernel-backed isolation evidence, organized into three blocks. null while the run is pending.
Block Description isolationIsolation mode, applied vs missing controls, proc/sys (seccomp) policy, pidfd mode limitsrlimits and cgroup accounting teardownProcess reaping, descendant containment, and cleanup verification
evidence.isolation object#
Field Type Description modestring Isolation level applied (strict) controls_appliedstring[] Security controls active during execution controls_missingstring[] Controls that could not be applied (normally empty) proc_policystring Process policy (hardened when the mount namespace is on) sys_policystring Syscall (seccomp) policy: builtin-deny, custom, or disabled pidfd_modestring Process tracking mode (native or fallback) reasonstring Why this isolation mode was chosen
evidence.limits object#
Field Type Description rlimitsobject or null POSIX rlimits applied (cpu, address space, file size, fds, procs) cgroup_backendstring Cgroup backend selected (e.g. cgroup_v2) cgroupobject Cgroup accounting data (see below)
evidence.limits.cgroup object#
Field Type Description memory_limit_bytesinteger Memory limit applied to the cgroup memory_peak_bytesinteger Peak memory usage recorded by the cgroup oom_eventsinteger Number of OOM events oom_kill_eventsinteger Number of OOM kill events cpu_usage_usecinteger CPU time in microseconds process_countinteger Number of processes at collection time process_limitinteger PID limit applied to the cgroup
evidence.teardown object#
Field Type Description reap_statusstring Whether all processes were cleanly reaped (clean) descendant_containmentstring Whether all child processes were contained (ok) zombie_countinteger Number of zombie processes at collection time cleanup_verifiedboolean True when teardown removed every mount and dir it owned residual_mountsstring[] Mounts left behind after teardown (normally empty) collection_errorsstring[] Errors encountered while collecting evidence
Status lifecycle#
pending -> running -> completed
-> error
Status Meaning pendingQueued, waiting for a worker runningExecuting in a sandbox completedFinished (check result.verdict for the outcome) errorInternal failure
Verdicts#
Code Name What happened ACAccepted Clean exit, code 0 RERuntime Error Non-zero exit or crash TLETime Limit Exceeded Wall time exceeded MLEMemory Limit Exceeded OOM killed by cgroup PLEProcess Limit Exceeded Fork/thread bomb hit cgroup PID limit FSEFile Size Exceeded SIGXFSZ from RLIMIT_FSIZE SIGSignaled Killed by signal (not attributed to platform) IEInternal Error Platform infrastructure failed
Every verdict is backed by kernel evidence. MLE means the cgroup OOM killer fired. TLE means the wall timer expired. PLE means the cgroup PID limit was reached. FSE means a write exceeded the file size rlimit. The platform does not guess verdicts from exit codes.
What happens on timeout#
When a submission exceeds its wall time limit, the supervisor sends SIGKILL to the process. The resulting verdict is TLE.
Because the process is forcibly killed, stdout may be incomplete. Check output.integrity - it will indicate crash_mid_write or truncated_by_judge_limit if output was not fully captured.
result.cause will be wall_timeout and result.actor will be judge. The evidence.teardown.judge_actions array (present only when the supervisor intervened) carries the kill event. Example:
{
"status": "completed",
"result": {
"verdict": "TLE",
"cause": "wall_timeout",
"actor": "judge"
},
"output": {
"integrity": "crash_mid_write"
},
"metrics": {
"wall_time_secs": 7.001
},
"evidence": {
"teardown": {
"judge_actions": [
{ "action_type": "forced_kill", "details": "SIGKILL sent to proxy group" }
]
}
}
}
Not found#
{ "error": "submission not found" }