prxy.monster API-key BYOK is live. Start free

POST /v1/outcomes

Submit an outcome anchored on a receipt_id. Outcomes are append-only — receipts themselves are never mutated.

See the conceptual overview at Outcomes.

Request

POST /v1/outcomes
Authorization: Bearer prxy_xxx
Content-Type: application/json
 
{
  "receipt_id": "8c5a4e2a-9b6d-4f3e-89a3-aa3e8b1f7fc3",
  "outcome": "succeeded",
  "source": "agent_runner",
  "score": 0.92,
  "labels": ["auth-fix"],
  "notes": "User reported the auth bug is gone after this turn."
}

Body fields

FieldTypeRequiredNotes
receipt_idUUIDyesMust reference an existing receipt the caller’s tenant can see.
outcomeenumyesOne of 11 values (see below).
sourceenumyesOne of 5 values (see below).
scorefloatno0..1 confidence.
labelsstring[]noFree-form tags scoped per tenant.
notesstringnoHashed sha-256 server-side at write time. Raw text never persists.

outcome enum

succeeded, partially_solved, failed, no_progress, regressed, user_satisfied, user_unsatisfied, tool_chain_succeeded, tool_chain_failed, review_pending, out_of_scope.

source enum

self_report, human_reviewer, webhook, automated_test, agent_runner.

V-27c will gate webhook and automated_test behind a signed-payload trusted-integration flow. Until then, treat them as user-supplied trust tier.

Response

{
  "id": "1d2cf0fa-...",
  "receipt_id": "8c5a4e2a-...",
  "outcome": "succeeded",
  "source": "agent_runner",
  "score": 0.92,
  "labels": ["auth-fix"],
  "notes_hash": "sha256-...",
  "created_at": "2026-05-07T18:32:01.123Z",
  "memory_candidate_id": "7a92...-...-..."
}

memory_candidate_id is non-null when the outcome is positive (succeeded / partially_solved / user_satisfied / tool_chain_succeeded) and a candidate row was queued for reviewer promotion. Otherwise null.

Errors

StatusCodeCause
400invalid_outcomeoutcome not in the enum.
400invalid_sourcesource not in the enum.
400missing_receipt_idreceipt_id not provided.
404receipt_not_foundreceipt_id does not exist or is outside the caller’s tenant scope.
409duplicate_outcomeAn outcome with the same (receipt_id, source, outcome) already exists for this caller and append-only mode is on.

See also