Skip to content

Parallel (web-researched answers and Search)

Parallel does two jobs. parallel/parallel researches a question on the live web and answers with its sources; it is called through Chat Completions. parallel/search is web search for agents and applications: you send an objective and queries to /v1/search and get ranked URLs and excerpts back, with no generated answer.

The price is per request rather than per token, and it is Parallel's list price.

Model Endpoint Price
parallel/parallel /v1/chat/completions By depth, below
parallel/search /v1/search By mode, below
parallel/parallel-free /v1/chat/completions Free
parallel/search-free /v1/search Free

parallel/parallel-free and parallel/search-free are free until 4 January 2027, 23:59 (TRT); if the quota set aside for free use runs out first, both close together before that date. Free use is limited per account, and the two models share one allowance. Deeper research uses more of it.

When the period ends these models answer 410 model_retired, and the error message names the paid counterpart. A request is never forwarded to a paid model on its own; to continue, change the model field.

Terminal window
curl "$LLMTR_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "parallel/parallel",
"reasoning_effort": "low",
"messages": [
{ "role": "system", "content": "Answer in one sentence." },
{ "role": "user", "content": "When was the Galata Tower built?" }
]
}'

reasoning_effort picks the research depth. The same choice can be written as a model suffix: parallel/parallel:low.

Depth Price ($/request) When
low 0.01 Single-step fact questions
medium (default) 0.05 Questions that combine several sources
high 0.25 Questions that need extensive research

Deeper research takes longer. high can take about a minute, so set your client timeout accordingly.

The response is in Chat Completions shape. Sources arrive in two top-level fields:

{
"id": "chatcmpl-...",
"object": "chat.completion",
"model": "parallel/parallel",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "The Galata Tower was built by the Genoese in 1348." },
"finish_reason": "stop"
}
],
"citations": ["https://example.com/galata"],
"search_results": [{ "url": "https://example.com/galata", "title": "Galata Tower" }],
"usage": { "prompt_tokens": 18, "completion_tokens": 14, "total_tokens": 32 }
}

The token counts in usage are approximate and do not affect the bill.

Limits and behaviour:

  • Text only. A request with an image or a file answers 400.
  • Messages can total at most 20,000 characters and at least one user message is required. System messages count toward the total.
  • Conversation history travels in messages and is not kept on the server.
  • There is no tool calling. tools and tool_choice are ignored.
  • Fields such as temperature, top_p and max_tokens are ignored too. The names of ignored fields appear in the response's llmtr_dropped_parameters field and the x-llmtr-dropped-parameters header.
  • response_format supports json_schema. json_object is not supported and is ignored.
  • A streaming request (stream: true) works, but the answer arrives in one piece after the research finishes.
Terminal window
curl "$LLMTR_BASE_URL/v1/search" \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "parallel/search",
"mode": "fast",
"objective": "Find sources on the history of the Galata Tower.",
"search_queries": ["Galata Tower history", "Galata Tower construction date"]
}'
Field Required Description
model Yes parallel/search or parallel/search-free
search_queries Yes Short keyword queries. Two or three work best; those after the fifth are dropped and reported in warnings.
objective No The purpose of the search in natural language, at most 5,000 characters
mode No turbo, fast, basic, advanced (default)
max_chars_total No Upper bound on the total characters across excerpts
session_id No Groups searches that belong to one task. It is private to your account and never mixes with another account's session.
client_model No The name of the model that will consume the results
advanced_settings No source_policy, fetch_policy, excerpt_settings, location, max_results
max_budget_usd No On a paid model, the most to set aside for the request
Mode Price ($/request) Approximate time
turbo 0.001 200 ms
fast 0.001 700 ms
basic 0.005 1 s
advanced (default) 0.005 3 s

Each request includes up to 10 results. advanced_settings.max_results can ask for up to 20, and each result past the tenth costs $0.001.

{
"object": "web_search",
"search_id": "8f14e45f-...",
"model": "parallel/search",
"session_id": "session_3a7c...",
"results": [
{
"url": "https://example.com/galata",
"title": "Galata Tower",
"publish_date": null,
"excerpts": ["The tower was built by the Genoese in 1348..."]
}
],
"warnings": null,
"usage": { "search_requests": 1, "additional_results": 0 }
}

/v1/search is not in the OpenAI SDKs; call it with plain HTTP.

Status Type What to do
400 invalid_request Fix the request fields
402 insufficient_credits Paid model: top up your balance
402 insufficient_quota Free model: your allowance for this period is used up
410 model_retired The free period ended; switch to the model the error names
429 rate_limit_error The daily free allowance is used up or the rate limit was hit; wait for Retry-After
503 model_unavailable Temporarily unavailable; try again later

See Errors for the other error shapes.

These models are served through a third-party provider. Under the provider's terms, inputs and outputs may be used to train models without being linked to a person, and may be stored. Do not send sensitive data.