# Chambr API

Send finished sales calls from Salesforce, middleware or your own systems to
Chambr. Chambr scores them against your scorecards.

- You send the transcript. Chambr does not transcribe audio; a
  [recording](https://developers.staging.chambr.ai/guides/recordings.md) is for playback only.
- The API returns an id, a status and an `app_url`. It never returns scores:
  people view results in Chambr.

**Base URL:** `https://api.staging.chambr.ai/v1` (alias
`https://app.staging.chambr.ai/api/v1`, identical). The
[OpenAPI document](https://api.staging.chambr.ai/v1/openapi.json) is the full contract.

## Before you start

| Check | Where |
|---|---|
| Real Call Scoring is enabled for your account | Ask your Chambr contact |
| The team has a default scorecard or a scorecard rule | Real Call Scoring, Scorecard rules |
| Reps have signed in to Chambr at least once | Chambr |
| An admin can create an API key | [API keys and authentication](https://developers.staging.chambr.ai/authentication.md) |

There is no test mode. Every call you send is a real call in your account. A
manager removes a test call in Chambr: open the call, then **Remove call**.

## Quickstart

Send a call without a rep. Chambr files it under the API key's team.

```bash
export CHAMBR_API=https://api.staging.chambr.ai/v1
export CHAMBR_KEY=chambr_sk_...

curl -sS --max-time 60 "$CHAMBR_API/calls" \
  -H "Authorization: Bearer $CHAMBR_KEY" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{
  "external_id": "quickstart-001",
  "provider": "quickstart",
  "occurred_at": "2026-09-28T15:02:14Z",
  "call_type": "discovery",
  "transcript": {
    "rep_speaker": "Sarah",
    "segments": [
      { "speaker": "Dana", "text": "Morning. I have about twenty minutes." },
      { "speaker": "Sarah", "text": "Understood, I will keep it tight. What prompted the call?" },
      { "speaker": "Dana", "text": "Our carrier costs went up twelve percent this quarter." },
      { "speaker": "Sarah", "text": "Which lanes are hurting the most?" },
      { "speaker": "Dana", "text": "Mostly the Midwest runs into Chicago." },
      { "speaker": "Sarah", "text": "Could we look at your last three months of those lanes together next week?" }
    ]
  }
}
JSON
```

Chambr returns **202**:

```json
{
  "id": "6f1c2b0e-8a4d-4c1e-9d55-0d6c7b1e2a90",
  "object": "call",
  "external_id": "quickstart-001",
  "provider": "quickstart",
  "status": "queued",
  "created": true,
  "attribution": { "rep_source": "api_key_owner", "speaker_source": "rep_speaker" },
  "recording_attached": false,
  "app_url": "https://app.staging.chambr.ai/t/3a1d9c52-.../real-calls/6f1c2b0e-..."
}
```

Check its status. Scoring takes minutes.

```bash
curl -sS "$CHAMBR_API/calls/6f1c2b0e-8a4d-4c1e-9d55-0d6c7b1e2a90" \
  -H "Authorization: Bearer $CHAMBR_KEY"
```

```json
{
  "id": "6f1c2b0e-8a4d-4c1e-9d55-0d6c7b1e2a90",
  "object": "call",
  "external_id": "quickstart-001",
  "provider": "quickstart",
  "status": "scored",
  "skip_reason": null,
  "rep": { "email": "admin@yourcompany.com" },
  "call_type": "discovery",
  "has_recording": false,
  "attribution": { "rep_source": "api_key_owner", "speaker_source": "rep_speaker" },
  "occurred_at": "2026-09-28T15:02:14.000Z",
  "created_at": "2026-09-28T15:40:02.000Z",
  "app_url": "https://app.staging.chambr.ai/t/3a1d9c52-.../real-calls/6f1c2b0e-..."
}
```

Running the same request again returns **200** with the same `id`. See
[Idempotency](https://developers.staging.chambr.ai/idempotency.md).

## Next steps

- [Send calls](https://developers.staging.chambr.ai/guides/send-calls.md): every field, and how Chambr finds the rep.
- [Salesforce](https://developers.staging.chambr.ai/guides/salesforce.md): send calls from Apex.
- [Errors](https://developers.staging.chambr.ai/errors.md) and [Rate limits and retries](https://developers.staging.chambr.ai/rate-limits.md).
