> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.talkif.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.talkif.ai/_mcp/server.

# Get full call details

GET https://api.talkif.ai/api/v1/calls/{callId}/details

Returns comprehensive call information including:
- Basic call data
- Contact info (name, phone, email, company)
- Flow info (name, version)
- Transcript (structured messages with timestamps)
- AI Analysis (summary, sentiment, intents, topics, action items, outcome)
- Cost breakdown (LLM, TTS, STT, Telephony with details)
- Quality metrics (MOS, jitter, latency, packet loss)
- Timeline events

Reference: https://docs.talkif.ai/api-reference/calls/get-call-details-full

## Authentication

- `Authorization` header (bearer token, required) — Pass a JWT access token or an API key (prefixed with `tif_live_`) as a Bearer token.

## Request

### Path parameters

- `callId` (string, required) — Call ID

## Response

### 200

Full call details

- `accountId` (string, required) — Account that owns this call
- `callSid` (string, required) — Twilio Call SID
- `createdAt` (datetime, required) — When the call record was created
- `direction` (enum, required) — Call direction (inbound or outbound)
  - Allowed values: `inbound`, `outbound`
- `fromNumber` (string, required) — Caller phone number in E.164 format
- `id` (string, required) — Unique call identifier
- `isAnalyzed` (boolean, required) — Whether AI-powered post-call analysis has been performed
- `isRecorded` (boolean, required) — Whether audio recording was enabled for this call
- `providerType` (enum, required) — Telephony provider type used for this call
  - Allowed values: `twilio`, `sip`, `webrtc`, `whatsapp`
- `source` (enum, required) — Where the call originated from
  - Allowed values: `direct`, `scheduled`, `campaign`
- `status` (enum, required) — User-facing computed call status
  - Allowed values: `queued`, `initiated`, `ringing`, `inprogress`, `completed`, `failed`, `busy`, `noanswer`, `canceled`
- `timeline` (list of TimelineEvent, required) — Chronological timeline of events during the call
- `toNumber` (string, required) — Destination phone number in E.164 format
- `campaignId` (string, optional, nullable) — Campaign ID if the call is part of a bulk campaign
- `contact` (ContactSummary, optional, nullable) — Contact summary for the call details page
- `cost` (string, optional, nullable) — Total cost in USD (string for decimal precision)
- `costBreakdown` (CostBreakdown, optional, nullable) — Detailed cost breakdown by service
- `duration` (integer, optional, nullable) — Call duration in seconds
- `endReason` (enum, optional, nullable) — Why a call ended — set once when a call reaches terminal state. Unlike `failure_code` which categorizes technical failures, `end_reason` captures the causal signal that ended the call regardless of success/failure. First writer wins (COALESCE pattern in SQL).
  - Allowed values: `caller_hangup`, `agent_completed`, `agent_error`, `agent_unavailable`, `agent_timeout`, `agent_crashed`, `no_answer`, `busy`, `canceled`, `telephony_error`, `balance_depleted`, `reconciled`
- `endedAt` (datetime, optional, nullable) — When the call ended
- `failureCode` (enum, optional, nullable) — Tracks the specific reason a call failed, enabling: - Analytics (which failure types are most common) - Callbacks (schedule callback for capacity-rejected inbound calls) - Debugging (detailed failure tracking)
  - Allowed values: `capacity_limit`, `rate_limit`, `insufficient_balance`, `phone_not_active`, `flow_not_published`, `provider_error`, `network_error`, `invalid_number`, `busy`, `no_answer`, `rejected`, `canceled`, `timeout`, `unknown`, `agent_timeout`, `agent_error`, `agent_disconnected`, `unknown_phone_number`, `no_connected_flow`, `bot_unavailable`, `flow_not_found`, `system_error`, `service_error`, `config_invalid`, `routing_error`
- `failureReason` (string, optional, nullable) — Human-readable failure description
- `flow` (FlowSummary, optional, nullable) — Flow summary for the call details page
- `flowId` (string, optional, nullable) — Flow ID used for the AI conversation
- `insights` (CallInsights, optional, nullable) — AI-powered post-call analysis including summary, sentiment, intents, and action items
- `performance` (CallPerformance, optional, nullable) — Call performance metrics — latency, conversation, and usage analytics
- `quality` (QualityMetrics, optional, nullable) — Call quality metrics derived from Twilio Voice Insights
- `recordingDurationSecs` (double, optional, nullable) — Recording duration in seconds
- `recordingExpiresAt` (datetime, optional, nullable) — When the recording will be automatically deleted from storage
- `recordingFileSizeBytes` (long, optional, nullable) — Recording file size in bytes
- `recordingStatus` (string, optional, nullable) — Recording lifecycle status: "started", "ready", or "failed"
- `recordingStorageCost` (string, optional, nullable) — Upfront recording storage cost in USD
- `scheduleId` (string, optional, nullable) — Schedule ID if the call was triggered by a recurring schedule
- `startedAt` (datetime, optional, nullable) — When the call was answered
- `transcript` (list of TranscriptMessage, optional, nullable) — Structured transcript of the conversation (ordered by timestamp)
- `transferCase` (CallDetailsResponseTransferCase, optional, nullable) — Handoff case the AI passed when it transferred the call to a person: `reason`, `summary`, optional `caller_name`, plus any custom fields configured on the Transfer node. Present only for transferred calls.
- `turns` (list of CallTurnResponse, optional, nullable) — Turn-by-turn conversation data with per-turn metrics and function calls
- `voicemailDetectedAt` (datetime, optional, nullable) — When voicemail detection produced a result (null if none)
- `voicemailStatus` (string, optional, nullable) — Voicemail detection outcome (null if detection was off or no result): "voicemail_detected", "human_detected", or "undetermined"

## Errors

### 401 Unauthorized Error

Authentication required — token is missing, expired, or invalid

- `code` (enum, required) — Machine-readable error code for programmatic handling
  - Allowed values: `invalid_credentials`, `email_already_exists`, `phone_already_exists`, `contact_phone_already_exists`, `account_suspended`, `account_pending_deletion`, `login_pending_deletion`, `owns_organization_with_members`, `account_deletion_blocked`, `client_update_required`, `account_access_denied`, `token_expired`, `token_invalid`, `token_missing`, `account_header_missing`, `refresh_token_invalid`, `email_already_verified`, `email_verification_code_invalid`, `email_verification_code_expired`, `email_verification_code_used`, `email_service_unavailable`, `phone_already_verified`, `phone_verification_code_invalid`, `bot_check_failed`, `phone_verification_code_expired`, `phone_verification_code_used`, `phone_number_missing`, `email_not_verified`, `disposable_email_not_allowed`, `request_blocked`, `phone_verification_refused`, `sms_service_unavailable`, `mfa_already_enabled`, `mfa_not_enabled`, `mfa_not_setup`, `mfa_code_invalid`, `passkey_not_found`, `password_reset_token_invalid`, `password_reset_token_expired`, `password_reset_token_used`, `password_current_incorrect`, `password_same_as_current`, `invalid_o_auth_state`, `o_auth_provider_error`, `o_auth_already_linked`, `provider_already_connected`, `o_auth_not_linked`, `cannot_unlink_only_auth`, `validation_failed`, `bad_request`, `ring_target_required`, `invalid_json`, `resource_not_found`, `not_found`, `forbidden`, `insufficient_permissions`, `connectors_consent_required`, `already_answered`, `expired`, `conflict`, `resource_already_exists`, `insufficient_balance`, `payment_required`, `subscription_required`, `feature_not_available`, `payment_failed`, `business_rule_violation`, `invalid_state_transition`, `unprocessable_entity`, `rate_limit_exceeded`, `queue_full`, `assistant_quota_exceeded`, `phone_purchase_rate_limited`, `user_phone_not_verified`, `account_not_verified`, `owner_verification_required`, `payment_method_required`, `trial_already_claimed`, `promotion_not_eligible`, `coupon_not_found`, `coupon_not_redeemable`, `coupon_already_redeemed`, `phone_number_not_active`, `phone_number_not_verified`, `phone_number_cannot_initiate_calls`, `flow_not_published`, `provider_call_rejected`, `concurrent_call_limit_exceeded`, `daily_call_limit_exceeded`, `contact_on_dnc_list`, `outside_callable_hours`, `call_already_completed`, `phone_provider_not_active`, `phone_number_already_connected`, `phone_number_not_connected`, `provider_must_be_sip`, `verification_only_for_sip`, `phone_verification_not_started`, `twilio_credentials_required`, `byoc_only`, `phone_already_registered`, `cannot_delete_system_provider`, `phone_number_type_unavailable`, `flow_name_already_exists`, `flow_structure_invalid`, `flow_has_connected_phones`, `flow_version_invalid`, `flow_version_conflict`, `flow_function_name_exists`, `flow_function_not_found`, `flow_generation_failed`, `payment_method_card_only`, `apple_transaction_invalid`, `apple_transaction_account_mismatch`, `sandbox_purchase_not_allowed`, `template_variable_resolution_failed`, `phone_number_in_use`, `phone_number_limit_reached`, `mfa_token_invalid`, `invalid_id_format`, `verification_code_invalid`, `cannot_delete_has_dependencies`, `in_use`, `unsupported_kind`, `offer_taken`, `offer_taken_self`, `offer_expired`, `already_taken`, `takeover_unsupported`, `schedule_not_found`, `schedule_already_paused`, `schedule_not_paused`, `invalid_cron_expression`, `invalid_timezone`, `campaign_not_found`, `campaign_not_draft`, `campaign_no_contacts`, `legal_acceptance_required`, `invitation_not_found`, `invitation_not_pending`, `invitation_expired`, `not_invitation_recipient`, `organization_suspended`, `already_organization_member`, `api_key_invalid`, `api_key_expired`, `api_key_revoked`, `api_key_not_allowed`, `api_key_insufficient_scope`, `api_key_ip_restricted`, `api_key_limit_reached`, `internal_error`, `service_error`, `service_unavailable`, `no_bots_available`, `region_saturated`, `recording_not_available`, `recording_service_not_configured`, `meta_not_configured`, `meta_page_already_connected`, `meta_form_already_mapped`, `meta_api_error`, `meta_lead_unrecoverable`, `unauthorized`
- `detail` (string, required) — Human-readable detail message for this specific error instance
- `status` (integer, required) — HTTP status code (mirrors the response status line)
- `title` (string, required) — Human-readable title for the error category
- `errors` (list of FieldError, optional, nullable) — Field-level validation errors, present when code is `validation_failed`
- `meta` (ErrorResponseMeta, optional, nullable) — Additional context metadata (e.g., retryAfterSecs for rate limits)
- `requestId` (string, optional, nullable) — Unique request identifier for debugging (also in X-Request-Id response header)

### 403 Forbidden Error

`forbidden`

- `code` (enum, required) — Machine-readable error code for programmatic handling
  - Allowed values: `invalid_credentials`, `email_already_exists`, `phone_already_exists`, `contact_phone_already_exists`, `account_suspended`, `account_pending_deletion`, `login_pending_deletion`, `owns_organization_with_members`, `account_deletion_blocked`, `client_update_required`, `account_access_denied`, `token_expired`, `token_invalid`, `token_missing`, `account_header_missing`, `refresh_token_invalid`, `email_already_verified`, `email_verification_code_invalid`, `email_verification_code_expired`, `email_verification_code_used`, `email_service_unavailable`, `phone_already_verified`, `phone_verification_code_invalid`, `bot_check_failed`, `phone_verification_code_expired`, `phone_verification_code_used`, `phone_number_missing`, `email_not_verified`, `disposable_email_not_allowed`, `request_blocked`, `phone_verification_refused`, `sms_service_unavailable`, `mfa_already_enabled`, `mfa_not_enabled`, `mfa_not_setup`, `mfa_code_invalid`, `passkey_not_found`, `password_reset_token_invalid`, `password_reset_token_expired`, `password_reset_token_used`, `password_current_incorrect`, `password_same_as_current`, `invalid_o_auth_state`, `o_auth_provider_error`, `o_auth_already_linked`, `provider_already_connected`, `o_auth_not_linked`, `cannot_unlink_only_auth`, `validation_failed`, `bad_request`, `ring_target_required`, `invalid_json`, `resource_not_found`, `not_found`, `forbidden`, `insufficient_permissions`, `connectors_consent_required`, `already_answered`, `expired`, `conflict`, `resource_already_exists`, `insufficient_balance`, `payment_required`, `subscription_required`, `feature_not_available`, `payment_failed`, `business_rule_violation`, `invalid_state_transition`, `unprocessable_entity`, `rate_limit_exceeded`, `queue_full`, `assistant_quota_exceeded`, `phone_purchase_rate_limited`, `user_phone_not_verified`, `account_not_verified`, `owner_verification_required`, `payment_method_required`, `trial_already_claimed`, `promotion_not_eligible`, `coupon_not_found`, `coupon_not_redeemable`, `coupon_already_redeemed`, `phone_number_not_active`, `phone_number_not_verified`, `phone_number_cannot_initiate_calls`, `flow_not_published`, `provider_call_rejected`, `concurrent_call_limit_exceeded`, `daily_call_limit_exceeded`, `contact_on_dnc_list`, `outside_callable_hours`, `call_already_completed`, `phone_provider_not_active`, `phone_number_already_connected`, `phone_number_not_connected`, `provider_must_be_sip`, `verification_only_for_sip`, `phone_verification_not_started`, `twilio_credentials_required`, `byoc_only`, `phone_already_registered`, `cannot_delete_system_provider`, `phone_number_type_unavailable`, `flow_name_already_exists`, `flow_structure_invalid`, `flow_has_connected_phones`, `flow_version_invalid`, `flow_version_conflict`, `flow_function_name_exists`, `flow_function_not_found`, `flow_generation_failed`, `payment_method_card_only`, `apple_transaction_invalid`, `apple_transaction_account_mismatch`, `sandbox_purchase_not_allowed`, `template_variable_resolution_failed`, `phone_number_in_use`, `phone_number_limit_reached`, `mfa_token_invalid`, `invalid_id_format`, `verification_code_invalid`, `cannot_delete_has_dependencies`, `in_use`, `unsupported_kind`, `offer_taken`, `offer_taken_self`, `offer_expired`, `already_taken`, `takeover_unsupported`, `schedule_not_found`, `schedule_already_paused`, `schedule_not_paused`, `invalid_cron_expression`, `invalid_timezone`, `campaign_not_found`, `campaign_not_draft`, `campaign_no_contacts`, `legal_acceptance_required`, `invitation_not_found`, `invitation_not_pending`, `invitation_expired`, `not_invitation_recipient`, `organization_suspended`, `already_organization_member`, `api_key_invalid`, `api_key_expired`, `api_key_revoked`, `api_key_not_allowed`, `api_key_insufficient_scope`, `api_key_ip_restricted`, `api_key_limit_reached`, `internal_error`, `service_error`, `service_unavailable`, `no_bots_available`, `region_saturated`, `recording_not_available`, `recording_service_not_configured`, `meta_not_configured`, `meta_page_already_connected`, `meta_form_already_mapped`, `meta_api_error`, `meta_lead_unrecoverable`, `unauthorized`
- `detail` (string, required) — Human-readable detail message for this specific error instance
- `status` (integer, required) — HTTP status code (mirrors the response status line)
- `title` (string, required) — Human-readable title for the error category
- `errors` (list of FieldError, optional, nullable) — Field-level validation errors, present when code is `validation_failed`
- `meta` (ErrorResponseMeta, optional, nullable) — Additional context metadata (e.g., retryAfterSecs for rate limits)
- `requestId` (string, optional, nullable) — Unique request identifier for debugging (also in X-Request-Id response header)

### 404 Not Found Error

`resource_not_found`

- `code` (enum, required) — Machine-readable error code for programmatic handling
  - Allowed values: `invalid_credentials`, `email_already_exists`, `phone_already_exists`, `contact_phone_already_exists`, `account_suspended`, `account_pending_deletion`, `login_pending_deletion`, `owns_organization_with_members`, `account_deletion_blocked`, `client_update_required`, `account_access_denied`, `token_expired`, `token_invalid`, `token_missing`, `account_header_missing`, `refresh_token_invalid`, `email_already_verified`, `email_verification_code_invalid`, `email_verification_code_expired`, `email_verification_code_used`, `email_service_unavailable`, `phone_already_verified`, `phone_verification_code_invalid`, `bot_check_failed`, `phone_verification_code_expired`, `phone_verification_code_used`, `phone_number_missing`, `email_not_verified`, `disposable_email_not_allowed`, `request_blocked`, `phone_verification_refused`, `sms_service_unavailable`, `mfa_already_enabled`, `mfa_not_enabled`, `mfa_not_setup`, `mfa_code_invalid`, `passkey_not_found`, `password_reset_token_invalid`, `password_reset_token_expired`, `password_reset_token_used`, `password_current_incorrect`, `password_same_as_current`, `invalid_o_auth_state`, `o_auth_provider_error`, `o_auth_already_linked`, `provider_already_connected`, `o_auth_not_linked`, `cannot_unlink_only_auth`, `validation_failed`, `bad_request`, `ring_target_required`, `invalid_json`, `resource_not_found`, `not_found`, `forbidden`, `insufficient_permissions`, `connectors_consent_required`, `already_answered`, `expired`, `conflict`, `resource_already_exists`, `insufficient_balance`, `payment_required`, `subscription_required`, `feature_not_available`, `payment_failed`, `business_rule_violation`, `invalid_state_transition`, `unprocessable_entity`, `rate_limit_exceeded`, `queue_full`, `assistant_quota_exceeded`, `phone_purchase_rate_limited`, `user_phone_not_verified`, `account_not_verified`, `owner_verification_required`, `payment_method_required`, `trial_already_claimed`, `promotion_not_eligible`, `coupon_not_found`, `coupon_not_redeemable`, `coupon_already_redeemed`, `phone_number_not_active`, `phone_number_not_verified`, `phone_number_cannot_initiate_calls`, `flow_not_published`, `provider_call_rejected`, `concurrent_call_limit_exceeded`, `daily_call_limit_exceeded`, `contact_on_dnc_list`, `outside_callable_hours`, `call_already_completed`, `phone_provider_not_active`, `phone_number_already_connected`, `phone_number_not_connected`, `provider_must_be_sip`, `verification_only_for_sip`, `phone_verification_not_started`, `twilio_credentials_required`, `byoc_only`, `phone_already_registered`, `cannot_delete_system_provider`, `phone_number_type_unavailable`, `flow_name_already_exists`, `flow_structure_invalid`, `flow_has_connected_phones`, `flow_version_invalid`, `flow_version_conflict`, `flow_function_name_exists`, `flow_function_not_found`, `flow_generation_failed`, `payment_method_card_only`, `apple_transaction_invalid`, `apple_transaction_account_mismatch`, `sandbox_purchase_not_allowed`, `template_variable_resolution_failed`, `phone_number_in_use`, `phone_number_limit_reached`, `mfa_token_invalid`, `invalid_id_format`, `verification_code_invalid`, `cannot_delete_has_dependencies`, `in_use`, `unsupported_kind`, `offer_taken`, `offer_taken_self`, `offer_expired`, `already_taken`, `takeover_unsupported`, `schedule_not_found`, `schedule_already_paused`, `schedule_not_paused`, `invalid_cron_expression`, `invalid_timezone`, `campaign_not_found`, `campaign_not_draft`, `campaign_no_contacts`, `legal_acceptance_required`, `invitation_not_found`, `invitation_not_pending`, `invitation_expired`, `not_invitation_recipient`, `organization_suspended`, `already_organization_member`, `api_key_invalid`, `api_key_expired`, `api_key_revoked`, `api_key_not_allowed`, `api_key_insufficient_scope`, `api_key_ip_restricted`, `api_key_limit_reached`, `internal_error`, `service_error`, `service_unavailable`, `no_bots_available`, `region_saturated`, `recording_not_available`, `recording_service_not_configured`, `meta_not_configured`, `meta_page_already_connected`, `meta_form_already_mapped`, `meta_api_error`, `meta_lead_unrecoverable`, `unauthorized`
- `detail` (string, required) — Human-readable detail message for this specific error instance
- `status` (integer, required) — HTTP status code (mirrors the response status line)
- `title` (string, required) — Human-readable title for the error category
- `errors` (list of FieldError, optional, nullable) — Field-level validation errors, present when code is `validation_failed`
- `meta` (ErrorResponseMeta, optional, nullable) — Additional context metadata (e.g., retryAfterSecs for rate limits)
- `requestId` (string, optional, nullable) — Unique request identifier for debugging (also in X-Request-Id response header)

### 429 Too Many Requests Error

Rate limit exceeded — retry after the delay in the response

- `code` (enum, required) — Machine-readable error code for programmatic handling
  - Allowed values: `invalid_credentials`, `email_already_exists`, `phone_already_exists`, `contact_phone_already_exists`, `account_suspended`, `account_pending_deletion`, `login_pending_deletion`, `owns_organization_with_members`, `account_deletion_blocked`, `client_update_required`, `account_access_denied`, `token_expired`, `token_invalid`, `token_missing`, `account_header_missing`, `refresh_token_invalid`, `email_already_verified`, `email_verification_code_invalid`, `email_verification_code_expired`, `email_verification_code_used`, `email_service_unavailable`, `phone_already_verified`, `phone_verification_code_invalid`, `bot_check_failed`, `phone_verification_code_expired`, `phone_verification_code_used`, `phone_number_missing`, `email_not_verified`, `disposable_email_not_allowed`, `request_blocked`, `phone_verification_refused`, `sms_service_unavailable`, `mfa_already_enabled`, `mfa_not_enabled`, `mfa_not_setup`, `mfa_code_invalid`, `passkey_not_found`, `password_reset_token_invalid`, `password_reset_token_expired`, `password_reset_token_used`, `password_current_incorrect`, `password_same_as_current`, `invalid_o_auth_state`, `o_auth_provider_error`, `o_auth_already_linked`, `provider_already_connected`, `o_auth_not_linked`, `cannot_unlink_only_auth`, `validation_failed`, `bad_request`, `ring_target_required`, `invalid_json`, `resource_not_found`, `not_found`, `forbidden`, `insufficient_permissions`, `connectors_consent_required`, `already_answered`, `expired`, `conflict`, `resource_already_exists`, `insufficient_balance`, `payment_required`, `subscription_required`, `feature_not_available`, `payment_failed`, `business_rule_violation`, `invalid_state_transition`, `unprocessable_entity`, `rate_limit_exceeded`, `queue_full`, `assistant_quota_exceeded`, `phone_purchase_rate_limited`, `user_phone_not_verified`, `account_not_verified`, `owner_verification_required`, `payment_method_required`, `trial_already_claimed`, `promotion_not_eligible`, `coupon_not_found`, `coupon_not_redeemable`, `coupon_already_redeemed`, `phone_number_not_active`, `phone_number_not_verified`, `phone_number_cannot_initiate_calls`, `flow_not_published`, `provider_call_rejected`, `concurrent_call_limit_exceeded`, `daily_call_limit_exceeded`, `contact_on_dnc_list`, `outside_callable_hours`, `call_already_completed`, `phone_provider_not_active`, `phone_number_already_connected`, `phone_number_not_connected`, `provider_must_be_sip`, `verification_only_for_sip`, `phone_verification_not_started`, `twilio_credentials_required`, `byoc_only`, `phone_already_registered`, `cannot_delete_system_provider`, `phone_number_type_unavailable`, `flow_name_already_exists`, `flow_structure_invalid`, `flow_has_connected_phones`, `flow_version_invalid`, `flow_version_conflict`, `flow_function_name_exists`, `flow_function_not_found`, `flow_generation_failed`, `payment_method_card_only`, `apple_transaction_invalid`, `apple_transaction_account_mismatch`, `sandbox_purchase_not_allowed`, `template_variable_resolution_failed`, `phone_number_in_use`, `phone_number_limit_reached`, `mfa_token_invalid`, `invalid_id_format`, `verification_code_invalid`, `cannot_delete_has_dependencies`, `in_use`, `unsupported_kind`, `offer_taken`, `offer_taken_self`, `offer_expired`, `already_taken`, `takeover_unsupported`, `schedule_not_found`, `schedule_already_paused`, `schedule_not_paused`, `invalid_cron_expression`, `invalid_timezone`, `campaign_not_found`, `campaign_not_draft`, `campaign_no_contacts`, `legal_acceptance_required`, `invitation_not_found`, `invitation_not_pending`, `invitation_expired`, `not_invitation_recipient`, `organization_suspended`, `already_organization_member`, `api_key_invalid`, `api_key_expired`, `api_key_revoked`, `api_key_not_allowed`, `api_key_insufficient_scope`, `api_key_ip_restricted`, `api_key_limit_reached`, `internal_error`, `service_error`, `service_unavailable`, `no_bots_available`, `region_saturated`, `recording_not_available`, `recording_service_not_configured`, `meta_not_configured`, `meta_page_already_connected`, `meta_form_already_mapped`, `meta_api_error`, `meta_lead_unrecoverable`, `unauthorized`
- `detail` (string, required) — Human-readable detail message for this specific error instance
- `status` (integer, required) — HTTP status code (mirrors the response status line)
- `title` (string, required) — Human-readable title for the error category
- `errors` (list of FieldError, optional, nullable) — Field-level validation errors, present when code is `validation_failed`
- `meta` (ErrorResponseMeta, optional, nullable) — Additional context metadata (e.g., retryAfterSecs for rate limits)
- `requestId` (string, optional, nullable) — Unique request identifier for debugging (also in X-Request-Id response header)

### 500 Internal Server Error

Internal server error — contact support with the requestId

- `code` (enum, required) — Machine-readable error code for programmatic handling
  - Allowed values: `invalid_credentials`, `email_already_exists`, `phone_already_exists`, `contact_phone_already_exists`, `account_suspended`, `account_pending_deletion`, `login_pending_deletion`, `owns_organization_with_members`, `account_deletion_blocked`, `client_update_required`, `account_access_denied`, `token_expired`, `token_invalid`, `token_missing`, `account_header_missing`, `refresh_token_invalid`, `email_already_verified`, `email_verification_code_invalid`, `email_verification_code_expired`, `email_verification_code_used`, `email_service_unavailable`, `phone_already_verified`, `phone_verification_code_invalid`, `bot_check_failed`, `phone_verification_code_expired`, `phone_verification_code_used`, `phone_number_missing`, `email_not_verified`, `disposable_email_not_allowed`, `request_blocked`, `phone_verification_refused`, `sms_service_unavailable`, `mfa_already_enabled`, `mfa_not_enabled`, `mfa_not_setup`, `mfa_code_invalid`, `passkey_not_found`, `password_reset_token_invalid`, `password_reset_token_expired`, `password_reset_token_used`, `password_current_incorrect`, `password_same_as_current`, `invalid_o_auth_state`, `o_auth_provider_error`, `o_auth_already_linked`, `provider_already_connected`, `o_auth_not_linked`, `cannot_unlink_only_auth`, `validation_failed`, `bad_request`, `ring_target_required`, `invalid_json`, `resource_not_found`, `not_found`, `forbidden`, `insufficient_permissions`, `connectors_consent_required`, `already_answered`, `expired`, `conflict`, `resource_already_exists`, `insufficient_balance`, `payment_required`, `subscription_required`, `feature_not_available`, `payment_failed`, `business_rule_violation`, `invalid_state_transition`, `unprocessable_entity`, `rate_limit_exceeded`, `queue_full`, `assistant_quota_exceeded`, `phone_purchase_rate_limited`, `user_phone_not_verified`, `account_not_verified`, `owner_verification_required`, `payment_method_required`, `trial_already_claimed`, `promotion_not_eligible`, `coupon_not_found`, `coupon_not_redeemable`, `coupon_already_redeemed`, `phone_number_not_active`, `phone_number_not_verified`, `phone_number_cannot_initiate_calls`, `flow_not_published`, `provider_call_rejected`, `concurrent_call_limit_exceeded`, `daily_call_limit_exceeded`, `contact_on_dnc_list`, `outside_callable_hours`, `call_already_completed`, `phone_provider_not_active`, `phone_number_already_connected`, `phone_number_not_connected`, `provider_must_be_sip`, `verification_only_for_sip`, `phone_verification_not_started`, `twilio_credentials_required`, `byoc_only`, `phone_already_registered`, `cannot_delete_system_provider`, `phone_number_type_unavailable`, `flow_name_already_exists`, `flow_structure_invalid`, `flow_has_connected_phones`, `flow_version_invalid`, `flow_version_conflict`, `flow_function_name_exists`, `flow_function_not_found`, `flow_generation_failed`, `payment_method_card_only`, `apple_transaction_invalid`, `apple_transaction_account_mismatch`, `sandbox_purchase_not_allowed`, `template_variable_resolution_failed`, `phone_number_in_use`, `phone_number_limit_reached`, `mfa_token_invalid`, `invalid_id_format`, `verification_code_invalid`, `cannot_delete_has_dependencies`, `in_use`, `unsupported_kind`, `offer_taken`, `offer_taken_self`, `offer_expired`, `already_taken`, `takeover_unsupported`, `schedule_not_found`, `schedule_already_paused`, `schedule_not_paused`, `invalid_cron_expression`, `invalid_timezone`, `campaign_not_found`, `campaign_not_draft`, `campaign_no_contacts`, `legal_acceptance_required`, `invitation_not_found`, `invitation_not_pending`, `invitation_expired`, `not_invitation_recipient`, `organization_suspended`, `already_organization_member`, `api_key_invalid`, `api_key_expired`, `api_key_revoked`, `api_key_not_allowed`, `api_key_insufficient_scope`, `api_key_ip_restricted`, `api_key_limit_reached`, `internal_error`, `service_error`, `service_unavailable`, `no_bots_available`, `region_saturated`, `recording_not_available`, `recording_service_not_configured`, `meta_not_configured`, `meta_page_already_connected`, `meta_form_already_mapped`, `meta_api_error`, `meta_lead_unrecoverable`, `unauthorized`
- `detail` (string, required) — Human-readable detail message for this specific error instance
- `status` (integer, required) — HTTP status code (mirrors the response status line)
- `title` (string, required) — Human-readable title for the error category
- `errors` (list of FieldError, optional, nullable) — Field-level validation errors, present when code is `validation_failed`
- `meta` (ErrorResponseMeta, optional, nullable) — Additional context metadata (e.g., retryAfterSecs for rate limits)
- `requestId` (string, optional, nullable) — Unique request identifier for debugging (also in X-Request-Id response header)

## Types

### TimelineEvent

Chronological event in the call timeline

- `eventType` (string, required) — Event type: "turn", "node_transition", "error", or "function_call"
- `timestamp` (datetime, required) — When this event occurred (ISO 8601 UTC)
- `details` (TimelineEventDetails, optional, nullable) — Structured event details (shape varies by event_type)

### ContactSummary

Contact summary for the call details page

- `id` (string, required) — Contact unique identifier
- `interests` (list of string, required) — Contact interests or topics of conversation
- `name` (string, required) — Contact display name
- `primaryPhone` (string, required) — Contact primary phone number in E.164 format
- `tags` (list of string, required) — Tags assigned to this contact
- `company` (string, optional, nullable) — Company or organization name
- `email` (string, optional, nullable) — Contact email address
- `notes` (string, optional, nullable) — Free-text notes about this contact
- `occupation` (string, optional, nullable) — Contact job title or occupation

### CostBreakdown

Detailed cost breakdown by service

- `durationSeconds` (integer, required) — Billable duration in seconds
- `ratePerMinute` (string, required) — Effective rate per minute in USD
- `services` (list of ServiceCost, required) — Per-service cost breakdown (LLM, STT, TTS, telephony)
- `totalCostUsd` (string, required) — Total call cost in USD (string for decimal precision)

### FlowSummary

Flow summary for the call details page

- `id` (string, required) — Flow unique identifier
- `name` (string, required) — Flow display name
- `currentVersion` (string, optional, nullable) — Current published version of the flow
- `description` (string, optional, nullable) — Flow description
- `usedVersion` (string, optional, nullable) — Specific version that was used for this call (from flow executions)

### CallInsights

AI-powered post-call analysis including summary, sentiment, intents, and action items

- `actionItems` (list of ActionItem, required) — Action items extracted from the conversation
- `intents` (list of DetectedIntent, required) — Intents detected from the conversation
- `topics` (list of string, required) — Topics discussed during the call
- `callerInfo` (ExtractedCallerInfo, optional, nullable) — Caller information extracted from the call transcript by AI analysis
- `outcome` (CallOutcome, optional, nullable) — Call outcome classification determined by AI analysis
- `sentiment` (SentimentAnalysis, optional, nullable) — Sentiment analysis result for the overall conversation
- `summary` (string, optional, nullable) — AI-generated summary of the conversation

### CallPerformance

Call performance metrics — latency, conversation, and usage analytics

- `conversation` (PerformanceConversation, required) — Conversation quality metrics
- `latency` (PerformanceLatency, required) — Latency statistics across all turns
- `usage` (PerformanceUsage, required) — Token and character usage totals
- `firstSpeechMs` (integer, optional, nullable) — Client connect to first bot audio in milliseconds

### QualityMetrics

Call quality metrics derived from Twilio Voice Insights

- `overallQuality` (enum, required) — Overall quality assessment for the call
  - Allowed values: `excellent`, `good`, `fair`, `poor`, `unknown`
- `qualityIssues` (list of string, required) — List of quality issues detected during the call
- `codec` (string, optional, nullable) — Audio codec used for the call
- `fromCarrier` (string, optional, nullable) — Originating carrier name
- `jitter` (NetworkMetric, optional, nullable) — Network metric measurement (jitter or latency)
- `latency` (NetworkMetric, optional, nullable) — Network metric measurement (jitter or latency)
- `mosScore` (MosScore, optional, nullable) — Mean Opinion Score (MOS) with rating (1.0-5.0 scale)
- `packetLoss` (PacketLossMetric, optional, nullable) — RTP packet loss statistics for the call
- `toCarrier` (string, optional, nullable) — Destination carrier name

### TranscriptMessage

Structured transcript message representing one speech segment

- `content` (string, required) — Transcribed text content
- `speaker` (enum, required) — Who spoke this message
  - Allowed values: `ai`, `human`, `colleague`
- `timestampMs` (long, required) — When this message occurred (milliseconds since call start)
- `durationMs` (long, optional, nullable) — Duration of this speech segment in milliseconds
- `llmModel` (string, optional, nullable) — LLM model used for this message (assistant only)
- `metrics` (TranscriptMessageMetrics, optional, nullable) — Per-message latency and usage metrics. Captures the timing breakdown for debugging and analytics.
- `speakerName` (string, optional, nullable) — Display name of the speaker
- `ttsModel` (string, optional, nullable) — TTS model used for this message (assistant only)
- `turnNumber` (integer, optional, nullable) — Conversation turn number this message belongs to (1-based)

### CallDetailsResponseTransferCase

Handoff case the AI passed when it transferred the call to a person: `reason`, `summary`, optional `caller_name`, plus any custom fields configured on the Transfer node. Present only for transferred calls.

### CallTurnResponse

Call turn with function calls attached (for API response).

- `accountId` (string, required) — Account that owns the call
- `botSegments` (integer, required) — Number of bot speech segments in this turn
- `botSpeechDurationMs` (double, required) — Bot speech duration in milliseconds
- `callId` (string, required) — Call this turn belongs to
- `createdAt` (datetime, required) — When this turn record was created
- `id` (string, required) — Unique turn record identifier
- `idleBeforeTurnMs` (double, required) — Idle time before this turn started in milliseconds
- `turnId` (integer, required) — Sequential turn number (1-based)
- `turnStartMs` (long, required) — When the turn started (Unix timestamp in milliseconds)
- `userSegments` (integer, required) — Number of user speech segments in this turn
- `userSpeechDurationMs` (double, required) — User speech duration in milliseconds
- `wasInterrupted` (boolean, required) — Whether the bot was interrupted by the user mid-response
- `estimatedCostMicrocents` (long, optional, nullable) — Estimated cost for this turn in microcents (1 cent = 10,000 microcents)
- `llmCompletionTokens` (integer, optional, nullable) — LLM completion (output) tokens generated in this turn
- `llmLatencyMs` (double, optional, nullable) — LLM time to first token in milliseconds
- `llmPromptTokens` (integer, optional, nullable) — LLM prompt (input) tokens consumed in this turn
- `sttLatencyMs` (double, optional, nullable) — Speech-to-text time to first byte in milliseconds
- `ttsCharacters` (integer, optional, nullable) — Number of TTS characters synthesized in this turn
- `ttsLatencyMs` (double, optional, nullable) — Text-to-speech time to first byte in milliseconds
- `userTurnMs` (double, optional, nullable) — User turn detection cost: VAD + STT + smart turn decision (ms)
- `functionCalls` (list of CallTurnFunctionCall, optional, nullable) — Function calls executed during this turn

### FieldError

Individual field error for validation responses Appears in the `errors[]` array when `code` is `validation_failed` # Example ```json { "field": "email", "code": "invalid_format", "message": "Email format is invalid" } ```

- `code` (string, required) — Specific error code for this field
- `field` (string, required) — The field name that failed validation
- `message` (string, required) — Human-readable error message

### ErrorResponseMeta

Additional context metadata (e.g., retryAfterSecs for rate limits)

### TimelineEventDetails

Structured event details (shape varies by event_type)

### ServiceCost

Individual service cost with typed usage data. Rate units: LLM per 1K tokens, TTS per 1K chars, STT and telephony per minute.

- `cost` (double, required) — Cost in USD for this service
- `percentage` (double, required) — Percentage of total call cost attributable to this service
- `provider` (string, required) — Provider name (e.g., "anthropic", "deepgram", "elevenlabs", "twilio")
- `service` (string, required) — Service category: "llm", "stt", "tts", "telephony", "infrastructure", or "function_call"
- `audioRate` (double, optional, nullable) — STT rate in USD per minute of audio
- `audioSeconds` (double, optional, nullable) — STT audio duration processed in seconds
- `charRate` (double, optional, nullable) — TTS rate in USD per 1K characters
- `characters` (integer, optional, nullable) — TTS characters synthesized
- `durationSeconds` (long, optional, nullable) — Telephony call duration in seconds
- `inputRate` (double, optional, nullable) — LLM input rate in USD per 1K tokens
- `inputTokens` (integer, optional, nullable) — LLM prompt (input) tokens consumed
- `model` (string, optional, nullable) — Model identifier used by the provider
- `outputRate` (double, optional, nullable) — LLM output rate in USD per 1K tokens
- `outputTokens` (integer, optional, nullable) — LLM completion (output) tokens generated
- `telephonyRate` (double, optional, nullable) — Telephony rate in USD per minute

### ActionItem

Action item extracted from the conversation by AI analysis

- `completed` (boolean, required) — Whether the action was completed during the call
- `description` (string, required) — Description of the required action

### DetectedIntent

Intent detected from the conversation by AI analysis

- `name` (string, required) — Intent name describing what the caller wanted
- `confidence` (string, optional, nullable) — Confidence level: "high", "medium", or "low"

### ExtractedCallerInfo

Caller information extracted from the call transcript by AI analysis

- `company` (string, optional, nullable) — Caller's company or organization
- `email` (string, optional, nullable) — Caller's email address if provided
- `name` (string, optional, nullable) — Caller's name as mentioned during the conversation
- `role` (string, optional, nullable) — Caller's job title or role

### CallOutcome

Call outcome classification determined by AI analysis

- `outcomeType` (string, required) — Outcome classification (e.g., "lead_qualified", "appointment_set", "callback_requested")
- `confidence` (double, optional, nullable) — Confidence score for the outcome classification (0.0 to 1.0)
- `nextStep` (string, optional, nullable) — Recommended next step based on the call outcome

### SentimentAnalysis

Sentiment analysis result for the overall conversation

- `overall` (string, required) — Overall sentiment: "positive", "negative", or "neutral"
- `score` (double, required) — Sentiment confidence score from 0.0 (most negative) to 1.0 (most positive)

### PerformanceConversation

Conversation quality metrics

- `botSpeechSecs` (float, optional, nullable) — Bot speech duration in seconds
- `interruptedTurns` (integer, optional, nullable) — Turns where user interrupted the bot
- `interruptionRate` (double, optional, nullable) — Ratio of interrupted turns to total (0.0-1.0)
- `talkRatio` (double, optional, nullable) — Talk ratio: user speech / total speech (0.0-1.0)
- `turnCount` (integer, optional, nullable) — Total conversation turns
- `userSpeechSecs` (float, optional, nullable) — User speech duration in seconds

### PerformanceLatency

Latency statistics by service

- `llm` (LatencyStats, optional, nullable) — Latency statistics for a service (avg, p50, p95, max)
- `stt` (LatencyStats, optional, nullable) — Latency statistics for a service (avg, p50, p95, max)
- `tts` (LatencyStats, optional, nullable) — Latency statistics for a service (avg, p50, p95, max)

### PerformanceUsage

Token and character usage

- `completionTokens` (integer, optional, nullable) — LLM completion (output) tokens
- `promptTokens` (integer, optional, nullable) — LLM prompt (input) tokens
- `ttsCharacters` (integer, optional, nullable) — TTS characters synthesized

### NetworkMetric

Network metric measurement (jitter or latency)

- `rating` (enum, required) — Quality rating for this metric
  - Allowed values: `excellent`, `good`, `fair`, `poor`, `unknown`
- `valueMs` (integer, required) — Measured value in milliseconds

### MosScore

Mean Opinion Score (MOS) with rating (1.0-5.0 scale)

- `average` (double, required) — Average MOS across the call duration
- `rating` (enum, required) — Quality rating derived from the average MOS
  - Allowed values: `excellent`, `good`, `fair`, `poor`, `unknown`
- `max` (double, optional, nullable) — Maximum MOS observed
- `min` (double, optional, nullable) — Minimum MOS observed

### PacketLossMetric

RTP packet loss statistics for the call

- `packetsLost` (integer, required) — Total number of lost packets
- `packetsReceived` (integer, required) — Total number of received packets
- `percentage` (double, required) — Packet loss as a percentage (0.0-100.0)
- `rating` (enum, required) — Quality rating based on packet loss percentage
  - Allowed values: `excellent`, `good`, `fair`, `poor`, `unknown`

### TranscriptMessageMetrics

Per-message latency and usage metrics. Captures the timing breakdown for debugging and analytics.

- `llmCompletionTokens` (integer, optional, nullable) — LLM completion (output) tokens generated for this message
- `llmLatencyMs` (double, optional, nullable) — LLM total latency from request to complete response in milliseconds
- `llmPromptTokens` (integer, optional, nullable) — LLM prompt (input) tokens consumed for this message
- `llmThinkingMs` (double, optional, nullable) — Time the model spent thinking in milliseconds (`llm_ttfat_ms` minus `llm_ttfb_ms`), so the cost of reasoning is readable on its own.
- `llmTtfatMs` (double, optional, nullable) — LLM time to first answer token in milliseconds, excluding any reasoning streamed first. On a thinking model this is the latency the caller perceives, where `llm_ttfb_ms` includes the reasoning stream.
- `llmTtfbMs` (double, optional, nullable) — LLM time to first token in milliseconds
- `sttProcessingMs` (double, optional, nullable) — Speech-to-text total processing time in milliseconds. Deprecated, read-only. Only present on older calls; new transcripts never carry it. Use `sttTtfbMs` (speech end → final transcript) for STT latency.
- `sttTtfbMs` (double, optional, nullable) — Speech-to-text time to first byte in milliseconds
- `textAggregationMs` (double, optional, nullable) — First LLM token to first complete sentence in milliseconds
- `ttsCharacters` (integer, optional, nullable) — Number of TTS characters synthesized for this message
- `ttsProcessingMs` (double, optional, nullable) — Text-to-speech total processing time in milliseconds
- `ttsTtfbMs` (double, optional, nullable) — Text-to-speech time to first byte in milliseconds

### CallTurnFunctionCall

Function call within a turn (from normalized table).

- `durationMs` (integer, required) — Execution duration in milliseconds
- `functionName` (string, required) — Function name
- `turnId` (integer, required) — Turn this function was called in

### LatencyStats

Latency statistics for a service (avg, p50, p95, max)

- `avgMs` (double, required) — Average latency in milliseconds
- `maxMs` (double, required) — Maximum latency observed in milliseconds
- `p50Ms` (double, required) — Median (50th percentile) latency in milliseconds
- `p95Ms` (double, required) — 95th percentile latency in milliseconds
- `samples` (integer, required) — Number of samples used to compute these statistics

## Examples

**Response**

```json
{
  "accountId": "550e8400-e29b-41d4-a716-446655440000",
  "callSid": "CA1234567890abcdef1234567890abcdef",
  "createdAt": "2026-01-15T10:30:00Z",
  "direction": "inbound",
  "fromNumber": "+15559876543",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "isAnalyzed": true,
  "isRecorded": true,
  "providerType": "twilio",
  "source": "direct",
  "status": "queued",
  "timeline": [
    {
      "eventType": "turn",
      "timestamp": "2026-01-15T10:30:05Z",
      "details": {}
    }
  ],
  "toNumber": "+15551234567",
  "campaignId": "string",
  "contact": null,
  "cost": "0.053200",
  "costBreakdown": null,
  "duration": 125,
  "endReason": null,
  "endedAt": "2024-01-15T09:30:00Z",
  "failureCode": null,
  "failureReason": "Recipient did not answer",
  "flow": null,
  "flowId": "string",
  "insights": null,
  "performance": {
    "conversation": {
      "botSpeechSecs": 78.2,
      "interruptedTurns": 2,
      "interruptionRate": 0.167,
      "talkRatio": 0.38,
      "turnCount": 12,
      "userSpeechSecs": 45.5
    },
    "latency": {
      "llm": {
        "avgMs": 320.5,
        "maxMs": 1200,
        "p50Ms": 280,
        "p95Ms": 650,
        "samples": 12
      },
      "stt": {
        "avgMs": 320.5,
        "maxMs": 1200,
        "p50Ms": 280,
        "p95Ms": 650,
        "samples": 12
      },
      "tts": {
        "avgMs": 320.5,
        "maxMs": 1200,
        "p50Ms": 280,
        "p95Ms": 650,
        "samples": 12
      }
    },
    "usage": {
      "completionTokens": 512,
      "promptTokens": 2048,
      "ttsCharacters": 3200
    },
    "firstSpeechMs": 465
  },
  "quality": null,
  "recordingDurationSecs": 120.5,
  "recordingExpiresAt": "2024-01-15T09:30:00Z",
  "recordingFileSizeBytes": 1048576,
  "recordingStatus": "ready",
  "recordingStorageCost": "0.000150",
  "scheduleId": "string",
  "startedAt": "2024-01-15T09:30:00Z",
  "transcript": [
    {
      "content": "Hello, how can I help you today?",
      "speaker": "ai",
      "timestampMs": 1500,
      "durationMs": 2500,
      "llmModel": "openai/gpt-5.6-luna",
      "metrics": {
        "llmCompletionTokens": 128,
        "llmLatencyMs": 1200,
        "llmPromptTokens": 512,
        "llmThinkingMs": 460,
        "llmTtfatMs": 780,
        "llmTtfbMs": 320,
        "sttProcessingMs": 250,
        "sttTtfbMs": 85,
        "textAggregationMs": 95,
        "ttsCharacters": 245,
        "ttsProcessingMs": 800,
        "ttsTtfbMs": 150
      },
      "speakerName": "Appointment Bot",
      "ttsModel": "elevenlabs/eleven_v4_turbo",
      "turnNumber": 1
    }
  ],
  "transferCase": {},
  "turns": [
    {
      "accountId": "550e8400-e29b-41d4-a716-446655440000",
      "botSegments": 2,
      "botSpeechDurationMs": 4200,
      "callId": "550e8400-e29b-41d4-a716-446655440000",
      "createdAt": "2026-01-15T10:30:00Z",
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "idleBeforeTurnMs": 200,
      "turnId": 1,
      "turnStartMs": 1705312200000,
      "userSegments": 1,
      "userSpeechDurationMs": 2500,
      "wasInterrupted": true,
      "estimatedCostMicrocents": 1250,
      "llmCompletionTokens": 128,
      "llmLatencyMs": 350,
      "llmPromptTokens": 512,
      "sttLatencyMs": 120,
      "ttsCharacters": 245,
      "ttsLatencyMs": 180,
      "userTurnMs": 450,
      "functionCalls": [
        {
          "durationMs": 230,
          "functionName": "lookup_account",
          "turnId": 2
        }
      ]
    }
  ],
  "voicemailDetectedAt": "2024-01-15T09:30:00Z",
  "voicemailStatus": "voicemail_detected"
}
```

**SDK Code**

```python
import requests

url = "https://api.talkif.ai/api/v1/calls/callId/details"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.talkif.ai/api/v1/calls/callId/details';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.talkif.ai/api/v1/calls/callId/details"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.talkif.ai/api/v1/calls/callId/details")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.talkif.ai/api/v1/calls/callId/details")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.talkif.ai/api/v1/calls/callId/details', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.talkif.ai/api/v1/calls/callId/details");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.talkif.ai/api/v1/calls/callId/details")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```