> For the complete documentation index, see [llms.txt](https://docs.deso.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.deso.org/deso-backend/api/tutorial-endpoints.md).

# Tutorial Endpoints

Description of endpoints used to get data related to tutorials on the DeSo blockchain

Please make sure you've read [Data: API](/deso-backend/api.md) so you are familiar with the following types referenced in this documentation:

* [Data: API](/deso-backend/api.md#profileentryresponse)
* [Data: API](/deso-backend/api.md#postentryresponse)
* [Data: API](/deso-backend/api.md#balanceentryresponse)
* [Data: API](/deso-backend/api.md#nftentryresponse)
* [Data: API](/deso-backend/api.md#nftcollectionresponse)

## Get Tutorial Creators

<mark style="color:green;">`POST`</mark> `POST /api/v0/get-tutorial-creators`

Get the well-known and up-and-coming creators featured in the Buy a Creator step of the tutorial. Creators who have a founder's reward greater than 10% are excluded here.

Endpoint implementation in [backend](https://github.com/deso-protocol/backend/blob/709cbfbc62cf3a0e6d56c393e555fc277c93fb76/routes/tutorial.go#L32).

Example usage in frontend:\
&#x20; \- Make request to [Get Tutorial Creators](https://github.com/deso-protocol/frontend/blob/e006beb72867f6d48a78adb1d126c66144a4298c/src/app/backend-api.service.ts#L2107)\
&#x20; \- Use GetTutorialCreators to [display creators to the user when they are prompted to buy well-known or up-and-coming creators in the tutorial](https://github.com/deso-protocol/frontend/blob/e006beb72867f6d48a78adb1d126c66144a4298c/src/app/tutorial/buy-creator-coins-tutorial-page/buy-creator-coins-tutorial/buy-creator-coins-tutorial.component.ts#L44)

#### Request Body

| Name                                            | Type | Description                                    |
| ----------------------------------------------- | ---- | ---------------------------------------------- |
| ResponseLimit<mark style="color:red;">\*</mark> | int  | Number of creators to return for each category |

{% tabs %}
{% tab title="200: OK Successfully retrieved tutorial creators" %}
{% tabs %}
{% tab title="Sample Response" %}

```json5
{
  "WellKnownProfileEntryResponses": [<ProfileEntryResponse>, <ProfileEntryResponse>...], // ProfileEntryResponses of creators randomly selected from the Well-Known category
  "UpAndComingProfileEntryResponses": [<ProfileEntryResponse>, <ProfileEntryResponse>...], // ProfileEntryResponses of creators randomly selected from Up-And-Coming category
}
```

{% endtab %}

{% tab title="Response Field Descriptions" %}
...coming soon! See comments in sample response for descriptions for now.
{% endtab %}
{% endtabs %}

{% endtab %}

{% tab title="400: Bad Request " %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

## Start Or Skip Tutorial

<mark style="color:green;">`POST`</mark> `/api/v0/start-or-skip-tutorial`

Begin or skip the tutorial.

Endpoint implementation in [backend](https://github.com/deso-protocol/backend/blob/709cbfbc62cf3a0e6d56c393e555fc277c93fb76/routes/tutorial.go#L191).

Example usages in frontend:\
&#x20; \- Make request to [Start Or Skip Tutorial](https://github.com/deso-protocol/frontend/blob/e006beb72867f6d48a78adb1d126c66144a4298c/src/app/backend-api.service.ts#L2215)\
&#x20; \- Use StartOrSkipTutorial to [send user into tutorial or skip](https://github.com/deso-protocol/frontend/blob/e006beb72867f6d48a78adb1d126c66144a4298c/src/app/left-bar/left-bar.component.ts#L109)

#### Request Body

| Name                                                   | Type    | Description                                                                                          |
| ------------------------------------------------------ | ------- | ---------------------------------------------------------------------------------------------------- |
| PublicKeyBase58Check<mark style="color:red;">\*</mark> | string  | Public key of user starting or skipping tutorial                                                     |
| JWT<mark style="color:red;">\*</mark>                  | string  | JSON web token authenticating user                                                                   |
| IsSkip                                                 | boolean | if true, update the user's tutorial status to skipped. Otherwise, set the tutorial status to started |

{% tabs %}
{% tab title="200: OK Successfully triggered start or skip of tutorial" %}
No response body
{% endtab %}

{% tab title="400: Bad Request " %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

## Update Tutorial Status

<mark style="color:green;">`POST`</mark> `/api/v0/update-tutorial-status`

Override endpoint to automatically update a user's tutorial status

Valid values for tutorial status are `TutorialStarted`, `TutorialSkipped`, `InvestInOthersBuyComplete`, `InvestInOthersSellComplete`, `TutorialCreateProfileComplete`, `InvestInYourselfComplete`, `FollowCreatorsComplete`, `GiveADiamondComplete`, `TutorialComplete`

Endpoint implementation in [backend](https://github.com/deso-protocol/backend/blob/709cbfbc62cf3a0e6d56c393e555fc277c93fb76/routes/tutorial.go#L36).

Example usages in [diamondapp.com](https://diamondapp.com)'s frontend:\
&#x20; \- Make request to [Update Tutorial Status](https://github.com/diamond-app/frontend/blob/735634e38dfa0605035ded19b46b92766ec856c4/src/app/backend-api.service.ts#L2275)\
&#x20; \- Use UpdateTutorialStatus to [set the user's tutorial status to the current step in your tutorial](https://github.com/diamond-app/frontend/blob/735634e38dfa0605035ded19b46b92766ec856c4/src/app/trade-creator-page/trade-creator/trade-creator.component.ts#L399)

#### Request Body

| Name                                                   | Type    | Description                                                                              |
| ------------------------------------------------------ | ------- | ---------------------------------------------------------------------------------------- |
| PublicKeyBase58Check<mark style="color:red;">\*</mark> | string  | Public key of user whose tutorial status is being updated                                |
| JWT<mark style="color:red;">\*</mark>                  | string  | JSON web token authenticating user                                                       |
| TutorialStatus<mark style="color:red;">\*</mark>       | string  | Value to be set for user's Tutorial status.                                              |
| CreatorPurchasedInTutorialPublicKey                    | string  | Public key of creator the well-known or up-and-coming the user purchased in the tutorial |
| ClearCreatorCoinPurchasedInTutorial                    | boolean | If true, sets the user's CreatorCoinsPurchasedInTutorial to 0                            |

{% tabs %}
{% tab title="200: OK Successfully updated tutorial" %}
No response body.
{% endtab %}

{% tab title="400: Bad Request " %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.deso.org/deso-backend/api/tutorial-endpoints.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
