curl --request POST \
--url https://api.cashfree.com/ppi/kyc/min \
--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 '
{
"otp_verification_id": "Test123",
"user_id": "USER827364",
"verification_id": "TestVerification",
"document": {
"type": "PAN",
"identifier": "ABCDE1234F",
"name": "SHAH RAMESH",
"dob": "1990-05-12"
}
}
'import requests
url = "https://api.cashfree.com/ppi/kyc/min"
payload = {
"otp_verification_id": "Test123",
"user_id": "USER827364",
"verification_id": "TestVerification",
"document": {
"type": "PAN",
"identifier": "ABCDE1234F",
"name": "SHAH RAMESH",
"dob": "1990-05-12"
}
}
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({
otp_verification_id: 'Test123',
user_id: 'USER827364',
verification_id: 'TestVerification',
document: {type: 'PAN', identifier: 'ABCDE1234F', name: 'SHAH RAMESH', dob: '1990-05-12'}
})
};
fetch('https://api.cashfree.com/ppi/kyc/min', 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/min",
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([
'otp_verification_id' => 'Test123',
'user_id' => 'USER827364',
'verification_id' => 'TestVerification',
'document' => [
'type' => 'PAN',
'identifier' => 'ABCDE1234F',
'name' => 'SHAH RAMESH',
'dob' => '1990-05-12'
]
]),
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/min"
payload := strings.NewReader("{\n \"otp_verification_id\": \"Test123\",\n \"user_id\": \"USER827364\",\n \"verification_id\": \"TestVerification\",\n \"document\": {\n \"type\": \"PAN\",\n \"identifier\": \"ABCDE1234F\",\n \"name\": \"SHAH RAMESH\",\n \"dob\": \"1990-05-12\"\n }\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/min")
.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 \"otp_verification_id\": \"Test123\",\n \"user_id\": \"USER827364\",\n \"verification_id\": \"TestVerification\",\n \"document\": {\n \"type\": \"PAN\",\n \"identifier\": \"ABCDE1234F\",\n \"name\": \"SHAH RAMESH\",\n \"dob\": \"1990-05-12\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cashfree.com/ppi/kyc/min")
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 \"otp_verification_id\": \"Test123\",\n \"user_id\": \"USER827364\",\n \"verification_id\": \"TestVerification\",\n \"document\": {\n \"type\": \"PAN\",\n \"identifier\": \"ABCDE1234F\",\n \"name\": \"SHAH RAMESH\",\n \"dob\": \"1990-05-12\"\n }\n}"
response = http.request(request)
puts response.read_body{
"verification_id": "TestVerification",
"cf_verification_id": "8901234567890123452",
"otp_verification_id": "Test123",
"status": "VERIFIED",
"user_id": "USER827364"
}Min KYC Verification
Completes the minimum KYC verification process by validating user documents and OTP verification. This endpoint processes document information (PAN card details) along with the OTP verification ID to complete the minimum KYC requirements for the user.
curl --request POST \
--url https://api.cashfree.com/ppi/kyc/min \
--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 '
{
"otp_verification_id": "Test123",
"user_id": "USER827364",
"verification_id": "TestVerification",
"document": {
"type": "PAN",
"identifier": "ABCDE1234F",
"name": "SHAH RAMESH",
"dob": "1990-05-12"
}
}
'import requests
url = "https://api.cashfree.com/ppi/kyc/min"
payload = {
"otp_verification_id": "Test123",
"user_id": "USER827364",
"verification_id": "TestVerification",
"document": {
"type": "PAN",
"identifier": "ABCDE1234F",
"name": "SHAH RAMESH",
"dob": "1990-05-12"
}
}
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({
otp_verification_id: 'Test123',
user_id: 'USER827364',
verification_id: 'TestVerification',
document: {type: 'PAN', identifier: 'ABCDE1234F', name: 'SHAH RAMESH', dob: '1990-05-12'}
})
};
fetch('https://api.cashfree.com/ppi/kyc/min', 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/min",
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([
'otp_verification_id' => 'Test123',
'user_id' => 'USER827364',
'verification_id' => 'TestVerification',
'document' => [
'type' => 'PAN',
'identifier' => 'ABCDE1234F',
'name' => 'SHAH RAMESH',
'dob' => '1990-05-12'
]
]),
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/min"
payload := strings.NewReader("{\n \"otp_verification_id\": \"Test123\",\n \"user_id\": \"USER827364\",\n \"verification_id\": \"TestVerification\",\n \"document\": {\n \"type\": \"PAN\",\n \"identifier\": \"ABCDE1234F\",\n \"name\": \"SHAH RAMESH\",\n \"dob\": \"1990-05-12\"\n }\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/min")
.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 \"otp_verification_id\": \"Test123\",\n \"user_id\": \"USER827364\",\n \"verification_id\": \"TestVerification\",\n \"document\": {\n \"type\": \"PAN\",\n \"identifier\": \"ABCDE1234F\",\n \"name\": \"SHAH RAMESH\",\n \"dob\": \"1990-05-12\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cashfree.com/ppi/kyc/min")
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 \"otp_verification_id\": \"Test123\",\n \"user_id\": \"USER827364\",\n \"verification_id\": \"TestVerification\",\n \"document\": {\n \"type\": \"PAN\",\n \"identifier\": \"ABCDE1234F\",\n \"name\": \"SHAH RAMESH\",\n \"dob\": \"1990-05-12\"\n }\n}"
response = http.request(request)
puts response.read_body{
"verification_id": "TestVerification",
"cf_verification_id": "8901234567890123452",
"otp_verification_id": "Test123",
"status": "VERIFIED",
"user_id": "USER827364"
}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 complete minimum KYC verification for a user.
Unique identifier for the OTP verification request that was previously verified. Only alphanumeric characters, periods (.), hyphens (-), and underscores (_) are allowed.
1 - 50"Test123"
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 that you create to identify the KYC verification request in your system. Only alphanumeric characters, periods (.), hyphens (-), and underscores (_) are allowed.
1 - 50"TestVerification"
Document information for KYC verification.
Show child attributes
Show child attributes
Response
Success response for completing minimum KYC verification.
Unique identifier for the KYC verification request, as provided by you during the request.
"TestVerification"
Unique identifier for the KYC verification request, generated by Cashfree.
"8901234567890123452"
Unique identifier for the OTP verification request that was used in this KYC verification.
"Test123"
Status of the KYC verification process.
VERIFIED, FAILED "VERIFIED"
Unique identifier for the user, as provided by you during PPI user creation.
"USER827364"
Was this page helpful?