# Tutorials

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

---


# Tutorials

Read more about the Tutorials system in Hiro [here](../../concepts/tutorials/).

## Get all tutorials

Get the tutorials and current progress step for the player.

```cpp
FHiroOnTutorialsGet OnTutorialsGet;
OnTutorialsGet.AddDynamic(this, &AMyActor::OnTutorialsGet);
FOnError OnError;

HiroClient->TutorialsGet(Session, OnTutorialsGet, OnError);

void AMyActor::OnTutorialsGet(const FHiroTutorialList& TutorialList)
{
    UE_LOG(LogTemp, Log, TEXT("%s"), *TutorialList.ToJson());
}
```

## Accept a tutorial

Accept an offer to step through a tutorial.

```cpp
FHiroTutorialAcceptRequest Request;
Request.Id = TEXT("tutorial_1");

FHiroOnTutorialsAccept OnTutorialsAccept;
OnTutorialsAccept.AddDynamic(this, &AMyActor::OnTutorialsAccept);
FOnError OnError;

HiroClient->TutorialsAccept(Session, Request, OnTutorialsAccept, OnError);

void AMyActor::OnTutorialsAccept(const FHiroTutorial& Tutorial)
{
    UE_LOG(LogTemp, Log, TEXT("%s"), *Tutorial.ToJson());
}
```

## Decline a tutorial

Decline an offer to start a tutorial.

```cpp
FHiroTutorialDeclineRequest Request;
Request.Id = TEXT("tutorial_1");

FHiroOnTutorialsDecline OnTutorialsDecline;
OnTutorialsDecline.AddDynamic(this, &AMyActor::OnTutorialsDecline);
FOnError OnError;

HiroClient->TutorialsDecline(Session, Request, OnTutorialsDecline, OnError);

void AMyActor::OnTutorialsDecline(const FHiroTutorial& Tutorial)
{
    UE_LOG(LogTemp, Log, TEXT("%s"), *Tutorial.ToJson());
}
```

## Abandon a tutorial

Abandon progress on a tutorial.

```cpp
FHiroTutorialAbandonRequest Request;
Request.Id = TEXT("tutorial_1");

FHiroOnTutorialsAbandon OnTutorialsAbandon;
OnTutorialsAbandon.AddDynamic(this, &AMyActor::OnTutorialsAbandon);
FOnError OnError;

HiroClient->TutorialsAbandon(Session, Request, OnTutorialsAbandon, OnError);

void AMyActor::OnTutorialsAbandon(const FHiroTutorial& Tutorial)
{
    UE_LOG(LogTemp, Log, TEXT("%s"), *Tutorial.ToJson());
}
```

## Update progress of a tutorial

Update the current progress step in the tutorial by ID.

```cpp
FHiroTutorialUpdateRequest Request;
Request.Id = TEXT("tutorial_1");
Request.Step = 1;

FHiroOnTutorialsUpdate OnTutorialsUpdate;
OnTutorialsUpdate.AddDynamic(this, &AMyActor::OnTutorialsUpdate);
FOnError OnError;

HiroClient->TutorialsUpdate(Session, Request, OnTutorialsUpdate, OnError);

void AMyActor::OnTutorialsUpdate(const FHiroTutorialList& TutorialList)
{
    UE_LOG(LogTemp, Log, TEXT("%s"), *TutorialList.ToJson());
}
```