curl --request POST \
--url https://api.cashfree.com/ppi/user \
--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",
"phone": "9876543210",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com"
}
'import requests
url = "https://api.cashfree.com/ppi/user"
payload = {
"user_id": "USER827364",
"phone": "9876543210",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com"
}
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',
phone: '9876543210',
first_name: 'John',
last_name: 'Doe',
email: 'john.doe@example.com'
})
};
fetch('https://api.cashfree.com/ppi/user', 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/user",
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',
'phone' => '9876543210',
'first_name' => 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com'
]),
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/user"
payload := strings.NewReader("{\n \"user_id\": \"USER827364\",\n \"phone\": \"9876543210\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\"\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/user")
.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 \"phone\": \"9876543210\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cashfree.com/ppi/user")
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 \"phone\": \"9876543210\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\"\n}"
response = http.request(request)
puts response.read_body{
"user_id": "USER827364",
"first_name": "John",
"last_name": "Doe",
"phone": "9876543210",
"email": "john.doe@example.com",
"status": "ACTIVE",
"cf_user_id": "859473832123456789"
}Create User
Creates a new user in the PPI system with the provided personal information. This endpoint enables merchants to onboard new users who can then be associated with wallets or cards.
curl --request POST \
--url https://api.cashfree.com/ppi/user \
--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",
"phone": "9876543210",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com"
}
'import requests
url = "https://api.cashfree.com/ppi/user"
payload = {
"user_id": "USER827364",
"phone": "9876543210",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com"
}
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',
phone: '9876543210',
first_name: 'John',
last_name: 'Doe',
email: 'john.doe@example.com'
})
};
fetch('https://api.cashfree.com/ppi/user', 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/user",
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',
'phone' => '9876543210',
'first_name' => 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com'
]),
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/user"
payload := strings.NewReader("{\n \"user_id\": \"USER827364\",\n \"phone\": \"9876543210\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\"\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/user")
.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 \"phone\": \"9876543210\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cashfree.com/ppi/user")
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 \"phone\": \"9876543210\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\"\n}"
response = http.request(request)
puts response.read_body{
"user_id": "USER827364",
"first_name": "John",
"last_name": "Doe",
"phone": "9876543210",
"email": "john.doe@example.com",
"status": "ACTIVE",
"cf_user_id": "859473832123456789"
}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 create a new user.
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"
Phone number of the user, without country code. Must be exactly 10 digits. Only numeric characters are allowed.
"9876543210"
First name of the user. Only letters and spaces are allowed.
50"John"
Last name of the user. Only letters and spaces are allowed.
50"Doe"
Email address of the user.
"john.doe@example.com"
Response
Success response for creating a user.
Unique identifier for the user, as provided by you during PPI user creation.
"USER827364"
First name of the user.
"John"
Last name of the user.
"Doe"
Phone number of the user without country code.
"9876543210"
Email address of the user.
"john.doe@example.com"
Current status of the user account. Possible values:
- ACTIVE
- BLOCKED
"ACTIVE"
Unique identifier of the user generated by Cashfree.
"859473832123456789"
Was this page helpful?