---
title: "Write a finished interview up as prose, in first, second or third person."
method: POST
path: "/v1/generate_voice_interview_report"
tags: ["Voice Interviews"]
---

# Write a finished interview up as prose, in first, second or third person.

`POST /v1/generate_voice_interview_report`

## Request

- Base URL: `https://partner.mindupload.app`
- URL: `https://partner.mindupload.app/v1/generate_voice_interview_report`
- Auth: API key in header `X-Partner-Key`

Writes the interview up as prose and returns it. Nothing is added to the user's mind data: what you do with the text is yours to decide, and uploading it as the user's mind data is a separate call they should confirm first. A finished interview's write-up is kept with the interview until it expires, so asking again in the same `person` returns the same text without writing it again, which is how a reply that never arrived is fetched. `person` chooses the voice it is written in — `first_person` reads as the user themselves and is what a mind-data upload wants, `second_person` addresses them, and `third_person` describes them for someone who was not there. `text_type` tells you which mind-data category this interview belongs to.

## Request body

- object
  - `preferred_language` string, nullable: BCP-47-ish language code (e.g. 'en', 'zh-cn') for localized messages.
  - `username` string, nullable: The end-user's username.
  - `password` string, nullable: The end-user's password on first sign-in. After login/register, send the returned session token (JWT) here instead — the field accepts either, and reusing the token keeps raw passwords out of your storage.
  - `interview_session_id` string, nullable: Identifies one interview. Returned by start_voice_interview and required by every later call.
  - `codename` string, nullable: Ask for a consciousness by name instead of writing up an interview: returns the third-person description of that consciousness, if one has been produced. Any authenticated caller may ask. Only the third-person form is available this way; the first- and second-person forms address the interviewee and are theirs alone.
  - `share_description` boolean, nullable: The owner's answer to whether other people may read this consciousness's description. True publishes the description already written for it; false withdraws it and erases the text. A newly written description is never readable by anybody else until this says so, so the person can read what is being said about them first.
  - `person` 'first_person' | 'second_person' | 'third_person', nullable: Which voice to write in. `first_person` reads as the user themselves and is what a mind-data upload wants; `second_person` addresses them; `third_person` describes them for a reader who was not present and leaves out anything they would not want quoted.
  - `module_key` string, nullable

## Response `200`

Result envelope — check the success field.

- object
  - `success` boolean: Whether the call succeeded.
  - `error_message` string, nullable: Human-readable reason when success is false.
  - `error_code` string
  - `interview_session_id` string, nullable: Identifies one interview. Returned by start_voice_interview and required by every later call.
  - `person` 'first_person' | 'second_person' | 'third_person', nullable: Which voice the write-up was produced in, echoing the request.
  - `report_text` string, nullable: The finished interview, written as prose.
  - `text_type` 'memory' | 'persona', nullable: Which mind-data category this interview produces — `memory` or `persona` — so an upload can be filed without guessing.
  - `is_raw_answers` boolean, nullable: True when a written-up version could not be produced and report_text is the answers the user gave instead, joined in the order they were given. Say so before showing it, rather than presenting it as a finished piece of writing.
  - `paragraphs` object[], nullable
  - `speaker_facts` object[], nullable
  - `self_introduction` string, nullable

## Other responses

- `400`: Invalid request payload.
- `401`: Missing or invalid partner key.
- `403`: Partner is not authorized for this operation.
- `429`: Rate limit exceeded — retry later.
- `500`: Internal server error.

## Changes

- **2026-10-19** `0371bdf78533`: 4 info
  - added the new optional request property `module_key`
  - added the optional property `paragraphs` to the response with the `200` status
  - added the optional property `self_introduction` to the response with the `200` status
  - added the optional property `speaker_facts` to the response with the `200` status

[Operation history](https://skmtc.dev/mindupload/apis/mind-upload-partner-api/changes/v1/generate_voice_interview_report/post.md)

---

[API](https://skmtc.dev/mindupload/apis/mind-upload-partner-api.md) · [All operations](https://skmtc.dev/mindupload/apis/mind-upload-partner-api/llms.txt) · [OpenAPI document](https://skmtc.dev/mindupload/apis/mind-upload-partner-api/revisions/0371bdf78533?raw)
