---
title: "Bridge two phone numbers (from_number ↔ destination)"
method: POST
path: "/v1/calls/dial"
tags: ["Calls"]
---

# Bridge two phone numbers (from_number ↔ destination)

`POST /v1/calls/dial`

## Request

- Base URL: `https://api.revdesk.com`
- URL: `https://api.revdesk.com/v1/calls/dial`
- Auth: HTTP bearer

Bridges two phone numbers into one call — your from_number and the destination. Because it rings two phones, it uses TWO concurrent channels. Pass connect_number to ring a separate phone for the human leg (e.g. an agent's own cell) while the destination still sees from_number; the connect_number is never shown to the destination. Supply from_number or number_set_id; exact from_number always wins when both are present. Number Sets use recipient-sticky selection among the healthiest eligible members. High-risk caller IDs return a health_warning without reputation-based blocking; inactive or technically unroutable exact numbers fail without fallback. Billing, wallet, concurrency, and contractual protections still apply. For 1-channel calls, use POST /v1/calls (AI outbound — the agent joins over the network) or the WebRTC token flow (a human joins in the browser). Returns immediately with call_id, resolved from_number, selection_source, evidence_state, health_warning, and recommended_action; poll GET /v1/calls/{id} or subscribe to webhooks for status. Demo keys must target an allowlisted destination.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `from_number` string: Exact owned caller ID in E.164. Wins when number_set_id is also supplied; never silently substituted.
  - `number_set_id` string: Resolve an outbound-enabled Number Set member when from_number is omitted. Supply at least one of from_number or number_set_id.
  - `to_number` string, required
  - `connect_number` string
  - `record` boolean, required
  - `amd` boolean, required
  - `client_name` string
  - `client_label` string

## Response `202`

Accepted for asynchronous processing

- object
  - `data` object, required
    - `call_id` string, required
    - `provider_call_sid` string, required
    - `from_number` string, required
    - `to_number` string, required
    - `status` string, required
    - `selection_source` 'exact_from_number' | 'number_set_sticky_health', required
    - `evidence_state` string, required
    - `health_warning` string, nullable, required
    - `recommended_action` string, required

## Other responses

- `400`: Validation error
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `409`: Conflict (incl. idempotency conflicts)
- `429`: Rate limited

---

[API](https://skmtc.dev/revdesk/apis/revdesk-v1-api.md) · [All operations](https://skmtc.dev/revdesk/apis/revdesk-v1-api/llms.txt) · [OpenAPI document](https://skmtc.dev/revdesk/apis/revdesk-v1-api/revisions/fcbd43530a48?raw)
