W3C API
Query W3C for specifications, working groups, editors and publication history as HAL+JSON. No API key. Verified example plus a guide to following HAL links.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the W3C API?
The W3C publishes an official data API. `GET https://api.w3.org/specifications?items=2` returns paginated specification records as HAL+JSON, with `_links` pointing at each specification's own resource. Groups, series, translations and ecosystems are available on the same host, with no API key required.
This is the authoritative source for the state of web standards: which specifications exist, which working group owns each one, what maturity level it has reached and how its versions relate. If you have ever wanted to answer 'is this a Recommendation yet' programmatically rather than by reading a status box, this is the API for it.
It speaks HAL, which is a specific discipline rather than a decoration. A collection response gives you `page`, `limit`, `pages` and `total`, then a `_links` object where the actual items live as `{href, title}` pairs. You do not get full objects in a listing: you follow each `href` to fetch the record. Budget for the extra round trips, and use the `first`, `next` and `last` links for paging instead of computing offsets. The content type is `application/hal+json`, which some strict clients will not treat as JSON unless told to.
Quick facts
- Base URL
https://api.w3.org- Authentication
- Public read endpoints require no key. Some administrative endpoints are restricted to W3C members, but nothing documented here needs credentials.
- Rate limit
- Not published. The dataset changes slowly, so a daily cache is more than enough.
- Pricing
- Free.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the W3C API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. List W3C specifications with paging
GET https://api.w3.org/specifications?items=2
curl 'https://api.w3.org/specifications?items=2'const res = await fetch("https://api.w3.org/specifications?items=2");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.w3.org/specifications?items=2", timeout=20)
res.raise_for_status()
print(res.json()){
"page": 1,
"limit": 2,
"pages": 856,
"total": 1711,
"_links": {
"specifications": [
{
"href": "https://api.w3.org/specifications/2dcontext",
"title": "HTML Canvas 2D Context"
},
{
"href": "https://api.w3.org/specifications/2dcontext2",
"title": "HTML Canvas 2D Context, Level 2"
}
],
"self": {
"href": "https://api.w3.org/specifications?page=1&items=2"
},
"first": {
"href": "https://api.w3.org/specifications?page=1&items=2"
},
"last": {
"href": "https://api.w3.org/specifications?page=856&items=2"
},
"next": {
"href": "https://api.w3.org/specifications?page=2&items=2"
}
}
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
items | integer | Optional | Items per page. The default is small, so raise it when walking the full list. 2 |
page | integer | Optional | One-based page number. Prefer following the `next` link. 2 |
/specifications/{shortname} | path | Optional | One specification by shortname, such as `webrtc` or `css-flexbox-1`. webrtc |
/groups | path | Optional | Working groups, interest groups and community groups. /groups |
/specifications/{shortname}/versions | path | Optional | Publication history for a specification, from Working Draft to Recommendation. webrtc/versions |
Response fields
page / limit / pages / totalinteger- Paging state. `total` is the full count across all pages, which listings do not otherwise reveal.
_links.specificationsarray- The items themselves, as `{href, title}` pairs. This is a HAL listing, so you must follow each `href` to get the record.
_links.self / first / last / nextobject- Navigation links. Follow `next` until it is absent rather than incrementing `page` yourself.
(specification record) shortnamestring- The stable identifier used throughout W3C, such as `css-flexbox-1`. This is the key you cache against.
(specification record) titlestring- Human-readable specification title as published.
(content type)header- `application/hal+json`. Some HTTP clients will not auto-parse this as JSON, so parse the body explicitly.
What you can build with the W3C API
- Build a dashboard tracking which specifications have reached Recommendation
- Look up which working group owns a given specification
- Generate a reference list of standards for documentation or a compliance matrix
- Monitor a specification's publication history for new drafts
- Cross-reference browser support data against official specification status
Common errors and how to fix them
Only links, no data
HAL listings return references, not full objects.
Fix: Follow each `_links.specifications[].href` to fetch the individual record. Batch these requests, because a full walk is thousands of calls.
Client will not parse the response
The content type is `application/hal+json`, not `application/json`.
Fix: Call your JSON parser explicitly on the body rather than relying on content-type sniffing.
404 on a shortname
Shortnames are versioned, so the unversioned form often does not exist.
Fix: Try the versioned form, such as `css-flexbox-1` rather than `css-flexbox`, or search the listing first.
W3C API — frequently asked questions
Does the W3C API need a key?
No. The public read endpoints covering specifications, groups, series and translations are open. Only some member-facing administrative endpoints are restricted.
What is HAL+JSON and why does it matter here?
It is a convention where responses carry a `_links` object describing related resources. In listings the items are links rather than embedded objects, so plan for a follow-up request per item.
How do I find a specification's current status?
Fetch the specification record by shortname and then its `versions` collection, which records each publication from Working Draft through to Recommendation.
Can I get the specification text itself?
No. The API returns metadata and links. The prose lives on w3.org at the URL referenced by each version record.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
JSON Viewer
View JSON as a collapsible interactive tree online. Expand and collapse nodes, search keys and values, and copy the JSONPath of any node privately.
JSON Flattener
Flatten nested JSON into single-level dot-notation keys online. Choose the separator, bracket or dotted array indexes, and copy or download the result.
URL Parser
Parse a URL into protocol, host, port, path, query parameters and hash. Handles relative URLs with a base and shows query params in a table. Free and private.
W3C API is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.