# Desinstalación, suspensión y datos

Qué recibe tu servidor cuando una empresa desinstala tu aplicación, qué tienes que hacer con sus datos y sus credenciales, y qué pasa si UTILIA la suspende.

Cada empresa puede desinstalar tu aplicación cuando quiera, sin pedirte permiso. Al hacerlo, la clave de su instalación deja de valer en el acto y te llega el aviso `APP_UNINSTALLED`. A partir de ahí, lo que hagas con sus datos lo marcan lo que declara tu ficha y las Condiciones para desarrolladores que aceptaste.

## Cuando una empresa la desinstala

En la empresa, la persona confirma «¿Desinstalar Acme?» y puede contarte por qué, si quiere. Entonces, en este orden:

1. Sale hacia tu dirección de avisos `APP_UNINSTALLED`, con el motivo en `data.reason` (o `null`), firmado con la clave de esa instalación.
2. La clave de la instalación deja de valer y se cierran sus conexiones abiertas: cualquier llamada con ella responde `401`.
3. Los códigos de canje pendientes de esa instalación se borran.
4. La instalación queda `UNINSTALLED`, con la fecha y el motivo, en `GET /external/v1/app-installations/:id`.

Lo que tu aplicación creó en UTILIA OS (clientes, contactos, tickets, archivos, mensajes) se queda en la empresa: no lo borra la desinstalación.

## Lo que tienes que hacer tú

**Al recibir APP_UNINSTALLED**

1. **Comprueba la firma y responde 2xx** (Tu servidor): Con la clave de firma de esa instalación, como cualquier aviso.
2. **Destruye sus credenciales** (Tu base de datos): La clave y la clave de firma de la instalación ya no sirven.
3. **Deja de tratar sus datos** (Tu servicio): Para los procesos y los envíos de esa empresa.
4. **Devuélvelos o suprímelos** (Tu servicio): En el plazo que fijan las Condiciones para desarrolladores y tu ficha.

_La empresa ve, al desinstalar, que te avisaremos para que borres sus datos según tus condiciones._

- **Credenciales.** Las de cada instalación se destruyen cuando la instalación termina. Guardarlas no sirve de nada: ya no valen.
- **Datos de la empresa.** Tratas sus datos por cuenta de la empresa. Al terminar, dejas de tratarlos y, a su elección, se los devuelves o los suprimes, con todas sus copias, como mucho **30 días** después de recibir el aviso de desinstalación o de que sus credenciales dejen de funcionar, lo que pase antes. Las copias de seguridad que los contengan se borran al rotar, como mucho a los 90 días, y mientras tanto no se usan. Solo puedes conservar, bloqueado, lo que una ley te obligue a guardar, y si la empresa te lo pide le certificas la supresión.

Lo que declares en **Cuánto tiempo**, en la ficha, tiene que cuadrar con lo que haces de verdad. Lo regula el apartado 12.7 de las [Condiciones para desarrolladores](https://os.utilia.ai/legal/developer-terms).

## Si la aplicación es de pago

- **Desinstalar termina la suscripción en el acto**, sin reembolso del periodo en curso. Te llegan los avisos del fin de la suscripción y `APP_UNINSTALLED`.
- **Toda suscripción que termina desinstala tu aplicación**, por la causa que sea: cancelación al final del periodo, impago, disputa perdida o fin de la venta. Desde ahí rige lo de arriba.
- **Mientras una suscripción está en pausa**, por impago, por una disputa o por otra causa, conservas los datos de la empresa sin usarlos para nada más, porque puede volver. Los 30 días para devolverlos o suprimirlos empiezan cuando la suscripción termina y tu aplicación se desinstala.

Los plazos de un impago y de cada pausa están en [Reembolsos, disputas e impagos](https://os.utilia.ai/docs/developers/pricing-and-payouts/refunds-and-disputes).

Si tu servidor no está disponible cuando sale el aviso, se reintenta como cualquier otro. Aun así, no dependas solo de él: si una llamada con la clave de una instalación responde `401`, consulta su estado con `GET /external/v1/app-installations/:id`.

## Si la vuelven a instalar

Si la misma empresa instala tu aplicación otra vez, es la **misma instalación** (el mismo `installation_id`) con todo nuevo: un código nuevo en tu dirección de instalación, una clave y una clave de firma nuevas, y otro `APP_INSTALLED` al canjear. Lo de la instalación anterior no vuelve: haz que tu servidor sustituya lo que tenía de esa instalación, en lugar de rechazarla por repetida.

## Si UTILIA la suspende

UTILIA puede suspender tu aplicación en todas las empresas que la tienen a la vez: por un problema de seguridad, un uso indebido de los datos, un requerimiento de una autoridad, un incumplimiento de las Normas del catálogo o porque tu cuenta de desarrollador esté suspendida. Es una medida de protección, para que deje de acceder a los datos al momento.

- **Tú** recibes la comunicación de la suspensión, con su motivo, y `APP_SUSPENDED` de cada instalación con el motivo público en `data.reason`.
- **Cada empresa** ve «Suspendida por UTILIA» con un motivo general, nunca el detalle, y la garantía de que tu aplicación no puede acceder a sus datos. No tiene que hacer nada.
- **Las instalaciones** quedan `SUSPENDED`: sus claves responden `403 APP_DISABLED`, no salen avisos de datos y los códigos de canje pendientes se invalidan. La ficha sale de Explorar y no se puede instalar.

Al **reanudarla**, vuelven a funcionar las instalaciones que se suspendieron, con los permisos que tenían, y te llega `APP_REINSTATED` de cada una. Las que nunca llegaron a conectarse vuelven a **Falta conectar**, y las que una empresa desinstaló mientras tanto no vuelven.

Si es de pago, mientras dure la suspensión sus suscripciones quedan en pausa y sin cobros, y al reanudarla se suma a cada periodo el tiempo que duró. Si la suspensión llega a 30 días, UTILIA decide si la reanuda o la retira del todo; si la retira, las suscripciones terminan y cada empresa recupera la parte que no llegó a usar.

Si no estás de acuerdo con la suspensión, recúrrela desde la pestaña **Revisión** de la aplicación, en la consola: ver [Revisión de la ficha](https://os.utilia.ai/docs/developers/apps-platform/review#cómo-responder-o-recurrir).

## Si algo falla

- **No te llegó `APP_UNINSTALLED`.** La ficha no tenía dirección de avisos cuando se instaló, o tu receptor rechazó la entrega. La instalación aparece `UNINSTALLED` en la API igualmente.
- **Te llega un aviso de una instalación que ya borraste.** Puede ser un reintento de antes de desinstalarse: responde `2xx` sin procesarlo, o compruébalo con `X-Utilia-Delivery-Id`.
- **Una instalación suspendida responde `403 APP_DISABLED`.** Es la suspensión, no un fallo tuyo. Si no sabes por qué, mira el motivo que te enviamos.
