# GSTIN Verification API

VERIFICATION OF GOODS AND SERVICE TAX (GST) REGISTRATION OF BUSINESSES

## **Description**

Indian Goods And Service Tax Act was implemented in July 2017 which replaced many indirect taxes. GSTIN is a unique number assigned to companies registered under this Act.

GSTIN verification is the process of verifying the registration of an entity. Businesses can perform this check as a mandatory taxation compliance while on-boarding new vendors, partners or customer entities.

![](https://uploads.developerhub.io/prod/4WY6/md6b1c0bkhoimgab15y2577epjh6jv3enpwvs6205j8vw73ez9eocig4nzr1fc0a.png)

**API Outcome**

**General company information**

- Registration status, Entity's registered legal name, Trade / business name, Type of company (private limited, proprietorship etc.), Nature of business

**Demographics**

- Primary address location, Additional locations of business

**Timeline**

- Date of registration, Last updated, Expiration (if applicable)

**Jurisdiction**

- GST Zonal Office of registration and code, Centre name and code

**Filing History**

- Filing date, Period, ARN number, Status of filing

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link
      href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap"
      rel="stylesheet"
    />
    <style>
      * {
        padding: 0;
        margin: 0;
        box-sizing: border-box;
      }

      html {
        font-family: "Poppins", sans-serif;
      }

      .container {
        width: 100%;
        max-width: 705px;
        max-height: 115px;
        padding: 20px 25px;
        border-radius: 8px;
        background-color: #024ef3;
        color: white;
        display: flex;
        justify-content: space-between;
        align-items: center;
        position: relative;
        overflow: auto;
      }

      .content {
        display: flex;
        height: 100%;
        flex: 1 1 0%;
        flex-direction: column;
        justify-content: space-between;
        align-items: flex-start;
        z-index: 10;
        gap: 8px;
        margin-right: 25px;
      }

      .content > p:nth-child(1) {
        font-weight: 500;
        font-size: 16px;
        font-weight: 600;
        letter-spacing: 0.65px;
      }

      .content > p:nth-child(2) {
        font-size: 11px;
        letter-spacing: 0.5px;
      }

      .buttons {
        width: fit-content;
        display: flex;
        justify-content: center;
        align-items: center;
        gap: 14px;
        z-index: 10;
        font-size: 10px;
        font-weight: 500;
        text-align: center;
      }

      .buttons > a:nth-child(1) {
        border-radius: 8px;
        border: 2px solid #fbff3f;
        color: #fbff3f;
        display: inline-flex;
        padding: 7px 25px;
        transition-property: all;
        transition-timing-function: ease;
        transition-duration: 250ms;
        cursor: pointer;
        text-decoration: none;
      }

      .buttons > a:nth-child(2):hover,
      .buttons > a:nth-child(1):hover {
        transform: scale(1.025);
      }

      .buttons > a:nth-child(2) {
        border-radius: 8px;
        background-color: #fbff3f;
        transition-property: all;
        color: black;
        transition-timing-function: ease;
        border: 2px solid #fbff3f;
        transition-duration: 250ms;
        padding: 7px 25px;
        font-weight: 500;
        cursor: pointer;
        text-decoration: none;
      }

      .buttons > a:nth-child(2):hover {
        background-color: #eff140;
        border-color: #eff140;
      }

      .ellipse,
      .ellipse-lg {
        position: absolute;
        right: 0;
        top: 0;
        opacity: 0.75;
        display: none;
        height: 100%;
      }

      .ellipse-lg {
        display: block;
      }

      @media only screen and (max-width: 705px) {
        .container {
          max-height: 125px;
          height: 125px;
          flex-direction: column;
          padding: 9px 18px;
        }

        .buttons {
          width: 100%;
          justify-content: flex-start;
          gap: 20px;
          border-radius: 8px;
          font-size: 12px;
        }

        .content {
          width: 100%;
          gap: 4px;
          margin: 0;
          margin-bottom: 10px;
          justify-content: center;
        }

        .content > p:nth-child(1) {
          font-size: 16px;
        }

        .ellipse {
          display: block;
        }

        .ellipse-lg {
          display: none;
        }
      }

      @media only screen and (max-width: 400px) {
        .content {
          margin-bottom: 4px;
          gap: 1px;
          justify-content: flex-start;
        }

        .content > p:nth-child(1) {
          font-size: 15px;
        }

        .buttons > a:nth-child(1),
        .buttons > a:nth-child(2) {
          padding: 8px 12px;
        }
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="content">
        <p>Get Free Trial</p>
        <p>
          Create a free account Or “Talk to Us” for price information and other queries.
        </p>
      </div>
      <div class="buttons">
        <a href="https://chat.attestr.com/" target="_blank">Talk to us</a>
        <a href="https://docs.attestr.com/attestr-docs/attestr-self-signup" target="_blank">Create free account</p>
      </div>

      <svg
        width="375"
        height="128"
        viewBox="0 0 375 128"
        fill="none"
        xmlns="http://www.w3.org/2000/svg"
        class="ellipse-lg"
      >
        <g clip-path="url(#clip0_7806_3204)">
          <circle cx="189" cy="83" r="189" fill="#175EF9" />
          <circle cx="189" cy="82" r="143" fill="#1F64FB" />
          <circle cx="189" cy="82" r="97" fill="#175EF9" />
          <circle cx="189" cy="82" r="51" fill="#125AF8" />
        </g>
        <defs>
          <clipPath id="clip0_7806_3204">
            <rect
              width="378"
              height="378"
              fill="white"
              transform="translate(0 -106)"
            />
          </clipPath>
        </defs>
      </svg>

      <svg
        xmlns="http://www.w3.org/2000/svg"
        width="164"
        height="127"
        class="ellipse"
        viewBox="0 0 164 127"
        fill="none"
      >
        <g clip-path="url(#clip0_7806_3205)">
          <circle cx="114.776" cy="64.7759" r="114.776" fill="#175EF9" />
          <circle cx="114.776" cy="64.1682" r="86.841" fill="#1F64FB" />
          <circle cx="114.776" cy="64.1688" r="58.9061" fill="#175EF9" />
          <circle cx="114.776" cy="64.1685" r="30.9713" fill="#125AF8" />
        </g>
        <defs>
          <clipPath id="clip0_7806_3205">
            <rect
              width="229.552"
              height="229.552"
              fill="white"
              transform="translate(0 -50)"
            />
          </clipPath>
        </defs>
      </svg>
    </div>
  </body>
</html>

> **The legacy data processing model is being formally deprecated.**
>
> In order to ensure continued compliance with the Digital Personal Data Protection Act, 2023 (DPDP Act), we are implementing DPDP V3 (Consent-Driven Processing). Under this framework, clients are required to obtain explicit, informed, and verifiable consent from the data principal prior to accessing, processing, viewing, or storing any personal data through the platform. This regulatory transition may require modifications to existing configurations and workflows. Clients are advised to review and update their implementations to ensure ongoing compliance with applicable data protection obligations. Further information regarding this transition can be enquired here. [Learn more about this change here.](https://chat.attestr.com/)

## **API Details**

### **Request**

| **Type** | **URL** | **Current Version** |
| ---- | ---- | ---- |
| POST | https://api.attestr.com/api/{version}/public/corpx/gstin | v2 |

#### **Request Body Parameters**

| **Type** | **Name** | **Description** | **Optional (default)** | **Min Version** | **Max Version** |
| ---- | ---- | ---- | ---- | ---- | ---- |
| String | gstin | Input GSTIN | Required | v1 |  |
| Boolean | fetchFilings | Fetch returns or not | Required | v1 |  |
| String | fy | Financial year for which returns should be fetched. e.g. 2017-18 | Optional (Required if fetch returns input parameter is set to true) | v1 |  |

> **Note**
>
> As GST was implemented in 2017, the allowed "fy" parameter values range from 2017-18 till current fiscal year. Values smaller than 2017-18 and greater than current fiscal year will throw malformed request error.

#### **Request Header Parameters**

| **Type** | **Name** | **Value / Description** | **Optional** | **Min Version** | **Max Version** |
| ---- | ---- | ---- | ---- | ---- | ---- |
| String | Content-Type | application/json | Required | v1 |  |
| String | Authorization | Basic `{authToken}` | Required | v1 |  |

> **Info**
>
> If you do not have the authentication token, please refer to [Register App](https://docs.attestr.com/attestr-docs/attestr-register-app) to generate one.

#### **Sample Request**

```json
{
  "gstin": "36AAJCPXXXXA1ZQ",
  "fetchFilings": true,
  "fy": "2018-19"
}
```

### **Response**

HTTP status code 200

> **Info**
>
> Please note that the **valid** key decides the availability of rest of the keys in the response. If provided GSTIN is invalid, all keys except **valid** and **message** are omitted. If true, remaining keys will have appropriate data.

> **Update - Jul 6th, 2022**
>
> The GST verification API output now includes the PAN number of the entity. Please refer to the updated schema below.

| **Key** | **Description** | **Type** | **Min Version** | **Max Version** |
| ---- | ---- | ---- | ---- | ---- |
| valid | True &#124; false depending on if the provided tax identification number is valid. | Boolean | v1 |  |
| active | True &#124; false implying if the registration status is active | Boolean | v1 |  |
| legalName | Name of entity as registered in GST database | String | v1 |  |
| tradeName | Business / trade name as registered in GST database | String | v1 |  |
| pan | PAN number as extracted from GSTIN. | String | v1 |  |
| constitution | Constitution type such as private limited, proprietorship etc. | String | v1 |  |
| nature | Nature of business e.g. supplier of services etc. | Array (String) | v1 |  |
| type | Regular etc. | String | v1 |  |
| registered | Date of GSTIN registration DD-MM-YYYY | Date | v1 |  |
| updated | Date of last change made DD-MM-YYYY | Date | v1 |  |
| expiry | Date of cancellation if applicable DD-MM-YYYY | Date | v1 |  |
| state | Zone as defined by GST council | String | v1 |  |
| stateCode | Zone code | String | v1 |  |
| center | Office / center in the allotted zone | String | v1 |  |
| centerCode | Office code | String | v1 |  |
| addresses | Array of registered primary and additional addresses of the company | Array of Address object | v1 |  |
| filings | Array of GSTR filings made by the company | Array of GSTFiling object | v1 |  |
| einvoiceEnabled | Whether the company has opted for e-invoicing. Available from API version v2 onwards. | Boolean | v2 |  |
| message | Message if the provided GSTIN is valid (available only if valid is false) | String | v1 |  |

> **Info**
>
> **returns** key is not available in the response if the value of input parameter **fetchFilings** is provided as false.

#### **Address Object**

| **Key** | **Description** | **Type** | **Min Version** | **Max Version** |
| ---- | ---- | ---- | ---- | ---- |
| type | Type of address | AddressTypeEnum | v1 |  |
| building | Building, house, plot number | String | v1 |  |
| buildingName | Name of the premises | String | v1 |  |
| floor | Floor number in the building | String | v1 |  |
| street | Name of the street | String | v1 |  |
| locality | Local area name | String | v1 |  |
| district | District name | String | v1 |  |
| state | State name | String | v1 |  |
| city | City name | String | v1 |  |
| zip | Pincode of the location | String | v1 |  |
| latitude | Latitude of the location | String | v1 |  |
| longitude | Longitude of the location | String | v1 |  |
| nature | Business purpose for which this address is used | String | v1 |  |

#### **GSTFiling Object**

| **Key** | **Description** | **Type** | **Min Version** | **Max Version** |
| ---- | ---- | ---- | ---- | ---- |
| mode | Online, Offline | String | v1 |  |
| type | Type of GSTR e.g. GSTR3B, GSTR2, GSTR1 etc. | String | v1 |  |
| filed | Date of filing of this return MM-DD-YYYY | Date | v1 |  |
| period | Duration / Month for which filing was made | String | v1 |  |
| ack | Acknowledgement number | String | v1 |  |
| status | Filed, Pending payment etc. | String | v1 |  |

#### **AddressTypeEnum**

| **Enum Values** | **Description** |
| ---- | ---- |
| PRIMARY | Address is registered as primary registered address |
| ADDITIONAL | Address is registered as secondary / other addresses of business |

#### **Sample Response**

Sample response for valid GSTIN

```json
{
    "valid": true,
    "active": true,
    "legalName": "******** IT SOLUTIONS PRIVATE LIMITED",
    "tradeName": "******** IT SOLUTIONS PRIVATE LIMITED",
    "pan": "AHBHJ5367H",
    "constitution": "Private Limited Company",
    "nature": [
        "Supplier of Services"
    ],
    "type": "Regular",
    "registered": "06-12-2019",
    "updated": "12-19-2019",
    "expiry": null,
    "state": "Noida Sector-10",
    "stateCode": "UP1587",
    "center": "RANGE - 12",
    "centerCode": "YC0302",
    "addresses": [
        {
            "type": "PRIMARY",
            "building": "D-247/4A",
            "buildingName": "",
            "floor": "BASEMENT",
            "street": "SECTOR 63",
            "locality": "NOIDA",
            "district": "Gautam Buddha Nagar",
            "city": "",
            "state": "Uttar Pradesh",
            "zip": "201301",
            "latitude": "",
            "longitude": "",
            "nature": "Supplier of Services"
        }
    ],
    "filings": [
        {
            "mode": "ONLINE",
            "filed": "03-20-2020",
            "type": "GSTR3B",
            "period": "022020",
            "ack": "AA090220956795W",
            "status": "Filed"
        },
        {
            "mode": "ONLINE",
            "filed": "02-17-2020",
            "type": "GSTR3B",
            "period": "012020",
            "ack": "AA090120715027Q",
            "status": "Filed"
        },
        {
            "mode": "ONLINE",
            "filed": "01-21-2020",
            "type": "GSTR3B",
            "period": "122019",
            "ack": "AB091219531078Z",
            "status": "Filed"
        },
        {
            "mode": "ONLINE",
            "filed": "01-09-2020",
            "type": "GSTR1",
            "period": "122019",
            "ack": "AA091219416061G",
            "status": "Filed"
        },
        {
            "mode": "ONLINE",
            "filed": "12-20-2019",
            "type": "GSTR3B",
            "period": "112019",
            "ack": "AA091119998423N",
            "status": "Filed"
        },
        {
            "mode": "ONLINE",
            "filed": "11-29-2019",
            "type": "GSTR3B",
            "period": "102019",
            "ack": "AB0910192179207",
            "status": "Filed"
        },
        {
            "mode": "ONLINE",
            "filed": "10-23-2019",
            "type": "GSTR1",
            "period": "092019",
            "ack": "AB090919469084G",
            "status": "Filed"
        },
        {
            "mode": "ONLINE",
            "filed": "10-23-2019",
            "type": "GSTR3B",
            "period": "092019",
            "ack": "AB090919468391G",
            "status": "Filed"
        },
        {
            "mode": "ONLINE",
            "filed": "09-23-2019",
            "type": "GSTR3B",
            "period": "082019",
            "ack": "AB090819062308N",
            "status": "Filed"
        },
        {
            "mode": "ONLINE",
            "filed": "08-20-2019",
            "type": "GSTR3B",
            "period": "072019",
            "ack": "AA090719897091J",
            "status": "Filed"
        },
        {
            "mode": "ONLINE",
            "filed": "07-20-2019",
            "type": "GSTR3B",
            "period": "062019",
            "ack": "AA090619995184F",
            "status": "Filed"
        },
        {
            "mode": "ONLINE",
            "filed": "07-19-2019",
            "type": "GSTR1",
            "period": "062019",
            "ack": "AA0906198987049",
            "status": "Filed"
        }
    ],
    "einvoiceEnabled": true
}
```

Sample response for invalid GSTIN

```json
{
    "valid": false,
    "message": "Provided GSTIN is invalid"
}
```

### **Error Response**

| **Parameter** | **Type** | **Description** |
| ---- | ---- | ---- |
| code | Number | Unique error codes for different errors. Always available. |
| message | String | Error message describing the error. Always Available. |
| details | String | Detail error message. Available only for certain types of errors. |

#### **Error Codes**

| **HTTP Status** | **Error Code** | **Error Message** |
| ---- | ---- | ---- |
| 400 | 4001 | Malformed data or missing required parameter values |
| 400 | 4005 | Operation could not be performed due to low credits balance |
| 401 | 4016 | Invalid client authorization |
| 403 | 4031 | Unauthorized access |
| 403 | 4035 | Requested service is not provisioned for your account |
| 403 | 4039 | Client's IP address is not whitelisted |
| 403 | 4035 | Requested service is not provisioned for your account |
| 429 | 4291 | Maximum account rate limit exceeded |
| 429 | 4292 | Maximum API rate limit exceeded |
| 429 | 4293 | Maximum account daily limit exceeded |
| 429 | 4294 | Maximum API daily limit exceeded |
| 500 | 5001 | Request could not be processed |

#### **Sample Error Response**

```json
{
  "code": 4001,
  "message": "Malformed data or missing required parameter values"
}
```

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <link rel="preconnect" href="https://fonts.googleapis.com" />
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
    <link
      href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap"
      rel="stylesheet"
    />
    <style>
      * {
        padding: 0;
        margin: 0;
        box-sizing: border-box;
      }

      html {
        font-family: "Poppins", sans-serif;
      }

      .container {
        width: 100%;
        max-width: 705px;
        max-height: 115px;
        padding: 20px 25px;
        border-radius: 8px;
        background-color: #024ef3;
        color: white;
        display: flex;
        justify-content: space-between;
        align-items: center;
        position: relative;
        overflow: auto;
      }

      .content {
        display: flex;
        height: 100%;
        flex: 1 1 0%;
        flex-direction: column;
        justify-content: space-between;
        align-items: flex-start;
        z-index: 10;
        gap: 8px;
        margin-right: 25px;
      }

      .content > p:nth-child(1) {
        font-weight: 500;
        font-size: 16px;
        font-weight: 600;
        letter-spacing: 0.65px;
      }

      .content > p:nth-child(2) {
        font-size: 11px;
        letter-spacing: 0.5px;
      }

      .buttons {
        width: fit-content;
        display: flex;
        justify-content: center;
        align-items: center;
        gap: 14px;
        z-index: 10;
        font-size: 10px;
        font-weight: 500;
        text-align: center;
      }

      .buttons > a:nth-child(1) {
        border-radius: 8px;
        border: 2px solid #fbff3f;
        color: #fbff3f;
        display: inline-flex;
        padding: 7px 25px;
        transition-property: all;
        transition-timing-function: ease;
        transition-duration: 250ms;
        cursor: pointer;
        text-decoration: none;
      }

      .buttons > a:nth-child(2):hover,
      .buttons > a:nth-child(1):hover {
        transform: scale(1.025);
      }

      .buttons > a:nth-child(2) {
        border-radius: 8px;
        background-color: #fbff3f;
        transition-property: all;
        color: black;
        transition-timing-function: ease;
        border: 2px solid #fbff3f;
        transition-duration: 250ms;
        padding: 7px 25px;
        font-weight: 500;
        cursor: pointer;
        text-decoration: none;
      }

      .buttons > a:nth-child(2):hover {
        background-color: #eff140;
        border-color: #eff140;
      }

      .ellipse,
      .ellipse-lg {
        position: absolute;
        right: 0;
        top: 0;
        opacity: 0.75;
        display: none;
        height: 100%;
      }

      .ellipse-lg {
        display: block;
      }

      @media only screen and (max-width: 705px) {
        .container {
          max-height: 125px;
          height: 125px;
          flex-direction: column;
          padding: 9px 18px;
        }

        .buttons {
          width: 100%;
          justify-content: flex-start;
          gap: 20px;
          border-radius: 8px;
          font-size: 12px;
        }

        .content {
          width: 100%;
          gap: 4px;
          margin: 0;
          margin-bottom: 10px;
          justify-content: center;
        }

        .content > p:nth-child(1) {
          font-size: 16px;
        }

        .ellipse {
          display: block;
        }

        .ellipse-lg {
          display: none;
        }
      }

      @media only screen and (max-width: 400px) {
        .content {
          margin-bottom: 4px;
          gap: 1px;
          justify-content: flex-start;
        }

        .content > p:nth-child(1) {
          font-size: 15px;
        }

        .buttons > a:nth-child(1),
        .buttons > a:nth-child(2) {
          padding: 8px 12px;
        }
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="content">
        <p>Get Free Trial</p>
        <p>
          Create a free account Or “Talk to Us” for price information and other queries.
        </p>
      </div>
      <div class="buttons">
        <a href="https://chat.attestr.com/" target="_blank">Talk to us</a>
        <a href="https://docs.attestr.com/attestr-docs/attestr-self-signup" target="_blank">Create free account</p>
      </div>

      <svg
        width="375"
        height="128"
        viewBox="0 0 375 128"
        fill="none"
        xmlns="http://www.w3.org/2000/svg"
        class="ellipse-lg"
      >
        <g clip-path="url(#clip0_7806_3204)">
          <circle cx="189" cy="83" r="189" fill="#175EF9" />
          <circle cx="189" cy="82" r="143" fill="#1F64FB" />
          <circle cx="189" cy="82" r="97" fill="#175EF9" />
          <circle cx="189" cy="82" r="51" fill="#125AF8" />
        </g>
        <defs>
          <clipPath id="clip0_7806_3204">
            <rect
              width="378"
              height="378"
              fill="white"
              transform="translate(0 -106)"
            />
          </clipPath>
        </defs>
      </svg>

      <svg
        xmlns="http://www.w3.org/2000/svg"
        width="164"
        height="127"
        class="ellipse"
        viewBox="0 0 164 127"
        fill="none"
      >
        <g clip-path="url(#clip0_7806_3205)">
          <circle cx="114.776" cy="64.7759" r="114.776" fill="#175EF9" />
          <circle cx="114.776" cy="64.1682" r="86.841" fill="#1F64FB" />
          <circle cx="114.776" cy="64.1688" r="58.9061" fill="#175EF9" />
          <circle cx="114.776" cy="64.1685" r="30.9713" fill="#125AF8" />
        </g>
        <defs>
          <clipPath id="clip0_7806_3205">
            <rect
              width="229.552"
              height="229.552"
              fill="white"
              transform="translate(0 -50)"
            />
          </clipPath>
        </defs>
      </svg>
    </div>
  </body>
</html>

---

[All pages in this documentation](https://docs.attestr.com/llms.txt)
