---
title: "Save"
method: POST
path: "/api/v1/reporting/reports"
tags: ["Report"]
---

# Save

`POST /api/v1/reporting/reports`

Save promotes the program behind an already-rendered reporting surface into
 a report. The caller identifies the surface; the server resolves which
 program produced it. There is no create-from-prompt: the prompt has already
 been answered by the time a report is worth keeping.

## Request body

- C1ApiReportingV1ReportingServiceSaveRequest — The ReportingServiceSaveRequest message.
  - `conversationId` string — The conversation and surface are both required to address a rendered surface; neither identifies one alone.
  - `displayName` string — The displayName field.
  - `prompt` string — The question this surface answered. The surface records its program but not the words behind it, so the caller supplies them; without it the report has nothing to compare against when deciding its program has gone stale.
  - `surfaceId` string — The surfaceId field.

## Response `200`

Successful response

- C1ApiReportingV1ReportingServiceSaveResponse — The ReportingServiceSaveResponse message.
  - `report` C1ApiReportingV1Report — Report is a saved report: the question, the program that answers it, and the parameters a re-run may vary.
    - `createdAt` string, date-time, nullable
    - `createdByUserId` string — The createdByUserId field.
    - `deletedAt` string, date-time, nullable
    - `displayName` string — The displayName field.
    - `id` string — The id field.
    - `latestRunId` string — Separate pointers: the last attempt may have failed while callers still need the last renderable result.
    - `latestSuccessfulRunId` string — The latestSuccessfulRunId field.
    - `parameterSchema` object, nullable
    - `parameterValues` object, nullable
    - `program` C1ApiReportingV1ProgramRef — ProgramRef points at a pinned, executable program.
      - `commitId` string — Code mode invokes by explicit commit, so the commit — not the function — is what a refresh re-executes.
      - `functionId` string — A saved report owns its Function, so this is per-report rather than the shared code-mode scratch function the program first ran on.
      - `plannedFromPrompt` string — The prompt this program was planned from. Report.prompt is editable and a refresh never re-plans, so this is the only way to detect that a report's question has drifted from the program answering it.
    - `prompt` string — The editable natural-language question. Only a re-plan reads this.
    - `tenantId` string — The tenantId field.
    - `updatedAt` string, date-time, nullable

---

[API](https://skmtc.net/conductorone/apis/c1-api.md) · [All operations](https://skmtc.net/conductorone/apis/c1-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/conductorone/c1-api/revisions/f2cf3228f366/schema)
