> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XblAchievementsManagerAddLocalUser

> XblAchievementsManagerAddLocalUser

Initialize the Achievements Manager and generate a local cache of achievements for a user.

## Syntax

```cpp theme={null}
HRESULT XblAchievementsManagerAddLocalUser(  
         XblUserHandle user,  
         XTaskQueueHandle queue  
)  
```

### Parameters

*user*   \_In\_\
Type: XblUserHandle

XBOX Live User to fetch achievements for.

*queue*   \_In\_opt\_\
Type: XTaskQueueHandle

Queue to be used for background operation for this user (Optional).

### Return value

Type: HRESULT

HRESULT return code for this API operation.

## Remarks

Because `XblAchievementsManagerAddLocalUser` requires an internet connection to correctly track user info, it should only be called while connected to the internet. Using [XNetworkingRegisterConnectivityHintChanged](https://docs.xbox.com/reference/networking/xnetworking/functions/xnetworkingregisterconnectivityhintchanged.md) is a good way to check for a connection.

If the Achievements Manager is not initialized, calls to [XblAchievementsManagerUpdateAchievement](https://docs.xbox.com/reference/live/xsapi-c/achievements_manager_c/functions/xblachievementsmanagerupdateachievement.md) will fail. In this case, calls to [XblAchievementsUpdateAchievementAsync](https://docs.xbox.com/reference/live/xsapi-c/achievements_c/functions/xblachievementsupdateachievementasync.md) should be made instead as achievement conditions are met to ensure that progression is still tracked. Here is an example of how this can be implemented:

```cpp theme={null}
HRESULT hr = XblAchievementsManagerUpdateAchievement(xuid, "2", 3);
if (FAILED(hr))
{
    XAsyncBlock async{};
    hr = XblAchievementsUpdateAchievementAsync(m_xblContext, xuid, "2", 3, &async);
    if (SUCCEEDED(hr))
    {
        // this simple example is thread blocking. 
        // replace with whatever async pattern used by other XAsync calls in title
        XAsyncGetStatus(&async, true); 
    }
}
```

## Requirements

**Header:** achievements\_manager\_c.h

**Library:** Microsoft.Xbox.Services.142.C.lib or Microsoft.Xbox.Services.143.C.lib

## See also

[achievements\_manager\_c](https://docs.xbox.com/reference/live/xsapi-c/achievements_manager_c/achievements_manager_c_members.md)


## Related topics

- [XBOX Achievements Manager API overview](https://docs.xbox.com/services/xbox-services/player-data/achievements/achievements-manager/live-achievements-manager-overview.md)
- [XblAchievementsManagerIsUserInitialized](https://docs.xbox.com/reference/live/xsapi-c/achievements_manager_c/functions/xblachievementsmanagerisuserinitialized.md)
- [achievements_manager_c (contents)](https://docs.xbox.com/reference/live/xsapi-c/achievements_manager_c/achievements_manager_c_members.md)
- [XblAchievementsManagerUpdateAchievement](https://docs.xbox.com/reference/live/xsapi-c/achievements_manager_c/functions/xblachievementsmanagerupdateachievement.md)
- [XblAchievementsManagerRemoveLocalUser](https://docs.xbox.com/reference/live/xsapi-c/achievements_manager_c/functions/xblachievementsmanagerremovelocaluser.md)
