Dale una URL de página y obtén un informe JSON sobre el Manifiesto de Web App de ese sitio el manifiesto se localiza se recupera y se valida y el resultado lista problemas codificados una calificación general de A+ a F una puntuación
{
"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"}'
Después de registrarte, a cada desarrollador se le asigna una clave de acceso a la API personal, una combinación única de letras y dígitos proporcionada para acceder a nuestro endpoint de la API. Para autenticarte con el Comprobador de manifiesto de aplicaciones web API simplemente incluye tu token de portador en el encabezado de Autorización.
| Encabezado | Descripción |
|---|---|
Autorización
|
Requerido
Debería ser Bearer access_key. Consulta "Tu Clave de Acceso a la API" arriba cuando estés suscrito.
|
Sin compromiso a largo plazo. Mejora, reduce o cancela en cualquier momento. La Prueba Gratuita incluye hasta 50 solicitudes.
Dale una URL de página y recibe un informe en JSON sobre el Manifiesto de la Aplicación Web de ese sitio: el manifiesto se localiza, se obtiene y se valida, y el resultado lista problemas codificados, una calificación general (A+ a F), una puntuación
El punto final GET devuelve un informe JSON sobre el Manifiesto de la Aplicación Web de un sitio, incluyendo la URL del manifiesto, código de estado, instalabilidad, grado, puntuación y resumen de problemas. El punto final POST valida un JSON de manifiesto proporcionado y devuelve datos similares, incluyendo un grado, puntuación y resumen del manifiesto sin realizar solicitudes salientes
Los campos clave incluyen `url`, `finalUrl`, `statusCode`, `grade`, `score`, `installability` y `manifestSummary`. Estos proporcionan información sobre el estado del manifiesto, la calidad general y problemas específicos encontrados durante la validación
El endpoint GET acepta un parámetro de URL que puede ser una URL completa o un dominio sin un esquema (tratado como HTTPS) El endpoint POST requiere un parámetro `manifest` que contiene el JSON del manifiesto a validar junto con un `manifestUrl` opcional para resolver URLs relativas
Los datos de respuesta están estructurados en un formato JSON con objetos anidados Las secciones principales incluyen información general sobre la URL detalles del manifiesto estado de instalabilidad y un resumen de errores advertencias y mensajes informativos lo que permite un fácil análisis y procesamiento
Los datos se obtienen directamente del HTML de la URL proporcionada y del JSON del manifiesto recuperado La API valida el manifiesto contra estándares establecidos asegurando que la información sea precisa y relevante para las especificaciones actuales del manifiesto de la aplicación web
Los casos de uso típicos incluyen evaluar la conformidad de una aplicación web con los estándares de manifiesto identificar problemas para que los desarrolladores los solucionen y mejorar la experiencia del usuario al garantizar capacidades de instalación adecuadas en los dispositivos Estos datos son valiosos para los desarrolladores web y los equipos de aseguramiento de calidad
Los usuarios pueden analizar la `calificación` y `puntuación` para evaluar la calidad del manifiesto, revisar la sección de `instalabilidad` en busca de posibles bloqueadores y abordar cualquier `error` o `advertencia` que se indique en el resumen. Esto ayuda a priorizar mejoras para un mejor rendimiento de la aplicación
Si la respuesta indica `found: false`, significa que no se localizó ningún manifiesto. Los usuarios deben verificar la URL o comprobar redirecciones. Para advertencias o errores, los usuarios pueden consultar los mensajes específicos en el resumen para entender qué necesita ser abordado en el manifiesto