Canonical, cache-friendly JSON under /registry/v1/. No authentication. The read-only API at /api/v1/ is a convenience layer over the same store.
CORS is open (Access-Control-Allow-Origin: *). Responses carry ETag: "rev-N" and Last-Modified where a timestamp exists, and support If-None-Match / If-Modified-Since.
Endpoints
| URL | Purpose |
|---|---|
/registry/v1/meta.json |
Schema version, revision, generatedAt, counts |
/registry/v1/revision.json |
Same payload as meta (compat) |
/registry/v1/index.json |
Compact listing of every record |
/registry/v1/apps/{id} |
Full normalized record |
/registry/v1/apps/{id}.json |
Same record |
/registry/v1/categories.json |
Known categories and ACTIVE counts |
/registry/v1/categories/{category}.json |
ACTIVE apps in that category |
/registry/v1/status/{active|degraded|removed}.json |
Apps in that status |
/registry/v1/changes.json?since=N |
Net added / updated / removed ids |
/registry/v1/revisions/{n}.json |
Single-revision snapshot |
/registry/v1/search.json?q= |
Name and domain search |
{id} is the hostname, lowercased (for example squoosh.app).
Convenience API (same data): /api/v1/meta, /api/v1/apps, /api/v1/apps/{id}, /api/v1/search, /api/v1/changes, /api/v1/categories. See Using PWARegistry.
Index shape
{
"spec": "https://pwaregistry.org/docs/registry-format",
"version": 1,
"revision": 12,
"generatedAt": "2026-08-31T00:00:00.000Z",
"counts": { "active": 10, "degraded": 1, "removed": 1, "total": 12 },
"apps": [
{
"id": "example.com",
"status": "ACTIVE",
"name": "Example",
"domain": "example.com",
"updatedAt": "2026-08-31T00:00:00.000Z",
"path": "/registry/v1/apps/example.com",
"categories": ["utilities"]
}
]
}
Record shape
A record includes status, timestamps, manifestUrl, factual capabilities, a normalized application object (identity, icons including primary / all, screenshots split by narrow / wide / unspecified / platformSpecific, categories), and the last validation summary. See Using PWARegistry for the full schema and consumer examples.
version is the format version (currently 1). revision is the dataset counter and increases whenever records are added, updated, or removed.