# Sites with a broken NLWeb /ask endpoint

A site-wide report: one row per host, over the nlweb rows the crawl emitted.

## What this report returns

NLWeb's REST `/ask` endpoint lets agents query a site in natural language and get structured results back.

A row appears here when any of these is wrong, worst first:

-   **Error Response**`/ask` answered an anonymous query with an HTTP error, so an agent gets a refusal, a throttle or a failure instead of a result (an application "no results" or failure sent with HTTP 200 is valid and not flagged).**Fix** It depends on the status the Findings column names: for 401 or 403, answer anonymous queries or publish how an agent signs in; for 429, let occasional anonymous queries through and send `Retry-After`; for anything else, answer with HTTP 200 and an NLWeb response body.
-   **Malformed Response**`/ask` answered, but an agent can't read the answer: a streamed frame isn't valid JSON, or the v0.55 envelope is broken (a `_meta.response_type` other than answer, elicitation, promise or failure, matched case-sensitively; no `_meta.version`; or a member missing or in the wrong shape, such as an answer with no results).**Fix** Send each streamed event as one complete JSON object, with a v0.55 `response_type`, `_meta.version` and well-formed members; the Findings column names which part failed.

Or its v0.55 envelope doesn't hold together: a `_meta.response_type` outside the four defined values (answer, elicitation, promise, failure, case-sensitive), a missing `_meta.version`, or a member missing or malformed (an answer with no results/`structuredData`, a promise with no promise.token, a failure with no error.code, an elicitation question without its id/`text/type`), so the answer can't be parsed.

An optional member counts when it is present with the wrong shape, because optional licenses omitting it rather than breaking it. The Findings column names which of these fired, and a single response can manage more than one.

Any other error status does mean answering with HTTP 200 and an NLWeb response body. (Missing Schema.org typing on results is shown for context only: the spec recommends it rather than requiring it, so it doesn't make the endpoint invalid.)

## The columns it shows

Every defect this technology can carry is a column in the grid, worst first, so nothing is hidden behind a filter you have to know to apply.

-   Host`host`
-   NLWeb REST (/ask) Valid`nlWebRestValid`
-   NLWeb REST Findings`nlWebRestFindings`
-   NLWeb REST (/ask) Error Response`nlWebRestErrorResponse`
-   NLWeb REST (/ask) Malformed Response`nlWebRestMalformedResponse`
-   NLWeb REST (/ask) Missing Schema.org`nlWebRestMissingSchemaOrg`

## About NLWeb endpoint

Microsoft's conversational /ask route returning schema.org answers.

[Read how NLWeb endpoint is checked](https://agentic-readiness.lumar.io/docs/capabilities/nl-web), including the specification it is validated against and a worked correct and broken example.

## Running it

This report comes with Agentic Readiness in Lumar and appears on every crawl of any project that has it turned on. [See the whole set](https://agentic-readiness.lumar.io/scan-at-scale), or check a single URL with the [scanner on this site](https://agentic-readiness.lumar.io/), which runs the same code with no account.

[Get Lumar pricing →](https://www.lumar.io/pricing/)
