Discover/Dr Nutrition API
live

Dr Nutrition APIdrnutrition.com

Search and filter the drnutrition.com product catalogue by keyword, brand, category, goal, price, and more. Returns product details and filter facets with counts.

Endpoint health
verified 1h ago
search_products
1/1 passing latest checkself-healing
Endpoints
1
Updated
2h ago

What is the Dr Nutrition API?

The Dr Nutrition API gives programmatic access to the drnutrition.com supplement catalogue through a single search_products endpoint that returns up to 20+ product fields per variant alongside 11 filter facet groups. You can query by free-text keyword, brand, fitness goal, dietary preference, gender, price band, discount band, availability, and product type, with full pagination support and per-option counts on every facet.

This call costs1 credit / call— charged only on success
Try it
1-based page number.
Result ordering.
Comma-separated fitness goal names, as listed in filters[key=goals].options[*].value.
Comma-separated price band codes 'MIN-MAX' in the region's currency, as listed in filters[key=price].options[*].value (confirmed shape: '0-20').
Free-text keyword to search product titles, e.g. a product type or ingredient. May be combined with filters.
Comma-separated brand names, as listed in filters[key=brands].options[*].value.
Comma-separated gender facet values, as listed in filters[key=gender].options[*].value.
Two-letter lowercase country code of the Dr Nutrition storefront whose catalogue and prices are returned (confirmed: om, ae).
Comma-separated discount band codes, as listed in filters[key=discount].options[*].value (confirmed shape: '20_30').
Products per page; values above 100 are clamped to 100.
Comma-separated dietary preference names, as listed in filters[key=dietaries].options[*].value (e.g. one shape is 'Gluten-Free').
Comma-separated category display names, as listed in filters[key=categories].options[*].value.
Comma-separated availability facet values, as listed in filters[key=availability].options[*].value (confirmed: 'In stock', 'Out of stock').
Comma-separated product type names, as listed in filters[key=product_type].options[*].value.
Comma-separated product label ids, as listed in filters[key=product_labels].options[*].value (numeric id string, e.g. one shape is '1').
api.parse.bot/scraper/ef9fa421-1760-452d-99bb-4f070d039467/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/ef9fa421-1760-452d-99bb-4f070d039467/search_products?categories=Whey+Protein+Isolate' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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 drnutrition-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: Dr Nutrition SDK — search products, read filters, paginate."""
from parse_apis.drnutrition_com_api import DrNutrition, SortOrder, ParseError

client = DrNutrition()

# Fetch the full catalog page to discover available filter facets.
catalog = client.catalogs.search(query="whey protein", region="om")
print(f"Total results: {catalog.total} across {catalog.total_pages} pages")
for f in catalog.filters:
    opts = ", ".join(o.label for o in f.options[:3])
    print(f"  Filter '{f.title}': {opts}")

# Use a discovered brand filter value to narrow a paginated product search.
brand_value = catalog.filters[0].options[0].value if catalog.filters else None
for product in client.products.search(
    query="whey protein",
    brands=brand_value,
    sort=SortOrder.PRICE_ASC,
    region="om",
    limit=5,
):
    print(
        f"{product.title}  {product.currency} {product.selling_price}"
        f"  (was {product.price}, -{product.discount_percent}%)"
    )
    print(f"  rating={product.rating}  in_stock={product.in_stock}  labels={product.product_labels}")

# Drill into the cheapest hit for full field access.
try:
    cheapest = client.products.search(sort=SortOrder.PRICE_ASC, region="om", limit=1).first()
except ParseError as e:
    print(f"Upstream parse failure ({e.code}): {e}")
    cheapest = None
if cheapest is not None:
    print(f"\nCheapest: {cheapest.title}")
    print(f"  SKU {cheapest.sku}  weight {cheapest.weight}")
    print(f"  {cheapest.category_one_name} > {cheapest.category_two_name}")
    print(f"  {cheapest.url}")

print("exercised: catalogs.search / products.search / filters / product fields")
All endpoints · 1 totalmissing one? ·

Returns one page of products matching a keyword and/or filter selections, plus the filter facet groups (brands, categories, dietaries, goals, gender, availability, discount, price, product_labels, product_type, rating) with per-option counts and the option values you can pass back into the same-named filter parameters. At least one of query or a filter parameter must be supplied; otherwise the call is rejected. Filter parameters take comma-separated option values exactly as they appear in the returned facet options (category and brand values are display names, e.g. one shape is 'Whey Protein Isolate'). Pagination is caller-controlled through page (default 1) and per_page (default 20, capped at 100); total and total_pages describe the full result set and has_more tells whether a next page exists. Note: the site groups product variants under relevance ordering, so total can be larger when a non-relevance sort is used. Prices are in the currency of the selected region (region defaults to Oman, currency OMR). A filter or category value the site does not recognize yields an empty products list with total 0 (a valid empty result). One upstream request per call.

Input
ParamTypeDescription
pageinteger1-based page number.
sortstringResult ordering.
goalsstringComma-separated fitness goal names, as listed in filters[key=goals].options[*].value.
pricestringComma-separated price band codes 'MIN-MAX' in the region's currency, as listed in filters[key=price].options[*].value (confirmed shape: '0-20').
querystringFree-text keyword to search product titles, e.g. a product type or ingredient. May be combined with filters.
brandsstringComma-separated brand names, as listed in filters[key=brands].options[*].value.
genderstringComma-separated gender facet values, as listed in filters[key=gender].options[*].value.
regionstringTwo-letter lowercase country code of the Dr Nutrition storefront whose catalogue and prices are returned (confirmed: om, ae).
discountstringComma-separated discount band codes, as listed in filters[key=discount].options[*].value (confirmed shape: '20_30').
per_pageintegerProducts per page; values above 100 are clamped to 100.
dietariesstringComma-separated dietary preference names, as listed in filters[key=dietaries].options[*].value (e.g. one shape is 'Gluten-Free').
categoriesstringComma-separated category display names, as listed in filters[key=categories].options[*].value.
availabilitystringComma-separated availability facet values, as listed in filters[key=availability].options[*].value (confirmed: 'In stock', 'Out of stock').
product_typestringComma-separated product type names, as listed in filters[key=product_type].options[*].value.
product_labelsstringComma-separated product label ids, as listed in filters[key=product_labels].options[*].value (numeric id string, e.g. one shape is '1').
Response
{
  "type": "object",
  "fields": {
    "page": "current page number",
    "sort": "sort code applied",
    "query": "the keyword applied, or null when only filters were used",
    "total": "total matching products across all pages",
    "region": "uppercase country code the site resolved the request to",
    "filters": "array of facet groups {key, title, options[]}; each option has value (pass back into the same-named input), label, count, selected",
    "has_more": "whether a following page exists",
    "per_page": "page size applied",
    "products": "array of product variant records: product_id, product_option_id (variant), title, slug, url, sku, item_no, currency, price (list), selling_price (current), discount_percent, has_special_price, in_stock, availability, quantity, rating, weight, image, category_one_name, category_two_name, product_labels (array of label texts), express_delivery_available",
    "total_pages": "number of pages at this per_page"
  },
  "sample": {
    "data": {
      "page": 1,
      "sort": "relevance",
      "query": null,
      "total": 3,
      "region": "OM",
      "filters": [
        {
          "key": "brands",
          "title": "Brands",
          "options": [
            {
              "count": 2,
              "label": "Muscletech",
              "value": "Muscletech",
              "selected": true
            }
          ]
        },
        {
          "key": "discount",
          "title": "Discount",
          "options": [
            {
              "count": 2,
              "label": "30% - 50%",
              "value": "30_50",
              "selected": false
            }
          ]
        },
        {
          "key": "price",
          "title": "Price Range",
          "options": [
            {
              "count": 2,
              "label": "0 - 14",
              "value": "0-14",
              "selected": false
            }
          ]
        }
      ],
      "has_more": false,
      "per_page": 20,
      "products": [
        {
          "sku": "631656703252",
          "url": "https://drnutrition.com/en-om/muscletech-nitro-tech-performance-series-2-lb-vanilla-cream",
          "slug": "muscletech-nitro-tech-performance-series-2-lb-vanilla-cream",
          "image": "https://media.drnutrition.com/media/thumbnail/bjx8wwXexm0tTE9XK1I0zg3gAYJxztuTfJpL53I6.jpg",
          "price": 19.87,
          "title": "Muscletech Nitro Tech Whey Protein, Vanilla Cream, 2 LB",
          "rating": 4.7,
          "weight": "1.18kg",
          "item_no": "00001025",
          "currency": "OMR",
          "in_stock": true,
          "quantity": 23,
          "product_id": 347,
          "availability": "In stock",
          "selling_price": 13.44,
          "product_labels": [
            "GLP-1 Friendly"
          ],
          "discount_percent": 32,
          "category_one_name": "Sports Nutrition",
          "category_two_name": "Whey Protein Isolate",
          "has_special_price": true,
          "product_option_id": 2732,
          "express_delivery_available": true
        }
      ],
      "total_pages": 1
    },
    "status": "success"
  }
}

About the Dr Nutrition API

What the API Returns

The search_products endpoint returns a paginated list of product variant records from the drnutrition.com catalogue. Each record includes product_id, product_option_id (the specific variant), title, slug, url, sku, item_no, currency, price (list price), and additional variant-level fields. Alongside products, the response includes total, total_pages, per_page, page, has_more, and the region the request resolved to.

Filtering and Facets

Every response contains a filters array of facet groups — brands, categories, dietaries, goals, gender, availability, discount, price, product_labels, product_type, and rating — each carrying an array of options with value, label, count, and selected flags. You use the value from a facet option directly as the input parameter for the next request, making it straightforward to build cascading filter UIs or scrape structured option sets.

Region and Sorting

The region input accepts a two-letter lowercase country code to target a specific Dr Nutrition regional storefront, returning prices in that region's currency. The sort parameter controls result ordering. Filters such as goals, brands, gender, and price accept comma-separated values, enabling multi-select filtering in a single call.

Scope

The API currently covers the product catalogue for the storefronts accessible via the region parameter. It does not expose individual product detail pages, review text, nutritional panels, or order/account data. Filter facet counts reflect the current result set, so narrowing filters will change available counts on remaining facets.

Reliability & maintenanceVerified

The Dr Nutrition API is a managed, monitored endpoint for drnutrition.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when drnutrition.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 drnutrition.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.

Last verified
1h ago
Latest check
1/1 endpoint passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a supplement comparison tool using price, brands, and goals filters to surface competing products side-by-side.
  • Track price changes across regional storefronts by querying the same query keyword with different region codes and comparing the returned price and currency fields.
  • Populate a filtered product listing page using the filters facet groups with per-option count values for dynamic UI rendering.
  • Monitor discount band availability by polling the discount facet options and filtering results by discount code.
  • Audit which brands carry products tagged with a specific dietaries or goals facet, using the returned facet count data.
  • Aggregate product availability status across categories by iterating categories facet values and checking availability facet counts per result set.
  • Build a gender-targeted supplement catalogue page using the gender filter combined with product_type and product_labels facets.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 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.

Frequently asked questions
Does drnutrition.com have an official developer API?+
Dr Nutrition does not publish a public developer API or documentation for third-party programmatic access to its catalogue.
What does the `filters` field in the response actually contain?+
The filters array contains 11 facet groups: brands, categories, dietaries, goals, gender, availability, discount, price, product_labels, product_type, and rating. Each group has a key, a title, and an options array where every option carries a value (the string to pass back as a filter input), a label, a count of matching products, and a selected boolean indicating whether that option is active in the current request.
Can I retrieve full product detail pages, nutritional information, or customer review text?+
Not currently. The API covers product variant records from catalogue listings — title, SKU, price, URL, and variant identifiers — plus filter facets. Individual product pages with nutritional panels, ingredient lists, and review text are not exposed. You can fork the API on Parse and revise it to add an endpoint covering individual product detail pages.
How does multi-region support work, and are all Dr Nutrition storefronts covered?+
The region input accepts a two-letter country code to request a specific regional storefront, and the response confirms which region was resolved via the region field. Coverage depends on which storefronts Dr Nutrition operates; not all country codes may return distinct catalogue data. If a region you need is unsupported, you can fork the API on Parse and revise it to target additional storefront URLs.
Is there a way to retrieve all products without a keyword or filter?+
The query and all filter inputs are optional, so you can call search_products without any of them to retrieve the full catalogue paginated by page. The total and total_pages fields in the response tell you how many records and pages exist at the current per_page size.
Page content last updated . Spec covers 1 endpoint from drnutrition.com.
Related APIs in EcommerceSee all →