Akis Petretzikis APIakispetretzikis.com ↗
Access recipes, ingredients, nutrition, and category data from akispetretzikis.com. Search, filter by category, and retrieve full recipe details via 3 endpoints.
What is the Akis Petretzikis API?
The Akis Petretzikis API provides access to recipes, ingredient lists, nutritional data, and category taxonomy from akispetretzikis.com across 3 endpoints. Use search_recipes to query and filter recipes by keyword or category, get_recipe_details to retrieve full cooking data for a specific recipe including preparation times, equipment, and per-ingredient quantities, and get_categories to list all available category IDs organized by type.
curl -X GET 'https://api.parse.bot/scraper/792b34f5-057b-47ac-a76f-da9d9bc733bd/search_recipes?lang=en&page=1&limit=12&query=chicken&category_id=2' \ -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 akispetretzikis-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: Akis Petretzikis Recipes API — search, drill-down, categories."""
from parse_apis.akis_petretzikis_recipes_api import AkisRecipes, Language, RecipeNotFound
client = AkisRecipes()
# Browse categories to discover filter IDs
categories = client.categorygroups.get(lang=Language.EN)
print(f"Meal types: {categories.meal_type[0].title}, {categories.meal_type[1].title}")
print(f"Cuisines: {categories.cuisine[0].title}")
# Search recipes with a keyword, capped to 5 results
for recipe in client.recipesummaries.search(query="pasta", lang=Language.EN, limit=5):
print(recipe.title, recipe.difficulty, recipe.time)
# Drill into the first result for full details
summary = client.recipesummaries.search(query="chocolate", limit=1).first()
if summary:
detail = summary.details()
print(detail.title, detail.difficulty)
print(f"Prep: {detail.times.preparation} min, Cook: {detail.times.cooking} min")
for ing in detail.ingredients[:3]:
print(f" {ing.quantity} {ing.unit} {ing.title}")
# Typed error handling: attempt to fetch a non-existent recipe
try:
bad = client.recipesummaries.search(query="nonexistent_xyz_recipe", limit=1).first()
if bad:
bad.details()
except RecipeNotFound as exc:
print(f"Recipe not found: {exc.recipe_id}")
print("exercised: categorygroups.get / recipesummaries.search / summary.details / RecipeNotFound")
Search for recipes with optional filtering by category, page, and limit. Returns paginated results ordered by recency. If no query is provided, returns the latest recipes. Paginates via page number; each page returns up to `limit` recipe summaries.
| Param | Type | Description |
|---|---|---|
| lang | string | Language code: en or el |
| page | integer | Page number for pagination (1-based) |
| limit | integer | Number of results per page |
| query | string | Search keyword. When omitted, returns the latest recipes. |
| category_id | integer | Filter by category ID (obtain from get_categories endpoint) |
{
"type": "object",
"fields": {
"total": "integer, total number of recipes matching the query",
"recipes": "array of recipe summary objects with id, title, slug, description, time, servings, difficulty, thumbnail, and category",
"last_page": "integer, last available page number",
"current_page": "integer, current page number"
},
"sample": {
"data": {
"total": 5312,
"recipes": [
{
"id": 9826,
"slug": "mpiskota-speculoos",
"time": 35,
"title": "Speculoos cookies",
"category": "mpiskota",
"servings": null,
"thumbnail": "https://akispetretzikis.com/photos/206101/mpiskota-speculoos-24-3-26-site-thumbnail.jpg",
"difficulty": "Medium",
"description": "Put the butter..."
}
],
"last_page": 443,
"current_page": 1
},
"status": "success"
}
}About the Akis Petretzikis API
Searching and Browsing Recipes
The search_recipes endpoint accepts a query string, an optional category_id (sourced from get_categories), page, and limit for pagination. When no query is provided it returns the latest recipes. Each result in the recipes array includes id, title, slug, description, time, servings, difficulty, thumbnail, and category. The pagination object exposes current_page, last_page, and total so you can walk through the full result set programmatically. Both Greek (el) and English (en) content are available via the lang parameter.
Full Recipe Details
Passing a recipe_id from search results to get_recipe_details returns the complete recipe record. The times object breaks down preparation, cooking, and total in minutes. The ingredients array contains objects with section, title, quantity, unit, and info, supporting multi-section recipes. The nutrition object holds nutritional information sections, equipment is a flat array of tool name strings, and assets is an array of image URLs for the dish.
Category Taxonomy
get_categories returns category objects grouped into five named arrays: method, cuisine, occasion, meal_type, and ingredient. Each object carries an id and title. Feed these IDs into the category_id parameter of search_recipes to retrieve recipes scoped to a specific cuisine, occasion, or ingredient group. The lang parameter controls whether category titles are returned in Greek or English.
The Akis Petretzikis API is a managed, monitored endpoint for akispetretzikis.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when akispetretzikis.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 akispetretzikis.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 recipe search interface filtered by cuisine or meal type using
category_idfromget_categories - Generate weekly meal plans by paginating
search_recipesresults and readingservingsandtimefields - Display full ingredient lists with quantities and units for a recipe using
get_recipe_details - Power a nutritional tracker by extracting the
nutritionobject from recipe detail responses - Create bilingual recipe content in English and Greek by switching the
langparameter - Populate a cooking equipment checklist from the
equipmentarray returned per recipe - Index recipes by difficulty level using the
difficultyfield available in both search results and detail responses
| 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 akispetretzikis.com have an official developer API?+
What does get_recipe_details return beyond what search_recipes provides?+
search_recipes returns a summary — title, slug, thumbnail, time, difficulty, and category — get_recipe_details adds the full ingredients array (with per-ingredient section, quantity, unit, and info), a times breakdown in minutes for preparation and cooking separately, a nutrition object, an equipment array, and an assets array of full image URLs.Can I filter recipes by multiple categories at once, such as both cuisine and occasion?+
search_recipes endpoint accepts a single category_id at a time. If you need to intersect multiple category dimensions — for example, Greek cuisine and Christmas occasion — you would need to issue separate requests and intersect results client-side. You can fork this API on Parse and revise it to add multi-category filtering if that's required.Are video assets or step-by-step instructional images returned by the API?+
get_recipe_details returns an assets array of image URLs for the dish. Video URLs and per-step instructional images are not part of the current response shape. You can fork this API on Parse and revise it to add the missing media fields if the source exposes them.How fresh is the recipe data, and how does pagination work across large result sets?+
search_recipes returns a pagination object with current_page, last_page, and total, so you can iterate through pages by incrementing the page parameter until current_page equals last_page.