# Удалить профиль

> Удаляет персональные данные профиля и отменяет его запланированные письма. Используйте этот метод для выполнения запроса на удаление данных в соответствии с правом на забвение.
>
> Идентифицируйте профиль с помощью любой комбинации `external_profile_id`, `customer_user_id` и `email` — Adapty Mail разрешает профиль так же, как и при сохранении.
>
> Удаление является необратимым. Последующий запрос [Save profile](#operation/saveProfile) с теми же идентификаторами не пересоздаёт профиль.
>
> Повторное удаление по `external_profile_id` или `customer_user_id` завершится успешно, не изменив ничего. Повторное удаление только по `email` вернёт `404`: удаление очищает сохранённый адрес, поэтому email не соответствует ни одной записи.

## 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: |
    Adapty Mail API позволяет отправлять профили пользователей и события транзакций в Adapty Mail напрямую
    с вашего сервера, минуя SDK.

    Используйте его для:

    - Добавления подписчиков, если у вас ещё нет базы в Adapty Mail.
    - Повторного использования базы подписчиков из других ваших приложений.
    - Передачи данных в Adapty Mail по схеме сервер-сервер, где ваш бэкенд является источником истины.

    Профиль с email достаточен для флоу **never purchased**. Все остальные флоу
    (renewal cancelled, billing issue, expired, refunded) основаны на истории покупок, поэтому для таких
    профилей также необходимо передавать события транзакций, чтобы они попали в нужный флоу.

    Пошаговое руководство см. в [Отправка email-рассылок и транзакций через Adapty Mail API](/docs/mail-send-data-via-api).
servers:
  - url: https://api-mail.adapty.io
    description: Продакшн-сервер
paths:
  /api/v1/profile/delete/:
    post:
      summary: Удалить профиль
      description: |
        Удаляет персональные данные профиля и отменяет его запланированные письма. Используйте этот метод для выполнения запроса на удаление данных в соответствии с правом на забвение.

        Идентифицируйте профиль с помощью любой комбинации `external_profile_id`, `customer_user_id` и `email` — Adapty Mail разрешает профиль так же, как и при сохранении.

        Удаление является необратимым. Последующий запрос [Save profile](#operation/saveProfile) с теми же идентификаторами не пересоздаёт профиль.

        Повторное удаление по `external_profile_id` или `customer_user_id` завершится успешно, не изменив ничего. Повторное удаление только по `email` вернёт `404`: удаление очищает сохранённый адрес, поэтому email не соответствует ни одной записи.
      operationId: deleteProfile
      security:
        - apikeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ProfileDeleteDTO"
            examples:
              byExternalProfileId:
                summary: Удалить по идентификатору, переданному при сохранении профиля
                value:
                  external_profile_id: user_12345
              byEmail:
                summary: Удалить по адресу электронной почты
                value:
                  email: jane@example.com
      responses:
        "204":
          description: Профиль удалён. Тело ответа отсутствует.
        "400":
          description: Идентификатор не был указан.
          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: Отсутствует или недействителен секретный API-ключ.
          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: Ни один профиль не соответствует переданным идентификаторам.
          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: |
        Идентификаторы профиля для удаления. Укажите хотя бы один из параметров: `external_profile_id`,
        `customer_user_id` или `email`.
      anyOf:
        - required:
            - external_profile_id
        - required:
            - customer_user_id
        - required:
            - email
      properties:
        external_profile_id:
          type: string
          description: Идентификатор, переданный при сохранении профиля.
        customer_user_id:
          type: string
          description: Идентификатор пользователя в вашей системе.
        email:
          type: string
          format: email
          description: Адрес электронной почты, привязанный к профилю.
    Errors:
      type: object
      description: Стандартный ответ об ошибке. Каждый сбой возвращает статус 4XX с такой структурой.
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
                description: Описание ошибки в человекочитаемом формате.
              error_code:
                type: string
                description: Машиночитаемый идентификатор ошибки.
              status_code:
                type: integer
                description: HTTP-код статуса для данной ошибки.
              field_name:
                type: string
                description: Поле запроса, вызвавшее ошибку, или `null`, если ошибка не связана с конкретным полем.
  securitySchemes:
    apikeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: |
        Аутентифицируйте каждый запрос с помощью секретного API-ключа Adapty Mail, передаваемого в заголовке **Authorization**
        со значением `Bearer {your_secret_api_key}`, например `Bearer secret_live_...`.

        Найдите этот ключ в Adapty Mail в разделе **Settings**. Ключ привязан к конкретному проекту — он идентифицирует
        проект, которому принадлежат данные, поэтому эндпоинты профилей и транзакций не требуют передачи идентификатора проекта.
```
