---
title: "Issue an immutable presentation P&L for one closed period"
method: POST
path: "/companies/{companyId}/presentation-report-snapshots"
tags: ["Reports"]
---

# Issue an immutable presentation P&L for one closed period

`POST /companies/{companyId}/presentation-report-snapshots`

## Request

- Base URL: `https://api.medianfi.com/api/v1`
- URL: `https://api.medianfi.com/api/v1/companies/{companyId}/presentation-report-snapshots`
- Auth: HTTP bearer

Demo-parity and admin-only. Requires an explicitly allowlisted active or test company and uses the exact closed-period general ledger, selected same-company legal-entity functional currency, configured presentation currency, and persisted period-average FX revision. An identical retry returns the incumbent snapshot; changed source or output authority can only create an immutable next revision through explicit supersession.

## Request body

- CreatePresentationReportSnapshotInput
  - `reportType` 'profit_and_loss' | 'balance_sheet', required
  - `glPeriodId` string, uuid, required
  - `entityId` string, uuid: Required when the company has multiple concrete legal entities.
  - `supersedesSnapshotId` string, uuid
  - `restatementReason` string

## Response `201`

Presentation report issued, or identical incumbent returned

- PresentationReportSnapshotResponse
  - `success` boolean, required
  - `data` PresentationReportSnapshot, required
    - `id` string, uuid, required
    - `companyId` string, uuid, required
    - `entityId` string, uuid, required
    - `revision` integer, required
    - `supersedesSnapshotId` string, uuid, nullable, required
    - `restatementReason` string, nullable, required
    - `restatedByUserId` string, uuid, nullable, required
    - `glPeriodId` string, uuid, required
    - `reportType` 'profit_and_loss' | 'balance_sheet', required
    - `periodStart` string, date, required
    - `periodEnd` string, date, required
    - `periodClosedAt` string, date-time, required
    - `functionalCurrency` string, required
    - `presentationCurrency` string, required
    - `rate` PresentationReportRate, required
      - `id` string, uuid, nullable, required: Null only for a same-currency identity translation.
      - `rateType` 'average' | 'closing' | 'historical' | 'identity', required
      - `rate` string, required
      - `sourceKind` 'identity' | 'provider' | 'manual', required
      - `source` string, required
      - `revision` integer, required
      - `requestedDate` string, date, required
      - `periodStart` string, date, nullable, required
      - `effectiveAt` string, date-time, required
      - `fetchedAt` string, date-time, required
    - `sourceHash` string, required
    - `outputHash` string, required
    - `fingerprint` string, required
    - `payload` union, required
      - PresentationProfitAndLossPayload
        - `hasData` boolean, required
        - `lines` PresentationProfitAndLossLine[], required
          - `accountId` string, uuid, required
          - `code` string, required
          - `name` string, required
          - `reportSection` string, required
          - `reportSectionLabel` string, required
          - `functionalAmountCents` integer, required
          - `presentationAmountCents` integer, required
        - `totals` object, required
          - `functional` PresentationProfitAndLossTotals, required: New snapshots separate Other Income from operating Revenue. The two added totals are absent on historical issued snapshots, which retain their original combined Revenue and hashes.
            - `revenueCents` integer, required
            - `cogsCents` integer, required
            - `opexCents` integer, required
            - `expensesCents` integer, required
            - `netIncomeCents` integer, required
            - `otherIncomeCents` integer: Signed non-operating income, included in net income but excluded from Revenue and expenses.
            - `operatingIncomeCents` integer: Revenue minus total expenses; net income equals this amount plus Other Income.
          - `presentation` PresentationProfitAndLossTotals, required: New snapshots separate Other Income from operating Revenue. The two added totals are absent on historical issued snapshots, which retain their original combined Revenue and hashes.
            - `revenueCents` integer, required
            - `cogsCents` integer, required
            - `opexCents` integer, required
            - `expensesCents` integer, required
            - `netIncomeCents` integer, required
            - `otherIncomeCents` integer: Signed non-operating income, included in net income but excluded from Revenue and expenses.
            - `operatingIncomeCents` integer: Revenue minus total expenses; net income equals this amount plus Other Income.
          - `presentationAggregateAtRate` PresentationProfitAndLossTotals, required: New snapshots separate Other Income from operating Revenue. The two added totals are absent on historical issued snapshots, which retain their original combined Revenue and hashes.
            - `revenueCents` integer, required
            - `cogsCents` integer, required
            - `opexCents` integer, required
            - `expensesCents` integer, required
            - `netIncomeCents` integer, required
            - `otherIncomeCents` integer: Signed non-operating income, included in net income but excluded from Revenue and expenses.
            - `operatingIncomeCents` integer: Revenue minus total expenses; net income equals this amount plus Other Income.
          - `roundingDifferenceCents` PresentationProfitAndLossTotals, required: New snapshots separate Other Income from operating Revenue. The two added totals are absent on historical issued snapshots, which retain their original combined Revenue and hashes.
            - `revenueCents` integer, required
            - `cogsCents` integer, required
            - `opexCents` integer, required
            - `expensesCents` integer, required
            - `netIncomeCents` integer, required
            - `otherIncomeCents` integer: Signed non-operating income, included in net income but excluded from Revenue and expenses.
            - `operatingIncomeCents` integer: Revenue minus total expenses; net income equals this amount plus Other Income.
      - PresentationBalanceSheetPayload
        - `hasData` boolean, required
        - `lines` PresentationBalanceSheetLine[], required
          - `sourceKind` 'account' | 'current_earnings', required
          - `accountId` string, uuid, nullable, required
          - `code` string, nullable, required
          - `name` string, required
          - `reportSection` string, required
          - `reportSectionLabel` string, required
          - `statementClass` 'asset' | 'liability' | 'equity' | 'current_earnings', required
          - `functionalAmountCents` integer, required
          - `presentationAmountCents` integer, required
          - `translationMethod` 'closing' | 'historical' | 'average' | 'identity', required
          - `components` union[], required
            - union
              - …
        - `totals` object, required
          - `functional` PresentationBalanceSheetFunctionalTotals, required
            - `assetsCents` integer, required
            - `liabilitiesCents` integer, required
            - `equityCents` integer, required
            - `liabilitiesAndEquityCents` integer, required
            - `differenceCents` integer, required
          - `presentation` PresentationBalanceSheetPresentationTotals, required
            - `assetsCents` integer, required
            - `liabilitiesCents` integer, required
            - `equityBeforeTranslationDifferenceCents` integer, required
            - `translationDifferenceCents` integer, required: Report-time balancing residual from applying closing, historical, and period-average rates. It is not posted or labeled as consolidated CTA until the #917 consolidation authority consumes it.
            - `equityIncludingTranslationDifferenceCents` integer, required
            - `liabilitiesAndEquityCents` integer, required
            - `differenceCents` integer, required
    - `createdByUserId` string, uuid, required
    - `createdAt` string, date-time, required
    - `sealedAt` string, date-time, required

## Other responses

- `401`: Authentication required
- `403`: Insufficient permissions or not a company member
- `404`: Customer rollout surface, company, or closed GL period unavailable
- `409`: Issued authority changed and requires controlled restatement
- `422`: Request failed validation

---

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