Vogue APIvogue.com ↗
Search and browse Vogue beauty, skincare, wellness, and fragrance articles. Retrieve full story text, metadata, authors, and lead images via 3 endpoints.
What is the Vogue API?
The Vogue.com API provides 3 endpoints to search Vogue's entire editorial archive, browse the Beauty channel by sub-section, and fetch full article text. The list_beauty_articles endpoint returns up to 36 story summaries per page across sections like skincare, wellness, makeup, and nails. The get_article endpoint delivers complete body text, keyword tags, authors, and lead image for any story returned by search or listing calls.
curl -X GET 'https://api.parse.bot/scraper/8d10aa57-127f-4e39-bddc-d9e2cca4ae6a/search_articles?sort=relevance&query=aromatherapy' \ -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 vogue-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: Vogue Beauty Editorial API — bounded, re-runnable."""
from parse_apis.vogue_com_api import Vogue, BeautySection, SearchSort, ArticleNotFound
client = Vogue()
# Browse the latest skin-care stories, capped at 5 items.
for summary in client.article_summaries.list(section=BeautySection.SKIN, limit=5):
print(summary.title, "|", summary.rubric, "|", summary.published_at)
# Search for a topic and drill into the first hit's full article.
hit = client.article_summaries.search(query="aromatherapy", sort=SearchSort.RELEVANCE, limit=1).first()
if hit is not None:
article = hit.details()
print(article.title)
print(article.dek)
print("keywords:", article.keywords)
print("paragraphs:", len(article.paragraphs))
# Point lookup using the url discovered from the search result.
refreshed = client.articles.get(url=hit.url)
print(refreshed.section, refreshed.published_at)
# Demonstrate typed error handling on a missing article.
try:
client.articles.get(url="/article/does-not-exist-xyz")
except ArticleNotFound as e:
print("not found:", e.url)
print("exercised: article_summaries.list / article_summaries.search / details / articles.get")
Searches all Vogue stories for a free-text query and returns one page of story summaries (title, dek, site path, content type, rubric, publish timestamp, authors, lead image). Pages hold up to 8 summaries; `page` selects the page (omitted = 1) and `has_more` says whether a next page exists. `result_count` and `total_pages` are the site's own reported figures: for broad queries the site caps them at 10000 results / 1250 pages, so treat them as an upper bound. Relevance ordering (the default) returns on-topic stories; the site's newest-first ordering ranks loosely-matching stories by date and can return sparse pages (fewer than 8, sometimes 1 item) — that is the site's behavior, not an error. The `url` of each item is the path accepted by get_article.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based results page. |
| sort | string | Result ordering. |
| queryrequired | string | Free-text search phrase, e.g. a product category or trend such as body butter. |
{
"type": "object",
"fields": {
"page": "integer, current page",
"sort": "ordering applied (relevance or newest)",
"items": "array of story summaries: id, title, dek, url (site path for get_article), content_type (article|gallery), rubric, published_at (ISO 8601 UTC), authors (array of names), image_url, is_sponsored",
"query": "echo of the search phrase as the site interpreted it",
"has_more": "boolean, whether page+1 exists",
"page_size": "integer, maximum items per page (8)",
"total_pages": "integer, site-reported page count (capped at 1250)",
"result_count": "integer, site-reported matching story count (capped at 10000 for broad queries)"
},
"sample": {
"data": {
"page": 1,
"sort": "relevance",
"items": [
{
"id": "5ec2f5af36ff5f53beec05e8",
"dek": "",
"url": "/article/best-essential-oils-for-every-need",
"title": "From Anxiety to Mental Focus, The Best Essential Oils for Every Need",
"rubric": "Shopping",
"authors": [
"Iman Balagam"
],
"image_url": "https://assets.vogue.com/photos/5ec584f3e2b9d5ee7e317e18/1:1/w_640,c_limit/00-essential-oils-promo.jpg",
"content_type": "article",
"is_sponsored": false,
"published_at": "2026-01-09T12:00:00.000Z"
}
],
"query": "aromatherapy",
"has_more": true,
"page_size": 8,
"total_pages": 20,
"result_count": 160
},
"status": "success"
}
}About the Vogue API
Endpoints and Coverage
The API covers three operations. search_articles accepts a free-text query (e.g. "body butter", "SPF trends") and returns up to 8 story summaries per page, including title, dek, rubric, published_at, content_type (article or gallery), and a url site path suitable for passing directly to get_article. The sort parameter controls ordering by relevance or newest. result_count is capped at 10,000 for broad queries, and total_pages is capped at 1,250.
Beauty Channel Browsing
list_beauty_articles lists the newest-first story river for Vogue's Beauty channel. The section parameter narrows results to a sub-section: celebrity beauty, hair, makeup, nails, wellness, or skin. Omit section to get the full Beauty channel feed. Each page returns up to 36 summaries with the same fields as search results — id, title, dek, url, content_type, rubric, published_at, and authors — plus a total_results count for the section and a has_more flag for pagination.
Full Article Retrieval
get_article takes a url site path exactly as returned by the listing or search endpoints and delivers the complete story: title, dek, authors, section, keywords (site tag array), image_url, body_text (paragraphs joined with blank lines), and slides for gallery-type content. Publish and modified timestamps are returned in site-local ISO 8601 format with UTC offset. Gallery articles populate the slides array with per-slide id, title, caption, and credit fields.
The Vogue API is a managed, monitored endpoint for vogue.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when vogue.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 vogue.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?+
- Track Vogue's editorial coverage of a skincare ingredient (e.g. niacinamide) over time using
search_articleswithsort=newest. - Build a beauty trend monitor by polling
list_beauty_articleswithsection=skinorsection=wellnessdaily for new story metadata. - Extract full article
body_textandkeywordsfromget_articleto train or fine-tune a fashion/beauty language model. - Aggregate
authorsfields across beauty channel stories to identify Vogue's most prolific contributors by topic. - Pull
dekandtitlefields from search results to generate structured summaries of Vogue's fragrance or haircare coverage. - Collect
image_urlandrubricfrom list results to build a visual content feed for a beauty editorial newsletter. - Use
slidesdata from gallery articles to catalog product roundups, extractingcaptionandcreditfields per slide.
| 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 Vogue have an official developer API?+
What does `get_article` return for gallery-type stories versus regular articles?+
get_article returns title, dek, authors, section, keywords, image_url, and timestamps. Gallery stories additionally populate the slides array with per-slide id, title, caption, and credit. Regular articles return body_text as paragraphs joined with blank lines; slides is an empty array.Are there pagination limits I should know about for search results?+
search_articles reports result_count capped at 10,000 for broad queries and total_pages capped at 1,250, regardless of the actual number of matching stories. Each page holds a maximum of 8 items. list_beauty_articles pages hold up to 36 items and report an uncapped total_results for the chosen section.Does the API cover Vogue sections outside of Beauty, such as Fashion, Culture, or Runway?+
list_beauty_articles is scoped to the Beauty channel and its sub-sections. search_articles queries the full Vogue archive and will surface stories from Fashion, Culture, and other sections in its results. There is no dedicated listing endpoint for non-Beauty channels. You can fork this API on Parse and revise it to add section-specific listing endpoints for Fashion, Runway, or Culture coverage.Are comments, reader engagement data, or social share counts available?+
keywords, rubric, authors, and publish timestamps. You can fork this API on Parse and revise it to add an endpoint targeting any engagement data the site exposes publicly.