# How To: Upload Evaluation Key

The Evaluation Key (EVK) enables efficient low-latency interactions with a specific Workload. To upload this key, you’ll need a User Access Token provided by the customer for the specific workload.

This process consists of two parts: generating a key pair (secret and evaluation keys) and publishing the EVK to Lattica’s backend.&#x20;

## Overview of the Process

{% stepper %}
{% step %}

### G**enerate Key Pair**:

* A **Secret Key** is generated and remains securely in the Query Client. Only the end-user has access to this key, which is later used for encrypting and decrypting messages.
* An **Evaluation Key (EVK)** is also generated. This key is used during query processing for validation and secure computations.
  {% endstep %}

{% step %}

### P**ublish Evaluation Key**:

The generated EVK is uploaded to Lattica’s backend. This ensures the backend is configured for processing encrypted queries for the specified workload.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
The Evaluation Key is generated only once per setup and can be used for ongoing encrypted interactions.
{% endhint %}

Use the following code snippet to upload an Evaluation Key.&#x20;

Ensure you have the **User Access Token** ready, as this token specifies the workload for which the secret and evaluation keys will be generated.

{% tabs %}
{% tab title="🧊 Python SDK" %}

```python
import lattica_common.app_api as agent_app
​
# Notice your query token expires in 30 days
query_token = "the_query_token_you_got_using_the_generate_user_token"

# user_data is a tuple of: 
# (serialized_context, serialized_secret_key, serialized_homseq)
# which you need for encrypting the query and querying the model
user_data = agent_app.user.query_offline_phase(query_token)

```

{% endtab %}

{% tab title="📦 TypeScript SDK" %}

```typescript
import { LatticaQueryClient } from 'lattica-query-client';

const client = new LatticaQueryClient('your-jwt-query-token');

// Uploaded the EK
const initialized = await client.init();
if (!initialized) {
  console.error('Initialization failed: The EK was not successfully uploaded.');
  throw new Error('EK upload failed.');
}
console.log('EK uploaded successfully.');
```

{% endtab %}
{% endtabs %}

### Parameters

* **JWT Access Token**: A unique identifier created by the AI Provider.&#x20;
