---
title: PAN and Company Name to LEI Lookup API
slug: api-marketplace/pan-and-company-name-to-lei-lookup-api
createdAt: 2026-10-08T09:49:29.786Z
---

# Overview

The PAN and Company Name to LEI Lookup API returns the Legal Entity Identifier (LEI) records of an Indian business when you provide its PAN or its company name. For each request you get:

- **LEI records** (records): the LEI, legal name, legal address and a name-match score for each match, best match first.
- **Searched company name** (companyName): for a PAN request, the registered name resolved from the PAN.
- **Total count** (totalRecordsFound): the number of matches found, even when the list is capped.

**Why does this exist?** An LEI is a 20-character code that users do not remember, and as FIs do not want to ask customers to enter it in a journey. This API fetches the records from a PAN or company name, so customers never type an LEI.

**How it works.** The API is synchronous:

1. Call Lookup with a PAN or a company name, plus the consent text.
2. For a PAN, the API first resolves the registered company name.
3. It searches the LEI source by name and scores each record against the searched name.
4. You get the records in the same response, best match first.

## Basics

| Item                            | Value                                                                         |
| ------------------------------- | ----------------------------------------------------------------------------- |
| Base URL (UAT / Pre-production) | https\://api-preproduction.signzy.app                                         |
| Base URL (Production)           | https\://api.signzy.app                                                       |
| Authentication                  | Credentials from the SSP portal: https\://portal.signzy.app/#/api-credentials |
| Method                          | POST                                                                          |
| Content type                    | application/json                                                              |
| Response                        | Synchronous. The records are returned in the same call.                       |

## 1. Lookup

POST /api/lei/pan-to-lei

Returns the LEI records for a PAN or a company name.

**Request body**

| Parameter   | Type   | Required                       | Description                                                                                                |
| ----------- | ------ | ------------------------------ | ---------------------------------------------------------------------------------------------------------- |
| panNumber   | string | One of panNumber / companyName | PAN of the business: 5 letters, 4 digits, 1 letter (AAAAA9999A). Trimmed and uppercased before validation. |
| companyName | string | One of panNumber / companyName | Company name to search. Maximum 200 characters. Trimmed and uppercased.                                    |
| consentText | string | Yes                            | Must equal the consent declaration below. Case and extra spaces are ignored.                               |
| consent     | string | No                             | Y or N. N is rejected.                                                                                     |

Send exactly one of panNumber or companyName. Sending both, or neither, returns 400. An empty string counts as not sent.

**Consent declaration**

Obtain the customer's consent first, then send this wording unchanged in consentText:

*I hereby provide my consent to fetch the Legal Entity Identifier details of this company*

A request with consent set to N is rejected before any lookup is made.

**Sample request**

:::CodeblockTabs
Production

```json
curl --location 'https://api.signzy.app/api/lei/pan-to-lei' \
--header 'Content-Type: application/json' \
--header 'Authorization: <ACCESS_TOKEN>' \
--data '{
    "panNumber": "AAFFM0294F",
    "consent": "Y",
    "consentText": "I hereby provide my consent to fetch the Legal Entity Identifier details of this company"
}'
```

Pre Production

```json
curl --location 'https://api-preproduction.signzy.app/api/lei/pan-to-lei' \
--header 'Content-Type: application/json' \
--header 'Authorization: <ACCESS_TOKEN>' \
--data '{
    "panNumber": "AAFFM0294F",
    "consent": "Y",
    "consentText": "I hereby provide my consent to fetch the Legal Entity Identifier details of this company"
}'
```
:::

By company name:

:::CodeblockTabs
company name to lei - request body

```json
{
  "companyName": "ECLERX SERVICES LIMITED",
  "consent": "Y",
  "consentText": "I hereby provide my consent to fetch the Legal Entity Identifier details of this company"
}
```
:::

**Response 200**

:::CodeblockTabs
Response Body

```json
{
  "result": {
    "panNumber": "AAFFM0294F",
    "companyName": "ECLERX SERVICES LIMITED",
    "companyNameSource": "PAN",
    "typeOfHolder": "Company",
    "totalRecordsFound": 1,
    "records": [
      {
        "lei": "3358001T7DKZ8QUCEO12",
        "legalName": "ECLERX SERVICES LIMITED",
        "legalAddress": { "city": "MUMBAI", "country": "IN" },
        "nameMatchScore": 100
      }
    ]
  }
}
```
:::

For a company name request, panNumber and typeOfHolder are "" and companyNameSource is INPUT.

**Response fields**

| Field                     | Description                                                                                 |
| ------------------------- | ------------------------------------------------------------------------------------------- |
| panNumber                 | The PAN you sent, or "" for a company name request                                          |
| companyName               | The name that was searched                                                                  |
| companyNameSource         | PAN if the name was resolved from your PAN, INPUT if you supplied it                        |
| typeOfHolder              | Entity type returned for the PAN; "" for a company name request                             |
| totalRecordsFound         | Total records found, counted before the response cap                                        |
| records\[]                | LEI records, best match first, up to 100 per response                                       |
| records\[].lei            | The 20-character LEI                                                                        |
| records\[].legalName      | Legal name on the LEI record                                                                |
| records\[].legalAddress   | Legal address, for example city and country                                                 |
| records\[].nameMatchScore | Similarity of the record name to the searched name, 0 to 100. "" when no score is available |

Record fields beyond those above are passed through from the LEI source as available.

**Good to know**

- Records are sorted by nameMatchScore, highest first. Records without a score stay in the list, at the bottom.
- Any field with no value is returned as "", never null.

## Errors

Errors return a non-200 status with an error object. A 404 means the record does not exist; a 409 means the lookup could not be completed and is safe to retry.

| Condition                                                        | Status | Reason            | Message                                       |
| ---------------------------------------------------------------- | ------ | ----------------- | --------------------------------------------- |
| Request fails validation                                         | 400    | VALIDATION\_ERROR | Describes the invalid field                   |
| consent is N                                                     | 400    | error             | Need your consent to fetch data               |
| PAN is not valid                                                 | 400    | INVALID\_PARAM    | PAN number is not valid                       |
| PAN not found                                                    | 404    | NOT\_FOUND        | No record found for the given PAN number      |
| PAN valid but no company name found                              | 404    | NOT\_FOUND        | Company name could not be resolved…           |
| Company name rejected by the LEI source, for example too generic | 400    | INVALID\_PARAM    | Message from the LEI source                   |
| No LEI record matches                                            | 404    | NOT\_FOUND        | No LEI record found for the given input       |
| PAN service unavailable                                          | 409    | CONFLICT          | Error in fetching data from PAN service       |
| LEI source unavailable                                           | 409    | CONFLICT          | Error in getting data from upstream           |
| Unexpected error                                                 | 409    | CONFLICT          | Unable to complete the request at the moment! |

**Error body**

:::CodeblockTabs
Error Response

```json
{
  "error": {
    "name": "error",
    "message": "No LEI record found for the given input",
    "status": 404,
    "reason": "NOT_FOUND",
    "type": "Not Found",
    "statusCode": 404
  }
}
```
:::

## Error Code List

| Symptom                                | Likely cause                                                | Action                                              |
| -------------------------------------- | ----------------------------------------------------------- | --------------------------------------------------- |
| 400 on consentText                     | The wording differs from the consent declaration            | Send the declaration exactly as given in Lookup     |
| 400 with both or neither identifier    | panNumber and companyName were both sent, or both missing   | Send exactly one                                    |
| 404 for a PAN                          | The PAN has no record, or no company name could be resolved | Check the PAN, or search by companyName             |
| 404 for a company name                 | No LEI record matches the name                              | Check the spelling, or try the full registered name |
| 400 INVALID\_PARAM from the LEI source | The company name is too generic                             | Send a more specific name                           |
| 409 CONFLICT                           | A data source was unavailable                               | Retry later; contact support if it repeats          |
| nameMatchScore is ""                   | No score was available for that record                      | Check legalName yourself; the record is still valid |
| Fewer records than totalRecordsFound   | The response is capped at 100 records                       | Narrow the search with a more specific name         |

## Glossary

| Term                | Meaning                                                                                 |
| ------------------- | --------------------------------------------------------------------------------------- |
| LEI                 | Legal Entity Identifier, a 20-character code that identifies a legal entity (ISO 17442) |
| PAN                 | Permanent Account Number, the 10-character Indian tax ID in the format AAAAA9999A       |
| Consent declaration | The fixed wording the end customer must agree to, sent in consentText                   |
| Record              | One LEI entry returned for the searched name                                            |
| nameMatchScore      | How closely a record's legal name matches the searched name, from 0 to 100              |



:::hint{type="info"}
Please contact [help@signzy.com](mailto\:help@signzy.com) for any support and clarification needed.
:::

