> ## 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.

# Autenticação

> Client credentials do OAuth 2.0, o token que você envia e os scopes que ele carrega.

Um parceiro se autentica com client credentials do OAuth 2.0. O provedor de identidade é o Amazon Cognito. O MyPilotIndex cria um cliente confidencial para cada parceiro aprovado, e esse cliente só pode usar o fluxo client credentials: nenhum token que ele recebe pode representar um piloto.

## Obtendo um token

Envie um POST para o endpoint de token do domínio do provedor de identidade, `https://{cognito-domain}/oauth2/token`, com autenticação HTTP Basic do cliente (o seu client id como nome de usuário e o seu client secret como senha):

```http theme={null}
POST /oauth2/token
Content-Type: application/x-www-form-urlencoded
Authorization: Basic base64(client_id:client_secret)

grant_type=client_credentials&scope=partner/profile partner/score
```

A produção usa `auth.mypilotindex.com`. O sandbox usa o domínio do ambiente de dev, que entregamos junto com a sua credencial de sandbox.

Envie o access token no cabeçalho `Authorization: Bearer` de toda chamada à API de Parceiros. Na criação do cliente, os tokens são emitidos com validade de 60 minutos. Leia `expires_in` na resposta do token em vez de depender desse número, e peça um novo token quando ele expirar.

## Scopes

Um token carrega só os scopes para os quais o seu parceiro foi aprovado. Um scope é escrito `partner/<name>` na requisição do token e no próprio token. Um grant guarda o nome puro, por exemplo `hours.write`.

| Scope no token | O que permite |
| - | - |
| `partner/profile` | Ler o nome, a foto e o nome de usuário do piloto. |
| `partner/score` | Ler o MPI Score e a fase do piloto. |
| `partner/hours.read` | Ler as horas de voo do piloto. |
| `partner/hours.write` | Atualizar as horas de voo do piloto com os totais do logbook. |
| `partner/licenses` | Ler as licenças, as habilitações e os type ratings do piloto. |
| `partner/applications` | Ler as candidaturas do piloto a vagas da empresa do parceiro. Nenhuma rota desta versão da referência atende esse scope. |

A troca de código, a lista de grants, a conferência de certificado e o teste de webhook não exigem scope, só um token válido. O resumo do piloto exige que o grant e o token tenham pelo menos um entre `profile`, `score`, `hours.read` e `licenses`, e mostra só os blocos que o grant permite. O envio de totais de voo exige `hours.write` tanto no token quanto no grant. Se faltar um scope exigido, a resposta é `403 forbidden` com o motivo `scope_missing`.

## Duas coisas que decidem uma chamada

* **O token** diz quem você é e o que você pode pedir a um piloto.
* **O grant** diz qual piloto permitiu o quê a você. As rotas que indicam um grant respondem `404 not_found` para um grant revogado, desconhecido ou de outro parceiro, sempre da mesma forma.

Uma chamada com token ausente, expirado ou inválido responde `401`.


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