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

# Consentimiento e inicio de sesión

> Envía al piloto a la pantalla de consentimiento, intercambia el código por un grant (concesión) e inicia la sesión del piloto.

Un piloto conecta tu aplicación en MyPilotIndex. Nunca ves su contraseña, y el piloto puede terminar la conexión en cualquier momento.

## Envía al piloto a la pantalla de consentimiento

Redirige el navegador del piloto a:

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

| Parámetro | Regla |
| - | - |
| `client_id` | El client id de tu app client de Cognito. Te identifica; el slug de la ruta es solo tu nombre en el enlace. |
| `redirect_uri` | Debe coincidir exactamente con una URI de redirección que MyPilotIndex registró para ti. Cualquier otro valor se rechaza y el piloto no es enviado a ningún lado. |
| `scope` | Uno o más nombres de scope separados por espacios, sin el prefijo `partner/`, por ejemplo `profile hours.write`. Cada uno debe estar entre los que tu cuenta de socio puede pedir. |
| `state` | Tu propio valor, devuelto sin cambios. Como máximo 512 bytes, sin caracteres de control. Úsalo como protección contra la falsificación de solicitudes. |
| `code_challenge` | El challenge de PKCE: el SHA-256 de tu `code_verifier` en base64url sin padding. |
| `code_challenge_method` | Debe ser `S256`. |

El piloto inicia sesión en MyPilotIndex si todavía no lo hizo, lee cuáles de sus datos pides, y permite o deniega.

## El retorno

* **Permitido:** su navegador va a tu `redirect_uri` con `code` y `state` agregados.
* **Denegado:** su navegador va a tu `redirect_uri` con `error=access_denied` y `state`.
* **Una solicitud que MyPilotIndex rechaza** (un socio desconocido, una URI de redirección no registrada, un scope no permitido) muestra un error en MyPilotIndex y no redirige.

## El código

El código vale 10 minutos y sirve una sola vez. Un código vencido, ya usado, emitido para otro socio, o combinado con un verifier o una URI de redirección incorrectos se rechaza de la misma forma: reinicia el consentimiento.

## El intercambio

Llama a `POST /v1/partner/grants/exchange` con tu bearer token y un cuerpo JSON con exactamente `code`, `code_verifier` (de 43 a 128 caracteres) y `redirect_uri`. La respuesta contiene:

* `grant_id`, que indicas en cada llamada posterior;
* `pilot.id`, el id pairwise del piloto;
* `scopes`, lo que el piloto concedió, ordenado;
* con el scope `profile`, también su `name`, `username` y `avatar_url`, cada uno null cuando el piloto no lo tiene.

Un código que no abre un grant para ti (desconocido, vencido o usado, de otro socio, con un verifier o una URI de redirección incorrectos, o un grant que el piloto revocó desde entonces) se rechaza como `400 invalid_request` con el motivo `invalid_grant`, sea cual sea el problema. Un cuerpo mal formado (un miembro desconocido o repetido, o un valor que no es un string) también es `400 invalid_request`, sin motivo.

## Iniciar sesión con MyPilotIndex

El id pairwise es estable entre reconexiones del mismo piloto a tu aplicación, distinto en cada socio, y nunca es el id de la cuenta de MyPilotIndex. Puedes usarlo para iniciar la sesión del piloto en tu propio producto ("Iniciar sesión con MyPilotIndex") y para identificarlo en llamadas posteriores.

## Revocación

El piloto puede desconectarte en Ajustes, Privacidad, Apps conectadas. MyPilotIndex también puede revocar un grant. A partir de ese momento, cada llamada que indique el grant responde `404 not_found` y, cuando tenemos registrada una URL de webhook para ti, recibes un webhook `grant.revoked`. Si el piloto borra su cuenta, el grant se elimina con ella. Borra lo que guardas de ese piloto.

## Lo que nunca se comparte

La API de Socios nunca transmite el correo, el teléfono, la dirección, la fecha de nacimiento, los números de certificado, los documentos, las respuestas de antecedentes, el salario, los mensajes ni las señales de reclutador de un piloto, y lo que identifica al piloto ante ti es su id pairwise, no el id de su cuenta. Un bloque de datos que el grant no incluye no aparece en la respuesta.


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