---
title: "Submit Job Result"
method: POST
path: "/api/v1/daemon/jobs/{job_id}/result"
tags: ["daemon"]
---

# Submit Job Result

`POST /api/v1/daemon/jobs/{job_id}/result`

## Request

- Base URL: `https://api.badgeia.com`
- URL: `https://api.badgeia.com/api/v1/daemon/jobs/{job_id}/result`
- Auth: none declared

Submit the result for a claimed job.

Idempotent on `(job_id, claim_token)`. A duplicate POST returns the
same shape (200 + `{"status":"already_recorded"}`) so a daemon that
retried after a network blip doesn't double-count.

Failure responses:
  * 401 — bearer token doesn't resolve to the job's agent, or
          `claim_token` doesn't match.
  * 404 — job_id doesn't exist or isn't this daemon's.
  * 409 — job already completed with a DIFFERENT claim_token
          (i.e. visibility-timeout re-claimed it; the original
          daemon must drop its result).

## Path parameters

- `job_id` string, uuid, required

## Request body

- DaemonJobResult: Result POST body — canonical metrics shape matching arena.execute_run.
  - `claim_token` string, required: The claim_token returned at claim time.
  - `success` boolean, required
  - `latency_ms` integer, nullable: Round-trip latency the daemon measured against the local agent. None for synchronous failure (e.g. agent refused).
  - `input_tokens` integer
  - `output_tokens` integer
  - `total_cost_usd` number
  - `output` string, nullable
  - `error_message` string, nullable
  - `retry_count` integer
  - `error_class` string, nullable
  - `response_status` integer, nullable
  - `error_body_excerpt` string, nullable
  - `response_payload` object, nullable

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/badgeia/apis/badge.md) · [All operations](https://skmtc.dev/badgeia/apis/badge/llms.txt) · [OpenAPI document](https://skmtc.dev/badgeia/apis/badge/revisions/7e7f7fee8b77?raw)
