> ## Documentation Index
> Fetch the complete documentation index at: https://developers.mypilotindex.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Consentimento e login

> Envie o piloto para a tela de consentimento, troque o código por um grant (concessão) e faça o login dele.

Um piloto conecta o seu aplicativo no MyPilotIndex. Você nunca vê a senha dele, e ele pode encerrar a conexão a qualquer momento.

## Envie o piloto para a tela de consentimento

Redirecione o navegador dele para:

```text theme={null}
https://mypilotindex.com/connect/{slug}
  ?client_id=...
  &redirect_uri=...
  &scope=...
  &state=...
  &code_challenge=...
  &code_challenge_method=S256
```

| Parâmetro | Regra |
| - | - |
| `client_id` | O client id do seu app client no Cognito. Ele identifica você; o slug no caminho é só o seu nome no link. |
| `redirect_uri` | Precisa coincidir, exatamente, com uma URI de redirecionamento que o MyPilotIndex registrou para você. Qualquer outra é recusada e o piloto não é enviado a lugar nenhum. |
| `scope` | Um ou mais nomes de scope separados por espaços, sem o prefixo `partner/`, por exemplo `profile hours.write`. Cada um precisa estar entre os que o seu parceiro tem permissão para pedir. |
| `state` | Um valor seu, devolvido sem alteração. No máximo 512 bytes, sem caracteres de controle. Use-o para se proteger contra falsificação de requisições. |
| `code_challenge` | O desafio PKCE: o SHA-256 do seu `code_verifier` em base64url sem padding. |
| `code_challenge_method` | Precisa ser `S256`. |

O piloto entra no MyPilotIndex se ainda não estiver logado, lê quais dados dele você está pedindo e permite ou nega.

## O retorno

* **Permitido:** o navegador dele vai para o seu `redirect_uri` com `code` e `state` acrescentados.
* **Negado:** o navegador dele vai para o seu `redirect_uri` com `error=access_denied` e `state`.
* **Uma solicitação que o MyPilotIndex recusa** (um parceiro desconhecido, uma URI de redirecionamento não registrada, um scope não permitido) mostra um erro no MyPilotIndex e não redireciona.

## O código

O código vale por 10 minutos e funciona uma única vez. Um código expirado, já usado, emitido para outro parceiro ou combinado com um verifier ou uma URI de redirecionamento errados é recusado da mesma forma: reinicie o consentimento.

## A troca

Chame `POST /v1/partner/grants/exchange` com o seu bearer token e um corpo JSON com exatamente `code`, `code_verifier` (de 43 a 128 caracteres) e `redirect_uri`. A resposta traz:

* `grant_id`, que toda chamada seguinte indica;
* `pilot.id`, o id por parceiro (pairwise id) do piloto;
* `scopes`, o que o piloto concedeu, em ordem;
* com o scope `profile`, também `name`, `username` e `avatar_url` dele, cada um null quando ele não tiver.

Um código que não abre um grant para você (desconhecido, expirado ou usado, de outro parceiro, com verifier ou URI de redirecionamento errados, ou de um grant que o piloto revogou desde então) é recusado como `400 invalid_request` com o motivo `invalid_grant`, seja qual for o problema. Um corpo malformado (um membro desconhecido ou repetido, ou um valor que não é string) também recebe `400 invalid_request`, sem motivo.

## Entrar com MyPilotIndex

O id por parceiro (pairwise id) é estável entre reconexões do mesmo piloto ao seu aplicativo, diferente em cada parceiro e nunca é o id da conta no MyPilotIndex. Você pode usá-lo para fazer o login do piloto no seu próprio produto ("Entrar com MyPilotIndex") e para identificá-lo nas chamadas seguintes.

## Revogação

O piloto pode desconectar você em Configurações, Privacidade, Apps conectados. O MyPilotIndex também pode revogar um grant. A partir daí, toda chamada que indica o grant responde `404 not_found` e, quando houver uma URL de webhook registrada para você, você recebe um webhook `grant.revoked`. Se o piloto apagar a conta, o grant é removido junto. Apague o que você guarda sobre esse piloto.

## O que nunca é compartilhado

A API de Parceiros nunca transporta o e-mail, o telefone, o endereço, a data de nascimento, os números de certificado, os documentos, as respostas de histórico, o salário, as mensagens ou os sinais de recrutador de um piloto, e quem identifica o piloto para você é o id por parceiro (pairwise id), não o id da conta dele. Um bloco de dados que o grant não inclui fica ausente da resposta.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.