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

# Verify Wallet

> Check if a wallet address belongs to a verified identity

Check if a wallet address belongs to a verified identity. Returns verification status and all associated wallets.

<Warning>
  This endpoint requires your API key and **must** only be called from your backend server.
</Warning>

#### Request

```bash cURL theme={null}
curl -X POST "https://api.identity.predicate.io/api/v1/verify" \
  -H "Authorization: Bearer $PREDICATE_KYC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "address": "0x1234567890abcdef1234567890abcdef12345678",
    "type": "individual"
  }'
```

#### Response (Verified)

```json theme={null}
{
  "address": "0x1234...",
  "verified": true,
  "status": "completed",
  "userId": "uuid-of-verified-identity",
  "checkType": "kyc",
  "verifiedAt": "2025-01-21T10:30:00Z",
  "wallets": [
    { "address": "0x1234...", "chain": "ethereum" },
    { "address": "0x5678...", "chain": "polygon" }
  ]
}
```

#### Response (Not Verified)

```json theme={null}
{
  "address": "0x1234...",
  "verified": false
}
```

## Endpoint

```
POST https://api.identity.predicate.io/api/v1/verify
```

## Request Body

<ParamField body="address" type="string" required>
  The wallet address to check
</ParamField>

<ParamField body="type" type="string">
  Filter by verification type: `individual` (KYC) or `business` (KYB). Omit to check all types.
</ParamField>

## Response Fields

<ResponseField name="address" type="string" required>
  The wallet address that was checked
</ResponseField>

<ResponseField name="verified" type="boolean" required>
  Whether the wallet belongs to a verified identity
</ResponseField>

<ResponseField name="status" type="string">
  Most recent session status: `pending`, `submitted`, `retry`, `rejected`, `completed`, or null if never seen.
</ResponseField>

<ResponseField name="userId" type="string">
  The user ID of the identity. Only present if the wallet has an associated user.
</ResponseField>

<ResponseField name="checkType" type="string">
  The verification type: `kyc` or `kyb` (`null` if not verified)
</ResponseField>

<ResponseField name="verifiedAt" type="string">
  ISO 8601 timestamp of when verification completed (`null` if not verified)
</ResponseField>

<ResponseField name="wallets" type="array">
  Wallet addresses verified at compatible levels (empty if not verified)
</ResponseField>

## Status Values

| Status      | Description                                           |
| ----------- | ----------------------------------------------------- |
| `pending`   | Session created, user in verification process         |
| `submitted` | Documents submitted, awaiting manual operator review  |
| `completed` | Verification successful, user is verified             |
| `rejected`  | Verification permanently failed (fraud, sanctions)    |
| `retry`     | Fixable issue (e.g., blurry document), user can retry |

<Warning>
  **Important:** A `submitted` status means documents are under manual review. The wallet is **not** verified until status becomes `completed`.
</Warning>

<Note>
  **Verification Levels:** The verify endpoint returns verified status for wallets that were verified at your organization's current verification level. If you upgrade your verification level, previously verified wallets will need to re-verify. Wallets verified through other organizations at the same scrutiny level will also appear as verified.
</Note>

## Authentication

```
Authorization: Bearer YOUR_API_KEY
```
