> For the complete documentation index, see [llms.txt](https://gl-docs.gitbook.io/zkpass/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://gl-docs.gitbook.io/zkpass/zkpass-developers-guide/zkpass-modules/dvr/dvr-client-roles/data-holder/3.-generating-the-proof.md).

# 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="/files/Vvls2k7l8EULn8e1JyLD" 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 %}
