> For the complete documentation index, see [llms.txt](https://docs.vaultid.com.br/workspace/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.vaultid.com.br/workspace/cloud/api/autenticacao-de-usuarios/qr-code-e-push.md).

# QR Code e Push

## Fluxograma

Esse método de autenticação segue o seguinte esquema:

<figure><img src="/files/OVkLozykzpbOvs8YbrCq" alt=""><figcaption></figcaption></figure>

## Ambientes

* Develop: <https://portalapicloudid.dev.vaultid.com.br>
* Homologação Bird: <https://portalapihom.birdid.com.br>
* Homologação Vault: <https://portalapicloudid.hom.vaultid.com.br>
* Produção Bird: <https://portalapi.birdid.com.br>
* Produção Vault: <https://portalapicloudid.vaultid.com.br>

## API

### Início da autenticação

<mark style="color:green;">`POST`</mark> `{{BASE_URL}}/oauth/start`

#### Headers

| Name         | Type   | Description      |
| ------------ | ------ | ---------------- |
| Content-Type | string | application/json |

#### Request Body

| Name                | Type    | Description                                                                                                                                                              |
| ------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| client\_id          | string  | Deve ter a identificação da aplicação.                                                                                                                                   |
| client\_secret      | string  | Deve ter a senha da aplicação                                                                                                                                            |
| username (opcional) | string  | Identificação do usuário por meio de CPF ou CNPJ.                                                                                                                        |
| scope               | string  | Escopo da autenticação. ([ver lista de escopos](/workspace/cloud/api/autenticacao-de-usuarios.md))                                                                       |
| lifetime            | integer | Tempo de vida desejado para o token a ser gerado em segundos. Para pessoas físicas não deve ultrapassar (7 dias), e para pessoas jurídicas este limite será de (30 dias) |

```sh
curl --location '{{BASE_URL}}/oauth/start' \
--header 'Content-Type: application/json' \
--data '{
    "client_id":"myclient",
    "client_secret":"mysecret",
    "scope":"authentication_session",
    "callback_url": "https://minha-aplicacao.com.br/auth/callback",
    "lifetime": 36000
}'
```

#### Response Body

| Name         | Type    | Description                                                                                                                                                                            |
| ------------ | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| challenge    | string  | Desafio a ser informado no app no caso de notificação push                                                                                                                             |
| client\_name | string  | Nome aplicação do client\_id informado                                                                                                                                                 |
| short\_token | string  | Token de identificação do fluxo de autenticação                                                                                                                                        |
| ws\_token    | string  | Token para conexão no websocket. Só é criado caso a aplicação possua permissão.                                                                                                        |
| can\_notify  | boolean | Informa se a aplicação possui permissão para enviar notificação push.                                                                                                                  |
| notified     | boolean | Informa se a aplicação conseguiu notificar o usuário via push. Só retorna verdadeiro caso o username tenha sido informado e a aplicação possua permissão para enviar notificação push. |
| qr\_code     | string  | Código que permite a aplicação que está integrando gerar o qr code.                                                                                                                    |
| environment  | string  | Identificador do ambiente em que foi realizada a autenticação.                                                                                                                         |
| auth\_ttl    | integer | Tempo de vida em segundos do processo de autenticação.                                                                                                                                 |

{% tabs %}
{% tab title="201 " %}

```json
{
    "challenge": "06",
    "client_name": "Minha Aplicacao",
    "short_token": "68113334cb92acb46b91b8a3",
    "ws_token": null,
    "notified": false,
    "can_notify": false,
    "qr_code": "birdid://auth-request/68113334cb92acb46b91b8a3?env=vault_dev",
    "envionment": "vault_dev",
    "auth_ttl": 300
}
```

{% endtab %}
{% endtabs %}

### Envio de notificação

Por padrão, as aplicações não possuem permissão para enviar notificação. Essa permissão deve ser solicitada junto ao comercial da Soluti.

<mark style="color:green;">`POST`</mark> `{{BASE_URL}}/oauth/notify`

#### Headers

| Name         | Type   | Description      |
| ------------ | ------ | ---------------- |
| Content-Type | string | application/json |

#### Request Body

| Name         | Type   | Description                                       |
| ------------ | ------ | ------------------------------------------------- |
| username     | string | Identificação do usuário por meio de CPF ou CNPJ. |
| short\_token | string | Propriedade recebida da chamada /oauth/start      |

```sh
curl --location '{{BASE_URL}}/oauth/notify' \
--header 'Content-Type: application/json' \
--data '{
    "username": "64733822312",
    "short_token":"68113334cb92acb46b91b8a3"
}'
```

#### Response Body

| Name          | Type    | Description                                                                                                                                                                            |
| ------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| challenge     | string  | Desafio a ser informado no app no caso de notificação push                                                                                                                             |
| client\_name  | string  | Nome aplicação do client\_id informado                                                                                                                                                 |
| short\_token  | string  | Token de identificação do fluxo de autenticação                                                                                                                                        |
| ws\_token     | string  | Token para conexão no websocket. Só é criado caso a aplicação possua permissão.                                                                                                        |
| notified      | boolean | Informa se a aplicação conseguiu notificar o usuário via push. Só retorna verdadeiro caso o username tenha sido informado e a aplicação possua permissão para enviar notificação push. |
| qr\_code      | string  | Código que permite a aplicação que está integrando gerar o qr code.                                                                                                                    |
| callback\_url | string  | URL que será chamada assim que o usuário confirmar a autenticação.                                                                                                                     |

{% tabs %}
{% tab title="201 " %}

```json
{
    "challenge": "06",
    "client_name": "Minha Aplicacao",
    "short_token": "68113677cb92acb46b91b8a4",
    "ws_token": null,
    "notified": true,
    "qr_code": "birdid://auth-request/68113677cb92acb46b91b8a4?env=vault_dev"
}
```

{% endtab %}
{% endtabs %}

### Callback de autenticação

Assim que o usuário autoriza a autenticação no app, o sistema notifica a aplicação integrada via webhook, fornecendo um token temporário JWT para obtenção do token de acesso.

<mark style="color:green;">`POST`</mark> `{{CALLBACK_URL}}`

#### Headers

| Name         | Type   | Description      |
| ------------ | ------ | ---------------- |
| Content-Type | string | application/json |

```sh
curl --location '{{CALLBACK_URL}}' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaG9ydFRva2VuIjoiNjgwYTljNzcxMGRiZDM3ODM0YmQ1NTYzIiwiaWF0IjoxNzQ1NTI1OTUwLCJleHAiOjE3NDU1MjYxODB9.DRqTYJzsvGdgz0EQlayv21RzsasYq-w3z350CNfJsVc",
    "short_token": "68113677cb92acb46b91b8a4"
}'
```

#### Request Body

| Name         | Type   | Description                                                          |
| ------------ | ------ | -------------------------------------------------------------------- |
| token        | string | Token JWT que deverá ser utilizado para obtenção do token de acesso. |
| short\_token | string | Token de identificação do fluxo de autenticação                      |

### Obtenção do token de acesso

<mark style="color:green;">`GET`</mark> `{{BASE_URL}}/oauth/token`

#### Headers

| Name          | Type   | Description      |
| ------------- | ------ | ---------------- |
| Content-Type  | string | application/json |
| Authorization | string | Bearer token     |

```sh
curl --location '{{BASE_URL}}/oauth/token' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer token'
```

#### Response Body

| Name          | Type    | Description                                       |
| ------------- | ------- | ------------------------------------------------- |
| access\_token | string  | Token de acesso aos serviços da Public API.       |
| expires\_in   | integer | Tempo para expiração do access token.             |
| token\_type   | string  | Bearer.                                           |
| scope         | string  | Escopo da autenticação.                           |
| username      | string  | Identificação do usuário por meio de CPF ou CNPJ. |

{% tabs %}
{% tab title="200" %}

```json
{
    "access_token": "0c95bfe4d60a3c9f1ac66fade5111849950c4297",
    "expires_in": 36000,
    "token_type": "bearer",
    "scope": "authorization_session"
    "username": "64733822312"
}
```

{% endtab %}
{% endtabs %}
