The URL to fetch and validate. Mutually exclusive with jsonld. Cached for 1 hour.
jsonld
object | array
A JSON-LD object or array of objects. Mutually exclusive with url. Supports @graph arrays. Never cached.
Headers
Field
Type
Description
x-api-key
string
Your API key. Recommended for server-side calls. Takes precedence over access_key query param.
Content-Typerequired
string
Must be application/json.
Success response (200)
All successful responses share this shape. Fields marked optional are only present when applicable.
Top-level
Field
Type
Description
success
true
Always true on a 200 response.
urloptional
string
Echoed back when the request was URL-based.
schemas_found
number
Count of JSON-LD schemas found (after @graph flattening).
schemas
Schema[]
Validation results — one object per schema. Empty array when none found.
summary
Summary
Aggregate stats across all schemas.
parse_errorsoptional
string[]
JSON parse errors from malformed <script type='application/ld+json'> blocks. Present only when at least one block failed to parse.
messageoptional
string
Human-readable note when schemas_found is 0, explaining how to add structured data.
meta
Meta
Request metadata — timing, credits, cache status.
Schema object
Field
Type
Description
type
string
The @type value from the JSON-LD (e.g. Article, Product, Organization).
validation_depth
string
Depth used to validate this type: "full" (Tier 1 — required + recommended + format checks), "standard" (Tier 2 — required + recommended), or "basic" (Tiers 3–4 — required properties only).
valid
boolean
true if all required properties are present and correctly typed.
rich_result_eligible
boolean
true if this schema meets Google's current rich result requirements.
deprecated
boolean
true for schema types Google has retired or restricted.
deprecation_note
string|null
Reason for deprecation (e.g. 'Google retired HowTo rich results in 2024.').
errors
Issue[]
Validation errors — missing required properties, wrong types, etc.
warnings
Issue[]
Validation warnings — missing recommended properties, minor issues.
properties_found
string[]
List of property names present in the schema.
properties_missing_required
string[]
Required properties that are absent. Non-empty means valid=false.
properties_missing_recommended
string[]
Recommended properties that are absent. Does not affect valid.
raw_jsonld
object
The original JSON-LD object as parsed from the page.
rich_resultoptional
RichResult
Rich result status object. Present on all schemas.
Issue object (errors and warnings)
Field
Type
Description
severity
string
One of "error", "warning", or "info".
property
string
The property name that triggered this issue (e.g. datePublished, author).
message
string
Human-readable description of the issue.
fix
string
Specific, copy-paste fix suggestion.
google_docs_urloptional
string
Direct link to the relevant Google structured data documentation.
RichResult object
Field
Type
Description
eligible
boolean
Whether this schema qualifies for Google Rich Results.
reason
string
Explanation — what makes it eligible or why it's not.
google_docs_url
string
Link to the Google docs for this schema type's rich result requirements.
Summary object
Field
Type
Description
total_schemas
number
Total schema objects found and validated.
valid_schemas
number
Count with valid=true.
invalid_schemas
number
Count with valid=false.
total_errors
number
Sum of errors across all schemas.
total_warnings
number
Sum of warnings across all schemas.
rich_result_eligible
number
Count of schemas with rich_result_eligible=true.
score
number
0–100 health score. Starts at 100, deducted for errors (÷schemas ×40) and warnings (÷schemas ×10).
Meta object
Field
Type
Description
api_version
string
Always "1.0".
validated_at
string
ISO 8601 timestamp of when validation ran.
cached
boolean
true if the result was served from cache. Cached results cost 0 credits.
credits_used
number
0 (cached) or 1 (fresh validation).
credits_remaining
number
Remaining credits this billing period after this request.
response_time_ms
number
Total server-side time in milliseconds.
POST /validate/batch
Validate up to 50 URLs in a single API call. All URLs are processed concurrently and partial failures are tolerated — results for successful URLs are always returned even if some URLs time out or are unreachable. The entire batch counts as one API request against your rate limit; credits are charged only for URLs that validate successfully (1 credit per successful URL, 0 for cached or failed URLs).
Array of URLs to validate. Maximum 50 per request. Each URL must start with http:// or https://. Invalid URLs are returned as failed results rather than rejecting the whole batch.
Headers
Field
Type
Description
x-api-keyrequired
string
Your API key.
Content-Typerequired
string
Must be application/json.
Batch response (200)
The response always has HTTP 200 as long as the request itself was valid (auth passed, body was parseable, URL count was within limit). Per-URL failures are reported inside results, not as HTTP error codes.
Full validation results — same Schema objects as the single /validate endpoint.
summary
Summary
Aggregate stats — same Summary object as the single /validate endpoint.
parse_errorsoptional
string[]
JSON parse errors from malformed script blocks. Present only when at least one block failed to parse.
messageoptional
string
Human-readable note when schemas_found is 0.
Result item — failure
Field
Type
Description
url
string
The URL that failed.
success
false
Always false for this shape.
error
string
Human-readable failure reason. Common values: "Timeout after 10s", "URL must use http:// or https://", "Skipped — batch time budget exhausted."
Batch meta object
Field
Type
Description
total_urls
number
Total number of URLs submitted in the request.
successful
number
Count of URLs that validated without error.
failed
number
Count of URLs that failed (invalid format, timeout, fetch error).
credits_used
number
Total credits charged. One credit per successful, non-cached validation.
credits_remaining
number
Remaining credits after this batch.
total_response_time_ms
number
Total wall-clock time for the entire batch in milliseconds.
truncatedoptional
boolean
true if the 22-second batch budget was reached before all URLs could be processed. Remaining URLs will have a 'Skipped' error.
truncated_reasonoptional
string
Explanation of why the batch was truncated. Present only when truncated is true.
Batch limits and behaviour
Max URLs50 per request. Submitting more than 50 returns HTTP 400.
Per-URL timeout10 seconds. URLs that don't respond within 10s are returned as failed results.
Batch timeout22 seconds total. If the batch budget is reached, remaining unprocessed URLs are returned as skipped. This protects against Vercel's 25s function limit.
Rate limitThe entire batch counts as 1 request against your per-minute rate limit, regardless of how many URLs are in it.
Credits1 credit per successfully validated URL. Cached results cost 0 credits. Failed and invalid URLs cost 0 credits.
CachingEach URL is checked against the cache individually (1-hour TTL). Cache hits within a batch cost 0 credits and are served instantly.
Partial failureThe batch never fails wholesale. If 3 out of 10 URLs time out, you still receive results for the 7 that succeeded.
Supported schema types
35 schema types validated against Google's current structured data requirements. Types are organised into tiers that determine validation depth.
Tier 1 — Full: Required + recommended properties, type validation, nested object checks, format validation (dates, URLs).
KeySHA-256 of lowercase, trailing-slash-stripped URL
ScopeURL requests only — jsonld inputs are never cached
CreditsCache hits cost 0 credits (credits_used: 0 in meta)
BypassNot supported — call again after TTL expiry
Rate limits
Limits are per API key, per minute (sliding window). Exceeded requests return rate_limit_exceeded (HTTP 429). Note that the batch endpoint counts as one request against this limit regardless of how many URLs are in the batch.