> For the complete documentation index, see [llms.txt](https://docs.ospree.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ospree.io/developers/blockchain-analytics/verify-address-control.md).

# Verify Address Control

<mark style="color:yellow;">`POST`</mark> /api/v2/analytics/verification/chains/{chain}/addresses/{address}

### Overview

The address control verification process allows a Virtual Asset Service Provider (VASP) to confirm that a user controls a specified self-hosted (non-custodial) wallet address. This is achieved through a secure signature process facilitated by Ospree.

{% hint style="success" %}
This feature requires activation by our team. Please contact us at <sales@ospree.io>.
{% endhint %}

For more information, see:

* [Self-Hosted Wallet Details](/learn/self-hosted-wallet.md#what-is-a-self-hosted-wallet)

\
For specific API integration flows, see:

* [Self-Hosted Wallet Deposit](/developers/api-integration-flows.md#self-hosted-wallet-deposit)
* [Self-Hosted Wallet Withdrawal](/developers/api-integration-flows.md#self-hosted-wallet-withdrawal)

### Step-by-Step

{% stepper %}
{% step %}
**Verification Request**

The VASP initiates the process by calling:\ <mark style="color:yellow;">`POST`</mark> `/api/v2/analytics/verification/chains/{chain}/addresses/{address}`\
The request must include the blockchain network identifier (chain) and the user’s wallet address (address).&#x20;
{% endstep %}

{% step %}
**Secure Link Generation**

Ospree generates a unique, secure verification link. This link enables the user to prove control by signing a verification message. The link is returned to the VASP in the API response.
{% endstep %}

{% step %}
**Link Distribution**

The VASP delivers the verification link to the user via its preferred communication channel (e.g., email, SMS, or in-app message).
{% endstep %}

{% step %}
**User Verification**

The user accesses the link and signs a verification message with their wallet. This signature confirms they control the private key associated with the wallet address.
{% endstep %}

{% step %}
**Verification Confirmation**

Ospree verifies the signature and confirms control. The result is sent to the VASP through the configured webhook endpoint.
{% endstep %}
{% endstepper %}

Path Parameters

| Name      | Type   | Description                                                                                                    | Required |
| --------- | ------ | -------------------------------------------------------------------------------------------------------------- | -------- |
| `chain`   | string | Blockchain network name. Example: <mark style="color:orange;">`bitcoin`</mark>                                 | True     |
| `address` | string | Unique blockchain identifier. Example: <mark style="color:orange;">`1JjYpRXfPntVEJqAjxsYmvFjjJBdJyaJ2k`</mark> | True     |

Sample Request

{% tabs %}
{% tab title="REQUEST" %}

```json
curl -X POST https://sandbox.ospree.io/api/v2/analytics/verification/chains/bitcoin/addresses/1Q8QR5k32hexiMQnRgkJ6fmmjn5fMWhdv9

-h 'Content-Type: application/json' \
-h 'Accept: application/json' \
-h 'Authorization: ••••••' \
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="RESPONSE" %}

```json
{
  "status": "success",
  "data": {
    "link": "https://demo-verify.ospree.io/address/verification/HkVXKYpdGKSXK_l9Ss1YmG_xen6wrOhLKsSHBogVuJ-HDe4F4GxiOTsWCMfJOCrVHFgJQaQ-x4cZUg6rtFXporrR8_smWuWXM2_yxVFom9PJA-3HyN4rxkXuG9qzjYkPYv9zYF0fLvo8_du3RmKuGPdH0Keq_IIMp2iCAOUQOk-KCyBzoDWQ13dizcTkgmOX8Nm53iJUPDSJV-d7SOplD5ngzWGDH9nFY0DdoqIujfLh5rAFDGsvPHpXp7YSaFyt",
  }
}
```

{% endtab %}
{% endtabs %}
