# Como personificar outras pessoas nos consumos de APIs

## Visão geral

Como vimos no capítulo sobre [autenticação de API's com tokens](/zeev/apis/como-utilizar-as-apis-do-zeev/como-gerar-tokens-para-autenticar-nas-apis.md),  de maneira resumida:

* Para realizar qualquer operação em uma API do Zeev, é preciso um token;
* Um token está relacionado a uma pessoa usuária do sistema, ativa;
* Somente poderão ser realizadas operações de API que essa pessoa, dona do token, poderia fazer, ela mesma, através da interface do sistema;
* Recomenda-se a criação de um usuário específico, de integração, para o consumo de API's;
* Recomenda-se armazenar o token de autenticação de pessoa em um arquivo de configuração seguro de seu sistema;

## Cenário

Se o seu sistema externo irá armazenar **somente um token**, de um usuário de integração, e o token só pode realizar operações que esse usuário possui permissão, como utilizar API's para realizar operações  vinculadas a outros usuários do sistema, como:

* Abrir uma solicitação em nome de outro usuário do sistema?
* Finalizar uma tarefa pendente com outro usuário do sistema?

A solução consiste em:

* Vincular o seu usuário de integração a um[ grupo de manutenção](/zeev/apis/all/access/groups.md) que possua permissão de [personificar ](/zeev/usuarios-e-permissoes/como-alterar-personificar-usuario.md)outras pessoas;
* De posse de seu token do usuário de integração, realizar uma chamada a [API de personificar outro usuário](/zeev/apis/all/tokens.md#api-2-tokens-impersonate-username). Essa API irá receber o nome de usuário que se deseja personificar e retornará um novo token, temporário;
* De posse do novo token, realize a operação em nome do usuário terceiro;

Abaixo, temos um exemplo de código onde, a partir de um token TOKEN-DE-AUTENTICACAO, personifica-se e obtem-se um novo token, relacionado ao usuário "joao.dias"

{% tabs %}
{% tab title="Node.js" %}

```javascript
//javascript
async function fetchData() {

  try {

    const impersonateLogin = "joao.dias";
    const impersonateUrl = `https://seu_endereco.do.zeev/api/2/tokens/impersonate/${impersonateLogin}`
    const impersonateHeaders = {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer TOKEN-DE-AUTENTICACAO'
    };

    const impersonateResponse = await fetch(impersonateUrl , { headers: impersonateHeaders });
    const impersonateData = await impersonateResponse.json();
    const newToken = impersonateData.impersonate.temporaryToken;
    
    //Realize novas operações a partir daqui usando o newToken;
    
  } catch (error) {
    console.error('Error:', error);
  }
}

fetchData();
```

{% endtab %}
{% endtabs %}

Mais detalhes sobre como personificar outras usuárias nos consumos de APIs podem ser vistos no vídeo abaixo.

{% embed url="<https://www.youtube.com/watch?v=AUuN5-YVk_A>" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kb.stoque.com.br/zeev/apis/como-utilizar-as-apis-do-zeev/como-personificar-outros-usuarios-nos-consumos-de-apis.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
