# Streaks

**URL:** https://heroiclabs.com/docs/hiro/server-framework/streaks/
**Keywords:** streaks, hiro
**Categories:** hiro, streaks, server-framework

---


# Streaks

Read more about the Streaks system in Hiro [here](../../concepts/streaks/).

## Functions

### List

List all streaks and their current state and progress for a given user.

```go
userId := "userId"

streaks, err := systems.GetStreaksSystem().List(ctx, logger, nk, userId)
if err != nil {
  return err
}
```

### Update

Update one or more streaks with the indicated counts for the given user.

```go
userId := "userId"
streakIds := map[string]int64{"streakId_001": 5, "streakId_002": 2}

streaks, err := systems.GetStreaksSystem().Update(ctx, logger, nk, userId, streakIds)
if err != nil {
  return err
}
```

### Claim

Claim rewards for one or more streaks for the given user.

```go
userId := "userId"
streakIds := []string{"streakId_001", "streakId_002"}

streaks, err := systems.GetStreaksSystem().Claim(ctx, logger, nk, userId, streakIds)
if err != nil {
  return err
}
```

### Reset

Reset progress on selected streaks for the given user.

```go
userId := "userId"
streakIds := []string{"streakId_001", "streakId_002"}

streaks, err := systems.GetStreaksSystem().Reset(ctx, logger, nk, userId, streakIds)
if err != nil {
  return err
}
```

## Hooks

### SetOnClaimReward

Set a custom reward function which will run after a streak's reward is rolled.

```go
systems.GetStreaksSystem().SetOnClaimReward(OnClaimReward)

func OnClaimReward(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, sourceID string, source *hiro.StreaksConfigStreak, rewardConfig *hiro.EconomyConfigReward, reward *hiro.Reward) (*hiro.Reward, error) {
	// Modify reward or take additional actions.
	return reward, nil
}
```