These are two separate features, and either may not be available for your workspace yet. Contact Pineyard to enable
them.
- Round-robin transfer. When it’s off, the dashboard doesn’t offer Round robin, the API refuses
transferMode: "ROUND_ROBIN"with400 transfer_round_robin_unavailable, and the transfer-list endpoints answer404 not_found. - Missed transfers and team conversations. When it’s off, the dashboard has no Missed transfers filter,
GET /calls?transfer=…answers400 transfer_filter_unavailable, and calls carry notransferorhumanLegfields.
How round robin works
- During a call, the caller asks for a person.
- Pineyard picks the next active number on the agent’s list and transfers the call to it. Each transfer moves one place along the list, whoever answered last time. Numbers that are switched off, and numbers already on the call, are skipped.
- The call goes to the agent’s fallback number instead when the list has no usable number, when Pineyard can’t pick one in time, or when your workspace is suspended. Without a fallback number, the transfer can’t complete and the call continues with the AI.
How missed transfers work
Pineyard tracks transfers made in round robin and webhook mode (see Call transfer by webhook), not transfers to a single static number. Tracking isn’t available on every phone number yet: a transfer Pineyard can’t follow stays Waiting for result (PENDING). Ask
Pineyard which of your numbers are covered. Once the call ends, a tracked transfer gets one of these results:
- Not picked up, busy, or couldn’t connect. You get a Missed transfer notification in the dashboard, and the call is listed under Calls → Missed transfers. A clear miss is reported once the network reports that the call ended, usually within a few minutes. When Pineyard has to listen to the call to tell, for example because a voicemail answered, it can take a few minutes longer.
- Picked up. The call page shows Conversation with your team, with the recording and transcript of that part of the call.
- Needs review. When Pineyard can’t tell, the call is listed under Needs review instead of being guessed.
Set up the list
In the dashboard
Open the agent, go to Abilities → Transfer to a human, and set Transfer to to Round robin. Add each team member’s name and number, put them in the order you want, and switch a number off while that person is away. You can also paste or upload a CSV with onename,number per line. Set a Fallback number so callers still reach someone
when nobody on the list is available.
With the API
Read the list withGET /agents/{id}/transfer-targets (scope agents.view). Replace it with
PUT /agents/{id}/transfer-targets (scope agents.edit). The order of the array is the rotation order. Rows you
leave out are removed. Past calls keep the name and number they were transferred to.
Both endpoints answer with the stored list.
PUT can also return a warnings array (see below):
PATCH /agents/{id} (scope
agents.edit). In ROUND_ROBIN mode, transferNumber is the optional fallback number:
PUT) carries a warnings entry with code
transfer_round_robin_no_fallback: callers asking for a person would reach nobody. While round-robin transfer is
enabled for your workspace, GET /agents and GET /agents/{id} include transferTargetCount, the number of active
numbers on the list; the field is left out when it isn’t. Duplicating an agent copies its list on a best-effort basis:
if the copy of the list fails, the duplicate is still created, with an empty list to fill in.
Errors:
Find missed transfers
GET /calls?transfer=missed lists transferred calls nobody picked up, newest transfer first (scope calls.view).
transfer=needs_review lists the ones Pineyard couldn’t decide, and transfer=transferred lists every tracked transfer.
Any other value is refused with 400 invalid_transfer_filter. Each call in the list carries a transfer object:
{ status, targetLabel, targetNumber, transferredAt }.
GET /calls/{id} includes a humanLeg object on tracked transfers:
Fetch the recording with
GET /calls/{id}/human-leg/recording (scope calls.view). It returns { url, expiresAt }: a
link valid for 15 minutes. It answers 404 not_found when the call doesn’t exist or missed transfers aren’t enabled
for your workspace, and 404 no_recording when there’s no recording to serve, which includes a recording that exists
but can’t be served because recording storage isn’t configured for your workspace.
Testing
- Set a fallback number before going live.
- Make a few test calls, and ask the agent for a person each time. Each call should ring the next number on the list.
- On a number Pineyard tracks, leave one test transfer unanswered. It should appear under Missed transfers, with a notification, after the call ends.

