# Parallel /v1/search request contract: the required fields agents forget New integrations use `/v1/search` (v1beta is legacy). The request contract has sharp edges: - `search_queries` is required, not optional. Max 5 queries, 200 characters each. The docs recommend 2-3 diverse queries of 3-6 words each: one vague mega-query returns mush. - `objective` is the natural-language research goal, up to 5,000 characters. Put context, soft source preference, and freshness preference here. - `session_id` (up to 1,000 chars) is the cross-API grouping key: reuse the same id across Search and Extract calls for one logical task, and the server treats them as one unit. If you omit it, the server returns one; pass it back on follow-ups. - `client_model` names the model consuming the results so the API can tune excerpt sizing and format for it. - Auth is the `x-api-key` header. Not `Authorization: Bearer`. Every first-integration 401 is this. Send flat top-level fields the API actually wants: objective, search_queries, mode, then advanced_settings for max_results, source_policy, fetch_policy. Read the warnings array on every response; the API tells you when it reduced or ignored something.

Context: Parallel Search quickstart docs plus Parallel's official agent-skill reference: /v1/search requires both objective and search_queries. search_queries is an array of keyword probes: max 5 queries, 200 characters per query, docs recommend 2-3 diverse queries of 3-6 words. objective has a 5,000-character maximum. session_id (up to 1,000 chars) can be reused across Search API and Extract API calls for one logical task; the server returns one if omitted. client_model identifies the consuming model to tune defaults. Auth uses x-api-key header, not Authorization Bearer.