---
title: "Report how an INDETERMINATE execution of this grant resolved"
method: POST
path: "/v1/authority/grants/{grantId}/reconciliations"
---

# Report how an INDETERMINATE execution of this grant resolved

`POST /v1/authority/grants/{grantId}/reconciliations`

## Request

- Base URL: `https://api.decionis.com`
- URL: `https://api.decionis.com/v1/authority/grants/{grantId}/reconciliations`
- Auth: HTTP bearer

An executor holding the grant reports, from its own downstream
reconciliation, whether an INDETERMINATE execution COMMITTED or
FAILED. The nonce stays burned and the action is never retried: the
resolution is an append-only record with digest-bound effect evidence,
and its commit evidence goes to the Decision Chain. The same evidence
rules as the platform operator's reconciliation apply.

The execution token (accepted after its expiry, as at finalization)
must verify, its `jti` must be `{grantId}` (otherwise 409
`GRANT_ID_MISMATCH`), its correlation must be `commit_correlation_id`,
and `claim_token` must be the token of the grant's claim (otherwise
409 `CLAIM_TOKEN_MISMATCH`). The caller needs `decision:write`,
`decision:*` or `org:*` in the grant's organisation. The authenticated
principal is the reconciler and the only trusted observer of the
effect evidence; it is never named in the body. An organisation API
key reconciles only when it is on the trusted effect-observer
allow-list; any other caller is answered 409
`EFFECT_OBSERVER_PROVENANCE_UNAVAILABLE`. A claim that is not
INDETERMINATE answers 409 `CLAIM_NOT_INDETERMINATE`.

## Request body

- ExecutionGrantReconciliationRequest
  - `execution_token` string, required
  - `claim_token` string, required: The claim token the grant's claim returned.
  - `commit_correlation_id` string, required
  - `outcome` 'COMMITTED' | 'FAILED', required
  - `reconciliation_note` string: Free-form context; never identity. A fixed note naming the grant is recorded when absent.
  - `downstream_evidence` object
  - `effect_evidence` union, required: Protocol 1.1 evidence must be CONFIRMED to resolve COMMITTED, and cannot resolve FAILED; legacy evidence must name the reconciling principal as its observer.
    - EffectEvidence: Optional Protocol 1.1 observation evidence. COMMITTED remains an executor-reported finalization state and is not CONFIRMED without a qualifying record. Raw provider responses should remain outside the evidence artifact; use commitments and immutable references.
      - `version` '1.0', required
      - `status` 'CONFIRMED' | 'UNCONFIRMED', required
      - `observation_method` 'DOWNSTREAM_ACK' | 'READ_AFTER_WRITE' | 'EVENT_CONFIRMATION' | 'STATE_RECONCILIATION' | 'SIGNED_RECEIPT' | 'EXTERNAL_ATTESTATION' | 'HUMAN_VALIDATION', required: Versioned identifier for how the downstream effect was observed. DOWNSTREAM_ACK is weak evidence and cannot independently confirm an effect.
      - `observer` object, nullable, required
        - `id` string, required
        - `version` string, nullable, required
      - `expected_effect_digest` string, required
      - `observed_effect_digest` string, nullable, required: For CONFIRMED evidence, must equal expected_effect_digest.
      - `observed_at` string, date-time, nullable, required
      - `evidence_digest` string, nullable, required
      - `evidence_reference` string, nullable, required
      - `execution_correlation_id` string, required: Must exactly equal the bound commit correlation identifier.
    - ExecutionEffectEvidence: Deployed pre-Protocol-1.1 effect record. It remains accepted and verifiable for grants issued under its original request/outcome-binding rules. Protocol 1.1 grants reject this shape to prevent an evidence semantics downgrade. New integrations should emit EffectEvidence.
      - `effect_schema_version` '1.0', required
      - `status` 'CONFIRMED' | 'FAILED' | 'INDETERMINATE', required: CONFIRMED means the execution gate directly observed a digestible response.
      - `request_digest` string, required: Must equal the execution payload digest signed into the grant.
      - `response_digest` string, nullable, required: Required when status is CONFIRMED; null otherwise.
      - `digest_algorithm` 'SHA-256', required
      - `canonicalization_profile` string, required: Canonicalization profile for the response digest when present; otherwise the request digest profile.
      - `external_reference` string, nullable, required
      - `observation_mode` 'GATE_OBSERVED' | 'RUNTIME_REPORTED', required
      - `observer` object, required
        - `id` string, required
        - `version` string, required
      - `observed_at` string, date-time, required
      - `metadata_digest` string, nullable, required

## Response `200`

Reconciled; commit evidence acknowledged by the Decision Chain

- ExecutionGrantReconciliationResponse
  - `reconciled` boolean, required
  - `resolution` 'FINALIZED' | 'FAILED'
  - `reconciliation_id` string, uuid
  - `evidence_hash` string
  - `decision_chain_evidence_recorded` boolean
  - `reason_codes` string[], required

## Other responses

- `202`: Reconciled; commit evidence queued for delivery (COMMIT_EVIDENCE_PENDING)
- `400`: Structured API error
- `401`: Structured API error
- `403`: Structured API error
- `404`: No claim of this grant in the organisation (INDETERMINATE_CLAIM_NOT_FOUND)
- `409`: Invalid token, GRANT_ID_MISMATCH, EXECUTION_CORRELATION_MISMATCH, CLAIM_TOKEN_MISMATCH, CLAIM_NOT_INDETERMINATE, CLAIM_ALREADY_RECONCILED, or effect evidence that cannot resolve the claim
- `429`: Structured API error
- `503`: Reconciliation store unavailable

---

[API](https://skmtc.dev/decionis/apis/decionis-policy-evaluation-api.md) · [All operations](https://skmtc.dev/decionis/apis/decionis-policy-evaluation-api/llms.txt) · [OpenAPI document](https://skmtc.dev/decionis/apis/decionis-policy-evaluation-api/revisions/357f5e459d0c?raw)
