{"componentChunkName":"component---src-templates-docs-js","path":"/whatsapp/administration/quality_monitoring","result":{"data":{"site":{"siteMetadata":{"title":"broadcaster","docsLocation":"https://github.com","docsLocationType":"github","editable":false}},"mdx":{"fields":{"id":"79546fb8-b90f-51a5-9677-f93353163294","title":"Quality monitoring","slug":"/whatsapp/administration/quality_monitoring"},"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Quality monitoring\",\n  \"order\": 6\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Monitor the quality of the phone numbers and templates in a WhatsApp Business Account (WABA), based on the rating Meta gives them, and list the account's phone numbers.\"), mdx(\"p\", null, \"Available endpoints:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"List the WABA's phone numbers.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Get the quality of the WABA's phone numbers.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Get the quality of the WABA's templates.\")), mdx(\"p\", null, \"All endpoints use the admin token. See \", mdx(\"a\", {\n    href: \"/whatsapp/authentication_token\"\n  }, \"Generate authentication token\"), \".\"), mdx(\"section\", {\n    \"id\": \"qualityrating\"\n  }, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"Quality rating\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Meta rates the quality of each phone number (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"qualityRating\"), \") and each template (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"qualityScore\"), \") with a color:\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"GREEN:\"), \" high quality.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"YELLOW:\"), \" medium quality.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"RED:\"), \" low quality.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"UNKNOWN:\"), \" Meta doesn't have enough information to rate it yet.\")), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"UNKNOWN is normal in these cases:\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"New number or template:\"), \" it hasn't been used enough for Meta to collect metrics such as delivery rate, blocks or spam reports.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Low sending volume:\"), \" with few messages there isn't enough data for a reliable rating. This is common in development or test environments.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Meta's periodic evaluation:\"), \" Meta recalculates quality from time to time, so there can be a delay between using a number or template and its rating.\"))), mdx(\"section\", {\n    \"id\": \"howtheinformationisrefreshed\"\n  }, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"How the information is refreshed\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"To avoid exhausting the request limit to Meta, the first query for a WABA gets the information from Meta and stores it for 12 hours. During that period, the service answers with the stored information without querying Meta again. Once the period ends, the next query gets fresh information from Meta.\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"The \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"processedAt\"), \" field in the response tells you when the information was obtained from Meta, that is, when its 12-hour period started.\"), mdx(\"p\", {\n    parentName: \"section\"\n  }, \"Pages in this section:\"), mdx(\"ul\", {\n    parentName: \"section\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    href: \"/whatsapp/administration/quality_monitoring/phone_numbers\"\n  }, \"Phone numbers\"), \": list the WABA's numbers and their quality.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    href: \"/whatsapp/administration/quality_monitoring/templates\"\n  }, \"Templates\"), \": check template quality.\"))));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#quality-rating","title":"Quality rating"},{"url":"#how-the-information-is-refreshed","title":"How the information is refreshed"}]},"timeToRead":1,"parent":{"__typename":"File","relativePath":"whatsapp/administration/quality_monitoring.md","fields":{"gitLogLatestAuthorName":"Irais Aguirre","gitLogLatestAuthorEmail":"irais.aguirre@conceptomovil.com","gitLogLatestDate":"4 days ago"}},"frontmatter":{"metaTitle":null,"showMetadata":null,"editable":null,"showPreviousNext":null,"showToc":null}},"gitBranch":{"name":"20211019-2FACTOR_AUTH"},"gitCommit":{"hash":"9713e1925aeb8cad930f91b6bf05d0b5937b2bb5","date":"2026-11-13 06:39"}},"pageContext":{"id":"79546fb8-b90f-51a5-9677-f93353163294"}},"staticQueryHashes":["12478684","12478684","2882937274","2882937274","353167761","353167761"]}