---
title: "Настройка согласия пользователя и параметров возврата через API"
description: ""
---

[Adapty Refund Saver](refund-saver) помогает автоматически и эффективно обрабатывать запросы на возврат средств из App Store компании Apple.

По умолчанию Refund Saver всегда просит Apple отклонить запрос пользователя на возврат. Вы можете [изменить это поведение по умолчанию](refund-saver#set-a-default-refund-behavior) для всех пользователей в дашборде Adapty или настроить его для конкретного пользователя [через дашборд](refund-saver#set-refund-behavior-for-a-specific-user-in-the-dashboard), [Adapty SDK](refund-saver#set-refund-behavior-for-a-specific-user-in-the-sdk) или серверный API, как описано ниже.

Для использования Refund Saver необходимо получить согласие пользователя на передачу его данных компании Apple. Согласие пользователя можно записать [через Adapty SDK](refund-saver#update-user-consent-in-the-sdk) или серверный API, как показано ниже.

## Метод и эндпоинт \{#method-and-endpoint\}

```
POST https://api.adapty.io/api/v2/server-side-api/purchase/profile/refund-saver/settings/
```

## Пример запроса \{#example-request\}

<Tabs groupId="api-lang" queryString>  
<TabItem value="curl" label="cURL" default>  

```bash showLineNumbers
curl --location 'https://api.adapty.io/api/v2/server-side-api/purchase/profile/refund-saver/settings/' \
--header 'adapty-customer-user-id: <YOUR_CUSTOMER_USER_ID>' \
--header 'Content-Type: application/json' \
--header 'Authorization: Api-Key <YOUR_SECRET_API_KEY>' \
--data '{ 
    "custom_preference": "grant",
    "consent": true
}'
```

</TabItem>  
<TabItem value="python" label="Python" default>  

```python showLineNumbers

url = "https://api.adapty.io/api/v2/server-side-api/purchase/profile/refund-saver/settings/"

payload = json.dumps({
    "custom_preference": "grant",
    "consent": True
})
headers = {
 "adapty-customer-user-id": "<YOUR_CUSTOMER_USER_ID>",
  "Content-Type": "application/json",
  "Authorization": "Api-Key <YOUR_SECRET_API_KEY>"
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

```

</TabItem>  
<TabItem value="js" label="JavaScript" default>  

```javascript showLineNumbers
const myHeaders = new Headers();
myHeaders.append("adapty-customer-user-id", "<YOUR_CUSTOMER_USER_ID>");
myHeaders.append("Content-Type", "application/json");
myHeaders.append("Authorization", "Api-Key <YOUR_SECRET_API_KEY>");

const raw = JSON.stringify({
    "custom_preference": "grant",
    "consent": true
});

const requestOptions = {
  method: "POST",
  headers: myHeaders,
  body: raw,
  redirect: "follow"
};

fetch("https://api.adapty.io/api/v2/server-side-api/purchase/profile/refund-saver/settings/", requestOptions)
  .then((response) => response.text())
  .then((result) => console.log(result))
  .catch((error) => console.error(error));
```

</TabItem>  
</Tabs>

Плейсхолдеры:

- `<YOUR_CUSTOMER_USER_ID>`: Уникальный идентификатор пользователя в вашей системе.
- `<YOUR_SECRET_API_KEY>`: Ваш секретный API-ключ для авторизации.

## Параметры \{#parameters\}

| Параметр          | Тип     | Обязательный | Nullable | Описание                                                                                                                                                                              |
| :---------------- | :------ | ------------ | -------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| custom_preference | String  | Нет          | Да       | Устанавливает предпочтение по возврату для конкретного пользователя. <br/> Возможные значения: <br/>– `grant`: одобрять каждый запрос на возврат <br/>– `no_preference`: не давать никаких рекомендаций |
| consent           | Boolean | Нет          | Да       | Фиксирует, дал ли пользователь согласие на передачу своих данных. <br/>– `True` означает, что при получении запроса на возврат встроенной покупки вы можете передать Apple информацию о пользователе |

## Успешный ответ: 200: OK \{#successful-response-200-ok\}

| Параметр          | Тип     | Описание                                                                 |
|-------------------|---------|--------------------------------------------------------------------------|
| profile_id        | String  | Идентификатор профиля пользователя.                                      |
| consent           | Boolean | Определяет, дал ли пользователь согласие на передачу своих данных.       |
| custom preference | String  | Предпочтение по возврату средств.                                        |

## Пример успешного ответа \{#successful-response-example\}

``` json showLineNumbers
{
    "profile_id": "e5aab402-b1bd-4039-b632-57a91ebc0779",
    "settings": {
        "consent": true,
        "custom_preference": "no_preference"
    }
}
```

## Ошибки \{#errors\}

### 400: Bad request \{#400-bad-request\}

#### profile_does_not_exist

<p> </p>

Запрос завершился ошибкой, потому что профиль из заголовка запроса не найден. Проверьте, нет ли опечаток в `profile_id` или `customer_user_id`, указанных в заголовке запроса, и убедитесь, что они относятся к правильному приложению.

#### Тело

| Параметр    | Тип     | Описание                                                     |
| ----------- | ------- | ------------------------------------------------------------ |
| errors      | Object  | <ul><li> **source**: (string) Всегда `non_field_errors`</li><li> **errors**: Описание ошибки. </li></ul> |
| error_code  | String  | Краткое название ошибки. Возможное значение: `profile_does_not_exist`.  |
| status_code | Integer | HTTP-статус. Всегда `400`.                                   |

#### Пример ответа

Профиль не найден

```json showLineNumbers
{
  "errors": [
    {
      "source": "non_field_errors",
      "errors": [
        "Profile not found"
      ]
    }
  ],
  "error_code": "profile_does_not_exist",
  "status_code": 400
}
```  

---

### 401: Unauthorized \{#401-unauthorized\}

<p> </p>

Запрос не выполнен из-за отсутствующей или неверной авторизации. Проверьте страницу [Авторизация](ss-authorization), уделив особое внимание **Authorization header**.

Запрос также не выполнен, так как указанный профиль не найден.

#### Body

| Параметр    | Тип     | Описание                                                     |
| ----------- | ------- | ------------------------------------------------------------ |
| errors      | Object  | <ul><li> **source**: (string) Всегда `non_field_errors`.</li><li> **errors**: Описание ошибки.</li></ul> |
| error_code  | String  | Короткое название ошибки. Всегда `not_authenticated`.        |
| status_code | Integer | HTTP-статус. Всегда `401.`                                   |

#### Пример ответа

```json showLineNumbers
{
  "errors": [
    {
      "source": "non_field_errors",
      "errors": [
        "Authentication credentials were not provided."
      ]
    }
  ],
  "error_code": "not_authenticated",
  "status_code": 401
}
```  

---

**См. также:**

- [Refund Saver](refund-saver) 
- [Получение согласия пользователя и настроек возврата через API](api-adapty/operations/getRefundSaverSettings)