Skip to content

Parse a VPAT/ACR document

POST
/api/v1/vpat-parse
curl --request POST \
--url https://vpat-parse.larry-c6c.workers.dev/api/v1/vpat-parse \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "text": "VPAT 2.4. Product: Acme App. 1.1.1 Non-text Content: Supports." }'

Extract WCAG criteria and metadata from a VPAT. Provide exactly one of text or url. Responses use the standard { data, error, meta } envelope.

Media typeapplication/json

Provide exactly one of text or url.

object
text

Raw extracted text of the VPAT document.

string
url

Public http(s) URL of an HTML VPAT to fetch and parse. Validated by an SSRF guard (private/internal/metadata targets are rejected) and capped in size. PDFs are not supported via URL.

string format: uri
disableDataRetention

Require a zero-retention provider path; fails closed if unavailable.

boolean
bedrockModel

Optional Bedrock model override (allow-listed eval models only).

string
Example
{
"text": "VPAT 2.4. Product: Acme App. 1.1.1 Non-text Content: Supports."
}

Parsed successfully.

Media typeapplication/json
object
data
required
object
criteria
Array<object>
object
id

WCAG criterion number.

string
conformanceLevel
string
Allowed values: Supports Partially Supports Does Not Support Not Applicable Not Evaluated
remarks

The vendor’s verbatim remarks for this criterion.

string
metadata
object
productName
string
productVersion
string
vendor
string
vpatDate
string
vpatVersion
string
manualTesting
boolean
nullable
sourceText

Present only when the request supplied a url; the text the LLM saw.

string
truncated

Present (true) only when the LLM output was truncated mid-response.

boolean
error
required
object
meta
required
object
model
string
provider
string
Allowed values: gemini anthropic bedrock
truncated

True when the LLM output was truncated; the parsed criteria may be incomplete.

boolean
Example
{
"data": {
"criteria": [
{
"id": "1.1.1",
"conformanceLevel": "Supports"
}
]
},
"error": null,
"meta": {
"provider": "gemini"
}
}
X-RateLimit-Remaining
integer

Requests remaining in the current per-key window.

X-LLM-Provider
string
Allowed values: gemini anthropic bedrock
X-LLM-Model
string
X-Result-Truncated
string
Allowed values: true

Present (set to “true”) only when the LLM output was truncated.

Invalid JSON, missing text/url, or a disallowed url (SSRF guard).

Media typeapplication/json
object
data
required
object
error
required
object
code
required

Stable machine-readable error code.

string
Allowed values: METHOD_NOT_ALLOWED UNAUTHORIZED RATE_LIMITED AUTH_UNAVAILABLE INVALID_JSON MISSING_FIELD URL_NOT_ALLOWED SOURCE_AUTH_REQUIRED SOURCE_FETCH_FAILED UNSUPPORTED_MEDIA_TYPE SOURCE_TOO_LARGE ZERO_RETENTION_UNAVAILABLE CONFIG_ERROR UPSTREAM_ERROR NO_CRITERIA_FOUND INTERNAL_ERROR
message
required
string
details

Optional diagnostic detail. For source-fetch failures it carries the status and Content-Type the source answered with, e.g. sourceStatus=404; contentType=text/html.

string
meta
required
object
Example
{
"data": null,
"error": {
"code": "METHOD_NOT_ALLOWED"
},
"meta": null
}

Either the API key is missing/invalid/revoked (UNAUTHORIZED), or a fetched source url itself returned 401 (SOURCE_AUTH_REQUIRED) — the error.code distinguishes the two.

Media typeapplication/json
object
data
required
object
error
required
object
code
required

Stable machine-readable error code.

string
Allowed values: METHOD_NOT_ALLOWED UNAUTHORIZED RATE_LIMITED AUTH_UNAVAILABLE INVALID_JSON MISSING_FIELD URL_NOT_ALLOWED SOURCE_AUTH_REQUIRED SOURCE_FETCH_FAILED UNSUPPORTED_MEDIA_TYPE SOURCE_TOO_LARGE ZERO_RETENTION_UNAVAILABLE CONFIG_ERROR UPSTREAM_ERROR NO_CRITERIA_FOUND INTERNAL_ERROR
message
required
string
details

Optional diagnostic detail. For source-fetch failures it carries the status and Content-Type the source answered with, e.g. sourceStatus=404; contentType=text/html.

string
meta
required
object
Example
{
"data": null,
"error": {
"code": "METHOD_NOT_ALLOWED"
},
"meta": null
}

A fetched source url returned 403 (SOURCE_AUTH_REQUIRED).

Media typeapplication/json
object
data
required
object
error
required
object
code
required

Stable machine-readable error code.

string
Allowed values: METHOD_NOT_ALLOWED UNAUTHORIZED RATE_LIMITED AUTH_UNAVAILABLE INVALID_JSON MISSING_FIELD URL_NOT_ALLOWED SOURCE_AUTH_REQUIRED SOURCE_FETCH_FAILED UNSUPPORTED_MEDIA_TYPE SOURCE_TOO_LARGE ZERO_RETENTION_UNAVAILABLE CONFIG_ERROR UPSTREAM_ERROR NO_CRITERIA_FOUND INTERNAL_ERROR
message
required
string
details

Optional diagnostic detail. For source-fetch failures it carries the status and Content-Type the source answered with, e.g. sourceStatus=404; contentType=text/html.

string
meta
required
object
Example
{
"data": null,
"error": {
"code": "METHOD_NOT_ALLOWED"
},
"meta": null
}

Method not allowed (METHOD_NOT_ALLOWED) — the route accepts POST only.

Media typeapplication/json
object
data
required
object
error
required
object
code
required

Stable machine-readable error code.

string
Allowed values: METHOD_NOT_ALLOWED UNAUTHORIZED RATE_LIMITED AUTH_UNAVAILABLE INVALID_JSON MISSING_FIELD URL_NOT_ALLOWED SOURCE_AUTH_REQUIRED SOURCE_FETCH_FAILED UNSUPPORTED_MEDIA_TYPE SOURCE_TOO_LARGE ZERO_RETENTION_UNAVAILABLE CONFIG_ERROR UPSTREAM_ERROR NO_CRITERIA_FOUND INTERNAL_ERROR
message
required
string
details

Optional diagnostic detail. For source-fetch failures it carries the status and Content-Type the source answered with, e.g. sourceStatus=404; contentType=text/html.

string
meta
required
object
Example
{
"data": null,
"error": {
"code": "METHOD_NOT_ALLOWED"
},
"meta": null
}

Zero-retention requested but the zero-retention provider is not configured.

Media typeapplication/json
object
data
required
object
error
required
object
code
required

Stable machine-readable error code.

string
Allowed values: METHOD_NOT_ALLOWED UNAUTHORIZED RATE_LIMITED AUTH_UNAVAILABLE INVALID_JSON MISSING_FIELD URL_NOT_ALLOWED SOURCE_AUTH_REQUIRED SOURCE_FETCH_FAILED UNSUPPORTED_MEDIA_TYPE SOURCE_TOO_LARGE ZERO_RETENTION_UNAVAILABLE CONFIG_ERROR UPSTREAM_ERROR NO_CRITERIA_FOUND INTERNAL_ERROR
message
required
string
details

Optional diagnostic detail. For source-fetch failures it carries the status and Content-Type the source answered with, e.g. sourceStatus=404; contentType=text/html.

string
meta
required
object
Example
{
"data": null,
"error": {
"code": "METHOD_NOT_ALLOWED"
},
"meta": null
}

The fetched source body exceeds the size cap.

Media typeapplication/json
object
data
required
object
error
required
object
code
required

Stable machine-readable error code.

string
Allowed values: METHOD_NOT_ALLOWED UNAUTHORIZED RATE_LIMITED AUTH_UNAVAILABLE INVALID_JSON MISSING_FIELD URL_NOT_ALLOWED SOURCE_AUTH_REQUIRED SOURCE_FETCH_FAILED UNSUPPORTED_MEDIA_TYPE SOURCE_TOO_LARGE ZERO_RETENTION_UNAVAILABLE CONFIG_ERROR UPSTREAM_ERROR NO_CRITERIA_FOUND INTERNAL_ERROR
message
required
string
details

Optional diagnostic detail. For source-fetch failures it carries the status and Content-Type the source answered with, e.g. sourceStatus=404; contentType=text/html.

string
meta
required
object
Example
{
"data": null,
"error": {
"code": "METHOD_NOT_ALLOWED"
},
"meta": null
}

The url points at a binary file rather than a web page — a PDF, Word/Office document, or other download (UNSUPPORTED_MEDIA_TYPE). Detected from the Content-Type and, for mislabeled responses, the file’s magic bytes. Download the file and submit its text instead.

Media typeapplication/json
object
data
required
object
error
required
object
code
required

Stable machine-readable error code.

string
Allowed values: METHOD_NOT_ALLOWED UNAUTHORIZED RATE_LIMITED AUTH_UNAVAILABLE INVALID_JSON MISSING_FIELD URL_NOT_ALLOWED SOURCE_AUTH_REQUIRED SOURCE_FETCH_FAILED UNSUPPORTED_MEDIA_TYPE SOURCE_TOO_LARGE ZERO_RETENTION_UNAVAILABLE CONFIG_ERROR UPSTREAM_ERROR NO_CRITERIA_FOUND INTERNAL_ERROR
message
required
string
details

Optional diagnostic detail. For source-fetch failures it carries the status and Content-Type the source answered with, e.g. sourceStatus=404; contentType=text/html.

string
meta
required
object
Example
{
"data": null,
"error": {
"code": "METHOD_NOT_ALLOWED"
},
"meta": null
}

The document contained no gradeable accessibility criteria (NO_CRITERIA_FOUND) — e.g. a blank VPAT template or a file that isn’t a completed ACR. The request was well-formed; retrying the same file will not help.

Media typeapplication/json
object
data
required
object
error
required
object
code
required

Stable machine-readable error code.

string
Allowed values: METHOD_NOT_ALLOWED UNAUTHORIZED RATE_LIMITED AUTH_UNAVAILABLE INVALID_JSON MISSING_FIELD URL_NOT_ALLOWED SOURCE_AUTH_REQUIRED SOURCE_FETCH_FAILED UNSUPPORTED_MEDIA_TYPE SOURCE_TOO_LARGE ZERO_RETENTION_UNAVAILABLE CONFIG_ERROR UPSTREAM_ERROR NO_CRITERIA_FOUND INTERNAL_ERROR
message
required
string
details

Optional diagnostic detail. For source-fetch failures it carries the status and Content-Type the source answered with, e.g. sourceStatus=404; contentType=text/html.

string
meta
required
object
Example
{
"data": null,
"error": {
"code": "METHOD_NOT_ALLOWED"
},
"meta": null
}

Per-key rate limit exceeded.

Media typeapplication/json
object
data
required
object
error
required
object
code
required

Stable machine-readable error code.

string
Allowed values: METHOD_NOT_ALLOWED UNAUTHORIZED RATE_LIMITED AUTH_UNAVAILABLE INVALID_JSON MISSING_FIELD URL_NOT_ALLOWED SOURCE_AUTH_REQUIRED SOURCE_FETCH_FAILED UNSUPPORTED_MEDIA_TYPE SOURCE_TOO_LARGE ZERO_RETENTION_UNAVAILABLE CONFIG_ERROR UPSTREAM_ERROR NO_CRITERIA_FOUND INTERNAL_ERROR
message
required
string
details

Optional diagnostic detail. For source-fetch failures it carries the status and Content-Type the source answered with, e.g. sourceStatus=404; contentType=text/html.

string
meta
required
object
Example
{
"data": null,
"error": {
"code": "METHOD_NOT_ALLOWED"
},
"meta": null
}
Retry-After
integer

Seconds until the rate-limit window resets.

Server misconfiguration (CONFIG_ERROR, e.g. a missing provider key) or an unexpected internal error (INTERNAL_ERROR).

Media typeapplication/json
object
data
required
object
error
required
object
code
required

Stable machine-readable error code.

string
Allowed values: METHOD_NOT_ALLOWED UNAUTHORIZED RATE_LIMITED AUTH_UNAVAILABLE INVALID_JSON MISSING_FIELD URL_NOT_ALLOWED SOURCE_AUTH_REQUIRED SOURCE_FETCH_FAILED UNSUPPORTED_MEDIA_TYPE SOURCE_TOO_LARGE ZERO_RETENTION_UNAVAILABLE CONFIG_ERROR UPSTREAM_ERROR NO_CRITERIA_FOUND INTERNAL_ERROR
message
required
string
details

Optional diagnostic detail. For source-fetch failures it carries the status and Content-Type the source answered with, e.g. sourceStatus=404; contentType=text/html.

string
meta
required
object
Example
{
"data": null,
"error": {
"code": "METHOD_NOT_ALLOWED"
},
"meta": null
}

The upstream LLM failed or returned an unparseable response (UPSTREAM_ERROR), or fetching the source url failed (SOURCE_FETCH_FAILED).

Media typeapplication/json
object
data
required
object
error
required
object
code
required

Stable machine-readable error code.

string
Allowed values: METHOD_NOT_ALLOWED UNAUTHORIZED RATE_LIMITED AUTH_UNAVAILABLE INVALID_JSON MISSING_FIELD URL_NOT_ALLOWED SOURCE_AUTH_REQUIRED SOURCE_FETCH_FAILED UNSUPPORTED_MEDIA_TYPE SOURCE_TOO_LARGE ZERO_RETENTION_UNAVAILABLE CONFIG_ERROR UPSTREAM_ERROR NO_CRITERIA_FOUND INTERNAL_ERROR
message
required
string
details

Optional diagnostic detail. For source-fetch failures it carries the status and Content-Type the source answered with, e.g. sourceStatus=404; contentType=text/html.

string
meta
required
object
Example
{
"data": null,
"error": {
"code": "METHOD_NOT_ALLOWED"
},
"meta": null
}

Authentication is temporarily unavailable (AUTH_UNAVAILABLE) — the auth backend is unreachable, or the key is misconfigured (e.g. a non-positive rate limit).

Media typeapplication/json
object
data
required
object
error
required
object
code
required

Stable machine-readable error code.

string
Allowed values: METHOD_NOT_ALLOWED UNAUTHORIZED RATE_LIMITED AUTH_UNAVAILABLE INVALID_JSON MISSING_FIELD URL_NOT_ALLOWED SOURCE_AUTH_REQUIRED SOURCE_FETCH_FAILED UNSUPPORTED_MEDIA_TYPE SOURCE_TOO_LARGE ZERO_RETENTION_UNAVAILABLE CONFIG_ERROR UPSTREAM_ERROR NO_CRITERIA_FOUND INTERNAL_ERROR
message
required
string
details

Optional diagnostic detail. For source-fetch failures it carries the status and Content-Type the source answered with, e.g. sourceStatus=404; contentType=text/html.

string
meta
required
object
Example
{
"data": null,
"error": {
"code": "METHOD_NOT_ALLOWED"
},
"meta": null
}

The source url did not respond within the fetch timeout (SOURCE_FETCH_FAILED).

Media typeapplication/json
object
data
required
object
error
required
object
code
required

Stable machine-readable error code.

string
Allowed values: METHOD_NOT_ALLOWED UNAUTHORIZED RATE_LIMITED AUTH_UNAVAILABLE INVALID_JSON MISSING_FIELD URL_NOT_ALLOWED SOURCE_AUTH_REQUIRED SOURCE_FETCH_FAILED UNSUPPORTED_MEDIA_TYPE SOURCE_TOO_LARGE ZERO_RETENTION_UNAVAILABLE CONFIG_ERROR UPSTREAM_ERROR NO_CRITERIA_FOUND INTERNAL_ERROR
message
required
string
details

Optional diagnostic detail. For source-fetch failures it carries the status and Content-Type the source answered with, e.g. sourceStatus=404; contentType=text/html.

string
meta
required
object
Example
{
"data": null,
"error": {
"code": "METHOD_NOT_ALLOWED"
},
"meta": null
}