# Criar ou atualizar dados de pessoas

## Como cadastrar pessoas no Zeev utilizando API?

Para preparar uma requisição de cadastro de usuários ao Zeev, siga estes passos:

1. **Autenticação**: Primeiro obtenha um [token de autenticação](/zeev/apis/como-utilizar-as-apis-do-zeev/como-gerar-tokens-para-autenticar-nas-apis.md) com permissão de realizar essa operação;
2. **Dados de cadastro:** Obtenha os dados necessários para os campos obrigatórios conforme explicado em [#parametros-obrigatorios](#parametros-obrigatorios "mention") e se desejar complementar o cadastro confira os demais parâmetros em [#api-2-users](#api-2-users "mention");
3. **Enviar a Requisição**: Utilize o endpoint [#api-2-users](#api-2-users "mention") para enviar a requisição conforme modelo e exemplo (troque seu\_endereco.do.zeev pelo endereço que você usa para acessar o Zeev);

### **Parâmetros obrigatórios**

Para esta requisição é obrigatório informar no corpo as propriedades username, name, email e licenseType, confira um modelo simples para esta requisição:

```json
{
     "name":"Alan Cooper",
     "username":"alan.cooper",
     "email":"alan.cooper@zeev.it",
     "licenseType":"actor"
}
```

### Parâmetro ifExists

Na raiz da estrutura do corpo de requisição, o parâmetro ifExists indica o que deve ser feito se o username (login) da pessoa já existir no cadastro, confira abaixo as opções disponíveis:

* **block:** caso o username já exista, o retorno será um erro e a operação será bloqueada. Se a propriedade não for informada no corpo da requisição, este é o comportamento padrão adotado;
* **retrieve:** Se este valor for preenchido na propriedade ifExistis na estrutura raiz do corpo da requisição, caso o username já exista, o retorno serão os dados da pessoa existente;
* **update:** Se este valor for preenchido na propriedade ifExistis na estrutura raiz do corpo da requisição, caso o username já exista, os dados da pessoa existente serão atualizados.

### Parâmetro authenticationType

Na raiz da estrutura do corpo de requisição, o parâmetro authenticationType indica qual o tipo de autenticação será definido para a pessoa. As opções atualmente disponíveis são:

* **default:** Será usado o padrão do sistema para autenticação (opção utilizada se o parâmetro não for informado no corpo da requisição;
* **internal:** Será criada uma senha temporária e armazenada no sistema;
* **network:** A pessoa autenticará através da rede / active directory / LDAP;
* **ssoonly:** A pessoa autenticará através de SSO somente;

Entenda mais sobre tipos de autenticação em [Definir formas de autenticação](/zeev/formula-zeev/configuracoes-iniciais/definir-formas-de-autenticacao.md)

### Modelo de corpo de requisição para criar usuários no Zeev

```json
{
     "ifExists":"update", //update, retrieve ou block
     "authenticationType":"internal", //internal,network, ssoonly ou default 
     "name":"Alan Cooper",
     "username":"alan.cooper",
     "email":"alan.cooper@zeev.it",
     "licenseType":"actor" //actor, requester
}
```

### Como indicar times e funções da pessoa ao realizar o cadastro via API?

Ao realizar o cadastro de pessoas utilizando API, é possível informar os times e funções da pessoa na propriedade positions. \
Para indicar time e posição, é obrigatório informar também a propriedade ifExistsUser neste nível ( esta opção é diferente de ifExists informada na raiz do corpo de requisição) e um array de itens que indicam os times e funções da pessoa.\
As opções disponíveis para a propriedade positions.ifExistsUser são:

* **append:** caso o username já exista, os times e funções que a pessoa não possuir serão acrescentados;
* **donothing:** caso o username já exista, nada será modificado ou acrescentado na lista de times e funções;
* **replace:** caso o username já exista, os times e funções já existentes serão excluídos e substituídos pelos enviados no modelo;

Obs: No array de itens, se informado teamId, não precisa ser informado temCode e o mesmo para postionId e positionCode.

Exemplo:

```json
{
     "ifExists":"update", //update, retrieve ou block
     "authenticationType":"internal", //internal,network, ssoonly ou default 
     "name":"Alan Cooper",
     "username":"alan.cooper",
     "email":"alan.cooper@zeev.it",
     "licenseType":"actor", //actor, requester
     "positions":{
          "ifExistsUser":"append", //append, replace, donothing
          "items":[
                {
                    "teamCode": "admN043",
                    "positionCode": "Analist054"
                }
           ]
     }
}
```

### Como indicar o grupos de permissão ao cadastrar pessoas utilizando API?

Ao realizar o cadastro de pessoas utilizando API, é possível informar os grupos de acesso da pessoa na propriedade groups. \
Para indicar os grupos, é obrigatório informar também a propriedade ifExistsUser neste nível ( esta opção é diferente de ifExistsUser informada dentro da estrutura positions do corpo de requisição) e um array de itens que indicam os times e funções da pessoa.\
As opções disponíveis para a propriedade groups.ifExistsUser sã&#x6F;**:**

* **append:** caso o username já exista, os grupos de manutenção que a pessoa não possuir serão acrescentados
* **donothing:** caso o username já exista, nada será modificado ou acrescentado na lista de grupos de manutenção
* **replace:** caso o username já exista, os grupos de manutenção já existentes serão excluídos e substituídos pelos enviados no modelo

Obs: No array de itens, apenas uma das propriedades é obrigatória entre groupId e groupCode.

Exemplo:

```json
{
     "ifExists":"update", //update, retrieve ou block
     "authenticationType":"ssoonly", //internal,network, ssoonly ou default 
     "name":"Alan Cooper",
     "username":"alan.cooper",
     "email":"alan.cooper@zeev.it",
     "licenseType":"actor", //actor, requester
     "groups":{
          "ifExistsUser":"append", //append, replace, donothing
          "items":[
                {
                    "groupCode": "adm1z0"
                }
           ]
     }
}
```

{% openapi src="/files/DYIxvabeLXa2mL6uE2si" path="/api/2/users" method="post" %}
[ZeevApi's\_new.json](https://3371003943-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MD66pBdRalAQgnhNstG%2Fuploads%2Ff5huLIsAqm88oSjkTavv%2FZeevApi's_new.json?alt=media\&token=aae47f9f-90ca-48d0-b250-fc38fe74e6c0)
{% endopenapi %}

Exemplo de requisição para cadastrar uma pessoa no Zeev

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

```javascript
const myHeaders = new Headers();
myHeaders.append("Accept", "application/json");
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Bearer TOKEN_DO_USUARIO");

const raw = JSON.stringify({
  "ifExists": "update",
  "username": "alan.cooper",
  "name": "Alan Cooper",
  "email": "alan.cooper@zeev.it",
  "licenseType": "actor",
  "identification": "09785921213",
  "document": "12344321",
  "isActive": true,
  "authenticationType": "internal",
  "positions": {
    "ifExistsUser": "donothing",
    "items": [
      {
        "teamId": 123,
        "teamCode": "Tst01",
        "positionId": 432,
        "positionCode": "Ps0t1"
      }
    ]
  },
  "groups": {
    "ifExistsUser": "donothing",
    "items": [
      {
        "groupId": 96818982,
        "groupCode": "grp0cod"
      }
    ]
  },
  "welcomeMessage": {
    "send": false
  },
  "businessShiftId": 189,
  "leadershipId": 4321
});

const requestOptions = {
  method: "POST",
  headers: myHeaders,
  body: raw
};

try {
  const response = await fetch("https://seu_endereco.do.zeev/api/2/users", requestOptions);
  const result = await response.json();
  console.log(result)
} catch (error) {
  console.error(error);
};
```

{% endtab %}
{% endtabs %}

***

## **Links relacionados**:

* [O que é preciso para fazer integrações do Zeev para outros sistemas?](/zeev/integracoes/o-que-e-preciso-para-fazer-integracoes.md)
* [Como autenticar nas APIs do Zeev](/zeev/apis/como-utilizar-as-apis-do-zeev/como-gerar-tokens-para-autenticar-nas-apis.md)
* [Como controlar o volume máximo de requisições à APIs](/zeev/apis/como-utilizar-as-apis-do-zeev/como-controlar-o-volume-maximo-de-requisicoes-a-apis.md)
* [Como acessar o Swagger / OpenAPI](/zeev/apis/como-utilizar-as-apis-do-zeev/como-acessar-o-swagger-openapi.md)
* [Como criar pessoas](/zeev/usuarios-e-permissoes/gerenciar-usuarios/como-criar-usuarios.md)
* [Como excluir pessoas](/zeev/usuarios-e-permissoes/gerenciar-usuarios/como-excluir-usuarios.md)


---

# 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/all/access/people/add.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.
