Skip to main content

Get Call Info

Retrieve the call detail record (CDR) for a call using its request_id — currently the same identifier returned as request_uuid by Initiate Outbound Call. Use this endpoint to check the final outcome of a call, fetch its recording, or inspect hangup details after the call has ended.

This endpoint returns the same data as Get Call and is intended to eventually replace it — see Feature Access below for who can call it today.

Authentication Required

Requires X-API-Key header. See Authentication for details.

HTTP Request

GET /api/call-info/:request_id

Base URL: https://prod-api.superfone.co.in/superfone

Path Parameters

ParameterTypeRequiredDescription
request_idstringYesThe request identifier for the call (format: sfv_ob_req_xxxxxxxxxxxx) — the same value returned as request_uuid when the call was created via POST /sfvopi/calls

Feature Access

This endpoint requires one of the following to be active on your subscription, or it returns 403:

  • The Click-to-Call X-API add-on
  • SFVoPI

Contact your Superfone account manager if you're unsure which of these your account has.

Rate Limit

This endpoint is limited to 60 requests per minute per organization. Exceeding it returns 429 with the number of seconds until the window resets.

Prefer Push Over Polling

Recordings are uploaded asynchronously after the call ends. Rather than polling this endpoint, we recommend subscribing to the CDR_RECORDING_AVAILABLE event notification — Superfone POSTs to your URL as soon as the recording is uploaded, instead of you repeatedly calling this endpoint to check. If you do poll, just check whether recording_url is populated — it stays null until the recording is ready.

Code Examples

curl --location 'https://prod-api.superfone.co.in/superfone/api/call-info/sfv_ob_req_wz0x_727aotn' \
--header 'X-API-Key: your_api_key_here'

Success Response

Status Code: 200 OK

{
"data": {
"recording_url": null,
"recording_status": "UPLOADING",
"id": 82948471,
"call_status": "NOANSWER",
"call_type": "OUTBOUND",
"duration": 0,
"phone": "+918892234495",
"start_time": "2026-07-10T09:08:05.000Z",
"end_time": "2026-07-10T09:08:22.000Z",
"recording_expire_at": null,
"answer_time": null,
"init_via_sim": null,
"org_id": 250541,
"voip_number": "+919403891390",
"metadata": {
"task_id": 0,
"sfvopi_payload": {
"app_id": "sfv_app_c36k8xzprdcf",
"answer_url": "https://example.ngrok-free.app/webhook/answer",
"hangup_url": "https://example.ngrok-free.app/webhook/hangup",
"ring_method": "POST",
"request_uuid": "sfv_ob_req_wz0x_727aotn",
"answer_method": "POST",
"hangup_method": "POST"
},
"first_hangup_by": "CALLER",
"hangup_sequence": [
{
"role": "CALLER",
"order": 1,
"timestamp": "2026-07-10T09:08:21Z",
"channel_id": "918892234495-86762449-sfvoch",
"hangup_code": 16
}
],
"is_whatsapp_call": false,
"system_outbound_action": "SFVOPI_OUTBOUND"
},
"updated_at": "2026-07-10T09:08:23.000Z",
"uuid": "b0e8b4cf-de3c-4b34-b65c-5859c05e323f",
"request_uuid": "sfv_ob_req_wz0x_727aotn",
"sip_from": "su_outbound",
"sip_to": "+918892234495",
"deleted_at": null
},
"message": "success"
}

Response Fields

FieldTypeDescription
idnumberInternal numeric identifier for the call record
uuidstringInternal UUID for the call record (distinct from request_uuid)
request_uuidstringThe request identifier used to create this call via POST /sfvopi/calls — matches the request_id path parameter
call_statusstringFinal or current status of the call, e.g. NOANSWER, COMPLETED, BUSY, FAILED, CANCELED. See Call Lifecycle
call_typestringDirection of the call — INBOUND or OUTBOUND
durationnumberCall duration in seconds (0 if the call was never answered)
phonestringCounterparty phone number in E.164 format (the to number for outbound calls)
voip_numberstringYour SFVoPI number used for the call, in E.164 format (the from number for outbound calls)
sip_fromstringInternal SIP identity the call originated from
sip_tostringInternal SIP identity the call was routed to
start_timestring | nullISO 8601 timestamp when the call attempt started
end_timestring | nullISO 8601 timestamp when the call ended
answer_timestring | nullISO 8601 timestamp when the call was answered, null if never answered
recording_urlstring | nullPre-signed URL to the call recording. Populated once recording_status reaches OK or EARLY_MEDIA_ONLYnull while UPLOADING, or if the call has no recording, or if recording_status is EXPIRED/DELETED
recording_url_expires_atstring | undefinedISO 8601 timestamp when the recording_url link itself expires — the sooner of the underlying recording's own expiry (recording_expire_at) or 7 days from when this response was generated. Only present when recording_url is populated in this response — re-fetch this endpoint to get a fresh link
recording_statusstringRecording state — UPLOADING, EARLY_MEDIA_ONLY, OK, DELETED, or EXPIRED. See Recording Status
recording_expire_atstring | nullISO 8601 timestamp when the underlying recording becomes permanently unavailable (recording_status flips to EXPIRED after this), null if not applicable
init_via_simboolean | nullWhether the call was initiated via a SIM-based route, null when not applicable
org_idnumberOrganization ID that owns this call
updated_atstringISO 8601 timestamp the record was last updated
deleted_atstring | nullISO 8601 timestamp the record was soft-deleted, null if active
metadataobjectAdditional call metadata — see Metadata Object below

Metadata Object

FieldTypeDescription
metadata.task_idnumberInternal task identifier associated with the call, 0 if not applicable
metadata.sfvopi_payloadobjectThe webhook configuration (app_id, answer_url, hangup_url, methods, request_uuid) that was used to place the call
metadata.first_hangup_bystring | nullWhich party hung up first — CALLER or CALLEE
metadata.hangup_sequencearrayOrdered list of hangup events, one per party, including SIP hangup_code and timestamp
metadata.is_whatsapp_callbooleanWhether this was a WhatsApp voice call
metadata.system_outbound_actionstringInternal action tag describing how the outbound call was triggered, e.g. SFVOPI_OUTBOUND
Recording Availability

Immediately after a call ends, recording_status is UPLOADING and recording_url is null. We recommend subscribing to the CDR_RECORDING_AVAILABLE event notification instead of polling — it fires as soon as the recording is ready. If polling, listen for your hangup_url webhook, then re-fetch this endpoint a few seconds later — recording_url populates once recording_status transitions to OK (call was answered) or EARLY_MEDIA_ONLY (call was never answered, but pre-answer audio was captured). It stays null if there is no recording, or if recording_status is EXPIRED or DELETED. Each recording_url is a pre-signed link valid until the sooner of the recording's own expiry or 7 days (see recording_url_expires_at) — re-fetch this endpoint to get a fresh one after it expires.

Error Responses

Status CodeMessageWhen It Occurs
400request_id is requiredThe request_id path parameter is missing
401UnAuthorized, Please Provide Valid API KeyMissing or invalid X-API-Key header
403Feature is not enabled for this account. Contact supportNeither the Click-to-Call X-API add-on nor SFVoPI is active on your subscription — see Feature Access
404Call not found for the given request_uuid.No call exists for the given request_id, or it does not belong to your organization
429Too many requests. Please try again after {N} secondsMore than 60 requests in the last minute for your organization
500Unexpected server error

Example Error Response

{
"message": "Call not found for the given request_uuid."
}

Next Steps