> ## Documentation Index
> Fetch the complete documentation index at: https://docs.txncheck.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Full Check

> Full verification: UPI + KYC + Chargeback check

# Full Check

Comprehensive verification combining UPI lookup, KYC verification, and VPA chargeback check in a single request. Get complete customer intelligence in one API call.

## Overview

This endpoint performs three verification steps:

1. **UPI by Mobile** - Retrieve all UPI VPAs linked to the mobile number
2. **KYC by Mobile** - Fetch KYC data (name, PAN, masked Aadhaar, DOB)
3. **VPA Chargeback Check** - Check discovered VPAs against the blocklist

This is ideal for comprehensive customer verification during onboarding or high-value transactions.

## Request

<ParamField body="mobile" type="string" required>
  Mobile number in Indian international format (`+91XXXXXXXXXX`)
</ParamField>

<ParamField body="name" type="string" required>
  Name of the mobile number owner (e.g., `Rajesh Kumar`). Required for UPI VPA lookup step.
</ParamField>

<ParamField body="async" type="boolean" default="true">
  If `true` (default), request is queued and result delivered via webhook. If `false`, wait for result synchronously (up to 30 seconds).
</ParamField>

### Headers

| Header         | Value              | Required |
| -------------- | ------------------ | -------- |
| `X-API-Key`    | Your API key       | Yes      |
| `Content-Type` | `application/json` | Yes      |

### Example Request (Async Mode - Default)

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.txncheck.in/api/v1/full-check" \
    -H "X-API-Key: fb_your_api_key_here" \
    -H "Content-Type: application/json" \
    -d '{
      "mobile": "+919876543210",
      "name": "Rajesh Kumar"
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.txncheck.in/api/v1/full-check",
      headers={
          "X-API-Key": "fb_your_api_key_here",
          "Content-Type": "application/json"
      },
      json={"mobile": "+919876543210", "name": "Rajesh Kumar"}
  )
  print(response.json())
  ```

  ```javascript Node.js theme={null}
  const axios = require('axios');

  const response = await axios.post(
    'https://api.txncheck.in/api/v1/full-check',
    { mobile: '+919876543210', name: 'Rajesh Kumar' },
    {
      headers: {
        'X-API-Key': 'fb_your_api_key_here',
        'Content-Type': 'application/json'
      }
    }
  );
  console.log(response.data);
  ```

  ```php PHP theme={null}
  <?php
  $ch = curl_init("https://api.txncheck.in/api/v1/full-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([
      "mobile" => "+919876543210",
      "name" => "Rajesh Kumar"
  ]));
  $response = curl_exec($ch);
  curl_close($ch);
  echo $response;
  ```

  ```go Go theme={null}
  payload := map[string]string{"mobile": "+919876543210", "name": "Rajesh Kumar"}
  body, _ := json.Marshal(payload)

  req, _ := http.NewRequest("POST", "https://api.txncheck.in/api/v1/full-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)
  ```
</CodeGroup>

### Example Request (Sync Mode)

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.txncheck.in/api/v1/full-check" \
    -H "X-API-Key: fb_your_api_key_here" \
    -H "Content-Type: application/json" \
    -d '{
      "mobile": "+919876543210",
      "name": "Rajesh Kumar",
      "async": false
    }'
  ```

  ```javascript Node.js theme={null}
  const axios = require('axios');

  const response = await axios.post(
    'https://api.txncheck.in/api/v1/full-check',
    { mobile: '+919876543210', name: 'Rajesh Kumar', async: false },
    {
      headers: {
        'X-API-Key': 'fb_your_api_key_here',
        'Content-Type': 'application/json'
      }
    }
  );
  console.log(response.data);
  ```
</CodeGroup>

<Warning>
  Full Check performs multiple verification steps and may take longer to complete. Consider using async mode (default) to avoid timeouts.
</Warning>

## Response

<Tabs>
  <Tab title="Async Mode (202)">
    ### 202 Accepted

    Request accepted and queued for processing.

    ```json theme={null}
    {
      "statusCode": 202,
      "message": "Request accepted and queued for processing",
      "requestId": "550e8400-e29b-41d4-a716-446655440000",
      "status": "QUEUED"
    }
    ```
  </Tab>

  <Tab title="Sync Mode (200)">
    ### 200 OK

    Request completed synchronously with all results in response.

    ```json theme={null}
    {
      "statusCode": 200,
      "requestId": "550e8400-e29b-41d4-a716-446655440000",
      "method": "full-check",
      "status": "COMPLETED",
      "stepStatuses": {
        "upiByMobile": "ok",
        "kycByMobile": "ok",
        "vpaChargebackCheck": "ok"
      },
      "result": {
        "upiByMobile": { "name": "JOHN DOE", "vpas": ["johndoe@upi"], "status": "1" },
        "kycByMobile": { "fullName": "JOHN DOE", "pan": "ABCDE1234F", ... },
        "vpaChargebackCheck": {
          "vpas": [
            { "vpa": "johndoe@upi", "isBlocklisted": false }
          ]
        }
      },
      "createdAt": "2025-01-11T10:30:00.000Z",
      "completedAt": "2025-01-11T10:30:10.000Z"
    }
    ```

    <Warning>
      Sync mode has a 30-second timeout. Full Check may approach this limit due to multiple verification steps.
    </Warning>
  </Tab>
</Tabs>

### Result Data (via webhook, polling, or sync response)

When the request completes successfully:

```json theme={null}
{
  "requestId": "550e8400-e29b-41d4-a716-446655440000",
  "method": "full-check",
  "status": "COMPLETED",
  "stepStatuses": {
    "upiByMobile": "ok",
    "kycByMobile": "ok",
    "vpaChargebackCheck": "ok"
  },
  "result": {
    "upiByMobile": {
      "name": "JOHN DOE",
      "vpas": [
        "johndoe@upi",
        "9876543210@paytm",
        "9876543210@ybl"
      ],
      "status": "1"
    },
    "kycByMobile": {
      "fullName": "JOHN DOE",
      "pan": "ABCDE1234F",
      "maskedAadhaar": "XXXXXXXX1234",
      "dob": "1990-01-15",
      "status": "1"
    },
    "vpaChargebackCheck": {
      "vpas": [
        {"vpa": "johndoe@upi", "isBlocklisted": false},
        {"vpa": "9876543210@paytm", "isBlocklisted": false},
        {"vpa": "9876543210@ybl", "isBlocklisted": false}
      ]
    }
  },
  "webhookStatus": "SENT",
  "createdAt": "2025-01-11T10:30:00.000Z",
  "completedAt": "2025-01-11T10:30:10.000Z"
}
```

### Partial Completion

If some steps fail but others succeed, the status will be `PARTIAL`:

```json theme={null}
{
  "requestId": "550e8400-e29b-41d4-a716-446655440000",
  "method": "full-check",
  "status": "PARTIAL",
  "stepStatuses": {
    "upiByMobile": "ok",
    "kycByMobile": "failed",
    "vpaChargebackCheck": "ok"
  },
  "result": {
    "upiByMobile": {
      "name": "JOHN DOE",
      "vpas": ["johndoe@upi"],
      "status": "1"
    },
    "vpaChargebackCheck": {
      "vpas": [{"vpa": "johndoe@upi", "isBlocklisted": false}]
    }
  },
  "error": {
    "kycByMobile": {
      "class": "PROVIDER_TEMPORARY",
      "message": "KYC service temporarily unavailable"
    }
  },
  "webhookStatus": "SENT",
  "createdAt": "2025-01-11T10:30:00.000Z",
  "completedAt": "2025-01-11T10:30:10.000Z"
}
```

### Step Statuses

| Status    | Description                                                 |
| --------- | ----------------------------------------------------------- |
| `ok`      | Step completed successfully                                 |
| `failed`  | Step failed (check error details)                           |
| `skipped` | Step was skipped (e.g., no VPAs found for chargeback check) |
| `pending` | Step not yet executed                                       |

### Result Fields

#### upiByMobile

| Field    | Type      | Description                            |
| -------- | --------- | -------------------------------------- |
| `name`   | string    | Name associated with the mobile number |
| `vpas`   | string\[] | Array of UPI VPAs                      |
| `status` | string    | `"1"` if data found                    |

#### kycByMobile

| Field           | Type    | Description                      |
| --------------- | ------- | -------------------------------- |
| `fullName`      | string  | Full name as per KYC records     |
| `pan`           | string  | PAN number                       |
| `maskedAadhaar` | string  | Masked Aadhaar number            |
| `dob`           | string  | Date of birth (`YYYY-MM-DD`)     |
| `status`        | string  | `"1"` if data found              |
| `cached`        | boolean | `true` if response is from cache |

#### vpaChargebackCheck

| Field                  | Type    | Description                         |
| ---------------------- | ------- | ----------------------------------- |
| `vpas`                 | array   | VPA results with blocklist status   |
| `vpas[].vpa`           | string  | VPA                                 |
| `vpas[].isBlocklisted` | boolean | `true` if VPA is in blocklist       |
| `vpas[].source`        | string  | Source of blocklist data (optional) |

## Error Responses

### 400 Bad Request

Invalid mobile number format.

```json theme={null}
{
  "statusCode": 400,
  "message": ["Mobile must be in format +91XXXXXXXXXX (Indian number)"],
  "error": "Bad Request"
}
```

### 401 Unauthorized

Invalid or missing API key.

```json theme={null}
{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}
```

### 402 Payment Required

Insufficient account balance.

```json theme={null}
{
  "statusCode": 402,
  "message": "Insufficient wallet balance",
  "error": "Payment Required"
}
```

### 403 Forbidden

Method not enabled for your account.

```json theme={null}
{
  "statusCode": 403,
  "message": "Access to method 'full-check' is not allowed",
  "error": "Forbidden"
}
```

### 408 Request Timeout (Sync Mode Only)

Request processing timed out.

```json theme={null}
{
  "statusCode": 408,
  "message": "Request processing timed out after 30 seconds",
  "error": "Request Timeout"
}
```

### 429 Too Many Requests

Rate limit exceeded.

```json theme={null}
{
  "statusCode": 429,
  "message": "Too Many Requests",
  "error": "Too Many Requests"
}
```

## Use Cases

<AccordionGroup>
  <Accordion title="Customer Onboarding">
    Get complete customer verification in a single API call during account creation.
  </Accordion>

  <Accordion title="High-Value Transactions">
    Perform comprehensive verification before processing large transactions.
  </Accordion>

  <Accordion title="Enhanced Due Diligence">
    Meet compliance requirements with thorough identity verification.
  </Accordion>

  <Accordion title="Risk Assessment">
    Build a complete risk profile combining identity, UPI, and blocklist data.
  </Accordion>
</AccordionGroup>

<Note>
  Full Check is billed as three separate verifications. Ensure your account has sufficient balance for all steps.
</Note>
