wikiHow APIwikihow.com ↗
Search wikiHow and retrieve structured articles with step-by-step instructions, tips, warnings, ingredients, and categories via 3 clean REST endpoints.
What is the wikiHow API?
The wikiHow API exposes 3 endpoints for searching and retrieving structured how-to content from wikiHow's library of millions of articles. The get_article endpoint returns a full article parsed into topics, numbered steps, tips, warnings, warnings, ingredients, and categories — all as typed JSON fields. The search endpoint supports paginated full-text queries, and get_random surfaces a random article for discovery use cases.
curl -X GET 'https://api.parse.bot/scraper/16abcbb9-b00b-4c0d-955e-3d11986d3e68/search?limit=5&query=cook+pasta&offset=0' \ -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 wikihow-com-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: wikiHow SDK — search articles, fetch details, discover random content."""
from parse_apis.wikihow import WikiHow, ArticleNotFound
client = WikiHow()
# Search for articles on a topic, capped at 3 results
for result in client.articles.search(query="cook pasta", limit=3):
print(result.title, result.url, result.views)
# Drill into the first search result for full article content
article_summary = client.articles.search(query="bake bread", limit=1).first()
if article_summary:
print(article_summary.title, article_summary.updated)
# Fetch full article details by page ID
try:
article = client.articles.get(pageid="2365")
print(article.title, article.url)
for topic in article.topics:
print(topic.title, len(topic.steps))
for step in topic.steps:
print(step.title, step.description[:60])
print(article.categories, article.tips, article.warnings)
except ArticleNotFound as exc:
print(f"Article not found: {exc}")
# Discover a random article
random_article = client.articles.random()
print(random_article.title, random_article.url)
print("exercised: articles.search / articles.get / articles.random")
Full-text search over wikiHow articles. Returns paginated results with article title, URL, view count, and last-updated timestamp. Pagination uses an integer offset; the response includes next_offset for the subsequent page. Categories may appear alongside articles in results.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results to return. |
| queryrequired | string | The search term. |
| offset | integer | Offset for pagination (number of results to skip). |
{
"type": "object",
"fields": {
"results": "array of search result objects each containing title, url, views, and updated",
"next_offset": "integer offset for fetching the next page of results",
"total_results": "integer count of results returned"
},
"sample": {
"data": {
"results": [
{
"url": "https://www.wikihow.com/Cook-Pasta",
"title": "Cook Pasta",
"views": "2,786,100 views",
"updated": "1 week ago"
},
{
"url": "https://www.wikihow.com/Measure-Cooked-Pasta",
"title": "Measure Cooked Pasta",
"views": "68,108 views",
"updated": "4 months ago"
}
],
"next_offset": 15,
"total_results": 10
},
"status": "success"
}
}About the wikiHow API
What the API Covers
The wikiHow API gives programmatic access to wikiHow's how-to content across three endpoints: search, get_article, and get_random. Together they cover discovery, lookup by title or page ID, and random sampling of the article corpus. Every response returns typed fields rather than raw HTML, so no post-processing is required on the client side.
Article Structure
The get_article endpoint accepts either a URL-path title (e.g. Cook-Pasta) or a numeric pageid. The response includes a topics array where each topic has a title and an array of steps, each step carrying its own title and description. Alongside the main body, the response surfaces tips (array of strings), warnings (array of strings), categories (array of category name strings), and ingredients (array of strings, populated for recipe and cooking articles). The top-level fields also include url, title, and pageid for cross-referencing.
Search and Pagination
The search endpoint takes a required query string plus optional limit and offset integers. Results are objects containing title, url, views, and updated (last-modified timestamp). The response includes total_results and a next_offset integer you pass back as offset to fetch the next page — making it straightforward to walk through a full result set. Categories can appear alongside articles in results.
Random Article Discovery
The get_random endpoint takes no inputs and returns a single article's title, pageid, and url. Each call yields a different article, making it useful for sampling, testing, or building serendipitous browsing features.
The wikiHow API is a managed, monitored endpoint for wikihow.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when wikihow.com 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 wikihow.com 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 how-to assistant that fetches structured steps and tips from
get_articlefor any topic a user queries. - Index wikiHow content for a site search by walking paginated
searchresults usingnext_offset. - Extract
ingredientsand step descriptions from cooking articles to populate a recipe aggregator. - Pull
warningsandtipsarrays to surface safety notices in a health or DIY advice app. - Use
get_randomto power a 'learn something new today' widget with a fresh article on each page load. - Map
categoriesfields from article responses to build a topic taxonomy or content classification system. - Compare
viewsandupdatedfrom search results to identify the most-read or recently revised guides on a subject.
| 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 wikiHow have an official developer API?+
What does `get_article` return for non-recipe articles — is the `ingredients` field empty?+
ingredients array is returned but will be empty. It is populated only when the source article contains an ingredients section. All other fields — topics, tips, warnings, categories, url, title, and pageid — are returned regardless of article type.Does the API return images or video content from articles?+
Can I retrieve a list of all articles within a specific category?+
categories as a field on individual articles and can surface categories in search results, but there is no dedicated endpoint for browsing all articles under a given category. You can fork this API on Parse and revise it to add a category-browsing endpoint.How does pagination work in the `search` endpoint?+
search response includes a next_offset integer. Pass that value as the offset parameter in your next request with the same query and limit to retrieve the following page of results. Continue until next_offset is absent or the result set is exhausted.