---
title: "Mark an open promise kept or broken with an optional privacy-safe note — makes the sales demo writable, not read-only. ≤60/hour/key → 429."
method: POST
path: "/v1/pbx/promises/close"
tags: ["PBX Search"]
---

# Mark an open promise kept or broken with an optional privacy-safe note — makes the sales demo writable, not read-only. ≤60/hour/key → 429.

`POST /v1/pbx/promises/close`

## Request

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

POST /v1/pbx/promises/close {promise_id, status:kept|broken, note?}. Phones/emails in note are scrubbed. Scoped by x-temsor-pbx-key when set. Idle $0 — no LLM/PSTN.

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

## Request body

- object
  - `promise_id` string, required: Promise id (prm_*). Sales demo marks open promises kept|broken.
  - `status` 'kept' | 'broken', required: Close outcome: kept (honoured) or broken (not kept).
  - `note` string: Optional short operator note. Phones/emails stripped (privacy-safe).

## Response `200`

Success

- object
  - `ok` unknown, required
  - `data` object, required
    - `applied` boolean, required
    - `promise_id` string, required
    - `previous_status` 'open' | 'kept' | 'broken' | 'unknown', nullable, required
    - `status` 'open' | 'kept' | 'broken' | 'unknown', nullable, required
    - `closed_at` string, nullable, required
    - `close_note` string, nullable, required
    - `promise` object, nullable, 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
      - `markers` string[]
      - `confidence` string
      - `closed_at` string, nullable
      - `close_note` string, nullable
    - `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)
