# Experian_V1 — Credit Analytics API

**Experian_V1** · version `v1` · status `live`

## Authentication

Every request must carry your API key in the `X-API-Key` header. Your key is
issued to you separately by ops and is never shown in this document.

```
X-API-Key: <your-key>
```

## Base URL

All endpoints are served through the gateway:

```
https://api.pehchaantech.com
```

## Endpoints

| Method | Path | Full URL | Timeout |
| --- | --- | --- | --- |
| `POST` | `/experian/v1` | `https://api.pehchaantech.com/experian/v1` | 35000 ms |

Rate limit: **60 requests/minute** · **100000 requests/day**, counted per API key.

## Overview

Pull a consumer credit report and Experian bureau score for an Indian mobile number. One call returns the full report — the platform handles bureau connectivity, name matching, the masked-mobile verification step, consent, and retries behind the scenes.

The mobile number is the only field you need: {"mobile_no": "9876543210"} is a complete request, and the bureau resolves the identity from the number itself. first_name and last_name are still accepted so existing integrations don’t break, but they are IGNORED — they take no part in the lookup, so sending them cannot improve a match and sending a wrong one cannot cause a miss. A not_found means the bureau genuinely has nothing for that number, not a spelling problem.

Every response — success or not — uses the same envelope, so branch on the `status` field. Latency is capped under 30 seconds; if the bureau is still working you receive `pending` and retry with the same client_ref_num. Set your client timeout to at least 35 seconds. Every call is billed and audited individually.

## Request example

```json
{
  "mobile_no": "9876543210",
  "client_ref_num": "loanapp-7f3a2b"
}
```

## Response example

```json
{
  "result": {
    "INProfileResponse": {
      "SCORE": {
        "BureauScore": "772"
      }
    }
  },
  "status": "completed",
  "success": true,
  "description": "Record found successfully",
  "client_ref_num": "pehchaan-b5f08841d8f1"
}
```

## Fields

| Field | Description |
| --- | --- |
| `mobile_no` | Required — the only field you need. Exactly 10 digits (^\d{10}$). |
| `first_name` | Optional and IGNORED — accepted only so existing integrations don’t break; the bureau derives the identity from the mobile number. If sent: 1–50 chars, letters plus space, period, apostrophe, hyphen (e.g. O’Brien, D. Kumar). |
| `last_name` | Optional and ignored — same rules as first_name. |
| `client_ref_num` | Optional trace id; 6–64 chars of A-Z a-z 0-9 . _ -. Omit and the platform generates one. Reuse the SAME value when retrying a pending response. |
| `success` | true only when a report was delivered. |
| `status` | Machine-readable outcome — branch on this (see Outcomes below). |
| `result` | The credit report (INProfileResponse) — present only when status = completed, otherwise null. Useful paths: result.INProfileResponse.SCORE.BureauScore, .CAIS_Account.CAIS_Summary. Your trace id is also returned in the X-Client-Ref-Num response header. |

## Errors

| Code | Meaning |
| --- | --- |
| `completed (HTTP 200)` | Report delivered in result — consume it. |
| `pending (HTTP 202)` | Not ready within the 30 s budget. Retry after 30–60 s with the SAME client_ref_num; give up after ~5 tries. |
| `not_found (HTTP 200)` | "No data found" — the bureau has no record for this number/name. Definitive; do NOT retry. |
| `invalid_mobile (HTTP 200)` | "Invalid mobile number" — the bureau holds this person’s records under a different number. Collect an alternate number and start a new check. |
| `no_data (HTTP 200)` | Checked, but no usable result. Treat as a no-hit; contact support if frequent. |
| `failed (HTTP 502)` | "Source down — please retry later." Temporary vendor/processing issue; retry with exponential backoff. |
| `401 / 403` | Missing or invalid API key, or the key is not granted this API. |
| `422` | Validation failed — bad mobile_no, or a name that breaks the character rules. |
| `429` | Rate limited — respect the Retry-After header. |
| `503 / 504` | Gateway protecting itself, or the call exceeded the 35 s budget — retry. |

## Changelog

- **2026-07-27** — The mobile number is now the only input. first_name and last_name became optional and are ignored — the bureau derives the identity from the number. Backward compatible: integrations that still send names keep working, their names simply no longer affect the lookup, so a misspelling can no longer cause a false not_found.
- **2026-07-18** — Initial release: names (first_name/last_name) required, automatic masked-mobile verification, sub-30 s latency budget, uniform response envelope.

---

_Generated from the pehchaantech developer portal · canonical page: https://docs.pehchaantech.com/docs/experian-v1 · last updated: 2026-07-27T10:52:38.255Z._
