VPA Chargeback Check
curl --request POST \
--url https://api.example.com/api/v1/vpa-chargeback-check \
--header 'Content-Type: application/json' \
--data '
{
"vpas": [
"<string>"
],
"async": true
}
'import requests
url = "https://api.example.com/api/v1/vpa-chargeback-check"
payload = {
"vpas": ["<string>"],
"async": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({vpas: ['<string>'], async: true})
};
fetch('https://api.example.com/api/v1/vpa-chargeback-check', 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.example.com/api/v1/vpa-chargeback-check",
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([
'vpas' => [
'<string>'
],
'async' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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.example.com/api/v1/vpa-chargeback-check"
payload := strings.NewReader("{\n \"vpas\": [\n \"<string>\"\n ],\n \"async\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
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.example.com/api/v1/vpa-chargeback-check")
.header("Content-Type", "application/json")
.body("{\n \"vpas\": [\n \"<string>\"\n ],\n \"async\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/vpa-chargeback-check")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"vpas\": [\n \"<string>\"\n ],\n \"async\": true\n}"
response = http.request(request)
puts response.read_bodyAPI Reference
VPA Chargeback Check
Check VPAs against blocklist
POST
/
api
/
v1
/
vpa-chargeback-check
VPA Chargeback Check
curl --request POST \
--url https://api.example.com/api/v1/vpa-chargeback-check \
--header 'Content-Type: application/json' \
--data '
{
"vpas": [
"<string>"
],
"async": true
}
'import requests
url = "https://api.example.com/api/v1/vpa-chargeback-check"
payload = {
"vpas": ["<string>"],
"async": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({vpas: ['<string>'], async: true})
};
fetch('https://api.example.com/api/v1/vpa-chargeback-check', 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.example.com/api/v1/vpa-chargeback-check",
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([
'vpas' => [
'<string>'
],
'async' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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.example.com/api/v1/vpa-chargeback-check"
payload := strings.NewReader("{\n \"vpas\": [\n \"<string>\"\n ],\n \"async\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
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.example.com/api/v1/vpa-chargeback-check")
.header("Content-Type", "application/json")
.body("{\n \"vpas\": [\n \"<string>\"\n ],\n \"async\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/vpa-chargeback-check")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"vpas\": [\n \"<string>\"\n ],\n \"async\": true\n}"
response = http.request(request)
puts response.read_bodyVPA Chargeback Check
Check VPA (Virtual Payment Address) against a comprehensive blocklist of flagged accounts. Identify potentially fraudulent UPI addresses before processing transactions.Overview
This endpoint helps businesses:- Screen VPAs against known fraud blocklists
- Prevent transactions with flagged accounts
- Reduce chargeback rates
- Protect against UPI fraud
Request
string[]
required
Array of VPAs to check against the blocklist. Maximum 100 VPAs per request.Format:
username@bank (e.g., user@upi, 9876543210@paytm)boolean
default:"true"
If
true (default), request is queued and result delivered via webhook. If false, wait for result synchronously (up to 30 seconds).Headers
| Header | Value | Required |
|---|---|---|
X-API-Key | Your API key | Yes |
Content-Type | application/json | Yes |
Example Request (Async Mode - Default)
curl -X POST "https://api.txncheck.in/api/v1/vpa-chargeback-check" \
-H "X-API-Key: fb_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"vpas": ["user@upi", "9876543210@paytm"]
}'
import requests
response = requests.post(
"https://api.txncheck.in/api/v1/vpa-chargeback-check",
headers={
"X-API-Key": "fb_your_api_key_here",
"Content-Type": "application/json"
},
json={
"vpas": ["user@upi", "9876543210@paytm"]
}
)
print(response.json())
const axios = require('axios');
const response = await axios.post(
'https://api.txncheck.in/api/v1/vpa-chargeback-check',
{ vpas: ['user@upi', '9876543210@paytm'] },
{
headers: {
'X-API-Key': 'fb_your_api_key_here',
'Content-Type': 'application/json'
}
}
);
console.log(response.data);
<?php
$ch = curl_init("https://api.txncheck.in/api/v1/vpa-chargeback-check");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"X-API-Key: fb_your_api_key_here",
"Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"vpas" => ["user@upi", "9876543210@paytm"]
]));
$response = curl_exec($ch);
curl_close($ch);
echo $response;
payload := map[string][]string{
"vpas": {"user@upi", "9876543210@paytm"},
}
body, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", "https://api.txncheck.in/api/v1/vpa-chargeback-check", bytes.NewBuffer(body))
req.Header.Set("X-API-Key", "fb_your_api_key_here")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
Example Request (Sync Mode)
curl -X POST "https://api.txncheck.in/api/v1/vpa-chargeback-check" \
-H "X-API-Key: fb_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"vpas": ["user@upi", "9876543210@paytm"],
"async": false
}'
const axios = require('axios');
const response = await axios.post(
'https://api.txncheck.in/api/v1/vpa-chargeback-check',
{ vpas: ['user@upi', '9876543210@paytm'], async: false },
{
headers: {
'X-API-Key': 'fb_your_api_key_here',
'Content-Type': 'application/json'
}
}
);
console.log(response.data);
Response
- Async Mode (202)
- Sync Mode (200)
202 Accepted
Request accepted and queued for processing.{
"statusCode": 202,
"message": "Request accepted and queued for processing",
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"status": "QUEUED"
}
Result Data (via webhook or polling)
{
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"method": "vpa-chargeback-check",
"status": "COMPLETED",
"result": {
"blocklisted": [
{ "vpa": "user@upi", "isBlocklisted": true, "source": "provider" }
],
"clean": [
{ "vpa": "9876543210@paytm", "isBlocklisted": false }
],
"summary": { "total": 2, "blocklisted": 1, "clean": 1 }
},
"webhookStatus": "SENT",
"createdAt": "2025-01-11T10:30:00.000Z",
"completedAt": "2025-01-11T10:30:05.000Z"
}
200 OK
Request completed synchronously with result in response.{
"statusCode": 200,
"requestId": "550e8400-e29b-41d4-a716-446655440000",
"method": "vpa-chargeback-check",
"status": "COMPLETED",
"result": {
"blocklisted": [
{ "vpa": "user@upi", "isBlocklisted": true, "source": "provider" }
],
"clean": [
{ "vpa": "9876543210@paytm", "isBlocklisted": false }
],
"summary": { "total": 2, "blocklisted": 1, "clean": 1 }
},
"createdAt": "2025-01-11T10:30:00.000Z",
"completedAt": "2025-01-11T10:30:05.000Z"
}
Sync mode has a 30-second timeout. Use async mode for large VPA lists.
Result Fields
| Field | Type | Description |
|---|---|---|
blocklisted | array | VPAs found in the blocklist |
blocklisted[].vpa | string | The VPA address |
blocklisted[].isBlocklisted | boolean | Always true for blocklisted VPAs |
blocklisted[].source | string | Source of blocklist entry |
clean | array | VPAs not found in the blocklist |
clean[].vpa | string | The VPA address |
clean[].isBlocklisted | boolean | Always false for clean VPAs |
summary.total | number | Total VPAs checked |
summary.blocklisted | number | Count of blocklisted VPAs |
summary.clean | number | Count of clean VPAs |
Error Responses
400 Bad Request
Invalid VPA format or array size.{
"statusCode": 400,
"message": ["Each VPA must be in format username@bank (e.g., user@upi)"],
"error": "Bad Request"
}
{
"statusCode": 400,
"message": ["Maximum 100 VPAs allowed per request"],
"error": "Bad Request"
}
401 Unauthorized
Invalid or missing API key.{
"statusCode": 401,
"message": "Invalid API key",
"error": "Unauthorized"
}
402 Payment Required
Insufficient account balance.{
"statusCode": 402,
"message": "Insufficient wallet balance",
"error": "Payment Required"
}
403 Forbidden
Method not enabled for your account.{
"statusCode": 403,
"message": "Access to method 'vpa-chargeback-check' is not allowed",
"error": "Forbidden"
}
408 Request Timeout (Sync Mode Only)
Request processing timed out.{
"statusCode": 408,
"message": "Request processing timed out after 30 seconds",
"error": "Request Timeout"
}
429 Too Many Requests
Rate limit exceeded.{
"statusCode": 429,
"message": "Too Many Requests",
"error": "Too Many Requests"
}
Use Cases
Pre-Transaction Screening
Pre-Transaction Screening
Check the recipient’s VPA before processing a payment to avoid sending money to fraudulent accounts.
Risk Assessment
Risk Assessment
Include blocklist status in your risk scoring model for transaction approval decisions.
Chargeback Prevention
Chargeback Prevention
Prevent chargebacks by blocking transactions to known fraudulent VPAs.
Batch Screening
Batch Screening
Screen multiple VPAs in a single request for efficient bulk processing.
For checking more than 100 VPAs, use the Bulk VPA Check endpoint or make multiple requests.
