CIBIL Credit Report AI Agent / LLM
BusinessEverything an AI coding assistant needs to write a working CIBIL Credit Report integration without opening another page: endpoint, authentication, parameters, a real request, both response shapes and the platform rules it cannot infer from a single example. Copy the brief below and paste it into Claude, Cursor, GitHub Copilot, ChatGPT or any other agent.
Machine-readable spec — Markdown
# CIBIL Credit Report API — Way2API®
- **Endpoint:** `POST https://app.way2api.com/api/v1/credit-report-cibil/fetch-report`
- **Auth:** `Authorization: Bearer YOUR_API_KEY` (or `X-API-Key: YOUR_API_KEY`)
- **Content-Type:** `application/json`
- **Category:** Business
- **Availability:** Available in India
- **Docs:** https://app.way2api.com/documentation/cibil-credit-report
## What it does
CIBIL Credit Report API — Pull a full TransUnion CIBIL consumer credit report and CIBIL score for an individual from their PAN, mobile number, name and gender, with the individual's explicit consent. Returns the CIBIL score with its reason codes, the subject as the bureau holds them (names and date of birth, PAN and other IDs, phone numbers, e-mail addresses, addresses and employment), an account summary (total, overdue and zero-balance accounts, sanctioned amount, current and overdue balance), every loan and credit card trade line with its lender, limits, balance, overdue amount, EMI, interest rate, write-off and settlement status and month-by-month repayment history (DPD), and the enquiry history with an enquiry summary. Dates are returned as ISO YYYY-MM-DD, amounts as numbers (null where the bureau reported nothing), and every classification — account type, ownership, credit facility status, suit filed status, payment frequency, collateral, enquiry purpose, asset classification — as a stable published value such as credit_card or written_off rather than a raw bureau code, so both the shape and the values of this response are guaranteed not to move. Built for loan underwriting, credit card and BNPL approvals, credit risk assessment, portfolio monitoring and fintech onboarding. Need the bureau's formatted document instead? Use the CIBIL Credit Report PDF API.
## Request body (application/json)
| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes | Full name of the individual as it appears on their PAN. 2 to 100 characters. |
| `mobile` | string | yes | 10-digit Indian mobile number of the individual, starting 6-9. Ideally the number registered with their lenders. |
| `pan` | string | yes | 10-character PAN of the individual, e.g. ABCDE1234F. Case-insensitive. |
| `gender` | string | yes | Gender of the individual: "male", "female" or "transgender". Case-insensitive; "M", "F" and "T" are also accepted. |
| `consent` | string | yes | Must be "Y". A credit bureau enquiry is only lawful with the individual's explicit consent, and you must have obtained and retained it. |
## Example request
```bash
curl -X POST https://app.way2api.com/api/v1/credit-report-cibil/fetch-report \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Ananya Sharma","mobile":"9876543210","pan":"ABCDE1234F","gender":"female","consent":"Y"}'
```
## Success response — 200
```json
{
"status": "SUCCESS",
"status_code": 200,
"charged": true,
"success": true,
"message": "",
"message_code": "OK",
"order_id": "W2A1739512345abcdef01",
"data": {
"order_id": "W2A1739512345abcdef01",
"result": {
"name": "ANANYA SHARMA",
"mobile": "9876543210",
"pan": "ABCDE1234F",
"gender": "female",
"credit_score": 762,
"report": {
"control_number": "5123456789",
"scored_on": "2026-09-19"
},
"scores": [
{
"score": 762,
"model": "CIBILTransUnionScore3",
"scored_on": "2026-09-19",
"reason_codes": [
"14",
"39"
]
}
],
"names": [
{
"name": "ANANYA SHARMA",
"date_of_birth": "1992-04-18",
"gender": "female"
}
],
"identities": [
{
"type": "pan",
"number": "ABCDE1234F"
}
],
"phones": [
{
"number": "9876543210",
"type": "mobile"
}
],
"emails": [
"[email protected]"
],
"addresses": [
{
"line_1": "FLAT 402 EXAMPLE RESIDENCY",
"line_2": "12 MG ROAD INDIRANAGAR",
"state_code": "29",
"pincode": "560038",
"category": "residence",
"residence_type": "",
"reported_on": "2026-08-31"
}
],
"employment": [
{
"employer": "",
"account_type": "credit_card",
"occupation": "salaried",
"income": null,
"income_frequency": "",
"income_basis": "",
"reported_on": "2026-08-31"
}
],
"summary": {
"total_accounts": 2,
"overdue_accounts": 0,
"zero_balance_accounts": 0,
"sanctioned_amount": 496000,
"current_balance": 206710,
"overdue_balance": 0,
"latest_opened_on": "2024-03-05",
"oldest_opened_on": "2021-06-14"
},
"enquiry_summary": {
"total": 1,
"last_30_days": 0,
"last_12_months": 0,
"last_24_months": 0,
"latest_enquiry_on": "2024-02-27"
},
"accounts": [
{
"lender": "EXAMPLE BANK",
"account_number": "XXXXXXXXXXXX1234",
"account_type": "credit_card",
"ownership": "individual",
"credit_facility_status": "",
"suit_filed_status": "",
"opened_on": "2021-06-14",
"closed_on": "",
"reported_on": "2026-08-31",
"last_payment_on": "2026-08-12",
"payment_history_from": "2026-06-01",
"payment_history_to": "2026-08-01",
"sanctioned_amount": 96000,
"credit_limit": null,
"cash_limit": 38000,
"current_balance": 24310,
"amount_overdue": 0,
"last_payment_amount": 18500,
"emi_amount": null,
"interest_rate": null,
"tenure_months": null,
"payment_frequency": "",
"written_off_total": null,
"written_off_principal": null,
"settlement_amount": null,
"collateral_type": "",
"collateral_value": null,
"payment_history": "000000000",
"monthly_history": [
{
"month": "2026-08",
"status": "0",
"days_past_due": 0,
"asset_classification": ""
},
{
"month": "2026-07",
"status": "0",
"days_past_due": 0,
"asset_classification": ""
},
{
"month": "2026-06",
"status": "0",
"days_past_due": 0,
"asset_classification": ""
}
]
},
{
"lender": "EXAMPLE FINANCE",
"account_number": "XXXXXXXX5678",
"account_type": "personal_loan",
"ownership": "individual",
"credit_facility_status": "",
"suit_filed_status": "",
"opened_on": "2024-03-05",
"closed_on": "",
"reported_on": "2026-08-31",
"last_payment_on": "2026-08-05",
"payment_history_from": "2026-06-01",
"payment_history_to": "2026-08-01",
"sanctioned_amount": 400000,
"credit_limit": null,
"cash_limit": null,
"current_balance": 182400,
"amount_overdue": 0,
"last_payment_amount": 11250,
"emi_amount": 11250,
"interest_rate": 13.5,
"tenure_months": 48,
"payment_frequency": "monthly",
"written_off_total": null,
"written_off_principal": null,
"settlement_amount": null,
"collateral_type": "",
"collateral_value": null,
"payment_history": "000000000",
"monthly_history": [
{
"month": "2026-08",
"status": "0",
"days_past_due": 0,
"asset_classification": ""
},
{
"month": "2026-07",
"status": "0",
"days_past_due": 0,
"asset_classification": ""
},
{
"month": "2026-06",
"status": "0",
"days_past_due": 0,
"asset_classification": ""
}
]
}
],
"enquiries": [
{
"enquired_on": "2024-02-27",
"member": "EXAMPLE FINANCE",
"purpose": "personal_loan",
"amount": 400000
}
]
}
}
}
```
## Error response — 422
```json
{
"status": "SUCCESS",
"status_code": 422,
"charged": true,
"success": false,
"message": "No credit records were found for the details provided.",
"message_code": "NO_RECORD_FOUND",
"order_id": "W2A1739512345abcdef01",
"data": {
"order_id": "W2A1739512345abcdef01",
"error_code": "no_record"
}
}
```
## Integration rules
- Every response is JSON carrying `status`, `status_code`, `charged`, `success`, `message`, `message_code` and (once a call reaches the provider) `order_id`. The verification payload is under `data.result`.
- `charged` (boolean) is the authority on billing. Do NOT infer it from the HTTP status: `422` is returned both for input we rejected (not charged) and for a lookup the provider ran and billed us for that returned a negative result (charged).
- `message_code` is a fixed vocabulary — branch on it instead of parsing `message`. Values: `OK`, `ACCEPTED`, `PROVIDER_NO_RESPONSE`, `VERIFICATION_FAILED`, `NO_RECORD_FOUND`, `INVALID_INPUT`, `REQUEST_FAILED`, `MISSING_API_KEY`, `INVALID_API_KEY`, `INSUFFICIENT_BALANCE`, `NO_API_ACCESS`, `NOT_FOUND`, `RATE_LIMITED`, `INTERNAL_ERROR`, `PROVIDER_UNAVAILABLE`.
- `success` reports the verification outcome; `status` reports the ORDER lifecycle (`SUCCESS`/`PENDING`/`FAILED`). They differ on a charged negative result: the order completed and was billed while the verification did not pass.
- A failed verification is still a successful HTTP call — the outcome lives in the response body, so do not treat `200` as "verified".
- Status codes: `200` result returned, `202` pending or provider did not respond (both charged — quote the `order_id`), `401` missing/invalid key, `402` insufficient balance, `403` no access to this service, `422` see `charged`, `429` rate limited (honour the `Retry-After` header), `503` temporarily unavailable.
- Rate limits are per API key, per service, on a 1-minute sliding window.
- Load the API key from an environment variable or secret store. Never hard-code it, never commit it, and never ship it in client-side code — calls must be made from your backend.
Prompts to pair it with
- Write a production-ready CIBIL Credit Report integration in PHP using this spec, with error handling and retries.
- Given this spec, generate typed request/response models and a client class.
- Review my existing CIBIL Credit Report integration against this spec and list what I handle incorrectly.
⚠ Before you paste generated code
Never let an assistant hard-code your API key — load it from an environment variable or a
secret store, and call this endpoint from your backend only. A failed verification is still a
successful HTTP call, so check the success field in the body
rather than treating 200 as verified.