# Web search, with receipts
## The steps
1. Enable the `web_search` tool in the Responses API tools array. The model decides when to search based on the input; for questions about current events, tell it explicitly that freshness matters.
2. Set `search_context_size` deliberately: `low` for simple lookups, `medium` as the default, `high` when the answer needs detail from multiple sources. Bigger context costs more; do not default to high everywhere.
3. Render citations. The model returns inline citations plus `url_citation` annotations with URL, title, and location. These must be visible and clickable in your UI; stripping them turns a grounded answer into an ungrounded one.
4. Verify high-stakes claims against the cited sources. The model can misread a source or cite one that does not support the claim. For medical, legal, or financial answers, a human or a second pass should open the top citations.
5. Tell the model which sources to prefer in the instructions: primary sources, official docs, recent dates. Without guidance it may cite a content farm that outranks the official page.
6. Cache carefully. Search results go stale; a cached answer with last month's citations is worse than a slower fresh one. Keep TTLs short for time-sensitive topics.
## The trap
Treating a web-search answer as verified because it has citations. Citations are pointers, not proof. The workflow is: search, cite, then check the citations for anything that matters.
## Checklist
- web_search enabled where freshness matters.
- search_context_size set per use case, not defaulted.
- Citations rendered visible and clickable.
- High-stakes claims verified against sources.
- Source preferences in the instructions; short TTLs on cached answers.