# Real-time and streaming (/docs/api-reference/realtime)

> How real-time data flows in OmniDimension. Streaming voice on live calls, webhook event delivery for call results, and live status polling for bulk campaigns.

OmniDimension is a real-time product at the voice layer and an
event-driven product at the API layer. This page maps each real-time
need to the right mechanism.

## Streaming voice on live calls [#streaming-voice-on-live-calls]

Every call runs on a streaming pipeline: caller audio is streamed to
speech-to-text, the LLM response is generated and streamed to
text-to-speech, and synthesized audio streams back over the call, with
sub-200ms end-to-end latency. The same streaming pipeline powers phone
calls, the web voice widget, and WhatsApp voice.

You do not manage this stream yourself. Dispatch a call with the API,
SDK, or MCP server and the platform handles the audio streaming.

The same applies to the embeddable web voice widget: it streams audio
between the visitor's browser and the agent in real time, and agents
can run live web search inside a conversation when enabled, so answers
can include current information mid-call.

## Live call monitoring [#live-call-monitoring]

The dashboard streams active calls in real time: watch conversations as
they happen across your agents. This is a dashboard surface (backed by
a WebSocket service), not a public API; for programmatic visibility
into running activity, use the bulk-call live status endpoint below or
fetch call logs after completion.

## Webhooks: push delivery for call events [#webhooks-push-delivery-for-call-events]

For machine-to-machine delivery of call results, use webhooks. When a
call completes, OmniDimension POSTs your configured payload to your
endpoint: transcript, summary, sentiment, extracted variables, and the
recording URL.

* Setup guide: [Post-call delivery](/docs/dashboard-guides/post-call)
* Configure under **Post call** on your agent: choose Webhook, paste
  your endpoint URL, and define a custom payload with call variables.
* Test with Webhook.site or RequestBin to inspect real payloads before
  pointing at production.

Webhooks are the recommended pattern for agents and integrations that
need results as soon as a call ends, instead of polling call logs.

Webhook is one of several post-call delivery channels: the same
completion event can also be delivered to Email, Salesforce, Slack,
HubSpot, or WhatsApp Cloud, configured per agent.

## Polling: live status for bulk campaigns [#polling-live-status-for-bulk-campaigns]

Running campaigns expose a lightweight live status endpoint designed
for repeated polling. It returns aggregated counts in one cheap query:

```bash
curl https://backend.omnidim.io/api/v1/bulk-call/{bulk_call_id}/live-status \
  -H "Authorization: Bearer $OMNIDIM_API_KEY"
```

```json
{
  "status": "success",
  "bulk_call_id": 42,
  "campaign_status": "in_progress",
  "summary": {
    "total_contacts": 500,
    "queued": 120,
    "in_progress": 8,
    "completed": 350,
    "failed": 12,
    "busy": 6,
    "no_answer": 4
  }
}
```

Poll every few seconds while a campaign runs. For individual call
results, prefer webhooks over polling call logs.

## Server-sent events (SSE) [#server-sent-events-sse]

The REST API does not currently expose SSE or chunked streaming
responses; API responses are standard JSON. Real-time delivery is
covered by the mechanisms above: streaming voice inside calls, webhook
push for call events, and the live-status polling endpoint for
campaigns. If your use case needs SSE specifically,
[contact us](https://omnidim.io/contact-us).

## Service status [#service-status]

Live availability for the API, omnidim.io, SIP infrastructure, and the
MCP server: [status.omnidim.io](https://status.omnidim.io). Agents can
read it as JSON:
`https://status.omnidim.io/api/status-page/heartbeat/all` (heartbeats
and uptime per service).

## Choosing the right mechanism [#choosing-the-right-mechanism]

| You need                               | Use                                                                      |
| -------------------------------------- | ------------------------------------------------------------------------ |
| Live conversation with a caller        | Dispatch a call; voice streaming is built in                             |
| Live conversation on your website      | Embed the web voice widget                                               |
| Watch active calls as they happen      | Live call monitoring in the dashboard                                    |
| Call results pushed to your system     | Post-call webhook (or Email, Salesforce, Slack, HubSpot, WhatsApp Cloud) |
| Campaign progress for a dashboard      | Bulk call live-status polling                                            |
| Individual call details after the fact | Call logs API                                                            |
| Platform availability                  | status.omnidim.io, JSON at /api/status-page/heartbeat/all                |