---
title: "Register a pilot PBX; returns pbx_id + API key once (hashed at rest). ≤5/hour/IP → 429. Idle $0."
method: POST
path: "/v1/pbx/register"
tags: ["PBX Search"]
---

# Register a pilot PBX; returns pbx_id + API key once (hashed at rest). ≤5/hour/IP → 429. Idle $0.

`POST /v1/pbx/register`

## Request

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

Control-plane register. API key shown once; stored hashed at rest. Send x-temsor-pbx-key to scope GET /v1/pbx/promises to this pbx_id. No speech recognition while idle.

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

## Request body

- object
  - `pbx_id` string: Pilot PBX id; auto-minted if omitted.
  - `label` string: Human label, e.g. hotel or PBX/IT provider site.
  - `ari_webhook_secret` string: ARI webhook signing secret (stored as hint only).
  - `name` string: Pilot contact name (waitlist / register).
  - `email` string, email: Pilot contact email.
  - `webhook_url` string, uri: Optional outbound webhook URL — Temsor POSTs promise/fact/orchestra/redact events.
  - `webhook_secret` string: Optional HMAC secret for outbound webhook signatures (x-temsor-signature).
  - `webhook_events` union: Event list or comma string: promise.opened|closed, fact.extracted, orchestra.act, redact, or *.
    - string[]
    - string

## Response `200`

Success

- object
  - `ok` unknown, required
  - `data` object, required
    - `pbx_id` string, required
    - `label` string, required
    - `ari_webhook_secret_hint` string, required
    - `registered_at` string, required
    - `idle` true, required
    - `api_key_prefix` string, required
    - `api_key` string, nullable, required: Plaintext key — only when created=true; hashed at rest under /data.
    - `created` boolean, required
    - `contact_name` string, nullable, required
    - `contact_email` string, nullable, required
    - `webhook` object, nullable, required
      - `id` string, required
      - `url` string, required
      - `secret_hint` string, required
      - `events` string[], 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)
