Skip to main content

Set user consent and refund settings with API

Adapty Refund Saver helps you handle refund requests from Apple’s App Store automatically and more efficiently.

By default, Refund Saver always asks Apple to decline a user’s refund request. You can change this default behavior for all users in the Adapty Dashboard, or adjust it for a specific user using the Dashboard, the Adapty SDK, or the server-side API, as explained below.

To use Refund Saver, you need to get the user’s consent to share their data with Apple. You can record user's consent through the Adapty SDK or the server-side API, as shown below.

Method and endpoint

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

Example request

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
}'

Placeholders:

  • <YOUR_CUSTOMER_USER_ID>: The unique ID of the customer in your system.
  • <YOUR_SECRET_API_KEY>: Your secret API key for authorization.

Parameters

ParameterTypeRequired in requestNullable in requestDescription
custom_preferenceStringSet the refund preference individually for the user.
Possible values are:
grant: approve each refund request
no_preference: do not provide any recommendations to Apple. In this case, Apple will determine the refund outcome based on its internal policies and user history)
decline: decline each refund request.
The default value is null. So, if you don't set custom_preference, the default behavior will be used.
consentBooleanRecord if the user gave their consent to share their data.
True means that if you receive an in-app refund request, you may provide Apple with information about the user's in-app purchase activity.
false means Refund Saver won't share the user's data with Apple.
The default value is null. So, if you don't set consent, the default behavior will be used.

Successful response: 200: OK

ParameterTypeDescription
profile_idStringCustomer profile ID.
consentBooleanDefines whether the user consented to share their data.
custom preferenceStringThe refund preference.

Successful response example

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

Errors

400: Bad request

profile_does_not_exist

The request failed because the profile in the request header wasn’t found. Double-check that there are no typos in the profile_id or customer_user_id you entered in the request header, and make sure it’s for the correct app.

Body

ParameterTypeDescription
errorsObject
  • source: (string) Always non_field_errors
  • errors: A description of the error.
error_codeStringShort error name. Possible value: profile_does_not_exist.
status_codeIntegerHTTP status. Always 400.

Response example

The profile is not found

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

401: Unauthorized

The request failed due to missing or incorrect authorization. Check the Authorization page, paying close attention to the Authorization header.

The request also failed because the specified profile wasn’t found.

Body

ParameterTypeDescription
errorsObject
  • source: (string) Always non_field_errors.
  • errors: A description of the error.
error_codeStringShort error name. Always not_authenticated.
status_codeIntegerHTTP status. Always 401.

Response example

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

See also: