---
title: "Propose Consolidation Entries"
method: POST
path: "/extensions/roboledger/{graph_id}/operations/propose-consolidation-entries"
tags: ["RoboLedger: Ledger & Events"]
---

# Propose Consolidation Entries

`POST /extensions/roboledger/{graph_id}/operations/propose-consolidation-entries`

## 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/propose-consolidation-entries`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Draft a month's consolidating entries in the group's consolidation entity: what preview-consolidation-entries computes, written as drafts that the consolidation entity's close posts. Proposing the month again replaces the drafts it wrote before, so it can be run after any member's books change; a person's own entries are never touched. Lines that eliminate a cash flow carry the row they offset. A residual or a disagreement is returned beside the drafts, never plugged; a month the consolidation entity has closed is left as posted.

**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

- ProposeConsolidationEntriesRequest: The month to draft the consolidating entries for.
  - `period` string, required: The month, as YYYY-MM.

## Response `200`

Successful Response

- OperationEnvelopeProposeConsolidationEntriesResponse
  - `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` ProposeConsolidationEntriesResponse: The consolidating entries drafted for a month.
    - `period` string, required: The month, as YYYY-MM.
    - `consolidation_entity_id` string, required: The entity the drafts are in.
    - `closed` boolean: True when the month is closed and nothing was drafted.
    - `entries` JournalEntryResponse[]: The drafts written; the consolidation entity's close posts them.
      - `id` string, required
      - `transaction_id` string, nullable
      - `type` string, required
      - `status` string, required
      - `posting_date` string, date, required
      - `memo` string, nullable
      - `provenance` string, nullable
      - `reversal_of` string, nullable
      - `posted_at` string, date-time, nullable
      - `line_items` JournalEntryLineItemResponse[], required
        - `id` string, required
        - `element_id` string, required
        - `debit_amount` integer, required
        - `credit_amount` integer, required
        - `description` string, nullable
        - `line_order` integer, required
        - `flow_qname` string, nullable: The cash flow row this line carries, when tagged; null means the account's default flow.
      - `total_debit` integer, required
      - `total_credit` integer, required
      - `adjustment_kind` string, nullable
      - `adjusts_entity_id` string, nullable
    - `replaced` integer: Earlier drafts of this month's entries, replaced by these.
    - `residuals` ConsolidationResidual[]: Differences withheld from the drafts until explained.
      - `entity_id` string, required: The member.
      - `entity_name` string, required: The member's name.
      - `amount` integer, required: Cents: the parent's investment balance less its share of the member's capital. Positive when the parent carries more than its share.
      - `explanation` string, required: What the two figures are.
    - `reconciling_items` ConsolidationReconcilingItem[]: Intercompany figures the two sides do not agree on.
      - `entity_ids` string[], required: The two entities.
      - `concept` string, required: The rs-gaap concept left uneliminated.
      - `entity_id` string, required: The entity whose figure is left.
      - `amount` integer, required: Cents left uneliminated, debit-positive.
      - `description` string, required: What does not agree.
    - `notes` string[]: Anything the engine left out, and why.
  - `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)
