Developer API

Structured data for any URL on the web

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.

< 1.5s
# 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 }
}

Schema.org for any URL — even sites that don't have it

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.

Any URL, any platform

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.

Fine-tuned, not wrapped

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.

Built for production

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.

What developers build with it

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.

Comparison & aggregation

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.

AI agents & retrieval

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.

Rich search & discovery

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.

Internal knowledge tools

Feed your CRM, sales intelligence, or market research tools with clean structured data extracted from prospect sites, competitor pages, or supplier catalogues.

Three endpoints, one API key

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.

POST
/api/ms/schema/generate Generate validated JSON-LD for any URL. Returns cached response if fresh, otherwise runs inference in under 2 seconds.
POST
/api/ms/schema/batch Submit up to 100 URLs in a single request. Returns a job ID, polled via the status endpoint. Built for bulk backfills.
GET
/api/ms/schema/status/:job_id Check the status of a batch job. Returns completion state and result URLs as they're ready.

See it work

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 }
}
1.2s — cache miss
# 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 }
}
1.4s — cache miss
# 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"
}
0.9s — cache miss
# 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
Async — poll for results

Plug schema into your AI tools, natively

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.

Your AI tool
tool call
MarkupSchema
validated JSON-LD
Structured data
{
  "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.

Numbers that matter in production

1.2s
Median generation latency
<50ms
Cached response latency
97%
Rich Results validation
99.9%
Uptime (Pro & Enterprise)

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.

Straightforward pricing, no metered surprises

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.

Free
€0
  • 100 requests per day
  • All 20+ schema types
  • Shared queue
  • Community support
Starter
€29 / month
  • 1,000 requests per day
  • All 20+ schema types
  • Priority queue
  • Email support
  • Usage dashboard
Pro
€99 / month
  • 10,000 requests per day
  • Priority queue
  • Batch endpoints
  • Email support

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 Enterprise

Authentication and errors

All 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...
StatusMeaningWhat to do
400Invalid URL or malformed requestCheck URL format, ensure public accessibility
401Missing or invalid API keyCheck your X-API-Key header
429Rate limit exceededBack off and retry; check your daily quota
503Generation temporarily unavailableRetry 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.

Use it from any language

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 / shell

curl -X POST .../generate \
-H "X-API-Key: ..."

Python

requests.post(
  url, headers=h, json=d)

JavaScript

fetch(url, {
  method: 'POST', headers, body })

Everything you need to go live

Full API reference

Every endpoint, every parameter, every response field documented with examples.

Read the docs

Schema Playground

Test schema generation live in your browser. Paste any URL and see the output instantly.

Try it

Developer console

Create and manage API keys, monitor usage, view request history.

Get your key

Direct support

Starter and Pro tiers get email support with under-24-hour response. Enterprise gets a direct channel with engineering.

Contact us

Common questions from developers

All 20+ core schema.org types with rich result support — LocalBusiness, Product, Article, Event, FAQPage, HowTo, Recipe, Organization, Person, JobPosting, Breadcrumb, Review, Course, and more. Types are auto-detected from page content.
For paid tiers, yes — we run a full Playwright-based renderer when a page requires it (SPAs, dynamic content). For the free tier, we use raw HTML only. This is controllable per-request with a render: true flag.
Default cache TTL is 24 hours. Override with fresh: true in the request body to force regeneration, or set a custom TTL at the account level for Enterprise.
Yes. The API generates structured data from any publicly accessible URL. You're responsible for ensuring your use complies with the target site's terms of service and applicable law — most commercial use cases (competitive intelligence, aggregation, research) fall under standard public-data access norms.
A batch request counts as one against your daily limit, regardless of how many URLs it contains. The 100-URL-per-batch cap applies. Batch jobs run at 5–20 URLs per second depending on tier and target site response times.
We respect robots.txt on our own scraping infrastructure and rate-limit crawls per domain. For user-initiated API requests, compliance with the target site's terms is the requester's responsibility.
Requests return 429 with a 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.

Your next integration is one API call away.

Free tier is live — no credit card, 100 requests a day, every schema type. Upgrade when you need volume.

curl -X POST https://api.markupschema.com/api/ms/schema/generate \ -H "X-API-Key: bl_your_key" \ -d '{"url": "yourdomain.com"}'
George
Online
0%

Hi, I'm George.

Ask me about your projects, reports, brand mentions, backlinks, or anything on the platform.