---
title: "Set Reconciliation Policy"
method: POST
path: "/extensions/roboledger/{graph_id}/operations/set-reconciliation-policy"
tags: ["RoboLedger: Ledger & Events"]
---

# Set Reconciliation Policy

`POST /extensions/roboledger/{graph_id}/operations/set-reconciliation-policy`

## Request

- Base URL: `https://api.robosystems.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.robosystems.ai/extensions/roboledger/{graph_id}/operations/set-reconciliation-policy`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Change how much the close cares about one reconciliation: whether the period's close waits on it (`required_for_close`); its `materiality`, the difference up to which it still counts as reconciled; whether the close also waits for a sign-off (`review_required`); and whether the reviewer must be someone other than the person who ran the comparison (`separate_reviewer`, which can only be turned on while the graph has at least two members who can write; if it later has one, turn it off or add a member). For a statement reconciliation, `statement_cycle` says how often the statement is issued (monthly, quarterly or annual): a period is covered by the latest statement ending within the cycle that ends with it, so a quarterly statement still covers the months between statements. Omitted fields keep their value. The next refresh-reconciliations uses the new materiality; comparisons already recorded are not re-judged.

**Idempotency**: supply an `Idempotency-Key` header to make safe retries; replays within 24 hours return the same envelope. Reusing the key with a different body returns HTTP 409 Conflict.

## Path parameters

- `graph_id` string, required

## Headers

- `Idempotency-Key` string, nullable

## Request body

- SetReconciliationPolicyRequest: Change how much the close cares about one reconciliation.
  - `structure_id` string, required: The reconciliation block.
  - `required_for_close` boolean, nullable: Whether the period's close waits on it. Omit to keep.
  - `materiality` number, nullable: A difference up to this amount still counts as reconciled. Omit to keep.
  - `review_required` boolean, nullable: Whether the close also waits for a sign-off, not just for the two sides to reconcile. Omit to keep.
  - `separate_reviewer` boolean, nullable: Whether the person who signs off must be someone other than the person who ran the comparison. It can only be turned on when the graph has at least two members who can write. Omit to keep.
  - `statement_cycle` 'monthly' | 'quarterly' | 'annual', nullable: `statement` blocks only: how often the account's statement is issued. A period is covered by the latest statement ending within the cycle that ends with it, so a quarterly statement covers the two months before the next one. Omit to keep.

## Response `200`

Successful Response

- OperationEnvelopeReconciliationPolicyResponse
  - `operation` string, required: Kebab-case operation name
  - `operationId` string, required: op_-prefixed ULID for audit and SSE correlation
  - `status` 'completed' | 'pending' | 'failed', required: Operation lifecycle state
  - `result` ReconciliationPolicyResponse: A reconciliation's policy after a change.
    - `structure_id` string, required
    - `required_for_close` boolean, required
    - `materiality` number, required
    - `review_required` boolean, required
    - `separate_reviewer` boolean, required
    - `statement_cycle` 'monthly' | 'quarterly' | 'annual', nullable: `statement` blocks only: how often the statement is issued.
  - `at` string, required: ISO-8601 UTC timestamp
  - `createdBy` string, nullable: User ID that initiated the operation
  - `idempotentReplay` boolean: True when this envelope came from the idempotency cache — the underlying command did not execute again. False on fresh executions.

## Other responses

- `400`: Invalid request
- `401`: Authentication required
- `403`: Access denied
- `404`: Resource not found
- `409`: Idempotency-Key conflict — key reused with different body
- `422`: Validation error
- `429`: Rate limit exceeded
- `500`: Internal server error

---

[API](https://skmtc.dev/robosystems/apis/robosystems-api.md) · [All operations](https://skmtc.dev/robosystems/apis/robosystems-api/llms.txt) · [OpenAPI document](https://skmtc.dev/robosystems/apis/robosystems-api/revisions/e661e2d5ca6a?raw)
