One API call. Any public page. Validated schema.org JSON-LD back in under two seconds. Fine-tuned model, fluent in 20+ schema types, built for production.
# Request curl -X POST https://api.markupschema.com/api/ms/schema/generate \ -H "X-API-Key: bl_live_abc123" \ -d '{"url": "https://oscars-bistro.ie"}' # Response { "@context": "https://schema.org", "@type": "Restaurant", "name": "Oscar's Bistro", "address": { "streetAddress": "12 Dame Street", "addressLocality": "Dublin" }, "openingHours": ["Mo-Fr 12:00-22:00", "Sa-Su 10:00-23:00"], "priceRange": "$$$", "aggregateRating": { "ratingValue": 4.6, "reviewCount": 284 } }
Most of the web has no structured data. Our API generates it anyway. Point it at any public page — yours, a competitor's, a supplier's, a source you're aggregating — and get clean, validated JSON-LD back in under two seconds.
No plugin to install, no CMS to integrate with. Pass a URL, get structured data. Works on WordPress, Shopify, headless setups, static sites, SPAs, and pages that never had a developer.
Our model was trained specifically for schema.org generation — not a generic LLM with a prompt wrapped around it. Faster responses, cleaner output, and validated against Google's Rich Results requirements.
Sub-2-second generation, cached responses return instantly, priority queues for paid tiers. Use it synchronously in a request path or in bulk via the batch endpoint.
Rich search experiences. Comparison platforms. AI agents. Aggregators. Internal tooling. Anywhere structured data is the blocker between raw web content and the product you want to ship.
Pull product, price, and availability schema from any retailer. Build comparison engines, deal aggregators, or category directories without negotiating data feeds one partner at a time.
Give Claude, ChatGPT, or your own agent structured access to the web via our MCP endpoint. Every tool call returns validated schema.org JSON-LD — no scraping, no parsing, no hallucinated prices.
Power search interfaces that understand entities, not just keywords. Query any URL, get typed structured data, build UIs that render LocalBusiness, Product, Event, or Recipe natively.
Feed your CRM, sales intelligence, or market research tools with clean structured data extracted from prospect sites, competitor pages, or supplier catalogues.
The API is intentionally minimal. Most integrations use one endpoint. Authentication is a single header. Responses are plain JSON-LD — no custom envelopes, no SDK required.
Four request/response pairs showing common use cases. Copy and paste any of them — they work on your free tier right now.
# Request curl -X POST https://api.markupschema.com/api/ms/schema/generate \ -H "X-API-Key: bl_your_key" \ -d '{"url": "https://example-restaurant.ie"}' # Response { "@type": "Restaurant", "name": "The Wild Kitchen", "address": { "streetAddress": "42 Grafton St", "addressLocality": "Dublin" }, "openingHours": ["Mo-Fr 12:00-22:00", "Sa-Su 10:00-23:00"], "priceRange": "$$", "aggregateRating": { "ratingValue": 4.6, "reviewCount": 284 } }
# Request curl -X POST https://api.markupschema.com/api/ms/schema/generate \ -H "X-API-Key: bl_your_key" \ -d '{"url": "https://store.example.com/products/wool-throw"}' # Response { "@type": "Product", "name": "Donegal Wool Throw", "brand": { "name": "McNutt of Donegal" }, "offers": { "price": 89.00, "priceCurrency": "EUR", "availability": "https://schema.org/InStock" }, "aggregateRating": { "ratingValue": 4.8, "reviewCount": 62 } }
# Request curl -X POST https://api.markupschema.com/api/ms/schema/generate \ -H "X-API-Key: bl_your_key" \ -d '{"url": "https://news-site.com/schema-in-2026"}' # Response { "@type": "Article", "headline": "The State of Schema.org in 2026", "author": { "name": "Sarah Chen" }, "datePublished": "2026-04-15", "dateModified": "2026-04-18", "publisher": { "name": "Tech Weekly" }, "image": "https://news-site.com/img/schema-2026.jpg" }
# Request curl -X POST https://api.markupschema.com/api/ms/schema/batch \ -H "X-API-Key: bl_your_key" \ -d '{"urls": ["https://site.com/p/1", "https://site.com/p/2", "...up to 100"]}' # Response { "job_id": "batch_abc123", "status": "queued", "url_count": 100 } # Poll: GET /api/ms/schema/status/batch_abc123
Model Context Protocol is how modern AI tools — Claude, ChatGPT Desktop, Cursor — discover and use external capabilities. Our MCP server exposes schema generation as a tool call.
{
"mcpServers": {
"markupschema": {
"url": "https://api.markupschema.com/mcp",
"headers": { "X-API-Key": "bl_your_key" }
}
}
}
Add this to Claude Desktop's config, Cursor, or any MCP client. Your AI now has on-demand access to schema.org data for any URL on the web. No glue code. No parsing. No hallucinated data.
Responses are cached per-URL for 24 hours by default — override with fresh: true for live regeneration. Failed generations retry automatically up to three times. Every response includes a cached boolean and an inference_ms field.
Every paid tier has a daily request limit, not a monthly one — burst traffic doesn't blow your budget. Cached responses don't count against your limit.
Need higher limits, dedicated infrastructure, or MCP at scale? Enterprise includes unlimited requests, dedicated GPU capacity, and the full Baseline Labs GEO Suite.
Contact us about EnterpriseAll API requests require an API key passed as an X-API-Key header. Keys are created and rotated in your developer console.
X-API-Key: bl_live_abc123...
| Status | Meaning | What to do |
|---|---|---|
| 400 | Invalid URL or malformed request | Check URL format, ensure public accessibility |
| 401 | Missing or invalid API key | Check your X-API-Key header |
| 429 | Rate limit exceeded | Back off and retry; check your daily quota |
| 503 | Generation temporarily unavailable | Retry with exponential backoff |
All error responses include a JSON body with an error code, a human-readable message, and (where applicable) a retry_after seconds hint.
The API is plain JSON over HTTPS — no SDK required. Any HTTP client works. No custom auth flow, no WebSocket handshake, no proprietary encoding.
curl -X POST .../generate \
-H "X-API-Key: ..."
requests.post(
url, headers=h, json=d)
fetch(url, {
method: 'POST', headers, body })
Every endpoint, every parameter, every response field documented with examples.
Read the docsTest schema generation live in your browser. Paste any URL and see the output instantly.
Try itStarter and Pro tiers get email support with under-24-hour response. Enterprise gets a direct channel with engineering.
Contact usrender: true flag.fresh: true in the request body to force regeneration, or set a custom TTL at the account level for Enterprise.retry_after hint until your quota resets at 00:00 UTC. You can top up with additional credits from your dashboard, or upgrade your plan for a higher daily limit.Free tier is live — no credit card, 100 requests a day, every schema type. Upgrade when you need volume.
Ask me about your projects, reports, brand mentions, backlinks, or anything on the platform.