---
title: "Regenerate Report"
method: POST
path: "/extensions/roboledger/{graph_id}/operations/regenerate-report"
tags: ["RoboLedger: Reports"]
---

# Regenerate Report

`POST /extensions/roboledger/{graph_id}/operations/regenerate-report`

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

Re-runs fact generation for an existing Report against the latest ledger state. Pass `period_start`/`period_end`/`periods` only if you want to change the reporting window.

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

- RegenerateReportOperation: Regenerate facts for an existing Report. Carries `report_id` from the path-style RPC body; period overrides are inherited from :class:`RegenerateReportRequest`.
  - `period_start` string, date, nullable: New current-period start. Optional — omit to keep the existing window.
  - `period_end` string, date, nullable: New current-period end. Optional — omit to keep the existing window.
  - `periods` PeriodSpec[], nullable: New explicit period columns. Overrides `period_start`/`period_end` when supplied.
    - `start` string, date, required: Period start date (inclusive). Window the column rolls up.
    - `end` string, date, required: Period end date (inclusive). Window the column rolls up.
    - `label` string, required: Column header label (e.g. 'FY2025 Q3', '2024', 'YTD').
  - `report_id` string, required: The Report to regenerate.

## Response `200`

Successful Response

- OperationEnvelopeReportResponse
  - `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` ReportResponse: Report definition summary — header metadata, no facts. Returned by `create-report`, `regenerate-report`, `file-report`, and `transition-filing-status`. Use the package read endpoint to retrieve a Report rehydrated with its rendered `InformationBlockEnvelope` items.
    - `id` string, required: Report identifier (ULID).
    - `name` string, required: Human-readable report name.
    - `taxonomy_id` string, required: Taxonomy this report renders against.
    - `generation_status` string, required: Computation lifecycle: `generating`, `published`, `failed`. Orthogonal to `filing_status`.
    - `period_type` string, required: Period cadence: `monthly`, `quarterly`, `annual`.
    - `period_start` string, date, nullable: Current-period start.
    - `period_end` string, date, nullable: Current-period end.
    - `comparative` boolean, required: True when an auto-generated prior-period column is included.
    - `periods` PeriodSpec[], nullable: Explicit period columns when the report was created with a multi-period layout.
      - `start` string, date, required: Period start date (inclusive). Window the column rolls up.
      - `end` string, date, required: Period end date (inclusive). Window the column rolls up.
      - `label` string, required: Column header label (e.g. 'FY2025 Q3', '2024', 'YTD').
    - `mapping_id` string, nullable: CoA → taxonomy mapping the facts were rolled up through.
    - `ai_generated` boolean: True when the report was created by an AI agent rather than a user.
    - `created_at` string, date-time, required: When the report row was created.
    - `last_generated` string, date-time, nullable: When the facts were last (re)generated.
    - `structures` StructureSummary[]: Structures available for this report's taxonomy — renderable sections (BS / IS / CF / Equity / Schedules).
      - `id` string, required: Structure identifier.
      - `name` string, required: Human-readable structure name.
      - `block_type` string, required: Structure category: `balance_sheet`, `income_statement`, `cash_flow_statement`, `equity_statement`, `schedule`.
    - `entity_id` string, nullable: The entity the report is about. Null on a shared-in copy, and on a report from before entities were recorded, which is the group parent's.
    - `entity_name` string, nullable: Display name of the entity the report is tagged to.
    - `filing_status` string: Filing lifecycle (orthogonal to `generation_status`): `draft`, `under_review`, `filed`, `archived`.
    - `filed_at` string, date-time, nullable: When the report was transitioned to `filed`. On a report shared in from another graph this is the sender's filing time, carried over with `filing_status` so a recipient can tell a draft they were sent from final statements.
    - `filed_by` string, nullable: User ID that transitioned the report to `filed`. Always null on a report shared in from another graph: the sender's user id resolves to nobody in the recipient's graph, so it is deliberately not carried across with `filing_status` and `filed_at`.
    - `supersedes_id` string, nullable: When this report restates an earlier filing, the predecessor's report ID.
    - `superseded_by_id` string, nullable: When this report has been restated, the successor's report ID.
    - `source_graph_id` string, nullable: Origin graph for received (shared) reports — populated only on the recipient's copy.
    - `source_report_id` string, nullable: Origin report ID for received (shared) reports — populated only on the recipient's copy.
    - `shared_at` string, date-time, nullable: When the report was shared into this graph (recipient side).
    - `rule_summary` object, nullable: Counts by rule outcome (e.g. `{'passed': 12, 'failed': 1}`) from the most recent evaluation. Null until rules run.
  - `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)
