---
title: "Placing calls"
description: "What has to be true before your first outbound call, what Bird expects on the SIP INVITE, how the Digest handshake works, and how a call is priced."
canonical: "https://bird.com/docs/guides/voice/placing-calls"
---

# Placing calls

Your PBX sends a SIP `INVITE` to the trunk's SIP domain to place a call. Bird checks the request, routes it to a carrier, and relays the audio. This page covers the prerequisites, request fields, authentication, and cost.

To start a call from your application over HTTP, use the [Create Call guide](/docs/guides/voice/create-calls). That path runs a published Bird sequence after answer.

## Before you place a call

Four things have to be ready, in any order, and three of them are yours to set:

- **A trunk that accepts your traffic.** Create a [SIP trunk](/docs/guides/voice/sip-trunks) and [enable outbound calling](/docs/guides/voice/sip-trunks#call-direction). Add your equipment's IP ranges, an allowed API key, or both. Clients that cannot hold a long-lived secret can use a [session credential](/docs/guides/voice/sip-trunks#session-credentials).
- **An eligible caller ID.** Use a Bird number currently allocated to this workspace, or register an external number and complete its [verification call](/docs/guides/voice/caller-ids). Verification does not guarantee end-to-end delivery of the CLI or connection of the call where the CLI is not a number procured through Bird: see the [CLI verification and delivery disclaimer](/docs/guides/voice/caller-ids#cli-verification-and-delivery-disclaimer).
- **The destination country enabled.** Turn on the countries you serve on the [**Destinations**](https://bird.com/dashboard/w/voice/destinations) page.
- **Routing attached to your workspace.** Bird sets this up for you, choosing which carriers serve which destinations. Until it is in place, calls are refused with `routing_not_configured`, one of the reasons [Rejected calls](/docs/guides/voice/call-log#rejected-calls) covers.

## What Bird expects on the INVITE

Send the request to your trunk's SIP domain on one of its [supported ports](/docs/guides/voice/sip-trunks#connection-details). Two headers carry everything Bird needs:

| Header | What Bird does with it                                                                                                             |
| ------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| `To`   | The number being called. Bird reads its country to choose a carrier and to price the call                                          |
| `From` | The number you are presenting as the caller. It must be an eligible Bird number or a verified external caller ID in this workspace |

Use full international numbers in E.164 format, a leading `+` followed by the country code and national number, on both headers. That is the form Bird records on the call and the form its destination matching expects.

Beyond those two headers, this is an ordinary SIP call, with no custom headers either way.

## Authenticating each call

What a call goes through depends on how the trunk is opened:

- **IP allow list only.** One request. Bird matches the source address against the list and routes the call, with no challenge to answer.
- **Allowed API keys only.** Bird asks the call for a password first, through the SIP Digest exchange.
- **Both.** Calls using an allowed API key must also come from a listed address. Enabled session credentials provide the separate admission path described below.
- **[Session credentials](/docs/guides/voice/sip-trunks#session-credentials) on.** Bird challenges the call wherever it came from, even an address the allow list does not cover, and a credential it issued minutes earlier answers. Equipment already admitted by the allow list on a trunk with no allowed keys keeps connecting without a challenge.

Where the trunk has allowed API keys, your phone system answers with a hash of the API key secret rather than the secret itself, which is what SIP Digest authentication does:

1. Your PBX sends the `INVITE`.
2. Bird answers `407 Proxy Authentication Required` with one challenge line per algorithm the trunk offers, `SHA-256` then `MD5` by default.
3. Your PBX re-sends the `INVITE` with a `Proxy-Authorization` header computed with username `bird` and the API key's secret as the password.
4. Bird verifies the answer and continues routing.

A preemptive `Proxy-Authorization` header is sent before the challenge, so your equipment must choose an algorithm that [the trunk offers](/docs/guides/voice/sip-trunks#digest-algorithm). For API-key authentication, a trunk with an IP allow list still requires the request to come from a listed address.

Bird answers a failed handshake at the SIP layer, so the attempt is turned away before the platform creates a call record. If your calls are absent from the [Call log](/docs/guides/voice/call-log) entirely, look at the credentials rather than the routing.

## Call attestation

Calls to the United States and France carry STIR/SHAKEN attestation. Carriers use this signature when labeling calls. Bird applies level B by default without additional configuration. Contact support to request level A.

## When a call is refused

Bird checks the caller ID, destination, limits, and wallet balance before dialing a carrier. A refusal reaches your phone system as SIP `503`; the specific cause stays on the authenticated call record. Open the call in the [call log](/docs/guides/voice/call-log), or see [rejected calls](/docs/guides/voice/call-log#rejected-calls) for each reason and resolution.

Resolve the recorded cause before retrying. For example, `calls_per_second_exceeded` continues until you slow the dial rate.

## Emergency calls are not carried

**Bird Voice does not carry calls to emergency services.** A call to `112`, `911`, `999` or any other emergency number is refused, on every trunk, in every country. Your phone system must reach emergency services by another route.

This behavior does not depend on your plan, balance, or destinations. Configure your phone system to route emergency calls through a service that supports them, such as a local PSTN line, on-premises gateway, or another provider. Test that route. Bird returns `503` for a refused emergency call, allowing a phone system with another dial-plan route to try it.

Emergency services depend on the caller's registered location, which Bird does not store for a trunk. Do not rely on a Bird route for emergency calling.

## Cost and billing

Voice is prepaid from your organization's wallet, like the other channels:

- **Billable time runs from answer to end**, however long a call rang first. The call record shows it alongside **Total duration**, which runs from the moment Bird received the call.
- **The rate depends on the destination country.** Your rate card prices each country in the wallet's currency. A rate defines a minimum billed time and the increment used after that minimum. For example, a rate with a one-minute minimum and six-second increments bills a 10-second call as one minute.
- **The wallet is checked before the carrier is dialed.** A call your balance cannot cover is refused with `insufficient_balance` up front rather than billed to you afterwards. Keep a buffer, or turn on automatic top-ups.
- **A daily voice spend limit applies.** Past it, calls are refused with `daily_spend_exceeded` until the next UTC day starts. A workspace can also set a daily limit for each destination country under Voice → Destinations, and a call must fit both. The amount depends on your plan.
- **Cost appears on the call** once it has been rated, at full precision, net of tax.

To total spend across calls, export the filtered call list as CSV from the **Legs** page, or read your [invoices and usage](/docs/knowledge-base/billing/usage-and-invoices).

## Next steps

| Page                                                                            | What it covers                                                  |
| ------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| [Call log](/docs/guides/voice/call-log)                                         | Browsing, filtering, and exporting your call records            |
| [Voice events](/docs/guides/voice/events)                                       | Getting call outcomes pushed to your own systems                |
| [Payment methods & wallet](/docs/knowledge-base/billing/payment-methods-wallet) | Topping up, automatic top-ups, and how the wallet is drawn down |

## Related resources

- [What is a voice API?](/explained/voice/what-is-a-voice-api) (answer)
- [Voice](/voice-api) (product)
- [Voice overview](/docs/guides/voice/overview) (docs)

[Get an implementation brief](/learn/workspace?topic=voice)
