Tapas APItapas.io ↗
Retrieve series info, episode lists, chapter content, and search results from Tapas.io. Covers titles, stats, synopses, author names, and full chapter text.
What is the Tapas API?
The Tapas.io API exposes 4 endpoints covering series metadata, episode listings, individual chapter content, and search across Tapas comics and novels. The get_item_info endpoint alone returns 10 structured fields per series — including view count, subscriber count, like count, author name, and synopsis — while get_episode_content delivers full paragraph arrays for novel chapters or ordered image URLs for comic panels.
curl -X GET 'https://api.parse.bot/scraper/1825258a-99dc-4839-b2d2-e104c4999be4/get_item_info?series_slug=my-werewolf-system-novel' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace tapas-io-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Tapas SDK — search, browse series info, read episodes."""
from parse_apis.tapas_io_api import Tapas, TypeFilter, InputNotFound
client = Tapas()
# Search for comic series matching a keyword, capped at 5 results.
for result in client.search_results.search(query="dragon", type_filter=TypeFilter.COMICS, limit=5):
print(result.title, "-", result.author)
# Fetch detailed info for a known series by its URL slug.
series = client.series.get(series_slug="my-werewolf-system-novel")
print(series.title, "|", series.series_type, "|", series.chapter_count, "chapters")
# List the first few episodes of that series.
first_ep = client.episode_summaries.list(series_slug="my-werewolf-system-novel", limit=3).first()
if first_ep is not None:
print(first_ep.title, "- ep#", first_ep.episode_number)
# Drill down from summary to full episode content.
episode = first_ep.details()
print(episode.title, "| locked:", episode.is_locked)
if episode.text is not None:
print(episode.text[:200])
# Point-lookup an episode by id discovered from the listing above.
if first_ep is not None:
try:
ep = client.episodes.get(episode_id=first_ep.episode_id)
print(ep.series_title, "-", ep.title, "| comments:", ep.comments)
except InputNotFound:
print("Episode not found")
print("exercised: search_results.search / series.get / episode_summaries.list / episode.details / episodes.get")
Retrieve detailed information about a Tapas series (comic or novel) given its URL slug. Returns the page URL, title, poster image, cover image, category/genre, series type (Novel or Comic), view count, subscriber count, like count, chapter/episode count, author name, and synopsis. Makes one HTTP request to the series info page.
| Param | Type | Description |
|---|---|---|
| series_slugrequired | string | The URL slug of the series on Tapas (the part after /series/ in the URL). For example, 'my-werewolf-system-novel' or 'tbate-comic'. |
{
"type": "object",
"fields": {
"likes": "Total like count as integer",
"title": "Title of the series",
"views": "Total view count as integer",
"author": "Name of the series creator/author",
"category": "Genre or category of the series (e.g. 'Action Fantasy', 'Romance')",
"page_url": "Full URL of the series info page",
"synopsis": "Full text synopsis/description of the series",
"cover_image": "URL of the series cover/banner image",
"series_type": "Type of series: 'Novel' or 'Comic'",
"subscribers": "Total subscriber count as integer",
"poster_image": "URL of the series poster/thumbnail image",
"chapter_count": "Total number of chapters/episodes as integer"
},
"sample": {
"data": {
"likes": 1908,
"title": "My Werewolf System",
"views": 48337,
"author": "JKSManga",
"category": "Action Fantasy",
"page_url": "https://tapas.io/series/my-werewolf-system-novel/info",
"synopsis": "To make ends meet, Gary becomes an errand for the savage Underdogs gang...",
"cover_image": "https://us-a.tapas.io/sa/07/db021f3a-a3a7-464d-b73f-1284b2cc679f.jpg",
"series_type": "Novel",
"subscribers": 974,
"poster_image": "https://us-a.tapas.io/sa/28/6d8ae034-ca17-4f65-9ea5-b4b37597d746_z.jpg",
"chapter_count": 590
},
"status": "success"
}
}About the Tapas API
Series Metadata and Search
get_item_info takes a series_slug (the path segment after /series/ in any Tapas URL) and returns a 10-field object: title, author, category, series_type (either 'Novel' or 'Comic'), synopsis, cover_image, poster_image, views, subscribers, and likes. search_items accepts a query string plus an optional type_filter (COMICS, NOVELS, PEOPLE, or TAG) and an optional page_number, returning up to 10 results per page each with page_url, cover_image, title, author, synopsis, and tags.
Episode Lists
get_item_episodes paginates a series' episode list 20 entries per page. Each episode object includes episode_id, page_url, cover_image, episode_number, title, release_date, and view_count. The has_next boolean and total_episodes integer let you walk the full catalogue without guessing page counts. Pass episode_id directly to get_episode_content — no transformation needed.
Chapter and Panel Content
get_episode_content retrieves the body of a single episode by its numeric episode_id. For novels it returns a paragraphs array and a joined text string; for comics it returns an ordered images array of panel URLs. The is_locked boolean is true whenever content requires payment, early-access, or a timed wait — in that case paragraphs, images, and text are empty. is_mature, likes, and comments are also returned where available.
The Tapas API is a managed, monitored endpoint for tapas.io — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when tapas.io changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official tapas.io API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a reading-progress tracker that stores episode view counts and release dates from
get_item_episodes. - Aggregate Tapas series stats (views, subscribers, likes) to compare popularity trends across genres.
- Index novel chapter text from
paragraphsarrays for full-text search across a reading list. - Generate series recommendation feeds by querying
search_itemswith genre keywords and filtering ontags. - Archive comic panel images in order using the
imagesarray returned byget_episode_content. - Display author portfolios by searching Tapas with
type_filter=PEOPLEand fetching metadata for each series slug. - Alert users when new episodes appear by polling
total_episodesfromget_item_episodeson tracked slugs.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Tapas.io offer an official developer API?+
How does `get_episode_content` behave for locked or paid chapters?+
is_locked is returned as true for any episode behind a paywall, early-access window, or timed wait. When locked, paragraphs, images, and text are all empty. The title, episode_id, and page_url are still returned, so you can identify which episodes exist without being able to read their content.Are comic panel image URLs permanent?+
images array in get_episode_content contains signed, expiring URLs. They are valid at the time of the request but will stop resolving after an unspecified expiry window. Cache or download them promptly if you need them beyond a short session.Does the API return comment text or reader reviews?+
get_episode_content returns a comments count integer, and series-level metadata includes aggregate likes, but individual comment threads and reader review text are not exposed by any endpoint. You can fork this API on Parse and revise it to add an endpoint that retrieves comment content for a given episode.Can I retrieve a creator's full profile or follower stats beyond series data?+
author field in get_item_info returns the creator's name as a string, and search_items with type_filter=PEOPLE can surface creator-linked series, but dedicated creator profile pages — follower counts, bio, social links — are not covered. You can fork this API on Parse and revise it to add a creator-profile endpoint.