Read one transfer of a Call with its context note
GET /v1/calls/{call_id}/transfers/{transfer_id}
| Property | Value |
|---|---|
| Operation | get_call_transfer |
| Group | Calls |
| Scope | transcripts:read |
| Route class | read |
| Idempotency | No Idempotency-Key |
| Audit | An audited content read call.transfer.read |
| Released in | 1.50.0 |
| Phase 0 host | Served (the hosted api pins 1.65.0) |
Answers one transfer attempt of a finalized Call (1.50.0, FR-telephony-6): its destination key, source, outcome and instants, and the context note the Agent wrote before the REFER. The note is content, redacted like the transcript's final text, so the route needs transcripts:read and every read is an audited content read. The transfer_id is the one the Call events of the transfer family carry; a transfer of a Call that is not finalized yet answers not_found.
Request
Set VOCAL_API to the base URL of your API and VOCAL_API_KEY to an API key with the transcripts:read scope (Authentication and keys). Replace each placeholder, such as agt_... or <name>, with your own value.
curl "$VOCAL_API/v1/calls/call_.../transfers/xfr_..." \
-H "Authorization: Bearer $VOCAL_API_KEY"const response = await fetch(`${process.env.VOCAL_API}/v1/calls/call_.../transfers/xfr_...`, {
headers: {
Authorization: `Bearer ${process.env.VOCAL_API_KEY}`,
},
});
console.log(response.status, await response.text());import os
import requests
response = requests.get(
f"{os.environ['VOCAL_API']}/v1/calls/call_.../transfers/xfr_...",
headers={
"Authorization": f"Bearer {os.environ['VOCAL_API_KEY']}",
},
)
print(response.status_code, response.text)Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
call_id | path | CallId | yes | The id of a Call: call_ and the row's UUIDv7 in 26 Crockford base32 characters. Opaque and safe to log. |
transfer_id | path | TransferId | yes | The id of one transfer attempt of a Call: xfr_ and the row's UUIDv7 in 26 Crockford base32 characters. Opaque and safe to log. |
Responses
| Status | Content type | Shape | Error codes |
|---|---|---|---|
200 | application/json | CallTransfer | |
400 | application/json | ErrorEnvelope | invalid_request |
401 | application/json | ErrorEnvelope | unauthenticated |
403 | application/json | ErrorEnvelope | forbidden |
404 | application/json | ErrorEnvelope | not_found |
429 | application/json | ErrorEnvelope | rate_limited |
500 | application/json | ErrorEnvelope | internal_error |
Fields of the 200 answer
The shape is CallTransfer.
| Field | Type | Required | Description |
|---|---|---|---|
call_id | CallId | yes | |
command_id | ControlCommandId or null | yes | The control command, for source control. |
context_note | string or null | yes | Why the caller was transferred and what was established, written by the Agent before the REFER (FR-telephony-6); null unless context_note_status is written. Content: redacted like the transcript's final text, encrypted at rest, and read only with transcripts:read as an audited content read. |
context_note_status | ContextNoteStatus | yes | |
destination | TransferDestinationKey | yes | |
ended_at | Timestamp | yes | When the outcome was known. |
failure_code | TransferFailureCode or null | yes | On a failure, why; null otherwise. |
mode | TransferMode | yes | |
object | "call_transfer" | yes | |
outcome | TransferOutcome or null | yes | How the attempt ended; null on transfer.started. |
policy_id | PolicyId or null | yes | The Policy, for source policy. |
policy_version | integer or null | yes | The Policy version that fired, for source policy. |
refer_sent_at | Timestamp or null | yes | When the REFER was sent; null on a refusal. |
refusal_reason | TransferRefusalReason or null | yes | On a refusal, why; null otherwise. |
requested_at | Timestamp | yes | |
sip_status | integer or null | yes | The final SIP status of the REFER when one came; null otherwise. |
source | TransferSource | yes | |
transfer_id | TransferId | yes | |
turn_seq | integer or null | yes | The seq of the Turn the request came in; null outside every Turn. |