# Autenticação

## Resumo

Após um usuário de empresa ter recebido seus dados, será necessário se autenticar nessa API para receber as credenciais que será utilizada daqui para frente. Ela irá carregar as permissões de acesso e informações básicas do usuário.

### Endpoints

* [**POST** /v1/auth](#autenticacao)
* [**POST** /v1/password-reset](#recuperar-senha)

### /Auth

## Autenticação com login e senha

<mark style="color:green;">`POST`</mark> `https://goblockchain.io/gotokens-api/v1/auth`

Rota que retorna o token JWT de acesso do usuário ao sistema, assim como dados básicos e segundos restantes até a expiração do token.

#### Request Body

| Name                                       | Type   | Description       |
| ------------------------------------------ | ------ | ----------------- |
| email<mark style="color:red;">\*</mark>    | String | E-mail do Usuário |
| password<mark style="color:red;">\*</mark> | String | Senha do Usuário  |

{% tabs %}
{% tab title="200: OK " %}
{% tabs %}
{% tab title="Exemplo de Resposta" %}

```javascript
{
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
  "email": "user@email.com",
  "id": "785",
  "status": "active",
  "secsToExpire": "8599"
}
```

{% endtab %}

{% tab title="Campos da Resposta" %}

* **`accessToken`** *- String*

  JWT de uso para acessp e permissionamento ao sistema.

* **`email`** *- String*

  E-mail do usuário logado.

* **`id`** *- String*

  Identificador único do usuário logado.

* **`status`** *- String*

  Status do acesso do usuário. Em caso da necessidade do bloqueio de acesso de um usuário, seu status deverá ser mudado para `disabled`. Caso contrário, seu status é salvo como `active`.

* **`secsToExpire`** *- String*

  Número de segundos resté a necessidade de renovação do `access_token` por meio de um novo login.
  {% endtab %}
  {% endtabs %}
  {% endtab %}

{% tab title="400: Bad Request " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 400" %}

<table><thead><tr><th width="152" align="center">Código</th><th>Descrição</th></tr></thead><tbody><tr><td align="center">1</td><td>Endereço de e-mail não corresponde à nenhum usuário na base.</td></tr><tr><td align="center">10</td><td>Senha inserida está incorreta.</td></tr><tr><td align="center">1001</td><td>Parâmetro "<em>email</em>" inválido. O campo é obrigatório, deve ser do tipo <em>String</em> e seguir um formato de e-mail válido.</td></tr><tr><td align="center">1002</td><td>Parâmetro "<em>password</em>" inválido. O campo é obrigatório e deve ser do tipo <em>String</em>.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}

## Autenticação com meios externos

<mark style="color:green;">`POST`</mark> `https://goblockchain.io/gotokens-api/v1/auth/external`

Rota que retorna o token JWT de acesso do usuário ao sistema, assim como dados básicos e segundos restantes até a expiração do token.

{% tabs %}
{% tab title="200: OK " %}
{% tabs %}
{% tab title="Exemplo de Resposta" %}

```javascript
{
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
  "id": "785",
  "status": "active",
  "secsToExpire": "8599"
}
```

{% endtab %}

{% tab title="Campos da Resposta" %}

* **`accessToken`** *- String*

  JWT de uso para acessp e permissionamento ao sistema.

* **`id`** *- String*

  Identificador único do usuário logado.

* **`status`** *- String*

  Status do acesso do usuário. Em caso da necessidade do bloqueio de acesso de um usuário, seu status deverá ser mudado para `disabled`. Caso contrário, seu status é salvo como `active`.

* **`secsToExpire`** *- String*

  Número de segundos resté a necessidade de renovação do `access_token` por meio de um novo login.
  {% endtab %}
  {% endtabs %}
  {% endtab %}

{% tab title="400: Bad Request " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 400" %}

<table><thead><tr><th width="152" align="center">Código</th><th>Descrição</th></tr></thead><tbody><tr><td align="center">1</td><td>Endereço de e-mail não corresponde à nenhum usuário na base.</td></tr><tr><td align="center">10</td><td>Senha inserida está incorreta.</td></tr><tr><td align="center">1001</td><td>Parâmetro "<em>email</em>" inválido. O campo é obrigatório, deve ser do tipo <em>String</em> e seguir um formato de e-mail válido.</td></tr><tr><td align="center">1002</td><td>Parâmetro "<em>password</em>" inválido. O campo é obrigatório e deve ser do tipo <em>String</em>.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}

### /Password-Reset

## Redefinição de Senha

<mark style="color:green;">`POST`</mark> `https://goblockchain.io/gotokens-api/v1/password-reset`

Rota que envia um email com um link temporário para redefinição de senha.

#### Request Body

| Name                                    | Type   | Description       |
| --------------------------------------- | ------ | ----------------- |
| email<mark style="color:red;">\*</mark> | String | E-mail do Usuário |

{% tabs %}
{% tab title="200: OK " %}
{% tabs %}
{% tab title="Exemplo de Resposta" %}

```javascript
{
    "emailSent": true,
    "errorMessage": null
}
```

{% endtab %}

{% tab title="Campos da Resposta" %}

* **`emailSent`** *- Boolean*

  Valida se o e-mail com link para redefinição de senha foi enviado com sucesso

* **`errorMessage`** *- DateTime*

  Retorna a mensagem de erro caso haja falha no envio do e-mail de redefinição de senha.
  {% endtab %}
  {% endtabs %}
  {% endtab %}

{% tab title="400: Bad Request " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 400" %}

<table><thead><tr><th width="152" align="center">Código</th><th>Descrição</th></tr></thead><tbody><tr><td align="center">1</td><td>Endereço de e-mail não corresponde à nenhum usuário na base.</td></tr><tr><td align="center">1001</td><td>Parâmetro "<em>email</em>" inválido. O campo é obrigatório, deve ser do tipo <em>String</em> e seguir um formato de e-mail válido.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}

## Redefinição de Senha

<mark style="color:green;">`POST`</mark> `https://goblockchain.io/gotokens-api/v1/password-reset/:reset_token`

Rota que redefine a senha do usuário que a requisitou.

#### Path Parameters

| Name         | Type   | Description                                     |
| ------------ | ------ | ----------------------------------------------- |
| reset\_token | String | Token de redefinição de senha enviado por email |

#### Request Body

| Name                                       | Type   | Description           |
| ------------------------------------------ | ------ | --------------------- |
| password<mark style="color:red;">\*</mark> | String | Nova senha do Usuário |

{% tabs %}
{% tab title="200: OK " %}
{% tabs %}
{% tab title="Exemplo de Resposta" %}

```javascript
{
  "passwordChanged": true,
  "errorMessage": null
}
```

{% endtab %}

{% tab title="Campos da Resposta" %}

* **`passwordChanged`** *- Boolean*

  Valida se a senha do usuário foi alterada com sucesso.

* **`errorMessage`** *- DateTime*

  Retorna a mensagem de erro caso haja falha na redefinição de senha do usuário.
  {% endtab %}
  {% endtabs %}
  {% endtab %}

{% tab title="400: Bad Request " %}
{% tabs %}
{% tab title="Possíveis Erros HTTP - 400" %}

<table><thead><tr><th width="152" align="center">Código</th><th>Descrição</th></tr></thead><tbody><tr><td align="center">1</td><td>Token de redefinição de senha inexistente na base de dados.</td></tr><tr><td align="center">1001</td><td>Parâmetro "<em>password</em>" inválido. O campo é obrigatório, deve ser do tipo <em>String</em>.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}
{% endtab %}
{% endtabs %}


---

# 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://docs.gotokens.io/gotokens/api-fidelidade/autenticacao.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.
