# 3. Generating the Proof

To generate the ZkPass Proof, the Data Holder needs to use the zkpass-client SDK library. The following section illustrates how the coding is done.

## <mark style="color:blue;">Dvr Module Client Integration</mark>

The zkPass call sequence diagram, specifically steps 7–9, corresponds to the proof generation process.

<figure><img src="https://2052969365-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F4jZpZP97P7tNPc6tR9Mf%2Fuploads%2FGBFO73GAuH620MlGZp9w%2Fgenerate-verify-proof-sequence-diagram-highlight-generate-proof.png?alt=media&#x26;token=50d0921f-70a8-46aa-8978-2c052efe5846" alt=""><figcaption></figcaption></figure>

The Data Holder generates the proof by using the Dvr module client SDK library, as shown here.

{% code title="" fullWidth="false" %}

```typescript
// Step 1: Instantiate DvrModuleClient
const dvrModuleClient = new DvrModuleClient({
      baseUrl: SERVICE_URL,
      apiKey: API_KEY,
      secretApiKey: API_SECRET,
    });

// Step 2: Call the DVR module client's callDvrGenerateZkPassProof
const zkPassProof = dvrModuleClient.callDvrGenerateZkPassProof(
      JSON.stringify(userDataToken),
      dvrToken
    );
```

{% endcode %}
