---
title: "Heuristic promise extractor from transcript text — creates open Promise docs (idle $0, no LLM)."
method: GET
path: "/v1/pbx/ingest/transcript"
tags: ["PBX Search"]
---

# Heuristic promise extractor from transcript text — creates open Promise docs (idle $0, no LLM).

`GET /v1/pbx/ingest/transcript`

## Request

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

Detects promise-like sentences (we will, I promise, refund, cancel, call you back, tomorrow…). Optional persist_promises=false for extract without writing. Also wired via utterance text on POST /v1/pbx/events.

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

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

## Query parameters

- `transcript` string, required: TR utterance / transcript text to scan for promises.
- `call_id` string
- `pbx_id` string
- `who` string
- `ext` string
- `persist_promises` boolean: When false, extract only (dry-run, no write). When true, create Promise docs status=open.

## Response `200`

Success

- object
  - `ok` unknown, required
  - `data` object, required
    - `call_id` string, required
    - `pbx_id` string, required
    - `extracted` object[], required
      - `text` string, required
      - `who` string, nullable, required
      - `when_hint` string, nullable, required
      - `markers` string[], required
      - `confidence` 'high' | 'medium' | 'low', required
      - `sentence_index` integer, required
    - `facts` object[], required
      - `kind` 'imei' | 'tarife' | 'oda' | 'oda_tipi' | 'klima' | 'check_out' | 'iade' | 'sku' | 'police' | 'hasar' | 'yenileme' | 'abone' | 'kesinti' | 'fatura' | 'kart' | 'iban' | 'sube' | 'other', required
      - `value` string, required
      - `t_ms` number, nullable, required
      - `dict_id` string
    - `promises_created` integer, required
    - `promises` object[], required
      - `id` string, required
      - `call_id` string, required
      - `text` string, required
      - `who` string, required
      - `when_iso` string, nullable, required
      - `status` 'open' | 'kept' | 'broken' | 'unknown', required
      - `ext` string, nullable, required
      - `pbx_id` string, required
      - `markers` string[]
      - `confidence` string
    - `persisted` boolean, required
    - `note` string, required
    - `ai_ozet` object, nullable
      - `ozet` string, required
      - `duygu` 'olumlu' | 'notr' | 'olumsuz', required
      - `puan` integer, required
      - `model` string, required
    - `ai_ozet_durum` 'kapali' | 'dusuldu' | 'dusulemedi' | 'uretilemedi'
  - `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)
