# Achievements

**URL:** https://heroiclabs.com/docs/hiro/unreal/achievements/
**Keywords:** achievements, hiro
**Categories:** hiro, unreal, achievements

---


# Achievements

Read more about the Achievements system in Hiro [here](../../concepts/achievements/).

## Get all achievements

Get all achievements with progress accumulated by the player.

```cpp
FHiroOnAchievementsGet OnAchievementsGet;
OnAchievementsGet.AddDynamic(this, &AMyActor::OnAchievementsGet);
FOnError OnError;

HiroClient->AchievementsGet(Session, OnAchievementsGet, OnError);

void AMyActor::OnAchievementsGet(const FHiroAchievementList& AchievementList)
{
    UE_LOG(LogTemp, Log, TEXT("%s"), *AchievementList.ToJson());
}
```

## Get active achievements

Check `IsActive` on each achievement to show only those in an active time window.

```cpp
FHiroOnAchievementsGet OnAchievementsGet;
OnAchievementsGet.AddDynamic(this, &AMyActor::OnAchievementsGet);
FOnError OnError;

HiroClient->AchievementsGet(Session, OnAchievementsGet, OnError);

void AMyActor::OnAchievementsGet(const FHiroAchievementList& AchievementList)
{
    for (const auto& AchievementKvp : AchievementList.Achievements)
    {
        if (AchievementKvp.Value.IsActive)
        {
            UE_LOG(LogTemp, Log, TEXT("Active achievement: %s"), *AchievementKvp.Key);
        }
    }
}
```

## Claim achievements

Claim one or more achievements which have completed their progress.

```cpp
FHiroAchievementsClaimRequest Request;
Request.Ids = {TEXT("achievement_1"), TEXT("achievement_2")};
Request.ClaimTotalReward = true;

FHiroOnAchievementsClaim OnAchievementsClaim;
OnAchievementsClaim.AddDynamic(this, &AMyActor::OnAchievementsClaim);
FOnError OnError;

HiroClient->AchievementsClaim(Session, Request, OnAchievementsClaim, OnError);

void AMyActor::OnAchievementsClaim(const FHiroAchievementsUpdateAck& AchievementsUpdateAck)
{
    UE_LOG(LogTemp, Log, TEXT("%s"), *AchievementsUpdateAck.ToJson());
}
```


## Update achievement progress

Update one or more achievements with the same progress amount.

```cpp
FHiroAchievementsUpdateRequest Request;
Request.Ids = {TEXT("achievement_1"), TEXT("achievement_2")};
Request.Amount = 1;

FHiroOnAchievementsUpdate OnAchievementsUpdate;
OnAchievementsUpdate.AddDynamic(this, &AMyActor::OnAchievementsUpdate);
FOnError OnError;

HiroClient->AchievementsUpdate(Session, Request, OnAchievementsUpdate, OnError);

void AMyActor::OnAchievementsUpdate(const FHiroAchievementsUpdateAck& AchievementsAck)
{
    UE_LOG(LogTemp, Log, TEXT("%s"), *AchievementsAck.ToJson());
}
```