{
"url": "https://web.dev/",
"finalUrl": "https://web.dev/",
"statusCode": 200,
"cached": false,
"checkedAt": "2026-10-13T23:42:25.027Z",
"note": "Service workers and icon file reachability are not evaluated; only the page HTML and the manifest JSON are read.",
"found": true,
"manifestUrl": "https://web.dev/_pwa/web/manifest.json",
"manifestStatus": 200,
"page": {
"manifestLinks": 1,
"themeColorMeta": "#3740ff",
"viewport": "width=device-width, initial-scale=1",
"appleTouchIcon": true,
"https": true
},
"installability": {
"installable": true,
"blockers": []
},
"grade": "B",
"score": 86,
"summary": {
"errors": 0,
"warnings": 1,
"infos": 4
},
"manifestSummary": {
"name": "web.dev",
"shortName": "web.dev",
"id": null,
"startUrl": "https://web.dev/",
"scope": null,
"display": "standalone",
"displayOverride": null,
"orientation": "portrait",
"themeColor": "#3740ff",
"backgroundColor": "#fff",
"lang": null,
"dir": null,
"iconCount": 8,
"hasMaskableIcon": false,
"screenshotCount": 0,
"shortcutCount": 0
},
"icons": [
{
"src": "icons/icon-72x72.png",
"resolved": "https://web.dev/_pwa/web/icons/icon-72x72.png",
"sizes": "72x72",
"type": "image/png",
"purpose": "any"
},
{
"src": "icons/icon-96x96.png",
"resolved": "https://web.dev/_pwa/web/icons/icon-96x96.png",
"sizes": "96x96",
"type": "image/png",
"purpose": "any"
},
{
"src": "icons/icon-128x128.png",
"resolved": "https://web.dev/_pwa/web/icons/icon-128x128.png",
"sizes": "128x128",
"type": "image/png",
"purpose": "any"
},
{
"src": "icons/icon-144x144.png",
"resolved": "https://web.dev/_pwa/web/icons/icon-144x144.png",
"sizes": "144x144",
"type": "image/png",
"purpose": "any"
},
{
"src": "icons/icon-152x152.png",
"resolved": "https://web.dev/_pwa/web/icons/icon-152x152.png",
"sizes": "152x152",
"type": "image/png",
"purpose": "any"
},
{
"src": "icons/icon-192x192.png",
"resolved": "https://web.dev/_pwa/web/icons/icon-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
},
{
"src": "icons/icon-384x384.png",
"resolved": "https://web.dev/_pwa/web/icons/icon-384x384.png",
"sizes": "384x384",
"type": "image/png",
"purpose": "any"
},
{
"src": "icons/icon-512x512.png",
"resolved": "https://web.dev/_pwa/web/icons/icon-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "any"
}
],
"issues": [
{
"severity": "info",
"code": "description_missing",
"message": "No \"description\"; Chrome shows it in the richer install dialog and app stores use it."
},
{
"severity": "info",
"code": "id_missing",
"message": "No \"id\"; Chrome falls back to \"start_url\" as the app identity, so changing start_url later makes it a different app. Set an explicit \"id\"."
},
{
"severity": "info",
"code": "lang_missing",
"message": "No \"lang\"; screen readers and translation tools cannot tell the language of \"name\" and \"description\"."
},
{
"severity": "warning",
"code": "no_maskable_icon",
"message": "No icon with purpose \"maskable\"; Android launchers will shrink your icon onto a white circle or square instead of filling the adaptive shape."
},
{
"severity": "info",
"code": "screenshots_missing",
"message": "No \"screenshots\"; Chrome shows them in the richer install dialog, which improves installs."
}
]
}
curl --location --request GET 'https://zylalabs.com/api/14245/web+app+manifest+checker+api/35363/check+the+web+app+manifest+of+a+url?url=https://web.dev&fresh=1' --header 'Authorization: Bearer YOUR_API_KEY'
{
"grade": "C",
"score": 74,
"summary": {
"errors": 0,
"warnings": 2,
"infos": 6
},
"installability": {
"installable": true,
"blockers": []
},
"assumptions": {
"manifestUrl": "https://example.com/manifest.webmanifest",
"note": "Validated offline; the page HTTPS requirement is not evaluated."
},
"manifestSummary": {
"name": "My App",
"shortName": "App",
"id": null,
"startUrl": "https://example.com/",
"scope": null,
"display": "standalone",
"displayOverride": null,
"orientation": null,
"themeColor": null,
"backgroundColor": null,
"lang": null,
"dir": null,
"iconCount": 1,
"hasMaskableIcon": false,
"screenshotCount": 0,
"shortcutCount": 0
},
"icons": [
{
"src": "/icon-192.png",
"resolved": "https://example.com/icon-192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
}
],
"issues": [
{
"severity": "info",
"code": "description_missing",
"message": "No \"description\"; Chrome shows it in the richer install dialog and app stores use it."
},
{
"severity": "info",
"code": "id_missing",
"message": "No \"id\"; Chrome falls back to \"start_url\" as the app identity, so changing start_url later makes it a different app. Set an explicit \"id\"."
},
{
"severity": "info",
"code": "theme_color_missing",
"message": "No \"theme_color\"; the browser cannot tint the title bar to match your app."
},
{
"severity": "info",
"code": "background_color_missing",
"message": "No \"background_color\"; the splash screen will use a default background."
},
{
"severity": "info",
"code": "lang_missing",
"message": "No \"lang\"; screen readers and translation tools cannot tell the language of \"name\" and \"description\"."
},
{
"severity": "warning",
"code": "icon_512_missing",
"message": "No icon of at least 512x512 with purpose \"any\"; Chrome uses it for the splash screen and install dialog."
},
{
"severity": "warning",
"code": "no_maskable_icon",
"message": "No icon with purpose \"maskable\"; Android launchers will shrink your icon onto a white circle or square instead of filling the adaptive shape."
},
{
"severity": "info",
"code": "screenshots_missing",
"message": "No \"screenshots\"; Chrome shows them in the richer install dialog, which improves installs."
}
],
"checkedAt": "2026-10-13T18:16:06.181Z"
}
curl --location --request POST 'https://zylalabs.com/api/14245/web+app+manifest+checker+api/35364/validate+manifest+json+offline' --header 'Authorization: Bearer YOUR_API_KEY'
--data-raw '{"manifest":{"name":"My App","short_name":"App","start_url":"/","display":"standalone","icons":[{"src":"/icon-192.png","sizes":"192x192","type":"image/png"}]},"manifestUrl":"https://example.com/manifest.webmanifest"}'
注册后,每个开发者都会被分配一个个人 API 访问密钥,这是一个唯一的字母和数字组合,用于访问我们的 API 端点。要使用 Web应用清单检查器 API 进行身份验证,只需在 Authorization 标头中包含您的 bearer token。
| 标头 | 描述 |
|---|---|
授权
|
必需
应为 Bearer access_key. 订阅后,请查看上方的"您的 API 访问密钥"。
|
给定一个页面 URL,返回该网站的 Web 应用清单的 JSON 报告:清单被定位、获取和验证,结果列出编码问题、总体评分(A+ 到 F)、得分
GET端点返回关于网站Web应用程序清单的JSON报告,包括清单URL、状态码、可安装性、等级、分数和问题摘要 POST端点验证提供的清单JSON并返回类似的数据,包括等级、分数和清单摘要而无需进行外部请求
关键字段包括 `url`、`finalUrl`、`statusCode`、`grade`、`score`、`installability` 和 `manifestSummary` 这些提供了有关清单状态、整体质量和在验证过程中发现的具体问题的见解
GET端点接受一个URL参数,可以是完整的URL或不带方案的域名(视为HTTPS) POST端点需要一个`manifest`参数,其中包含要验证的manifest JSON,以及一个可选的`manifestUrl`用于解析相对URL
响应数据以JSON格式结构化,包含嵌套对象。主要部分包括关于URL的一般信息、清单详情、可安装状态,以及错误、警告和信息消息的摘要,便于解析和分析
数据直接来自提供的URL的HTML和获取的清单JSON API根据既定标准验证清单确保信息准确且与当前Web应用程序清单规范相关
典型的用例包括评估web应用程序是否符合清单标准 识别开发人员需要修复的问题 通过确保设备上有适当的安装能力来改善用户体验 这些数据对web开发人员和质量保证团队非常有价值
用户可以分析 `grade` 和 `score` 来评估清单的质量,查看 `installability` 部分以找出潜在阻碍,并处理摘要中列出的任何 `errors` 或 `warnings` 这有助于优先改进以提高应用程序性能
如果响应指示`found: false`,这意味着未找到清单 用户应验证网址或检查重定向 对于警告或错误,用户可以参考摘要中的具体消息以了解需要在清单中处理的内容