# Validation / Retake process

Our emote validation / retake system allows users to upload a new video if they are unsatisfied with the generated emote or if the process fails, without creating a new emote process.&#x20;

This system ensures a smooth user experience by adding an extra step where the client must validate or reject the generated emote before it is included in the user's bag.

## How it works

> :warning:<mark style="color:yellow;">Players reject a process, not an emote. The emote will only exist for the user once a process is validated.</mark>

### 1. Process Validation

When a process is in the `done` status, and the user is satisfied, you need to call the validation route:

{% openapi src="https://sdk-api.kinetix.tech/swagger.json" path="/v1/process/{uuid}/validate" method="post" %}
[https://sdk-api.kinetix.tech/swagger.json](https://sdk-api.kinetix.tech/swagger.json)
{% endopenapi %}

This will automatically add the emote to the user bag, making it immediately playable in-game.

### 2. Process Rejection

* If a user is not satisfied with the emote, you need to retake the process:

{% openapi src="https://sdk-api.kinetix.tech/swagger.json" path="/v1/process/{uuid}/retake" method="post" %}
[https://sdk-api.kinetix.tech/swagger.json](https://sdk-api.kinetix.tech/swagger.json)
{% endopenapi %}

* A new token will be generated, allowing the user to create a new emote. This new process will be linked as a child of the rejected one, with the rejected process flagged as 'rejected' and considered 'dead'.
* You can reject a process multiple times if required (e.g., if the user did not finish the PWA flow of the new emote). The child process is attached only if it has been created.

### 3. Retake process customization

The Settings page of Game/App Space allow you to customize the number of allowed retakes for an emote, leading to the creation of a process hierarchy.

Kinetix ensures there is only one 'living' process in any hierarchy. There are two ways to handle the retake process:

* **Retake the root process:** Will invalidate and attach a new process to the latest child.
* **Retake the child process:** Will invalidate it and attach a new process.

Retaking any process in the chain will invalidate the latest child and attach a new process to it. The choice depends on which process you want to display to the user.



<figure><img src="https://4274712517-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsSjjpyacKBTrm5tQ9SyL%2Fuploads%2F5Mv1X8SazUqfQaNmrLeU%2Fstatus.webp?alt=media&#x26;token=cbbd329b-25fe-49d9-aa60-4637c4ff2581" alt=""><figcaption></figcaption></figure>

When requesting a process from the server, you will have a hierarchy field describing recursively the whole process history, including a count of children and parents, and the detailed UUIDs in the order of creation.\
\
When displaying the process, you can choose to display only the relevant processes to the user.
