# Eliminar perfil

> Borra los datos personales de un perfil y cancela sus correos electrónicos programados. Úsalo para cumplir una
> solicitud de derecho al olvido.
>
> Identifica el perfil mediante cualquier combinación de `external_profile_id`, `customer_user_id` y
> `email` — Adapty Mail resuelve el perfil de la misma manera que lo hace al guardar.
>
> El borrado es definitivo. Una solicitud posterior de [Guardar perfil](#operation/saveProfile) que contenga los mismos
> identificadores no vuelve a crear el perfil.
>
> Repite una eliminación por `external_profile_id` o `customer_user_id` y se completará de nuevo
> sin modificar nada. Repite una que solo contenía `email` y devuelve `404`:
> el borrado elimina la dirección almacenada, por lo que un correo electrónico no tiene nada con qué coincidir.

## OpenAPI

```yaml
/api-specs/adapty-mail-api.yaml post /api/v1/profile/delete/
openapi: 3.1.0
info:
  title: Adapty Mail API
  version: 1.0.0
  description: |
    La API de Adapty Mail te permite enviar perfiles de usuario y eventos de transacción a Adapty Mail directamente
    desde tu servidor, sin enrutar los datos a través del SDK.

    Úsala para:

    - Añadir suscriptores cuando aún no tienes una base en Adapty Mail.
    - Reutilizar la base de suscriptores de tus otras aplicaciones.
    - Alimentar Adapty Mail de servidor a servidor, con tu backend como fuente de verdad.

    Un perfil con un correo electrónico es suficiente para el flow **never purchased**. Todos los demás flows
    (renewal cancelled, billing issue, expired, refunded) se basan en el historial de compras, por lo que esos
    perfiles también necesitan eventos de transacción para ser ubicados en el flow correcto.

    Para una guía paso a paso, consulta [Enviar correos electrónicos y transacciones a través de la API de Adapty Mail](/docs/mail-send-data-via-api).
servers:
  - url: https://api-mail.adapty.io
    description: Servidor de producción
paths:
  /api/v1/profile/delete/:
    post:
      summary: Eliminar perfil
      description: |
        Borra los datos personales de un perfil y cancela sus correos electrónicos programados. Úsalo para cumplir una
        solicitud de derecho al olvido.

        Identifica el perfil mediante cualquier combinación de `external_profile_id`, `customer_user_id` y
        `email` — Adapty Mail resuelve el perfil de la misma manera que lo hace al guardar.

        El borrado es definitivo. Una solicitud posterior de [Guardar perfil](#operation/saveProfile) que contenga los mismos
        identificadores no vuelve a crear el perfil.

        Repite una eliminación por `external_profile_id` o `customer_user_id` y se completará de nuevo
        sin modificar nada. Repite una que solo contenía `email` y devuelve `404`:
        el borrado elimina la dirección almacenada, por lo que un correo electrónico no tiene nada con qué coincidir.
      operationId: deleteProfile
      security:
        - apikeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProfileDeleteDTO"
            examples:
              byExternalProfileId:
                summary: Eliminar por el identificador enviado al guardar el perfil
                value:
                  external_profile_id: user_12345
              byEmail:
                summary: Eliminar por dirección de correo electrónico
                value:
                  email: jane@example.com
      responses:
        "204":
          description: Perfil eliminado. La respuesta no tiene cuerpo.
        "400":
          description: No se proporcionó ningún identificador.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Errors"
              examples:
                default:
                  value:
                    errors:
                      - message: At least one of external_profile_id, customer_user_id or email must be provided
                        error_code: missing_identifier
                        status_code: 400
                        field_name: null
        "403":
          description: Clave de API secreta ausente o no válida.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Errors"
              examples:
                default:
                  value:
                    errors:
                      - message: Secret key doesn't exist
                        error_code: secret_key_does_not_exist_error
                        status_code: 403
                        field_name: null
        "404":
          description: Ningún perfil coincide con los identificadores enviados.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Errors"
              examples:
                default:
                  value:
                    errors:
                      - message: Profile not found
                        error_code: profile_not_found_error
                        status_code: 404
                        field_name: null
components:
  schemas:
    ProfileDeleteDTO:
      type: object
      description: |
        Identificadores del perfil a eliminar. Envíe al menos uno de `external_profile_id`,
        `customer_user_id` o `email`.
      anyOf:
        - required:
            - external_profile_id
        - required:
            - customer_user_id
        - required:
            - email
      properties:
        external_profile_id:
          type: string
          description: El identificador que envió al guardar el perfil.
        customer_user_id:
          type: string
          description: El identificador del usuario en su propio sistema.
        email:
          type: string
          format: email
          description: La dirección de correo electrónico del perfil.
    Errors:
      type: object
      description: Respuesta de error estándar. Cada fallo devuelve un estado 4XX con esta estructura.
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
                description: Descripción del error en formato legible para humanos.
              error_code:
                type: string
                description: Identificador de error legible por máquina.
              status_code:
                type: integer
                description: Código de estado HTTP para este error.
              field_name:
                type: string
                description: El campo de la solicitud que causó el error, o `null` si el error no está relacionado con un campo específico.
  securitySchemes:
    apikeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: |
        Autentique cada solicitud con su clave API secreta de Adapty Mail, enviada como encabezado **Authorization**
        con el valor `Bearer {your_secret_api_key}`, por ejemplo, `Bearer secret_live_...`.

        Encuentre esta clave en Adapty Mail en **Settings**. La clave es específica del proyecto — identifica el
        proyecto al que pertenecen los datos, por lo que los endpoints de perfil y transacción no requieren un ID de proyecto.
```
