curl --request POST \
--url https://api.cashfree.com/ppi/wallet/statement \
--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",
"wallet_id": "WALLET124",
"cf_sub_wallet_id": "5432109876543210987"
}
'import requests
url = "https://api.cashfree.com/ppi/wallet/statement"
payload = {
"user_id": "USER827364",
"wallet_id": "WALLET124",
"cf_sub_wallet_id": "5432109876543210987"
}
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',
wallet_id: 'WALLET124',
cf_sub_wallet_id: '5432109876543210987'
})
};
fetch('https://api.cashfree.com/ppi/wallet/statement', 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/wallet/statement",
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',
'wallet_id' => 'WALLET124',
'cf_sub_wallet_id' => '5432109876543210987'
]),
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/wallet/statement"
payload := strings.NewReader("{\n \"user_id\": \"USER827364\",\n \"wallet_id\": \"WALLET124\",\n \"cf_sub_wallet_id\": \"5432109876543210987\"\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/wallet/statement")
.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 \"wallet_id\": \"WALLET124\",\n \"cf_sub_wallet_id\": \"5432109876543210987\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cashfree.com/ppi/wallet/statement")
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 \"wallet_id\": \"WALLET124\",\n \"cf_sub_wallet_id\": \"5432109876543210987\"\n}"
response = http.request(request)
puts response.read_body{
"wallet_id": "WALLET124",
"user_id": "USER827364",
"has_next": true,
"has_prev": false,
"sub_wallet": {
"cf_sub_wallet_id": "5432109876543210987",
"name": "Gift Wallet",
"type": "GIFT_PPI",
"status": "ACTIVE",
"balance": 1500.75,
"available_balance": 1500.75,
"funds_on_hold": 0
},
"statement_period": {
"from": "2025-06-01T00:00:00Z",
"to": "2025-12-01T00:00:00Z"
},
"statements": [
{
"flow_type": "CREDIT",
"cf_statement_id": "8905234567890123406",
"credit_id": "CREDIT126345",
"cf_credit_id": "8901234567890123456",
"amount": 1600,
"closing_balance": 1600,
"issued_gift_codes": [
{
"code": "GIFT-2025-XYZ123",
"value": 1600,
"expiry": "2026-06-15T10:15:45Z"
}
],
"event_type": "RECHARGE",
"remarks": "Recharge for order 123",
"initiated_at": "2025-06-15T14:15:30Z",
"processed_at": "2025-06-15T14:15:45Z"
},
{
"flow_type": "DEBIT",
"cf_statement_id": "8904234567890123405",
"debit_id": "DEBIT420984",
"cf_debit_id": "890123456789012345",
"amount": 600,
"closing_balance": 1000,
"applied_gift_codes": [
{
"code": "GIFT-2025-XYZ213",
"amount_debited": 100,
"value": 100,
"expiry": "2026-07-28T10:30:00Z"
},
{
"code": "GIFT-2025-XYZ444",
"amount_debited": 500,
"value": 600,
"expiry": "2026-07-28T10:30:00Z"
}
],
"event_type": "DEBIT",
"remarks": "Purchase of phone cover",
"initiated_at": "2025-06-14T13:10:00Z",
"processed_at": "2025-06-14T13:10:15Z"
},
{
"flow_type": "CREDIT",
"cf_statement_id": "8903234567890123405",
"refund_id": "REFUND420984",
"cf_refund_id": "890223456789012345",
"amount": 200,
"closing_balance": 800,
"refunded_gift_codes": [
{
"code": "GIFT-2025-XYZ913",
"amount_refunded": 100,
"value": 100,
"expiry": "2026-07-28T10:30:00Z"
},
{
"code": "GIFT-2025-XYZ544",
"amount_refunded": 500,
"value": 100,
"expiry": "2026-07-28T10:30:00Z"
}
],
"event_type": "DEBIT_REFUND",
"remarks": "Refund for order 123",
"initiated_at": "2025-06-14T12:12:00Z",
"processed_at": "2025-06-14T12:12:15Z"
},
{
"flow_type": "DEBIT",
"cf_statement_id": "8902234567890123405",
"amount": 100,
"closing_balance": 700,
"event_type": "INACTIVE",
"remarks": "Sub-Wallet marked inactive due to inactivity",
"initiated_at": "2025-06-14T11:10:00Z",
"processed_at": "2025-06-14T11:10:15Z"
},
{
"flow_type": "DEBIT",
"cf_statement_id": "8901234567890123405",
"amount": 100,
"closing_balance": 600,
"event_type": "EXPIRY",
"remarks": "Gift-Code Expired",
"initiated_at": "2025-06-14T10:10:00Z",
"processed_at": "2025-06-14T10:10:15Z"
},
{
"flow_type": "DEBIT",
"cf_statement_id": "8901234567890123405",
"closure_id": "CLOSURE420984",
"cf_closure_id": "890023456789012145",
"amount": 600,
"closing_balance": 0,
"event_type": "CLOSURE",
"remarks": "Sub-Wallet Closed",
"initiated_at": "2025-06-14T09:10:00Z",
"processed_at": "2025-06-14T09:10:15Z"
}
]
}Get Wallet Statement
Retrieves a paginated wallet statement for a user, including both credit and debit transactions for a specific sub-wallet.
- The statement can be fetched for a specified date range. If no range is provided, the API returns transactions from the last 6 months.
- The
fromdate cannot be earlier than 1 year from the current date. - Pagination is handled using the
afterandbeforeparameters, which define thecf_statement_idboundary for retrieving the next or previous set of records. - Only one of
afterorbeforecan be passed at a time.
curl --request POST \
--url https://api.cashfree.com/ppi/wallet/statement \
--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",
"wallet_id": "WALLET124",
"cf_sub_wallet_id": "5432109876543210987"
}
'import requests
url = "https://api.cashfree.com/ppi/wallet/statement"
payload = {
"user_id": "USER827364",
"wallet_id": "WALLET124",
"cf_sub_wallet_id": "5432109876543210987"
}
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',
wallet_id: 'WALLET124',
cf_sub_wallet_id: '5432109876543210987'
})
};
fetch('https://api.cashfree.com/ppi/wallet/statement', 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/wallet/statement",
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',
'wallet_id' => 'WALLET124',
'cf_sub_wallet_id' => '5432109876543210987'
]),
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/wallet/statement"
payload := strings.NewReader("{\n \"user_id\": \"USER827364\",\n \"wallet_id\": \"WALLET124\",\n \"cf_sub_wallet_id\": \"5432109876543210987\"\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/wallet/statement")
.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 \"wallet_id\": \"WALLET124\",\n \"cf_sub_wallet_id\": \"5432109876543210987\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cashfree.com/ppi/wallet/statement")
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 \"wallet_id\": \"WALLET124\",\n \"cf_sub_wallet_id\": \"5432109876543210987\"\n}"
response = http.request(request)
puts response.read_body{
"wallet_id": "WALLET124",
"user_id": "USER827364",
"has_next": true,
"has_prev": false,
"sub_wallet": {
"cf_sub_wallet_id": "5432109876543210987",
"name": "Gift Wallet",
"type": "GIFT_PPI",
"status": "ACTIVE",
"balance": 1500.75,
"available_balance": 1500.75,
"funds_on_hold": 0
},
"statement_period": {
"from": "2025-06-01T00:00:00Z",
"to": "2025-12-01T00:00:00Z"
},
"statements": [
{
"flow_type": "CREDIT",
"cf_statement_id": "8905234567890123406",
"credit_id": "CREDIT126345",
"cf_credit_id": "8901234567890123456",
"amount": 1600,
"closing_balance": 1600,
"issued_gift_codes": [
{
"code": "GIFT-2025-XYZ123",
"value": 1600,
"expiry": "2026-06-15T10:15:45Z"
}
],
"event_type": "RECHARGE",
"remarks": "Recharge for order 123",
"initiated_at": "2025-06-15T14:15:30Z",
"processed_at": "2025-06-15T14:15:45Z"
},
{
"flow_type": "DEBIT",
"cf_statement_id": "8904234567890123405",
"debit_id": "DEBIT420984",
"cf_debit_id": "890123456789012345",
"amount": 600,
"closing_balance": 1000,
"applied_gift_codes": [
{
"code": "GIFT-2025-XYZ213",
"amount_debited": 100,
"value": 100,
"expiry": "2026-07-28T10:30:00Z"
},
{
"code": "GIFT-2025-XYZ444",
"amount_debited": 500,
"value": 600,
"expiry": "2026-07-28T10:30:00Z"
}
],
"event_type": "DEBIT",
"remarks": "Purchase of phone cover",
"initiated_at": "2025-06-14T13:10:00Z",
"processed_at": "2025-06-14T13:10:15Z"
},
{
"flow_type": "CREDIT",
"cf_statement_id": "8903234567890123405",
"refund_id": "REFUND420984",
"cf_refund_id": "890223456789012345",
"amount": 200,
"closing_balance": 800,
"refunded_gift_codes": [
{
"code": "GIFT-2025-XYZ913",
"amount_refunded": 100,
"value": 100,
"expiry": "2026-07-28T10:30:00Z"
},
{
"code": "GIFT-2025-XYZ544",
"amount_refunded": 500,
"value": 100,
"expiry": "2026-07-28T10:30:00Z"
}
],
"event_type": "DEBIT_REFUND",
"remarks": "Refund for order 123",
"initiated_at": "2025-06-14T12:12:00Z",
"processed_at": "2025-06-14T12:12:15Z"
},
{
"flow_type": "DEBIT",
"cf_statement_id": "8902234567890123405",
"amount": 100,
"closing_balance": 700,
"event_type": "INACTIVE",
"remarks": "Sub-Wallet marked inactive due to inactivity",
"initiated_at": "2025-06-14T11:10:00Z",
"processed_at": "2025-06-14T11:10:15Z"
},
{
"flow_type": "DEBIT",
"cf_statement_id": "8901234567890123405",
"amount": 100,
"closing_balance": 600,
"event_type": "EXPIRY",
"remarks": "Gift-Code Expired",
"initiated_at": "2025-06-14T10:10:00Z",
"processed_at": "2025-06-14T10:10:15Z"
},
{
"flow_type": "DEBIT",
"cf_statement_id": "8901234567890123405",
"closure_id": "CLOSURE420984",
"cf_closure_id": "890023456789012145",
"amount": 600,
"closing_balance": 0,
"event_type": "CLOSURE",
"remarks": "Sub-Wallet Closed",
"initiated_at": "2025-06-14T09:10:00Z",
"processed_at": "2025-06-14T09:10:15Z"
}
]
}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 user's wallet statement for a given period.
Unique identifier for the user, as provided by you during PPI user creation. Only alphanumeric characters, periods (.), hyphens (-), and underscores (_) are allowed.
1 - 50Unique identifier for the wallet, as provided by you during wallet creation. Only alphanumeric characters, periods (.), hyphens (-), and underscores (_) are allowed.
1 - 50"WALLET124"
Unique identifier for the sub-wallet provided in response while creating the wallet. Only numeric characters are allowed.
1 - 19"5432109876543210987"
Start date for the wallet statement in UTC. If not provided, the API defaults to 6 months before the current date-time. It cannot be earlier than 1 year from the current date
"2025-01-01T00:00:00Z"
End date for the wallet statement in UTC. If not provided, the API defaults to the current date-time. Cannot be greater than the current date-time.
"2025-02-01T00:00:00Z"
Maximum number of records to return. Default value is 10.
x <= 5010
The cf_statement_id after which statement should be fetched. When after is provided, the before parameter must not be used.
"5432109876543210987"
The cf_statement_id before which statement should be fetched. When before is provided, the after parameter must not be used.
"5432109876543210987"
Response
Success response for fetching the wallet statement.
Unique identifier for the wallet, as provided by you during wallet creation.
"WALLET124"
Unique identifier for the user, as provided by you during user creation.
"USER827364"
Indicates whether there are additional transactions after the current set within the requested statement period.
true
Indicates whether there are additional transactions before the current set within the requested statement period..
true
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?