Reject a proposal with an immutable review receipt

POST /api/v1/optimization-proposals/{proposalId}/reject on the Caveman Cloud control plane. Requires the proposal:draft scope. Not exposed to autonomous agents: Records a human rejection reason and feeds it into optimization learning. Agent access would let the optimizer impersonate its reviewer and poison its own feedback signal. The client supplies one stable canonical UUID per human decision and a closed reason code; exact retries return the same receipt without another transition or audit row.

post/optimization-proposals/{proposalId}/reject

Request

  • Base URL
    https://api.caveman.so/api/v1
  • URL
    https://api.caveman.so/api/v1/optimization-proposals/{proposalId}/reject
  • Auth
    • OAuth 2
      Authorization code: /api/v1/oauth/authorize
      Token URL: /api/v1/oauth/token scopes: proposal:draft
    • or HTTP bearer
    • or API key in cookie cave_access
    • or API key in cookie __Secure-cave_identity.session_token

Request body

idempotency_keystring uuid required

Stable client decision identity. Reuse after an uncertain network result; rotate after success, conflict, cancellation, or a new decision.

reason_code'quality_risk' | 'security_risk' | 'scope_too_broad' | 'cost_not_justified' | 'stale_knowledge' | 'human_preference' | 'duplicate_change' | 'unsupported_change' | 'policy_conflict' required

Response

Proposal rejected, or an exact retry returned the original immutable decision receipt.

idstring uuid required
status'rejected' required
learning_recordedboolean required

Explicit learning outcome; false means no typed learning feedback was recorded.

Changes

No recorded changes to this operation across all 1 revision of this API.