Michelin APIguide.michelin.com ↗
Access Michelin Guide restaurant listings, star ratings, Bib Gourmand awards, hotel data, and editorial articles via 7 structured endpoints.
What is the Michelin API?
The Michelin Guide API gives programmatic access to the full Guide Michelin dataset across 7 endpoints, covering starred restaurants, Bib Gourmand listings, selected hotels, and editorial articles. The list_restaurants endpoint lets you filter by country, city, cuisine, price tier, and distinction level — returning fields like distinction, cuisines, slug, and nbHits — while get_restaurant_detail returns contact details, opening hours, facilities, and the restaurant's full description.
curl -X GET 'https://api.parse.bot/scraper/70808de2-3170-4ee9-8819-d781d6b15701/search_restaurants?page=0&limit=5&query=paris' \ -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 guide-michelin-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: Michelin Guide SDK — search restaurants, browse by filters, drill into details."""
from parse_apis.michelin_guide_api import MichelinGuide, Distinction, PriceCategory, RestaurantNotFound
client = MichelinGuide()
# Search restaurants by keyword — limit caps total items fetched across pages.
for restaurant in client.restaurants.search(query="tokyo", limit=3):
print(restaurant.name, restaurant.city.name, restaurant.distinction.slug if restaurant.distinction else "no distinction")
# Browse 3-star restaurants in France using enum filters.
three_star = client.restaurants.list(
country="fr", distinction=Distinction.THREE_STARS, limit=3
).first()
if three_star:
print(three_star.name, three_star.phone, three_star.michelin_award)
# Get full restaurant detail by slug — typed error catch for not-found.
try:
detail = client.restaurants.get(slug="le-gabriel476630")
print(detail.name, detail.main_desc[:80] if detail.main_desc else "")
for cuisine in detail.cuisines:
print(f" cuisine: {cuisine.label}")
except RestaurantNotFound as exc:
print(f"Restaurant not found: {exc.slug}")
# Browse hotels with keyword search.
hotel = client.hotels.list(query="paris", limit=1).first()
if hotel:
print(hotel.name, hotel.neighborhood, hotel.num_rooms)
# Get cuisine types and geographic coverage (singleton resources).
cuisine_counts = client.cuisinecounts.get()
print(f"Total cuisine types tracked: {len(cuisine_counts.counts)}")
coverage = client.coverages.get()
print(f"Countries covered: {len(coverage.countries)}, Regions: {len(coverage.regions)}")
print("exercised: restaurants.search / restaurants.list / restaurants.get / hotels.list / cuisinecounts.get / coverages.get")
Full-text search over Michelin Guide restaurants by keyword. Matches against restaurant names, cities, and cuisines. Paginates via zero-indexed page number. Each hit includes name, slug, city, country, distinction, cuisines, price category, and contact details.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (0-indexed) |
| limit | integer | Results per page |
| queryrequired | string | Search keyword (e.g. city name, restaurant name, cuisine) |
{
"type": "object",
"fields": {
"hits": "array of restaurant objects with name, slug, city, country, distinction, cuisines, price_category, phone, website, and other details",
"page": "integer current page number",
"nbHits": "integer total number of matching restaurants",
"nbPages": "integer total number of pages"
}
}About the Michelin API
Restaurant Search and Browsing
The search_restaurants endpoint accepts a free-text query parameter matched against restaurant names, cities, and cuisines, returning paginated hits arrays with name, slug, city, country, distinction, and cuisines fields alongside nbHits and nbPages for pagination control. The list_restaurants endpoint exposes the same result shape but with structured filter parameters: distinction accepts slugs like 1-star-michelin, 2-stars-michelin, 3-stars-michelin, and bib-gourmand; cuisine accepts slugs like french or japanese; and price accepts slugs like budget or luxury. Both endpoints are 0-indexed via the page parameter.
Restaurant Detail
get_restaurant_detail takes a slug obtained from either listing endpoint and returns a richer record: main_desc (full editorial description), phone, website, facilities (array of facility objects), cuisines (array with label and slug), and a distinction object with both a human-readable label and its slug. Passing an unrecognised slug returns a stale_input error rather than an empty result.
Hotels and Editorial Content
list_hotels returns Michelin-selected hotels with name, slug, city, country, and amenities fields, filterable by keyword via the query parameter. list_articles similarly surfaces Guide Michelin magazine content — each hit includes title, slug, excerpt, content, tags, and published_date.
Reference Lookups
Two reference endpoints require no inputs. get_cuisine_types returns a flat object mapping each cuisine slug to an integer restaurant count, useful for building filter UIs. list_countries_and_regions returns two sub-objects — countries and regions — each mapping slugs to restaurant counts, showing the full geographic scope of the Guide's current coverage.
The Michelin API is a managed, monitored endpoint for guide.michelin.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when guide.michelin.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 guide.michelin.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 starred-restaurant finder that filters by
distinctionslug and city to surface Michelin-starred options in a specific destination. - Populate a travel app's dining section with Bib Gourmand listings using the
bib-gourmanddistinction filter onlist_restaurants. - Create a cuisine-type breakdown dashboard using the
get_cuisine_typesresponse to visualise restaurant distribution by category. - Aggregate
websiteandphonecontact data fromget_restaurant_detailfor a hospitality CRM or reservation tool. - Monitor geographic coverage gaps by diffing
list_countries_and_regionsresults over time to track when new markets are added. - Index Michelin editorial
contentandtagsfromlist_articlesto enrich a food media recommendation engine. - Filter Michelin-selected hotels by location keyword using
list_hotelsto supplement a luxury travel itinerary builder.
| 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 Michelin Guide have an official developer API?+
How do I retrieve only three-star Michelin restaurants in a specific country?+
list_restaurants with distinction set to 3-stars-michelin and country set to the relevant country slug (e.g. fr for France or jp for Japan). The response includes nbHits so you can determine whether to paginate using the page parameter.Does the API return user reviews or ratings for restaurants?+
distinction object with label and slug), the main_desc editorial description from get_restaurant_detail, and structured metadata like cuisines and facilities. You can fork this API on Parse and revise it to add an endpoint targeting any review-adjacent data the Guide surfaces publicly.Does the API cover opening hours or reservation links?+
get_restaurant_detail response, and reservation links are not exposed. The endpoint does return website and phone for contact purposes. You can fork this API on Parse and revise it to add those fields if the source exposes them.How complete is the geographic coverage across the listing endpoints?+
list_countries_and_regions endpoint returns the full set of covered country and region slugs with restaurant counts, so you can check current scope before building country-specific features. Markets not yet covered by the Guide will not appear in those results.