Pikabu APIpikabu.ru ↗
Access hot, best, fresh, and community posts from Pikabu.ru. Retrieve full comment trees, story metadata, and user profiles via 6 structured endpoints.
What is the Pikabu API?
The Pikabu.ru API exposes 6 endpoints covering trending posts, community feeds, full story content, and user profiles from one of Russia's largest community platforms. The get_story_details endpoint returns complete comment trees with parent–child relationships, Cyrillic-encoded text, author info, and per-comment ratings alongside the story's full HTML body — data that is otherwise difficult to extract reliably at scale.
curl -X GET 'https://api.parse.bot/scraper/15bb8749-79ec-4bca-a111-3d4355ced922/get_hot_posts?page=1' \ -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 pikabu-ru-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.
"""Pikabu SDK — browse feeds, drill into stories, check user profiles."""
from parse_apis.pikabu_api import Pikabu, UserNotFound
client = Pikabu()
# Browse hot/trending posts — limit= caps total items fetched across pages.
for post in client.storysummaries.hot(limit=5):
print(post.title, post.rating, post.comments_count)
# Drill into the first hot post to get full content and comments.
top_post = client.storysummaries.best(limit=1).first()
if top_post:
story = top_post.details()
print(story.title, story.author, story.full_content_html[:100])
for comment in story.comments.list(limit=3):
print(comment.author, comment.text[:80], comment.rating)
# Community-scoped browsing — constructible resource, no extra fetch needed.
cats = client.community(slug="cats")
for post in cats.posts(limit=3):
print(post.title, post.author, post.timestamp)
# User profile lookup with typed error handling.
try:
profile = client.userprofiles.get(username="admin")
print(profile.username, profile.url, profile.stats.rating, profile.stats.posts)
except UserNotFound as exc:
print(f"User not found: {exc.username}")
print("exercised: storysummaries.hot / storysummaries.best / details / comments.list / community.posts / userprofiles.get")
Get trending/hot posts from the homepage feed. Returns paginated results with story metadata including title, author, rating, and comments count. Each page typically returns around 10 stories.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
{
"type": "object",
"fields": {
"stories": "array of story summary objects"
},
"sample": {
"data": {
"stories": [
{
"id": "14052335",
"url": "https://pikabu.ru/story/otvet_na_post_14052335",
"tags": [],
"title": "Ответ на пост",
"author": "SergeyZZ",
"rating": "2158",
"timestamp": "2026-06-11T08:11:57+03:00",
"comments_count": 139,
"content_preview": "Осталось чтобы Путин одобрил..."
}
]
},
"status": "success"
}
}About the Pikabu API
Feed Endpoints
Three endpoints cover Pikabu's main content feeds. get_hot_posts returns the current trending feed, get_best_posts returns the top-rated feed, and get_fresh_posts returns the newest posts. All three are paginated via an integer page parameter and return arrays of story objects sharing the same shape: id, title, url, author, timestamp, rating, comments_count, tags, and content_preview. Note that page 1 of get_best_posts and get_fresh_posts may intermittently return upstream errors; pages 2 and above are reliable for polling.
Community and Story Detail Endpoints
get_community_posts accepts a required community_slug parameter matching the slug as it appears in the Pikabu URL (for example cats or reddit). Passing an invalid slug will propagate an upstream error, so slugs should be validated before use. get_story_details takes either a full story URL (https://pikabu.ru/story/<slug>) or a numeric story ID and returns the richest response in the API: full_content_html for the complete story body, plus a flat comments array where each entry carries id, parent_id, author, author_id, timestamp, rating, text, and indent — enough to reconstruct the full comment hierarchy client-side.
User Profile Endpoint
get_user_profile accepts a username string and returns a stats object containing rating, posts, comments, subs, and user_id (all as strings), plus the canonical url for the profile. This is useful for tracking author credibility or building user-level aggregations across scraped stories.
Encoding and Reliability Notes
All text content, including comment bodies and tags, is returned with correct Cyrillic encoding. Comment trees are returned as flat arrays with parent_id and indent fields to indicate depth, rather than nested objects, so tree reconstruction is the caller's responsibility.
The Pikabu API is a managed, monitored endpoint for pikabu.ru — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when pikabu.ru 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 pikabu.ru 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?+
- Monitor trending Russian-language discussions by polling
get_hot_postsand trackingratingandcomments_countover time - Build a community digest tool that aggregates posts from specific Pikabu communities using
get_community_postswith varyingcommunity_slugvalues - Reconstruct full comment threads from
get_story_detailsusingparent_idandindentfields for sentiment or discourse analysis - Profile Pikabu authors by combining
get_user_profilestats (posts, rating, subs) with their stories from the feed endpoints - Track tag usage and content trends across
get_best_postspages by aggregating thetagsarrays returned in story objects - Feed a translation or language-learning tool with authentic Russian community content from
full_content_htmland commenttextfields
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Pikabu have an official public developer API?+
What exactly does get_story_details return for comments?+
get_story_details returns a flat array under the comments key. Each comment object includes id, parent_id, author, author_id, timestamp, rating, text, and indent. To reconstruct the tree, group by parent_id or use the indent value as a depth indicator. The endpoint also returns full_content_html for the story body, tags, rating, and comments_count.Are there known reliability issues with any endpoints?+
get_best_posts and get_fresh_posts may intermittently return server errors due to upstream behavior on Pikabu's side. Pages 2 and higher return reliably. If you need page-1 content from these feeds, implement retry logic or fall back to get_hot_posts.Can I search for posts by keyword or filter by date range?+
Does the API return media attachments like images or videos from posts?+
content_preview (text) and full_content_html (raw HTML of the story body), so embedded image or video URLs may appear within the HTML but are not parsed into separate response fields. You can fork this API on Parse and revise it to extract and surface media URLs as structured data.