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

# Autenticación

> Client credentials de OAuth 2.0, el token que envías y los scopes que lleva.

Un socio se autentica con client credentials de OAuth 2.0. El proveedor de identidad es Amazon Cognito. MyPilotIndex crea un cliente confidencial para cada socio aprobado, y ese cliente solo puede usar el flujo client credentials: ningún token que reciba puede representar nunca a un piloto.

## Obtener un token

Envía un POST al endpoint de token del dominio del proveedor de identidad, `https://{cognito-domain}/oauth2/token`, con autenticación de cliente HTTP Basic (tu client id como nombre de usuario y tu client secret como contraseña):

```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
```

Producción usa `auth.mypilotindex.com`. El sandbox usa el dominio del entorno dev, que te damos junto con tu credencial de sandbox.

Envía el token de acceso en el encabezado `Authorization: Bearer` de cada llamada a la API de Socios. Al crear el cliente, los tokens quedan configurados con una validez de 60 minutos. Lee `expires_in` en la respuesta del token en lugar de depender de este número, y pide un token nuevo cuando venza.

## Scopes

Un token solo lleva los scopes aprobados para tu cuenta de socio. Un scope se escribe `partner/<name>` en la solicitud del token y en el token. Un grant guarda el nombre sin prefijo, por ejemplo `hours.write`.

| Scope en el token | Qué permite |
| - | - |
| `partner/profile` | Leer el nombre, la foto y el usuario del piloto. |
| `partner/score` | Leer el MPI Score y la fase del piloto. |
| `partner/hours.read` | Leer las horas de vuelo del piloto. |
| `partner/hours.write` | Actualizar las horas de vuelo del piloto con los totales del logbook. |
| `partner/licenses` | Leer las licencias, habilitaciones y type ratings del piloto. |
| `partner/applications` | Leer las postulaciones del piloto a empleos de la empresa del socio. Ninguna ruta de esta versión de la referencia lo atiende. |

El intercambio, la lista de grants, la verificación de certificados y la prueba de webhook no necesitan scope, solo un token válido. El resumen del piloto necesita que el grant y el token tengan al menos uno de `profile`, `score`, `hours.read` y `licenses`, y muestra solo los bloques que el grant permite. El envío de totales de vuelo necesita `hours.write` tanto en el token como en el grant. Si falta un scope obligatorio, la respuesta es `403 forbidden` con el motivo `scope_missing`.

## Dos cosas que deciden una llamada

* **El token** dice quién eres y qué puedes pedirle a un piloto.
* **El grant** dice qué piloto te permitió qué. Las rutas que indican un grant responden `404 not_found` para un grant revocado, desconocido o de otro socio, siempre de la misma forma.

Un token ausente, vencido o inválido responde `401`.


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