---
title: "Agent archive search over call promises and facts — voice-Google for call-ops, not a receptionist bot. Idle $0."
method: POST
path: "/v1/pbx/search"
tags: ["PBX Search"]
---

# Agent archive search over call promises and facts — voice-Google for call-ops, not a receptionist bot. Idle $0.

`POST /v1/pbx/search`

## Request

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

Demo index + domain dictionary v0. Filters: status, date, ext, competitor, stuck_after (transfer/handoff hop). Returns call-graph path + transfer edges for orchestration. Idle $0. No live PSTN.

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

## Request body

- object
  - `q` string: Full-text query over promises, facts, and call summaries.
  - `status` 'open' | 'kept' | 'broken' | 'unknown'
  - `ext` string
  - `competitor` string
  - `date_from` string: ISO date/time lower bound (promise.when_iso / call.started_at).
  - `date_to` string: ISO date/time upper bound.
  - `stuck_after` string: Filter: promise stuck after transfer to this extension (to_ext hop).

## Response `200`

Success

- object
  - `ok` unknown, required
  - `data` object, required
    - `q` string, required
    - `filters` object, required
    - `dict` object
      - `matched_entries` string[], required
      - `needles` string[], required
      - `crumbs` object[]
        - `entry_id` string, required
        - `term` string, required
        - `domain` 'otel' | 'santral_firmasi' | 'sigorta' | 'finans' | 'enerji' | 'otomotiv', required
        - `domain_en` 'hotel' | 'pbx_provider' | 'insurance' | 'finance' | 'energy' | 'automotive'
        - `domain_label_tr` string, required
        - `domain_label_en` string, required
        - `alias_hit` string, required
        - `boost` number, required
      - `boost` boolean
      - `label_tr` string, nullable
      - `label_en` string, nullable
    - `hits` object, 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
        - `competitor` string, nullable
        - `emotion` string, nullable
        - `transfer_count` integer, required
        - `graph` object, required
          - `call_id` string, required
          - `transfer_count` integer, required
          - `edges` object[], required
            - `from_ext` string, nullable, required
            - `to_ext` string, nullable, required
            - `t_ms` number, nullable, required
            - `reason` string, nullable, required
          - `path` string, required
          - `path_tr` string, required
          - `stuck_at_ext` string, nullable, required
          - `stuck_tr` string, nullable, required
        - `markers` string[]
        - `confidence` string
        - `dict_boost` boolean
        - `closed_at` string, nullable
        - `close_note` string, nullable
      - `calls` object[], required
        - `id` string, required
        - `started_at` string, required
        - `ended_at` string, nullable, required
        - `direction` 'in' | 'out', required
        - `trunk` string, required
        - `pbx_id` string, required
        - `summary` string
        - `transfer_count` integer, required
        - `graph` object, required
          - `call_id` string, required
          - `transfer_count` integer, required
          - `edges` object[], required
            - `from_ext` string, nullable, required
            - `to_ext` string, nullable, required
            - `t_ms` number, nullable, required
            - `reason` string, nullable, required
          - `path` string, required
          - `path_tr` string, required
          - `stuck_at_ext` string, nullable, required
          - `stuck_tr` string, nullable, required
      - `facts` object[], required
        - `id` string, required
        - `call_id` string, 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
        - `pbx_id` string, required
        - `transfer_count` integer, required
        - `graph` object
          - `call_id` string, required
          - `transfer_count` integer, required
          - `edges` object[], required
            - `from_ext` string, nullable, required
            - `to_ext` string, nullable, required
            - `t_ms` number, nullable, required
            - `reason` string, nullable, required
          - `path` string, required
          - `path_tr` string, required
          - `stuck_at_ext` string, nullable, required
          - `stuck_tr` string, nullable, required
    - `total` 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)
