Get Age Signals

With the global trend to protect minors in digital environments, recent legislative developments have begun across the United States as well as in various countries worldwide. These laws impose new responsibilities on app stores and require developers distributing apps through app stores in these regions to comply with specific obligations.

The Get Age Signals API helps you to comply with these obligations by providing the users' age range and parental consent status. You can use this information, in compliance with the latest legislative requirements, to verify that a user can purchase an app, download an app, make in-app purchases, or make a purchase using an app.

In order to use the Get Age Signals API, do the following:

  1. Add permissions to your manifest file.
  2. Check the Galaxy Store version to verify that it supports the Galaxy Store Provider API.
  3. Check the U.S. state to verify if the user is subject to legislation to protect minors.
  4. Verify user information and their ability to purchase/download your app and make purchases.
  5. Verify responses from the Get Age Signals API.

It is recommended that you call the Get Age Signals API when your app is launched.


Add permissions

To add permissions for the Get Age Signals API and the ability to query the specified content provider, edit your app's AndroidManifest.xml file and add the following:

<uses-permission android:name="com.sec.android.app.samsungapps.accesspermission.ASAA_PROVIDER.READ" />
<queries>
    <provider android:authorities="com.sec.android.app.samsungapps.provider.ASAA" />
</queries>

Check the Galaxy Store version

In order to support the Get Age Signals API, the version of Galaxy Store on the user's device must be 4.6.03.1 or higher.

The following example demonstrates how you can check the Galaxy Store version on the user's device.

static final String GALAXYSTORE = "com.sec.android.app.samsungapps";
static final String ASAA_META = GALAXYSTORE+".AccountabilityActProvider.version";
    
private static boolean checkProviderAvailable(Context context){
    ApplicationInfo appInfo = null;
    try {
        appInfo = context.getPackageManager().getApplicationInfo(GALAXYSTORE, PackageManager.GET_META_DATA);
    } catch (PackageManager.NameNotFoundException e) {
    }

    float version = 0f;
    if (appInfo != null) {
        Bundle bundle = appInfo.metaData;
        if (bundle != null) {
            version = bundle.getFloat(ASAA_META, 0f);
        }
    }
    boolean isSupported = version >= 1.0f;
    return isSupported;
}

Check the U.S. state

Galaxy Store distinguishes if users are governed by the Texas App Store Accountability Act (ASAA). You can use this information to see if you must use the Get Age Signals API to verify user information and the user's ability to purchase/download your app and make purchases.

The following example shows how to check if the user is governed by the Texas ASAA.

static final String TAG = "AgeSignalProviderGetter";
static final String STATE_TEXAS = "TX";

private static boolean checkState(Context context){
    ContentResolver contentResolver = context.getContentResolver();
    try {
        String state = Settings.Secure.getString(contentResolver, "gs_location_state");
        if (STATE_TEXAS.equals(state)){
            Log.i(TAG, " not supported state "+state);
            return true;
        }
    } catch (Exception e) {
    }
    return false;
}

Verify user information

The getAgeSignalResult method gets the user's age range and status and returns the information in a bundle. Use this information to verify the user can purchase/download your app and make purchases. It is recommended that you call the Get Age Signals API when your app is launched.

  • Method name: getAgeSignalResult
  • Provider version: 1.0
  • Java method signature: public final Bundle call(@NonNull Uri uri, @NonNull String method, @Nullable String arg, @Nullable Bundle extras)
  • URI: content://com.sec.android.app.samsungapps.provider.ASAA/settings
  • Extras: Null
  • Result type: Bundle
Bundle Key

Type

Description and Value

result_code

int

The result of the method call.

0: Success, the call succeeded.
1: Failure, the call failed.

result_message

string

If the result_code is 1, the reason the call failed.

It is not a supported method: The method name is not correct or the function is disabled by the server. Even if the user is not subject to the current laws, this value is returned.
The device is not registered SA: The device does not have a registered Samsung account.

userStatus

string

The type of user.

VERIFIED: The user is 18 years of age or older.
SUPERVISED: The user has a supervised Samsung account that is managed by a parent who sets their age.
SUPERVISED_APPROVAL_DENIED: The user has a supervised Samsung account that is managed by a parent who sets their age and the supervising parent has denied approval for one or more pending significant changes.
SUPERVISED_APPROVAL_PENDING: The user has a supervised Samsung account and the supervising parent has not yet approved one or more pending significant changes.
UNKNOWN: There could be one or more reasons for this value:
1) The user has not agreed to the Galaxy Store's terms and conditions
2) The installer information of the currently installed app is not Galaxy Store.
3) The user is a minor who is not a member of a Samsung account family group.
4) The user is a minor but the Samsung parental controls are disabled.

ageLower

string

The (inclusive) lower bound of the age range of a supervised user. For example, if this is set to 5, the user is at least 5 years old.

0 - 18: The lower bound is from 0 to 18 years.
Null: The user has not agreed to Galaxy Store's terms and conditions.

ageUpper

string

The (inclusive) upper bound of the age range of a supervised user. For example, if this is set to 12, the user is at most 12 years old.

0 - 18: The upper bound is from 0 to 18 years.
Null: The user has not agreed to Galaxy Store's terms and conditions or the user is not a minor.

mostRecentApprovalDate

string

The effective date when the most recent significant change was approved.

YYYY-MM-DD: The effective date from which the most recent significant change was approved by the supervising parent. When an app is installed, this is the date of the most recent significant change prior to the installation of the app.
Null: Either the userStatus is SUPERVISED and no significant change has been submitted or userStatus is VERIFIED or UNKNOWN.

installID

string

Galaxy Store-generated alphanumeric ID.

<ID>: An alphanumeric ID assigned to the supervised user by Galaxy Store.
Null: userStatus is VERIFIED or UNKNOWN.

Example

static final String ASAA_AUTHORITY = "com.sec.android.app.samsungapps.provider.ASAA";
static final String ASAA_META = GALAXYSTORE+".AccountabilityActProvider.version";
static final String QUERY_SETTINGS = "settings";
static final String URI_ASAA_SETTINGS = "content://"+ASAA_AUTHORITY+"/"+QUERY_SETTINGS;
static final String METHOD_GET_AGE_SIGNAL_RESULT = "getAgeSignalResult";
static final String KEY_RESULT_USER_STATUS = "userStatus";
static final String KEY_RESULT_AGE_LOWER = "ageLower";
static final String KEY_RESULT_AGE_UPPER = "ageUpper";
static final String KEY_RESULT_APPROVAL_DATE = "mostRecentApprovalDate";
static final String KEY_RESULT_INSTALLID = "installID";


public static String getAgeSignalResult(Context context) {
    String ret = "";

    if (!checkProviderAvailable(context)){
        Log.i(TAG, " checkProviderAvailable FALSE");
        return ret;
    }

    if (!checkState(context)){
        Log.i(TAG, " checkState Not Texas");
        return ret;
    }

    ContentResolver contentResolver = context.getContentResolver();
    Bundle resultBundle = null;
    try {
        resultBundle = contentResolver.call(Uri.parse(URI_ASAA_SETTINGS), METHOD_GET_AGE_SIGNAL_RESULT, null, null);
    } catch (Exception e) {
    }

    if (resultBundle != null) {
        int resultCode = resultBundle.getInt("result_code", 1);
        if (resultCode == 0) { // success
            String userStatus = resultBundle.getString(KEY_RESULT_USER_STATUS, "");
            String ageLower = resultBundle.getString(KEY_RESULT_AGE_LOWER, "");
            String ageUpper = resultBundle.getString(KEY_RESULT_AGE_UPPER, "");
            String approval_date = resultBundle.getString(KEY_RESULT_APPROVAL_DATE, "");
            String installID = resultBundle.getString(KEY_RESULT_INSTALLID, "");
            ret = " userStatus : "+ userStatus + "\n"
                    + " ageLower : "+ ageLower + "\n"
                    + " ageUpper : "+ ageUpper + "\n"
                    + " approval_date : "+ approval_date + "\n"
                    + " installID : "+ installID;
        } else { // failure
            ret = resultBundle.getString("result_message", "");
        }
    }
    return ret;
}

Verify Responses from the Get Age Signals API

Use the following sample test app and code for verifying responses from the Get Age Signals API. This APK is provided for testing until the updated version of Galaxy Store has been completely distributed.

When the global updates to Galaxy Store have been completely distributed, use of the this APK should be removed from your app. Instead, verification can be achieved by updating to the latest version of Galaxy Store on your device.

Sample test app (AgeSignalProviderTest_20251217.zip)
(115 KB) Dec 17, 2025
Age Signal Provider test APK (AgeSignalProviderTestApp_20251217.apk)
(6 MB) Dec 17, 2025

How user information is retrieved

  1. Your app requests user information using the Get Age Signals API.
  2. The response, when successful, includes the user's age range and status.

Additional Terms and Conditions

In addition to complying with Seller Portal's Terms and Conditions and Data Terms, you must also comply with these additional terms and conditions when using the Get Age Signals API:

  1. The Get Age Signals API can only be used by apps that are registered and updated in Galaxy Store.
  2. The information provided by the Get Age Signals API can only be used by the requesting app and can only be used for compliance with the latest legislative requirements. This information cannot be used for any other purposes (including, but not limited to, demographic analysis, advertising or other promotional activities, market research or other marketing activities, or performance tracking).
  3. Unauthorized and unlawful use of the Get Age Signals API and the provided information is strictly prohibited and may result in the loss of access to the Get Age Signals API and your app(s) being suspended or removed from Galaxy Store.