---
title: "Preview an operation's prompts (no LLM call)"
method: POST
path: "/v1/default/banks/{bank_id}/prompts/preview"
tags: ["Banks"]
---

# Preview an operation's prompts (no LLM call)

`POST /v1/default/banks/{bank_id}/prompts/preview`

## Request

- Base URL: `https://hindsight.vectorize.io` (the document declares no server; this is the origin it was published from)
- URL: `https://hindsight.vectorize.io/v1/default/banks/{bank_id}/prompts/preview`
- Auth: none declared
- TypeScript: <https://skmtc.dev/vectorize/apis/hindsight-http-api/docs/v1/default/banks/:bank_id/prompts/preview/post.ts> (a function with typed inputs; its response is checked against the schema)

Render the exact system and user messages retain, consolidation or reflect would send for this bank, without calling an LLM, reading memories, or changing anything. Everything that shapes the prompt comes from the bank; the runtime data an operation would be given is a fixed placeholder. Both messages are returned: retain and consolidation keep their system prompt bank-agnostic (one provider-side cache serves every bank) and carry the mission in the user message instead.

## Path parameters

- `bank_id` string, required

## Headers

- `authorization` string, nullable

## Request body

- PromptPreviewRequest: Request to render the prompts an operation would send, without calling an LLM. The operation is the whole request: everything that shapes the prompt comes from the bank — its resolved config, profile and directives — and the runtime data an operation would be given is a fixed placeholder. There is deliberately nothing to override. A preview answers "what does this bank send"; letting a caller pass its own mission or sample text only moved that question somewhere the bank cannot answer it. To try a candidate value, save it and look again — the response says which settings are editable.
  - `operation` 'retain' | 'consolidation' | 'reflect': Which operation's prompts to render.
  - `strategy` string, nullable: Name of a retain strategy to render under (a key of the bank's `retain_strategies`). Retain only. Omit it and the bank's `retain_default_strategy` applies, exactly as it does for a retain that names none.

## Response `200`

Successful Response

- PromptPreviewResponse: The messages one call of the requested operation would send. `messages` is in send order, system first. Both are always present because a mission is not necessarily in the system prompt: retain and consolidation keep their system prompt bank-agnostic (so one provider-side cache serves every bank) and carry the mission in the user message instead. When `skipped_reason` is set the configuration means no prompt is sent at all — `chunks` extraction mode stores each chunk verbatim and never calls an LLM — and `messages` is empty.
  - `messages` PromptMessageModel[]: Request messages, in send order. Each is given as the blocks it is built from.
    - `role` 'system' | 'user', required
    - `blocks` PromptBlockModel[]
      - `text` string, required: The block's text; empty when the block is inactive.
      - `source` 'config' | 'builtin', required: `config` — produced by a setting (`field` names it); `builtin` — Hindsight's own wording.
      - `field` string: Config field behind this block; empty when no single field owns it.
      - `section` string: Slug for a part the preview names itself and no field owns: `bank_identity`, `disposition`, `directives`. Empty otherwise.
      - `heading` string: The section heading the prompt text carries at this point, extracted from the prompt itself. Empty when it carries none.
      - `active` boolean: Whether this block is in the prompt as configured.
      - `value` string, nullable: The field's effective value; null when unset.
      - `kind` 'text' | 'boolean' | 'choice' | 'complex', required: Shape of the value, so a client can offer the right control for editing it.
      - `choices` string[], nullable: Allowed values, when `kind` is `choice`.
      - `editable` boolean: Whether this bank may override the field via the bank config API. Server-level fields shape the prompt but cannot be set per bank, and offering to edit one would only collect a 400.
  - `strategy` string, nullable: The retain strategy these prompts were rendered under, if any.
  - `strategies` string[]: Names of the bank's retain strategies, so a client can offer them without a second call.
  - `run_settings` RunSettingModel[]: Settings that shape the operation without appearing in its prompt, such as chunk sizes.
    - `field` string, required
    - `value` string, nullable: Effective value; null when unset.
    - `kind` 'text' | 'boolean' | 'choice' | 'complex', required: Shape of the value, so a client can offer the right control.
    - `editable` boolean: Whether this bank may override the field via the bank config API.
  - `response_schema` object, nullable: JSON schema the response is constrained to, when the operation constrains it.
  - `skipped_reason` string, nullable: Why no prompt is sent, when the configuration means none is.

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-04** `4fda98b75f63`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/vectorize/apis/hindsight-http-api/changes/v1/default/banks/:bank_id/prompts/preview/post.md)

---

[API](https://skmtc.dev/vectorize/apis/hindsight-http-api.md) - [All operations](https://skmtc.dev/vectorize/apis/hindsight-http-api/llms.txt) - [OpenAPI document](https://skmtc.dev/vectorize/apis/hindsight-http-api/revisions/45e711cd0897?raw)
