---
title: "List public tutorials"
method: GET
path: "/api/v1/public/tutorials"
tags: ["Tutorials"]
---

# List public tutorials

`GET /api/v1/public/tutorials`

## Request

- Base URL: `https://firstsales.io`
- URL: `https://firstsales.io/api/v1/public/tutorials`
- Auth: none required

Returns published tutorial content (slug, title, summary, steps, pro tips, FAQs) as structured JSON. Omit pagination params to fetch the full edge-cached feed, or pass limit/cursor for deterministic cursor pagination over the same stable slug order. Served from the edge cache with a 1-hour revalidation window, so it carries no per-IP limiter and never answers 429.

## Query parameters

- `locale` string
- `limit` integer
- `cursor` string

## Response `200`

List of tutorials.

- object
  - `tutorials` PublicTutorial[], required
    - `slug` string, required
    - `title` string, required
    - `summary` string, required
    - `category` string, required
    - `industry` string
    - `difficulty` 'beginner' | 'intermediate' | 'advanced', required
    - `estMinutes` number, required
    - `steps` object[], required
    - `proTips` object[], required
    - `faqs` object[], required
  - `pageInfo` CursorPageInfo, required
    - `nextCursor` string, nullable, required
    - `prevCursor` string, nullable, required
    - `hasMore` boolean, required
    - `total` number, required

## Other responses

- `400`: Invalid request — bad input, missing field, or malformed value.
- `500`: Unexpected server error.

---

[API](https://skmtc.dev/firstsales/apis/firstsales-public-api.md) · [All operations](https://skmtc.dev/firstsales/apis/firstsales-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/firstsales/apis/firstsales-public-api/revisions/3856191adf12?raw)
