---
title: "Prepare a verified memory from an explicitly selected owner conversation."
method: POST
path: "/v1/consolidate_external_conversation"
tags: ["External Authorization"]
---

# Prepare a verified memory from an explicitly selected owner conversation.

`POST /v1/consolidate_external_conversation`

## Request

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

## Request body

- object
  - `preferred_language` string, nullable: BCP-47-ish language code (e.g. 'en', 'zh-cn') for localized messages.
  - `access_token` string, required: Opaque grant token accepted only by grant inspection and external clone invocation; store it as a secret and never expose it to users.
  - `installation_id` string, required: Your stable opaque identifier for this app installation.
  - `external_subject` string, required: Your stable opaque identifier for the person authorizing this installation.
  - `clone_id` string, required: AI consciousness id as returned by clone operations.
  - `idempotency_key` string, required: A stable opaque event key that makes exact retries return the same outcome.
  - `current_text` string, required
  - `clone_response` string, required
  - `context_messages` object[], nullable
    - `display_name` string, required: Neutral display name of who sent a context message (no platform identifiers).
    - `text` string, required
    - `is_ai` boolean, nullable: True when a context message was sent by an AI or bot rather than a person.
    - `timestamp` number, nullable: UNIX timestamp in seconds when a context message was sent (for ordering and recency).
    - `gender` string, nullable
  - `references` object[], nullable
    - `title` string, required
    - `url` string, required: Where the attachment is — the `media_url` an upload returned, or an external link. Echoed back in the result so you can match each entry to what you sent.
    - `text` string, required
  - `speaker_label` string, nullable: Neutral display name of whoever is sending this message, shown to the AI consciousness as who it is currently talking to.
  - `source_label` string, nullable
  - `media_ids` string[], nullable
  - `purpose` 'conversation' | 'reading'
  - `owner_notes` 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
  - `status` 'processing' | 'ready' | 'empty' | 'failed': Current authorization or invocation lifecycle state.
  - `text` string, nullable
  - `auto_keep_external_memories` boolean
  - `retry_after_seconds` integer, nullable: Suggested delay before retrying the same event while processing.
  - `preview_id` string, nullable
  - `reading_provenance` object
    - `content_state` 'checked_candidate' | 'owner_edited', required
    - `memory_kinds` string[], required
    - `sources` object[], required
      - `source_kind` 'page' | 'media', required
      - `title` string
      - `url` string: Where the attachment is — the `media_url` an upload returned, or an external link. Echoed back in the result so you can match each entry to what you sent.
      - `media_id` string
      - `source_id` string, required

## 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.

---

[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)
