# 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 %}


---

# 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.vaultid.com.br/workspace/cloud/api/autenticacao-de-usuarios/qr-code-e-push.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.
