---
title: "Ingest call-ops events → open promises + transfer crumbs for search/orchestration. Optional HMAC. Idle $0 when no calls."
method: POST
path: "/v1/pbx/events"
tags: ["PBX Search"]
---

# Ingest call-ops events → open promises + transfer crumbs for search/orchestration. Optional HMAC. Idle $0 when no calls.

`POST /v1/pbx/events`

## Request

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

Demo stores events in memory/file. Auth: omit, x-temsor-pbx-key, or x-temsor-signature = hex(HMAC-SHA256(api_key, body)); bad signature rejected when header present. BridgeEnter → transfer/handoff crumbs. Utterance/text → open Promise docs via heuristic (no LLM). Idle $0. Body ≤256 KiB → 429. Advanced: ARI/Stasis batch shape when customer runs own PBX — not Asterisk-first product copy.

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

## Request body

- object
  - `pbx_id` string: PBX id that emitted the ARI batch.
  - `events` object[], required: ARI / Stasis event batch. Utterance/text fields trigger heuristic promise extract.

## Response `200`

Success

- object
  - `ok` unknown, required
  - `data` object, required
    - `accepted` integer, required
    - `stored` integer, required
    - `promises_created` integer, required
    - `transfers_created` integer, required
    - `pbx_id` string, nullable, 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)
