Byrdie APIbyrdie.com ↗
Search Byrdie beauty articles, list section content, and fetch full article text including key takeaways, expert callouts, and structured body sections.
What is the Byrdie API?
The Byrdie API gives developers structured access to beauty and wellness editorial content across 3 endpoints. Use search_articles to run keyword queries across all Byrdie content and get back article IDs, headlines, canonical URLs, and category labels. list_section_articles returns grouped cards from section landing pages, and get_article delivers full article text with key takeaways, ISO timestamps, and section-by-section body content including expert callouts.
curl -X GET 'https://api.parse.bot/scraper/759e45e2-db01-4f0f-bd9f-5dc3bb10969c/search_articles?query=fragrance+layering' \ -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 byrdie-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: Byrdie Articles API — search, browse sections, read full articles."""
from parse_apis.byrdie_com_api import Byrdie, InputNotFound
client = Byrdie()
# Search for articles about fragrance layering, cap at 5 results.
for hit in client.article_summaries.search(query="fragrance layering", limit=5):
print(hit.headline, "|", hit.category, "|", hit.updated)
# Drill into the first search result to read the full article body.
first = client.article_summaries.search(query="fragrance layering", limit=1).first()
if first is not None:
article = first.details()
print(article.headline)
print(article.summary)
for author in article.authors:
print("Author:", author)
for takeaway in article.key_takeaways:
print("•", takeaway)
# Browse a section landing page and inspect its article groups.
section = client.sections.get(section="fragrance-4628411")
print(section.title, "—", section.total_articles, "articles")
for group in section.groups or []:
print("Group:", group.heading)
for card in group.articles:
print(" ", card.headline)
# Point-lookup by URL, with error handling for missing articles.
try:
detail = client.articles.get(url="https://www.byrdie.com/how-to-layer-perfumes-4799974")
print(detail.headline, "published", detail.date_published)
except InputNotFound:
print("Article not found")
print("exercised: article_summaries.search / details / sections.get / articles.get")
Keyword search across all Byrdie articles, returned in the site's relevance order, 24 results per page. Each result carries the article headline, canonical url, article_id, category label, and the site's displayed last-updated string (an absolute date such as 'Oct 06, 2025' or a relative phrase such as '4 days ago' for very recent updates). Author is only present when the site shows a byline on the card. One page per call; pass next_offset back as offset to continue while has_more is true. A query with no matches returns an empty results array.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Free-text search phrase, e.g. one shape: fragrance layering. |
| offset | integer | Zero-based result offset; must be a multiple of 24 (the page size). Use the next_offset value from the previous page. |
{
"type": "object",
"fields": {
"query": "echo of the search phrase",
"offset": "integer offset of this page",
"results": "array of article cards: article_id (string), headline, url (pass to get_article), category, updated (site display string), author (string or null)",
"has_more": "boolean, true when the site offers a further page",
"next_offset": "integer offset for the next page, or null when has_more is false"
},
"sample": {
"data": {
"query": "fragrance layering",
"offset": 0,
"results": [
{
"url": "https://www.byrdie.com/how-to-layer-perfumes-4799974",
"author": null,
"updated": "Oct 06, 2025",
"category": "Fragrance",
"headline": "How to Layer Fragrances to Create Your Signature Scent",
"article_id": "4799974"
}
],
"has_more": true,
"next_offset": 24
},
"status": "success"
}
}About the Byrdie API
What the API Covers
The Byrdie API surfaces editorial content from Byrdie's beauty and wellness publication. search_articles accepts a free-text query param and returns up to 24 results per page, each carrying an article_id, headline, url, category, updated display string, and author. Pagination is handled via the offset param (multiples of 24) and the has_more / next_offset fields in the response.
Section and Article Access
list_section_articles takes a section slug — such as body-4628412 for the Fragrance section — and returns article cards grouped in page order: a "What's Trending" spotlight group followed by education picks and the latest articles. Each group includes a heading (or null), and articles carry the same card fields as search results. The total_articles field gives a distinct article count across all groups.
Full Article Content
get_article accepts a canonical Byrdie article URL exactly as returned by the other endpoints and delivers the complete article. Response fields include headline, summary (the site's meta description), key_takeaways (an array of bullet strings, empty when absent), authors, date_published and date_modified as ISO 8601 timestamps with UTC offset, and sections — an ordered array where each entry has a heading, paragraphs array, and callouts array. Callouts carry a label and items list, covering structured elements like benefit lists and expert tips embedded in the article body.
The Byrdie API is a managed, monitored endpoint for byrdie.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when byrdie.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 byrdie.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 beauty content aggregator that queries Byrdie by ingredient keyword and surfaces matching articles with headlines and URLs
- Track editorial freshness by comparing
date_modifiedtimestamps across articles in a given section over time - Extract
key_takeawaysbullets to generate structured beauty topic summaries without parsing full article text - Index Byrdie's Fragrance section card groups to monitor trending topics and new editorial picks
- Pull expert callouts from
sections[].calloutsto compile a dataset of dermatologist or esthetician recommendations - Paginate
search_articlesresults usingnext_offsetto build a full keyword coverage map across Byrdie's archive - Hydrate a content recommendation engine with category labels and author metadata from article card results
| 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 Byrdie have an official developer API?+
What does get_article return beyond the article headline?+
get_article returns the summary (meta description), key_takeaways as an array of strings, date_published and date_modified as ISO 8601 timestamps, authors as an array, and a sections array. Each section entry contains a heading, a paragraphs array, and a callouts array with structured label-and-items pairs for things like expert tips and benefit lists.How does pagination work in search_articles?+
offset as a multiple of 24 to retrieve subsequent pages. The response includes has_more (boolean) and next_offset (integer or null). When has_more is false, next_offset is null and there are no further results for that query.Does the API cover product reviews or ratings data from Byrdie?+
Can I retrieve articles from sections other than Fragrance using list_section_articles?+
section parameter accepts any Byrdie section path slug as it appears in the site's navigation URLs. The Fragrance section (body-4628412) is the confirmed default example, but other valid section slugs will return that section's grouped article cards the same way.