> ## Documentation Index
> Fetch the complete documentation index at: https://docs.helve.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Warnings and strict mode

> Providers differ. Helve tells you exactly how your request was adjusted, or refuses to adjust it.

Not every provider can express every parameter. Brave has no `mode`; Serper cannot return full text; Tavily stops at 20 results. Rather than fail or quietly do something different, Helve honours what it can, approximates what it must, and reports every adjustment in `warnings`.

```json theme={null}
{
  "provider": "brave",
  "results": ["…"],
  "warnings": [
    { "code": "param_approximated", "param": "include_domains", "message": "rewritten as site: operators in the query" },
    { "code": "param_ignored", "param": "mode", "message": "brave has a single search tier" }
  ]
}
```

## The three codes

<ResponseField name="param_ignored" type="warning">
  The provider cannot express the parameter, so it was dropped. Example: `offset` on an engine without pagination.
</ResponseField>

<ResponseField name="param_approximated" type="warning">
  The parameter was emulated. Examples: domain filters rewritten as `site:` operators, `max_results` capped at the engine's ceiling, a date range applied by Helve after the fact.
</ResponseField>

<ResponseField name="results_post_filtered" type="warning">
  Helve removed results to honour a filter the engine lacks, or, with `fusion`, dropped a member that failed. The message says how many.
</ResponseField>

## Strict mode

```json theme={null}
{ "query": "…", "provider": "brave", "mode": "deep", "strict": true }
```

With `strict: true`, any parameter the serving provider cannot honour exactly makes the request a `400 invalid_request` instead of a warning. Use it when a filter is a correctness requirement rather than a preference, for example a compliance rule that results must come from an allowlist of domains.

Strict mode is rejected with `fusion`, since a panel of engines will always differ in what they support. Members of a fusion panel run non-strict and their warnings come back tagged with the engine name.

## In practice

* Log `warnings` in development. They are the fastest way to learn which of your parameters are native on the engine you chose.
* Treat an empty `warnings` array as the guarantee that the provider did exactly what you asked.
* Switching providers is a one-field change precisely because the warnings, not your code, absorb the differences.
