Documentation
Sign inGet started

Call log

The call log under Voice > Calls lists every call your workspace attempted, newest first. Each entry is a call detail record (CDR), including calls that connected, rang out, or were refused. Use it to inspect duration, the final SIP response, and cost.
Bird writes each record when the call ends, so every call in the log has a final outcome. The Live tab beside it holds the calls that are still up.

The call list

Each row is one call:
ColumnWhat it shows
StatusHow the call ended (see Statuses)
FromThe calling number, the caller ID your equipment presented
ToThe number that was called
DirectionOutbound, for the calls your equipment placed
DurationTotal length of the call, from the moment Bird received it to hangup
StartedWhen Bird received the call
The list is paginated, 25 calls per page. Select any row to open the call.

Live calls

The Live tab lists the calls on your trunks right now, and carries a count so you can see how many are up without opening it. A live call holds one of two statuses:
StatusWhat is happening
RingingThe call reached a carrier, and the number you called has not picked up yet
In progressThe number you called picked up, and the call is connected
The columns match the call log except for Elapsed, which replaces Duration. It counts from the answer for a connected call and from the start for a ringing call. The tab refreshes every few seconds. When a call ends, it moves to the call log with its final outcome.

Searching and filtering

The page leads with a number search and its filters. They combine: a status filter plus a date range narrows to the calls matching both.
Search by number. The search box matches a number against either side of the call, so one query finds the calls to it and the calls from it.
Direction. Filter to outbound or inbound calls.
Status. Filter to one of answered, no answer, failed, rejected, or unknown. Each is defined in Statuses. On the Live tab the choices are ringing and in progress.
Date. On the call log, pick a preset (the last 24 hours, 7 days, or 30 days) or choose a custom range on the calendar.

Usage this month

The monthly summary contains three tiles for the current calendar month in UTC:
TileWhat it counts
CallsCompleted call records in the month, including unanswered and refused ones
Total durationEvery call's full length added up, from the moment Bird received it to hangup
Billable timeEvery call's answered time added up
The difference between total duration and billable time is unanswered ring time. An unanswered call has no billable time.
Each destination rate rounds billable time to its billing increment. See Cost and billing for pricing details.
These tiles cover the whole month whatever you filter the list to.

Statuses

A call in the log ended with one of these outcomes:
StatusWhat happened
AnsweredThe number you called picked up. Billable time is answer to hangup
No answerThe call reached the number you called and rang out without being answered
FailedThe call did not complete. Either a carrier failed it, or Bird refused it before dialing one
RejectedThe carrier declined the call outright rather than failing it
UnknownThe outcome could not be determined, for example when no final response ever arrived
A busy number is recorded as Failed with carrier response 486. A call Bird refused is also Failed, but includes a rejection reason that identifies the failed check. See Rejected calls for the reasons and resolutions.
If you read these values from your own tooling, match the ones you handle and treat any other as a status you do not handle rather than an error.

Inspecting a call

Opening a call shows what Bird recorded about it:
FieldWhat it tells you
StatusThe call's outcome (see Statuses). A refused call also shows the reason and what to do about it
SIP responseThe call's final SIP code, for example 200 or 486. A call Bird refused carries 503, with no carrier involved
From / ToBoth numbers, each copyable
TrunkWhich SIP trunk the call came in on, useful when several sites share a workspace
StartedWhen Bird received the call
AnsweredWhen the call was picked up, or Not answered
EndedWhen the call was torn down
Call IDThe record's own id (vcl_…). Quote this to support, and use it to correlate with your own logs
Session IDShared by every leg of a transferred or multi-party call (vcs_…), so related records can be grouped
BillingBillable time, total duration, and the call's cost once it has been rated

Rejected calls

Before dialing a carrier, Bird checks the caller ID, destination, account limits, and wallet balance. Bird refuses a call that fails one of these checks.
Your phone system receives SIP 503, while the authenticated call record stores the specific reason. This prevents unauthenticated callers from learning account details. Open the call to see the cause and a link to the relevant setting.

Reasons you can fix

ReasonWhat happenedWhat to do
source_not_allowedThe call arrived from an address the trunk's IP allow list does not coverAdd the address your phone system sends from to the trunk
caller_id_not_verifiedThe number in the From header is not a verified caller ID for this workspaceVerify that number, or present one already verified
destination_not_enabledCalling to that country is switched off for your workspaceTurn the country on under Destinations
insufficient_balanceYour wallet did not cover the call, so Bird refused it up frontTop up, or turn on automatic top-ups so a low balance does not interrupt calling
daily_spend_exceededThe call would have passed your organization's daily voice spend ceilingWait for the ceiling to reset at the start of the next UTC day, or ask Bird to raise it
concurrent_calls_exceededYou have as many calls in progress as your account allowsWait for a call to end, or contact support to raise the ceiling
calls_per_second_exceededYou placed new calls faster than your account allowsSlow your dial rate, then retry. Retrying immediately gets the same answer
A campaign dialer can hit calls_per_second_exceeded while nowhere near the concurrent-call ceiling, so check which of the two you got before changing anything.

Reasons Bird resolves for you

These sit on Bird's side of the setup. Contact support and quote the Call ID from the record:
ReasonWhat happened
routing_not_configuredYour workspace's routing is still being attached, which is expected while a new voice setup is being completed
no_route_foundRouting is attached, but it does not cover the number you dialed. Contact support with the call ID to check the route
destination_blockedBird's routing configuration blocks calls to that destination
call_not_permittedBird could not complete the call for your account, so it refused the call rather than place it on unknown terms

How a refusal reads

A refused call and a carrier failure both use the Failed status. Only a Bird refusal includes a rejection reason:
  • Failed with a rejection reason. Bird refused the call, and the reason identifies the failed check. The SIP response is the 503 your phone system received.
  • Failed without a rejection reason. The call reached a carrier, and SIP response contains the carrier's code. A 486 means busy, while 404 means the number is unallocated.
Check for a rejection reason first. If one exists, follow its account or routing resolution. Without one, investigate the destination and carrier response.
The Rejected status means the carrier declined the call outright.
A call Bird cannot admit at all is turned away before a record exists, so it never reaches the log. Voice troubleshooting covers those calls.

Getting the records out

Four ways to work with these records outside the dashboard:
  • Export CSV. Download CSV on the Call log tab exports every record matching your current filters across all pages. Use it for reconciliation and ad-hoc reporting.
  • Read them over the API. GET /v1/voice/calls returns the filtered list, and GET /v1/voice/calls/{call_id} returns one record. Both require an API key with the voice scope at read level. Trunk, caller ID, and destination settings are not part of the public API.
  • Read them from the terminal. The Bird CLI provides bird voice list, bird voice get, and bird voice stats. The MCP server exposes the same reads to agents.
  • Subscribe to the events. voice_call.initiated, voice_call.answered, and voice_call.ended are pushed to your endpoint as calls happen, so your own systems stay current without polling. See Voice events.

Next steps

PageWhat it covers
Voice eventsThe three call events, their payloads, and how to consume them
Placing callsWhat Bird expects on the INVITE, and how a call is priced
SIP trunksThe IP allow list, allowed API keys, and Digest settings
Voice destinationsEnabling countries, and what availability means
ErrorsThe API error envelope and its recovery fields