---
title: "Run the hosted demo agent and get a scored result (~60s, zero carrier cost)"
method: POST
path: "/api/tests/demo"
tags: ["Testing"]
---

# Run the hosted demo agent and get a scored result (~60s, zero carrier cost)

`POST /api/tests/demo`

## Request

- Base URL: `https://api.wordis-bond.com`
- URL: `https://api.wordis-bond.com/api/tests/demo`
- Auth: HTTP bearer

Runs the canonical demo scenario against the hosted demo agent (a dental front desk) and returns a completed, fully-scored run — so you get a real scorecard without owning an agent yet. Direct transport only; not metered against call minutes. The response also includes a shareable public report URL.

## Request body

- object
  - `persona` object: Override the synthetic caller persona.
    - `description` string
  - `goal` string: Override what the caller is trying to accomplish.
  - `language` string
  - `expected` string[]: Expected agent lines to pin for word-error-rate scoring.
  - `bargeIn` boolean: Inject one caller-initiated barge-in.

## Response `201`

Completed, scored demo run

- object
  - `data` object, required
    - `id` string, uuid, required
    - `accountId` string, uuid
    - `suiteId` string, uuid, nullable
    - `status` 'queued' | 'running' | 'completed' | 'failed', required
    - `transport` string
    - `language` string
    - `persona` object, nullable
    - `targetAgent` TargetAgent: The voice agent under test (a system YOU control). `direct` = SIP/WebRTC (near-zero cost, all plans); `pstn` = a real carrier call (pro+). The hosted demo target is `{transport:"direct", peerId:"wb-demo-dental"}`.
      - `transport` 'pstn' | 'webrtc' | 'direct' | 'sip', required
      - `toNumber` string: E.164 number to dial (required for a pstn target).
      - `peerId` string: Hosted-agent id (e.g. "wb-demo-dental"), a direct peer label, or — for a `sip` target — the SIP URI.
      - `sipUri` string: For a `sip` target: the agent SIP URI (`sip:` / `sips:`).
    - `score` integer, nullable
    - `passed` boolean, nullable
    - `scorecard` Scorecard: The judged result. `score` is the 0–100 overall; `layers` carry per-dimension detail.
      - `score` number, required
      - `passed` boolean, required
      - `summary` string
      - `sentiment` number
      - `taskCompletion` number
      - `layers` object[]
        - `name` string
        - `score` number
        - `passed` boolean
        - `rationale` string
        - `assertions` object[]
    - `metrics` RunMetrics
      - `latencyMs` object
        - `p50` number
        - `p95` number
        - `max` number
      - `wer` number, nullable: Script-adherence error across pinned scenario wording, or null if nothing was pinned. This is not transcription word-error rate unless a caller supplies an STT reference transcript.
      - `bargeInCount` integer
      - `turnCount` integer
      - `taskCompletion` number
      - `sentiment` number
    - `transcript` string, nullable
    - `recordingUrl` string, nullable: BYOS recording pointer — a URL into YOUR OWN storage when the run recorded (never wordis-bond storage). Null unless the run opted in with `record: true`. See metrics.recording for the tee state (stored/truncated/failed).
    - `mediaWebSocketUrl` string: Only on a live `direct` run — the tokenized WS your agent-side harness dials.
    - `startedAt` string, date-time, nullable
    - `endedAt` string, date-time, nullable
    - `createdAt` string, date-time
    - `peerId` string
    - `reportUrl` string, uri
  - `error` union, required
    - object
    - string

## Other responses

- `401`: Missing, invalid, or revoked credentials.
- `429`: DEMO_LIMIT: the account used its demo runs for the rolling 24 h (3 unverified, 20 verified email). `Retry-After` is the seconds until the oldest counted run is 24 h old. Unverified accounts also get `nextAction: "verify_email"` and `resendPath`. A per-minute RATE_LIMITED 429 is also possible.
- `503`: DEMO_PAUSED: the operator has paused the hosted demo for a while. `Retry-After` is in seconds. GET /health shows `demo: "paused"` while it lasts.

---

[API](https://skmtc.dev/wordis-bond/apis/word-is-bond-voice-agent-testing-api.md) · [All operations](https://skmtc.dev/wordis-bond/apis/word-is-bond-voice-agent-testing-api/llms.txt) · [OpenAPI document](https://skmtc.dev/wordis-bond/apis/word-is-bond-voice-agent-testing-api/revisions/66c2d5480d84?raw)
