curl --request POST \
--url https://api.cashfree.com/ppi/kyc/vkyc/details \
--header 'Content-Type: application/json' \
--header 'x-api-version: <x-api-version>' \
--header 'x-client-id: <api-key>' \
--header 'x-client-secret: <api-key>' \
--data '
{
"user_id": "USER827364",
"verification_id": "TestVkycVerification"
}
'import requests
url = "https://api.cashfree.com/ppi/kyc/vkyc/details"
payload = {
"user_id": "USER827364",
"verification_id": "TestVkycVerification"
}
headers = {
"x-api-version": "<x-api-version>",
"x-client-id": "<api-key>",
"x-client-secret": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-api-version': '<x-api-version>',
'x-client-id': '<api-key>',
'x-client-secret': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({user_id: 'USER827364', verification_id: 'TestVkycVerification'})
};
fetch('https://api.cashfree.com/ppi/kyc/vkyc/details', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cashfree.com/ppi/kyc/vkyc/details",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'user_id' => 'USER827364',
'verification_id' => 'TestVkycVerification'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-version: <x-api-version>",
"x-client-id: <api-key>",
"x-client-secret: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cashfree.com/ppi/kyc/vkyc/details"
payload := strings.NewReader("{\n \"user_id\": \"USER827364\",\n \"verification_id\": \"TestVkycVerification\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-version", "<x-api-version>")
req.Header.Add("x-client-id", "<api-key>")
req.Header.Add("x-client-secret", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cashfree.com/ppi/kyc/vkyc/details")
.header("x-api-version", "<x-api-version>")
.header("x-client-id", "<api-key>")
.header("x-client-secret", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"user_id\": \"USER827364\",\n \"verification_id\": \"TestVkycVerification\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cashfree.com/ppi/kyc/vkyc/details")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-version"] = '<x-api-version>'
request["x-client-id"] = '<api-key>'
request["x-client-secret"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"user_id\": \"USER827364\",\n \"verification_id\": \"TestVkycVerification\"\n}"
response = http.request(request)
puts response.read_body{
"verification_id": "TestVkycVerification",
"cf_verification_id": "8901234567890123458",
"user_id": "USER827364",
"status": "AUDITOR_REVIEWED",
"status_code": "AUDITOR_APPROVED",
"link": "https://vkyc.cashfree.com/session/abc123",
"link_expiry": "2026-06-27",
"meeting_schedule": "2026-06-04T10:15:30Z",
"auditor_remarks": "Looks Good",
"agent_remarks": "Good to go"
}Get Video KYC Details
Retrieves the current status and other details of a Video KYC verification request, using the user_id and verification_id you supplied while initiating the request.
curl --request POST \
--url https://api.cashfree.com/ppi/kyc/vkyc/details \
--header 'Content-Type: application/json' \
--header 'x-api-version: <x-api-version>' \
--header 'x-client-id: <api-key>' \
--header 'x-client-secret: <api-key>' \
--data '
{
"user_id": "USER827364",
"verification_id": "TestVkycVerification"
}
'import requests
url = "https://api.cashfree.com/ppi/kyc/vkyc/details"
payload = {
"user_id": "USER827364",
"verification_id": "TestVkycVerification"
}
headers = {
"x-api-version": "<x-api-version>",
"x-client-id": "<api-key>",
"x-client-secret": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-api-version': '<x-api-version>',
'x-client-id': '<api-key>',
'x-client-secret': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({user_id: 'USER827364', verification_id: 'TestVkycVerification'})
};
fetch('https://api.cashfree.com/ppi/kyc/vkyc/details', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cashfree.com/ppi/kyc/vkyc/details",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'user_id' => 'USER827364',
'verification_id' => 'TestVkycVerification'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-version: <x-api-version>",
"x-client-id: <api-key>",
"x-client-secret: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cashfree.com/ppi/kyc/vkyc/details"
payload := strings.NewReader("{\n \"user_id\": \"USER827364\",\n \"verification_id\": \"TestVkycVerification\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-version", "<x-api-version>")
req.Header.Add("x-client-id", "<api-key>")
req.Header.Add("x-client-secret", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cashfree.com/ppi/kyc/vkyc/details")
.header("x-api-version", "<x-api-version>")
.header("x-client-id", "<api-key>")
.header("x-client-secret", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"user_id\": \"USER827364\",\n \"verification_id\": \"TestVkycVerification\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cashfree.com/ppi/kyc/vkyc/details")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-version"] = '<x-api-version>'
request["x-client-id"] = '<api-key>'
request["x-client-secret"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"user_id\": \"USER827364\",\n \"verification_id\": \"TestVkycVerification\"\n}"
response = http.request(request)
puts response.read_body{
"verification_id": "TestVkycVerification",
"cf_verification_id": "8901234567890123458",
"user_id": "USER827364",
"status": "AUDITOR_REVIEWED",
"status_code": "AUDITOR_APPROVED",
"link": "https://vkyc.cashfree.com/session/abc123",
"link_expiry": "2026-06-27",
"meeting_schedule": "2026-06-04T10:15:30Z",
"auditor_remarks": "Looks Good",
"agent_remarks": "Good to go"
}Authorizations
Your unique client identifier issued by Cashfree. You can find this in your Merchant Dashboard.
The secret key associated with your client ID. Use this to authenticate your API requests. You can find this in your Merchant Dashboard.
Headers
API version to be used. Format is in YYYY-MM-DD.
"2025-11-01"
Body
Request parameters to fetch the current status and details of a Video KYC verification request.
Unique identifier for the user, as provided by you during PPI user creation. Only alphanumeric characters, periods (.), hyphens (-), and underscores (_) are allowed.
1 - 50"USER827364"
Unique identifier for the VKYC verification request, as provided by you during VKYC verification initiation. Only alphanumeric characters, periods (.), hyphens (-), and underscores (_) are allowed.
1 - 50"TestVkycVerification"
Response
Success response for fetching the Video KYC verification status.
Unique identifier for the VKYC verification request, as provided by you during VKYC verification initiation.
"TestVkycVerification"
Unique identifier for the VKYC verification request, generated by Cashfree.
"8901234567890123458"
Unique identifier for the user, as provided by you during PPI user creation.
"USER827364"
Status of the VKYC verification process. Refer to VKYC status and status-code mapping for all valid combinations.
RECEIVED, FAILED, EXPIRED, AGENT_REVIEWED, PRE_VIDEO_CALL, VIDEO_CALL, AUDITOR_REVIEWED "RECEIVED"
Status code for detailed tracking of the VKYC verification process. Refer to VKYC status and status-code mapping for all valid combinations.
LINK_GENERATED, VKYC_EXPIRED, AADHAAR_VERIFICATION_SUCCESS, AADHAAR_VERIFICATION_FAILED, AADHAAR_VERIFICATION_EXPIRED, USER_IP_VERIFICATION_SUCCESSFUL, USER_PROXY_DETECTED, TECHNICAL_FAILURE, USER_LOCATION_VERIFICATION_SUCCESS, USER_LOCATION_OUTSIDE_INDIA, USER_AUDIO_CHECK_FAILED, USER_VIDEO_CHECK_FAILED, USER_LOCATION_PERMISSION_DISABLED, USER_DEVICE_CHECK_SUCCESS, USER_QUEUED, SCHEDULED_USER_QUEUED, NO_AGENT_FOUND, AGENT_ASSIGNED_TO_USER, USER_MEETING_SCHEDULED, USER_MEETING_CANCELLED, USER_ACCEPTED_MEETING, USER_REJECTED_MEETING, USER_MISSED_MEETING, USER_DROPPED_OFF, AGENT_DROPPED_OFF, USER_ENDED_CALL, AGENT_ENDED_CALL, TECHNICAL_ERROR, AGENT_APPROVED, AGENT_REJECTED, AGENT_UNABLE_TO_VALIDATE, AUDITOR_APPROVED, AUDITOR_REJECTED, INITIATE_FAILED "LINK_GENERATED"
Generated VKYC session link for the user.
"https://vkyc.cashfree.com/session/abc123"
The date on which the VKYC link will expire.
"2026-06-27"
Scheduled UTC timestamp for the VKYC meeting. Returns null if no meeting is scheduled.
"2026-06-04T10:15:30Z"
Remarks provided by the auditor during the Video KYC process.
"Verification completed successfully"
Remarks provided by the agent during the Video KYC process.
"Pan not available during video call"
Was this page helpful?