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

# Address Classification

<span className="api-lifecycle-source" data-lifecycle="sync">Synchronous endpoint</span>

Classify one address through query parameters. This GET variant returns the same classification result as the POST endpoint and is useful for simple server-side lookups.

<Note>
  HashDit-owned query fields use `snake_case`. Equivalent camelCase input remains accepted for compatibility.
</Note>

## Quick Start

<RequestExample>
  ```bash cURL theme={null}
  curl --get \
    --url https://service.hashdit.io/v2/hashdit/address-classify \
    --header 'X-API-KEY: YOUR_API_KEY' \
    --data-urlencode 'chain_id=56' \
    --data-urlencode 'address=0x55d398326f99059ff775485246999027b3197955' \
    --data-urlencode 'strict=false'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "code": "0",
    "status": "ok",
    "data": {
      "address": "bsc:0x55d398326f99059ff775485246999027b3197955",
      "address_type": "Contract",
      "classification": "ERC20",
      "classification_id": 101,
      "details": {
        "is_verified": true,
        "proxy_impl_address": "",
        "proxy_impl_type": ""
      },
      "is_erc20": "1",
      "scanned_time": 1766048799,
      "status": 200,
      "timestamp": "2025-12-18T09:06:43.166765",
      "verify_status": "verified"
    }
  }
  ```
</ResponseExample>

## Request Fields

<ParamField header="X-API-KEY" type="string" required>
  Your HashDit API key. Missing or invalid keys return HTTP `401`. Keep the key on a trusted server.
</ParamField>

<ParamField query="chain_id" type="string" required>
  Network identifier for the address, such as `"56"`. See [Supported Chains](/api-reference/supported-chains).
</ParamField>

<ParamField query="address" type="string" required>
  Blockchain address to classify.
</ParamField>

<ParamField query="strict" type="boolean" default="false">
  Apply the strict latency budget. When processing exceeds that budget, the API returns a service-level timeout result instead of continuing to wait.
</ParamField>

## Response Fields

<ResponseField name="code" type="string" required>
  API result code. `"0"` indicates success; non-zero values indicate an error.
</ResponseField>

<ResponseField name="status" type="string" required>
  Request status. A successful completed response returns `"ok"`.
</ResponseField>

<ResponseField name="data.address_type" type="string">
  Broad address family, commonly `EOA` or `Contract`.
</ResponseField>

<ResponseField name="data.classification" type="string">
  Best available classification label.
</ResponseField>

<ResponseField name="data.classification_id" type="integer">
  HashDit classification identifier. Prefer the string label unless your integration explicitly maps IDs.
</ResponseField>

<ResponseField name="data.details.is_verified" type="boolean">
  Whether verified source or equivalent verification metadata was found.
</ResponseField>

<ResponseField name="data.details.proxy_impl_address" type="string">
  Proxy implementation address when detected, otherwise an empty string.
</ResponseField>

## How to Use the Response

* Use `address_type` for the broad distinction between an EOA and a contract.
* Use `classification` for the more specific contract category, such as `ERC20` or `Proxy`.
* For proxies, read `details.proxy_impl_address` and `details.proxy_impl_type` only when populated.
* A missing, empty, or `Unverified` classification is not a safe verdict. Use a security endpoint when you need a risk decision.

## Errors and Retry Guidance

| HTTP or status | Meaning | Client action |
| - | - | - |
| `400` | Unsupported chain or invalid address | Correct the query; do not retry unchanged. |
| `401` | Missing or invalid API key | Fix authentication; do not retry unchanged. |
| `422` | Query validation failed | Correct field names or values. |
| `429` | Rate limit exceeded | Retry with exponential backoff and jitter. |
| `500` | Transient service failure | Retry a bounded number of times with backoff. |
| `status: "notok"` with strict mode | Strict latency budget was exceeded | Retry without `strict`, or handle the timeout within your product's latency policy. |
