---
title: "Upsert mid-call partial index (utterances → fact/promise hints). Path to ≤400ms whisper; ≤600/hour/key → 429; idle $0."
method: GET
path: "/v1/pbx/index/partial"
tags: ["PBX Search"]
---

# Upsert mid-call partial index (utterances → fact/promise hints). Path to ≤400ms whisper; ≤600/hour/key → 429; idle $0.

`GET /v1/pbx/index/partial`

## Request

- Base URL: `https://api.temsor.com`
- URL: `https://api.temsor.com/v1/pbx/index/partial`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

POST /v1/pbx/index/partial {call_id, text?, speaker?, t_ms?, is_final?, live?, end_call?, promote?}. Streams partial STT queue into accumulating Fact/Promise hints while the call is live. No Temsor STT/LLM — customer posts text. Managed SaaS in-call index; no DID sales. Own PBX optional footnote. Idle $0.

**Credits per call:** 1 · **Operation id:** `pbx_index_partial`

In the GET form every field is a query parameter; object and array fields are JSON-encoded.

## Query parameters

- `call_id` string, required: Live call id to upsert partial index for.
- `text` string: Partial utterance / snippet (customer STT or demo). Empty = metadata-only.
- `speaker` string, nullable
- `t_ms` integer, nullable
- `is_final` boolean: Finalized utterance span (vs interim).
- `live` boolean: Default true while call is live.
- `end_call` boolean: Mark live=false; idle $0 for this call.
- `promote` boolean: Promote heuristic hints into durable Promise/Fact docs.
- `pbx_id` string

## Response `200`

Success

- object
  - `ok` unknown, required
  - `data` object, required
    - `call_id` string, required
    - `pbx_id` string, required
    - `live` boolean, required
    - `utterance_count` integer, required
    - `promise_hint_count` integer, required
    - `fact_hint_count` integer, required
    - `utterance` object, nullable, required
      - `id` string, required
      - `t_ms` number, nullable, required
      - `speaker` string, nullable, required
      - `text` string, required
      - `is_final` boolean, required
      - `at` string, required
    - `index` object, required
      - `call_id` string, required
      - `pbx_id` string, required
      - `live` boolean, required
      - `started_at` string, required
      - `updated_at` string, required
      - `ended_at` string, nullable, required
      - `utterances` object[], required
        - `id` string, required
        - `t_ms` number, nullable, required
        - `speaker` string, nullable, required
        - `text` string, required
        - `is_final` boolean, required
        - `at` string, required
      - `promises` object[], required
        - `id` string, required
        - `text` string, required
        - `who` string, nullable, required
        - `markers` string[], required
        - `confidence` string, required
      - `facts` object[], required
        - `id` string, required
        - `kind` string, required
        - `value` string, required
        - `t_ms` number, nullable, required
      - `snippet` string, required
    - `promoted` object, required
      - `promises` integer, required
      - `facts` integer, required
    - `latency_ms` integer, required
    - `note` string, required
  - `meta` object
    - `credits` integer
    - `cached` boolean
    - `requestId` string
    - `durationMs` integer

## Other responses

- `400`: Error
- `401`: Error
- `402`: Error
- `429`: Rate limit exceeded — wait `Retry-After` seconds. The RateLimit headers are sent here too.

---

[API](https://skmtc.dev/temsor/apis/temsor-api.md) · [All operations](https://skmtc.dev/temsor/apis/temsor-api/llms.txt) · [OpenAPI document](https://skmtc.dev/temsor/apis/temsor-api/revisions/19702107e15a?raw)
