Record one immutable human Decision against an exact proposal action.
POST /api/v1/interactions/{interactionId}/decisions
Requires exact revisionId, actionId, proposal fingerprint, current strong If-Match, and Idempotency-Key. The first valid result is immutable; replay never retargets a later revision. A Decision is intent, not Fulfillment or execution evidence.
Access
Section titled “Access”Use a credential with the authentication scheme documented in the API contract.
Provider access, workspace membership, and agent grants are enforced separately. A token does not expand access to a repository or resource. Set up developer access.
Parameters
Section titled “Parameters”| Name | Location | Type | Required | Description |
|---|---|---|---|---|
interactionId |
path | string | Yes | Opaque Interaction id. |
If-Match |
header | string | Yes | |
Idempotency-Key |
header | string | Yes |
Request body
Section titled “Request body”Required. Supported content types: application/json.
| Field | Type | Required | Description |
|---|---|---|---|
revisionId |
string | Yes | |
actionId |
string | Yes | |
proposalFingerprint |
string | Yes | |
outcome |
"approve" · "reject" · "abstain" · "conflict" · "acknowledge" · "choose" · "answer" · "comment" · "request_revision" · "snooze" |
Yes | |
consequence |
object or null | No |
Call the endpoint
Section titled “Call the endpoint”Replace path placeholders and your credential. For body operations, create request.json using the required fields above; this command does not invent resource identifiers or consent.
curl --request POST \ 'https://commentary.dev/api/v1/interactions/<interactionId>/decisions' \ --header 'Authorization: Bearer <your-token>' \ --header 'Content-Type: application/json' \ --data-binary @request.jsonResponses
Section titled “Responses”| Status | Meaning | Payload |
|---|---|---|
200 |
Successful response. | object |
201 |
Successful response. | object |
400 |
The request was invalid. | ExternalError |
401 |
Authentication is required. | ExternalError |
403 |
The token or session does not have permission for this resource. | ExternalError |
404 |
The resource was not found. | ExternalError |
409 |
Revision, action, fingerprint, revocation, or idempotency conflict. | See response headers or body contract |
410 |
Proposal expired or content was purged. | See response headers or body contract |
412 |
If-Match is stale or malformed. | See response headers or body contract |
428 |
If-Match is required. | See response headers or body contract |
429 |
The request was rate limited. | ExternalError |
Successful response fields
Section titled “Successful response fields”| Field | Type | Required | Description |
|---|---|---|---|
data |
InteractionDecisionResult | No |
Recover from errors
Section titled “Recover from errors”Use the returned status and error body. Correct invalid fields before retrying; reconnect or narrow the target for authentication and permission errors. For conditional writes, reload the latest version before preparing a new request. Respect rate-limit headers and retry only when the operation’s idempotency contract permits it.
Contract and related guidance
Section titled “Contract and related guidance”Operation ID: createInteractionDecision. Download the OpenAPI contract for complete constraints and code generation. Browse endpoints.