---
title: "Get a call by ID"
method: GET
path: "/v2.0/communication/call/{communicationId}"
tags: ["Communication V2"]
---

# Get a call by ID

`GET /v2.0/communication/call/{communicationId}`

Returns the call identified by the given communication ID. The communication must be a call record, and the caller must have manage permission on the owning lead; otherwise 400 PERMISSION_DENIED is returned (no existence leak). Manually logged calls (those with no backing dialer record) are populated from the communication content itself — leadPhoneNumber from the logged number and direction inferred from the channel; dialer-only fields (elapsedTime, status, etc.) are omitted.

Webhook follow-up: when a Call webhook is delivered, pass each `createdCall[].timelineId` from the payload as the `communicationId` path parameter to fetch the full record. The legacy `createdCall[].callId` field is kept for backward compatibility but is not interchangeable across communicationType (it points at the dialer record for MANUAL calls) — prefer `timelineId`.

## Path parameters

- `communicationId` integer, required

## Headers

- `Authorization` string, required

## Response `200`

Call retrieved successfully.

- CallResponse — Call record.
  - `id` integer — ID of the call.
  - `dialerCallRecordId` integer — Internal dialer call record ID.
  - `userId` integer — User ID of the agent on the call.
  - `userPhoneNumber` string — Phone number used by the agent.
  - `leadId` integer — ID of the lead on the call.
  - `leadPhoneNumber` string — Phone number of the lead.
  - `direction` 'Outbound' | 'Inbound' — Direction of the call from the agent's point of view.
  - `status` 'Completed' | 'Missed' | 'Failed' | 'Busy' | 'NoAnswer' | 'VoiceMail' — Final call status.
  - `startTime` string — Start time of the call, formatted as 'yyyy-MM-dd HH:mm:ss' in UTC.
  - `endTime` string — End time of the call, formatted as 'yyyy-MM-dd HH:mm:ss' in UTC.
  - `duration` integer — Call duration in seconds.
  - `callingOutcome` 'Talked' | 'VoiceMessage' | 'NoAnswer' | 'BadNumber' | 'DNCNumber' | 'DNCContact' — Outcome tag assigned by the agent.
  - `rateScore` integer — Agent's subjective rating of the call, 0-5.
  - `recordingSwitch` boolean — Whether the call was recorded.
  - `showUserNumber` string — Phone number displayed to the lead (caller ID).
  - `createTime` string — Creation time of the call record, formatted as 'yyyy-MM-dd HH:mm:ss' in UTC.
  - `updateTime` string — Last-updated time of the call record, formatted as 'yyyy-MM-dd HH:mm:ss' in UTC.
  - `note` string — Free-text note entered by the agent for the call.
  - `isMachineAnswered` boolean — Whether the call was answered by a voicemail / answering machine.
  - `price` number, double — Cost of the call in USD.
  - `agentId` integer — User ID of the related agent.
  - `elapsedTime` string — Time from dialing to connection, formatted as 'mm:ss' or similar.

## Other responses

- `400` — Communication does not exist, is not a call record, has no backing dialer record, or caller has no access to the owning lead (20017 PERMISSION_DENIED).
- `401` — Missing or invalid authentication token.
- `500` — Internal server error.

---

[API](https://skmtc.net/lofty/apis/lofty-service-open-apis.md) · [All operations](https://skmtc.net/lofty/apis/lofty-service-open-apis/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lofty/lofty-service-open-apis/versions/23e640467118/schema)
