---
title: "Answer a question from memory, with citations"
method: POST
path: "/v1/synthesize"
tags: ["Search"]
---

# Answer a question from memory, with citations

`POST /v1/synthesize`

## Request

- Base URL: `https://brain.inite.ai`
- URL: `https://brain.inite.ai/v1/synthesize`
- Auth: HTTP bearer

Corrective RAG over the same retrieval stack as /v1/search: generate an answer, then verify each claim against the facts it cites. The pipeline ABSTAINS rather than guess — `answer` is null and `reason` names the gate that fired (no results, thin coverage, ungrounded support, a failed verifier…). `synthesisGuardrails` picks the policy: `strict` closes to null on a partial verdict, `lenient` returns the answer with the verdict attached, `off` skips the verifier. Cited facts are always the caller’s own visible memory. Fans out to the shared embedding / LLM budget, so it sits in the per-credential `expensive` throttle bucket — 10 requests/min, not the 120/min default. Source: src/synthesize/synthesize.controller.ts.

Required scope: `brain:read`.

## Request body

- SynthesizeRequest
  - `answerLang` string
  - `asOf` string
  - `confidenceFloor` number
  - `disableLangFilter` boolean
  - `entityIds` string[]
  - `entityTypes` string[]
  - `explain` boolean
  - `includeContested` boolean
  - `includeRetracted` boolean
  - `includeStale` boolean
  - `limit` number
  - `minConfidence` number
  - `outputShape` 'full' | 'compact' | 'ids'
  - `predicates` string[]
  - `query` string, required
  - `queryLang` string
  - `requireProvenance` boolean
  - `searchMode` 'vector' | 'lexical' | 'hybrid'
  - `synthesisGuardrails` 'strict' | 'lenient' | 'off' | 'answer'
  - `synthesisModel` string
  - `tokenBudget` number
  - `userId` string

## Response `201`

The answer (or a reasoned abstention).

- SynthesizeResponse
  - `answer` string, nullable, required
  - `cached` boolean
  - `citations` Citation[], required
    - `canonicalName` string, required
    - `entityId` string, required
    - `factId` string, required
    - `object` string, required
    - `predicate` string, required
    - `slot` string, required
    - `sourceKey` string
    - `validFrom` string
  - `decisionLog` DecisionLogEntry[]
  - `evidenceCitations` EvidenceCitation[]
    - `assetId` string
    - `beliefId` string
    - `capability` 'text' | 'visual' | 'audio' | 'document_region'
    - `conversationId` string
    - `episodeId` string
    - `excerpt` string
    - `fragmentId` string
    - `occurredAt` string
    - `sceneId` string
    - `span` object
      - `end` number, required
      - `exact` string, required
      - `start` number, required
  - `reason` 'no_results' | 'no_grounded_evidence' | 'low_coverage' | 'evidence_capability_unmet' | 'ungrounded_evidence' | 'verifier_failed' | 'verifier_partial' | 'generator_error' | 'verifier_error'
  - `results` SearchHit[], required
    - `canonicalName` string, required
    - `entityId` string, required
    - `entityType` string, required
    - `externalRefs` object, required
    - `facts` SearchFact[], required
      - `breakdown` ScoreBreakdown
      - `confidence` number, required
      - `date` string
      - `expectedUntil` string
      - `factId` string, required
      - `highlight` string
      - `mentionedAt` string
      - `object` string, required
      - `predicate` string, required
      - `predicateAlias` string
      - `scene` string
      - `score` number, required
      - `sourceKey` string
      - `status` string, required
      - `validFrom` string, required
      - `validUntil` string
    - `relations` object[]
      - `direction` 'out' | 'in'
      - `edgeId` string
      - `kind` string, required
      - `peer` string, required
      - `peerId` string
      - `peerType` string, required
      - `validFrom` string
      - `validUntil` string
    - `score` number, required
  - `tokenUsage` TokenUsage
    - `completionTokens` number, required
    - `promptTokens` number, required

## Other responses

- `400`: Validation failed.
- `401`: Missing or unknown bearer key.
- `403`: The key lacks the required scope.
- `429`: Per-credential throttle exceeded.

---

[API](https://skmtc.dev/inite/apis/inite-brain-platform-api.md) · [All operations](https://skmtc.dev/inite/apis/inite-brain-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/inite/apis/inite-brain-platform-api/revisions/c7c3eb5e304b?raw)
