# Inicio de sesión integrado

> Cómo generar URLs de acceso único, válidas por 60 segundos, que abren Cortecloud autenticado para un vendedor o un carpintero.

URL canónica: https://apis.cortecloud.com.br/docs/es/guias/login-embutido/

El inicio de sesión integrado abre pantallas de Cortecloud ya autenticadas para un usuario de su sistema, sin que tenga que escribir usuario y contraseña. Su backend le pide a la API una URL de acceso y se la entrega al usuario, que la abre en el navegador.

Hay dos rutas, una para cada tipo de usuario:

| Ruta | Usuario | Pantalla que se abre |
| --- | --- | --- |
| [`POST /embed/quick-service`](https://apis.cortecloud.com.br/docs/swagger#/Embed/createSellerLink) | Vendedor de la central | Registro de un nuevo servicio para un carpintero. |
| [`POST /embed/service`](https://apis.cortecloud.com.br/docs/swagger#/Embed/createCarpenterLink) | Carpintero | Whitelabel de la central: el sitio de la central dentro de Cortecloud, con su marca. |

Las dos rutas usan la misma [autenticación](https://apis.cortecloud.com.br/docs/es/comecando/autenticacao.md) que las demás y responden `201` con la URL:

```json
{ "url": "https://..." }
```

## Cuidados con la URL {#cuidados-com-a-url}

- La URL sirve para un único acceso y expira en 60 segundos. Genérela en el momento en que el usuario vaya a abrirla, no antes.
- La URL da acceso a la cuenta del usuario. Entréguesela solo a él y no la registre en logs ni la guarde.
- La llamada a la API la hace su backend, que tiene la secret key. El navegador recibe solo la URL.

## Nuevo servicio para un vendedor {#novo-servico-para-um-vendedor}

Ruta: [`POST /embed/quick-service`](https://apis.cortecloud.com.br/docs/swagger#/Embed/createSellerLink).

La URL abre Cortecloud autenticado como el vendedor indicado, en la pantalla de registro de un nuevo servicio para el carpintero indicado, que se producirá en la línea de producción indicada.

| Campo | Descripción |
| --- | --- |
| `companyInternalCode` | [Código de la central](https://apis.cortecloud.com.br/docs/es/comecando/conceitos.md#codigo-da-central). Debe ser igual al encabezado `x-company-internal-code`; si no lo es, la respuesta es `401`. |
| `productionInternalCode` | Código interno de la línea de producción donde se producirán las piezas. |
| `sellerEmail` | Correo electrónico del vendedor que recibirá el acceso. |
| `sellerName` | Nombre del vendedor. |
| `carpenterEmail` | Correo electrónico del carpintero para quien se creará el servicio. |
| `carpenterName` | Nombre del carpintero. |
| `carpenterInternalCode` | Código que identifica al carpintero en su sistema. |

Todos los campos son obligatorios.

Antes de generar la URL, la ruta registra al vendedor en la central y al carpintero en Cortecloud, si todavía no existen, y vincula al carpintero con la central con el código `carpenterInternalCode`. Repetir la llamada con los mismos datos no duplica registros. Dos casos requieren atención:

- si el carpintero ya tiene un vínculo activo con la central, se mantiene el código interno que ya tiene, y `carpenterInternalCode` no lo reemplaza;
- si el vendedor está registrado en otra central, se transfiere a la central de la solicitud y pierde el vínculo con la anterior.

```json
{
  "companyInternalCode": "CENTRAL-SP",
  "productionInternalCode": "LINHA-1",
  "sellerEmail": "vendedor@example.com",
  "sellerName": "Fulano Vendedor",
  "carpenterEmail": "marceneiro@example.com",
  "carpenterName": "Beltrano Marceneiro",
  "carpenterInternalCode": "CLI-0042"
}
```

## Área del carpintero {#area-do-marceneiro}

Ruta: [`POST /embed/service`](https://apis.cortecloud.com.br/docs/swagger#/Embed/createCarpenterLink).

La URL abre el whitelabel de la central de la solicitud (`x-company-internal-code`) autenticado como el carpintero indicado. El carpintero se registra en Cortecloud si todavía no existe.

| Campo | Descripción |
| --- | --- |
| `carpenterEmail` | Correo electrónico del carpintero que recibirá el acceso. |
| `carpenterName` | Nombre del carpintero. |

Los dos campos son obligatorios.

```json
{
  "carpenterEmail": "marceneiro@example.com",
  "carpenterName": "Beltrano Marceneiro"
}
```

## Errores {#erros}

| Estado | Situación |
| --- | --- |
| `400` | Falta un campo obligatorio, un campo está vacío o un correo electrónico no es válido. |
| `401` | Falla de [autenticación](https://apis.cortecloud.com.br/docs/es/comecando/autenticacao.md#quando-a-autenticacao-falha) o, en `quick-service`, `companyInternalCode` distinto de `x-company-internal-code`. |
| `404` | En `/embed/service`: la central no tiene un whitelabel configurado. |
| `409` | El correo electrónico indicado ya pertenece a un usuario con otro perfil, por ejemplo el correo de un vendedor enviado como carpintero. |
| `429` | La integración superó el [límite de solicitudes](https://apis.cortecloud.com.br/docs/es/comecando/erros-limites-paginacao.md#limites-de-requisicao). |
| `5xx` u otro estado | Falla al registrar a los usuarios o al generar el acceso; el mensaje trae el motivo. Puede ser transitoria: reintente con espera creciente y un número limitado de intentos, y escriba a suporte@serrabits.com.br si persiste. |
