> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/ko-fi/profiles-handle-gallery>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/ko-fi/profiles-handle-gallery.mdx>

---

# Ko-fi Gallery API

A creator's public gallery tiles, 20 at a time, with the image and how many images each item holds.

`GET /v1/ko-fi/profiles/{handle}/gallery` returns `data.items`, 20 tiles a page, with the creator's `id`, canonical `handle` and `name`. Each tile has `id`, `title`, `image` (`url`, `alt`), `access` and `imageCount`. `access` is `restricted` for a locked tile, whose `image` is null because only a placeholder is public. The tile `id` is the gallery item id, so you can pass it to `GET /v1/ko-fi/gallery-items/{id}` for the full item, its description, owner and likes.

Continue with the opaque `cursor` from `page.nextCursor` while `page.hasMore` is true. The page block uses `start` rather than `page` because the gallery is an offset list. A creator with no gallery returns `found` and an empty list; a missing creator returns `not_found`. A tile with `imageCount` greater than 1 shows a multi-image badge, and the single item route returns every image.

## Request

- **Endpoint:** `GET /v1/ko-fi/profiles/{handle}/gallery`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by handle or page id
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/ko-fi/profiles/handle/gallery/get)
- **Platform page:** [/platforms/ko-fi](https://www.socialfetch.dev/platforms/ko-fi)

## FAQ

### How do I get the full gallery item?

Take the tile id from data.items[].id and call GET /v1/ko-fi/gallery-items/{id}. That route returns the description, owner, relative time, every image with its high-resolution URL, and the like count.

### How does gallery paging differ from posts?

The gallery is an offset list, so data.page.start is the offset and data.page.page is null. Posts, shop and commissions use a zero-based page number instead. In both cases, follow data.page.nextCursor while hasMore is true.

### Why is imageCount always at least 1?

Every gallery tile points at a gallery item with at least one image. The schema enforces a minimum of 1, and the count is the multi-image badge when the tile has one.

### How many credits does a gallery page cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. Each paginated page is a separate billed request.
