DocMorris APIdocmorris.de ↗
Access DocMorris.de product data via 6 endpoints: search by keyword or PZN, browse categories, retrieve pricing, availability, and customer reviews.
What is the DocMorris API?
The DocMorris.de API provides 6 endpoints for retrieving pharmaceutical and health product data from Germany's DocMorris online pharmacy. Use search_cannabis_products to run full-text searches across the catalog, returning product name, pricing with savings percentage, manufacturer, brand, stock status, and category hierarchy. Additional endpoints cover category browsing, PZN lookups, detailed product pages, discounted product filtering, and customer reviews.
curl -X GET 'https://api.parse.bot/scraper/a26981b9-ca46-4570-a0ba-7217384b5414/search_cannabis_products?page=0&limit=10&query=cannabis' \ -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 docmorris-de-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: DocMorris SDK — search products, browse categories, lookup by PZN, read reviews."""
from parse_apis.docmorris_de_product_api import DocMorris, Query, Category, Pzns, ProductNotFound
client = DocMorris()
# Search for CBD products across the catalog
for product in client.products.search(query=Query.CBD, limit=5):
print(product.name, product.pricing.price, product.pricing.savings_percentage)
# Browse products in a specific category
for product in client.products.by_category(category=Category.HANF___CBD_PRODUKTE, limit=3):
print(product.name, product.brand.name, product.has_stock)
# Find currently discounted products
for deal in client.products.discounted(query="cannabis", limit=5):
print(deal.name, deal.pricing.price, deal.pricing.recommended_price)
# Lookup detailed product info by PZN
for detail in client.productdetails.lookup_by_pzns(pzns=Pzns._17839899_16892259, limit=2):
print(detail.name, detail.lazyId, detail.isAvailable)
# Get reviews for a specific product by its PZN
product = client.products.search(query=Query.CANNABIS, limit=1).first()
if product:
for review in product.reviews.list(limit=3):
print(review.Title, review.Rating, review.UserNickname)
# Typed error handling
try:
first_product = client.products.search(query=Query.ASPIRIN, limit=1).first()
if first_product:
print(first_product.name, first_product.pricing.price)
except ProductNotFound as exc:
print(f"Product not found: {exc.pzn}")
print("exercised: products.search / products.by_category / products.discounted / productdetails.lookup_by_pzns / product.reviews.list")
Full-text search across the DocMorris product catalog via Algolia. Returns paginated results with product name, pricing, manufacturer, brand, category, and availability data. Pagination is zero-indexed. Each hit includes pricing.savings_percentage for discount detection and has_stock for availability.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (0-indexed) |
| limit | integer | Number of results per page (max 100) |
| query | string | Search keyword (e.g. 'cannabis', 'CBD', 'Hanf', 'Aspirin') |
{
"type": "object",
"fields": {
"hits": "array of product objects with name, pricing, slug, manufacturer, brand, category info, has_stock, default_image",
"page": "current page number (0-indexed)",
"nbHits": "total number of matching results",
"nbPages": "total number of pages available",
"hitsPerPage": "number of results per page"
},
"sample": {
"data": {
"hits": [
{
"name": "CANTURA CBD-Pflaster AKUT 12 St",
"slug": "cantura-cbdpflaster-akut-alternative-zu-schmerzpflaster",
"brand": {
"name": "Cantura"
},
"lazy_id": "19980596",
"pricing": {
"price": 14.95,
"base_price": "1245.83 €/l",
"recommended_price": 29.9,
"savings_percentage": 50
},
"has_stock": true,
"product_id": "0dc800a5-cc63-4c51-8354-393ab028f7e5",
"manufacturer": {
"name": "CANTURA Biopharma GmbH"
},
"default_image": "https://statics.docmorris.de/static/produkte/1NX85Y15/docmorris/ffm/cantura-cbd-pflaster.png",
"category_names": [
"Hanf & CBD-Produkte"
]
}
],
"page": 0,
"nbHits": 995,
"nbPages": 199,
"hitsPerPage": 5
},
"status": "success"
}
}About the DocMorris API
Search and Browse
search_cannabis_products accepts a query string and returns paginated hits (up to 100 per page, zero-indexed) with fields including name, slug, manufacturer, brand, has_stock, default_image, and a pricing.savings_percentage field useful for discount detection. get_cannabis_category_products applies a category facet filter using German display names from DocMorris — for example 'Hanf & CBD-Produkte', 'CBD-Öl', or 'Muskeln, Knochen, Gelenke' — and returns the same product shape. Both endpoints expose nbHits and nbPages for result-set sizing.
Product Detail and PZN Lookup
get_product_details takes a pzn (Pharmaceutical Central Number) and a URL slug and returns a full product record: multi-resolution images, a prices object with salesPrice, recommendedRetailPrice, savingsPercentageFormatted, and savings, plus dosageForm, packagingSize, isAvailable, and a manufacturer object with address data. search_by_pzn accepts a comma-separated list of PZNs and returns the same detailed shape for each, making batch lookups straightforward.
Reviews and Discounts
get_product_reviews retrieves BazaarVoice-sourced reviews for a product by PZN. Each result includes Rating, ReviewText, Title, UserNickname, SubmissionTime, and SecondaryRatings covering dimensions such as effectiveness, value, and ease of use. The Includes object provides aggregated ReviewStatistics. get_discounted_cannabis_products scans results for a given query and returns only those where savings_percentage > 0, along with a count of matching discounted items.
The DocMorris API is a managed, monitored endpoint for docmorris.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when docmorris.de 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 docmorris.de 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?+
- Monitor DocMorris pricing and savings percentages across CBD and hemp products for competitive analysis.
- Build a PZN-based product lookup tool returning availability and retail vs. sales price comparisons.
- Aggregate customer review ratings and secondary dimensions (effectiveness, value) across a product category.
- Detect and alert on newly discounted products using the
get_discounted_cannabis_productsendpoint. - Populate a product database with manufacturer addresses, dosage forms, and packaging sizes via
search_by_pzn. - Build a category browser using German DocMorris category names to list in-stock health and pharmacy products.
- Compare recommended retail price against sales price across multiple PZNs to surface best-value items.
| 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 DocMorris offer an official public developer API?+
What identifiers do I need to fetch full product details?+
get_product_details requires both a pzn (Pharmaceutical Central Number, e.g. '16892259') and the product's URL slug. Both are returned in search and category listing responses, so you can chain a search call into a detail call. search_by_pzn only requires the PZN and accepts a comma-separated list for batch retrieval.Does the API cover prescription-only or login-gated products?+
Are there endpoints for order history, wishlists, or account data?+
How does pagination work across the search and category endpoints?+
search_cannabis_products and get_cannabis_category_products use zero-indexed pagination via the page parameter. The response includes nbHits (total matching results), nbPages (total pages), and hitsPerPage (results per page, max 100), giving you everything needed to iterate through a full result set.