Skip to main content

Perplexity

The Perplexity Sonar API provides chat completion models with built-in search capabilities, citations, and structured output support. Perplexity models retrieve information from the web in real-time, enabling up-to-date responses with source citations.

Perplexity follows OpenAI's chat completion API format - see our OpenAI documentation for the base API details.

The four model IDs below are Perplexity's current Sonar catalog. The provider forwards model IDs without a local allow-list, but it targets the Sonar chat-completions endpoint. Perplexity's separate Agent API uses vendor-qualified IDs through a different endpoint.

Sonar and the Agent API

Perplexity now classifies Sonar Chat Completions as a legacy API. It remains supported, including by this provider, but Perplexity recommends the Agent API for new projects. The closest Agent API preset mappings are Sonar to fast, Sonar Pro to low, Sonar Reasoning Pro to medium, and Sonar Deep Research to high. See Perplexity's migration guide before moving a configuration because the Agent API uses a different request and response shape.

Setup​

  1. Get an API key from your Perplexity Settings
  2. Set the PERPLEXITY_API_KEY environment variable or specify apiKey in your config

Supported Models​

Perplexity offers several specialized models optimized for different tasks:

ModelContext LengthDescriptionUse Case
sonar-pro200kAdvanced search modelLong-form content, complex queries
sonar128kLightweight search modelQuick searches, cost-effective responses
sonar-reasoning-pro128kPremier reasoning model with Chain of Thought (CoT)Complex analyses, multi-step problem solving
sonar-deep-research128kExpert-level research modelComprehensive reports, exhaustive research

Basic Configuration​

providers:
- id: perplexity:sonar-pro
config:
temperature: 0.7
max_tokens: 4000

- id: perplexity:sonar
config:
temperature: 0.2
max_tokens: 1000
search_domain_filter: ['wikipedia.org', 'nature.com'] # Only search these domains
search_recency_filter: 'week' # Only use recent sources

Features​

Search and Citations​

Perplexity models automatically search the internet and cite sources. You can control this with:

  • search_domain_filter: Use an allowlist of domains or a denylist with each domain prefixed by -; the two modes cannot be mixed.
  • search_recency_filter: Time filter for sources ('month', 'week', 'day', 'hour')
  • return_related_questions: Get follow-up question suggestions
  • web_search_options.search_context_size: Control search context amount ('low', 'medium', 'high')
providers:
- id: perplexity:sonar-pro
config:
search_domain_filter: ['stackoverflow.com', 'github.com']
search_recency_filter: 'month'
return_related_questions: true
web_search_options:
search_context_size: 'high'

Date Range Filters​

Control search results based on publication date:

providers:
- id: perplexity:sonar-pro
config:
# Date filters - format: "MM/DD/YYYY"
search_after_date_filter: '3/1/2025'
search_before_date_filter: '3/15/2025'

Location-Based Filtering​

Localize search results by specifying user location:

providers:
- id: perplexity:sonar
config:
web_search_options:
user_location:
latitude: 37.7749
longitude: -122.4194
country: 'US' # Optional: ISO country code

Structured Output​

Get responses in specific formats using JSON Schema:

providers:
- id: perplexity:sonar
config:
response_format:
type: 'json_schema'
json_schema:
schema:
type: 'object'
properties:
title: { type: 'string' }
year: { type: 'integer' }
summary: { type: 'string' }
required: ['title', 'year', 'summary']

Note: First request with a new schema may take 10-30 seconds to prepare. For reasoning models, the response will include a <think> section followed by the structured output.

Image Support​

Enable image retrieval in responses:

providers:
- id: perplexity:sonar-pro
config:
return_images: true

Perplexity citations are exposed through the standard metadata.citations field. The raw citations, search_results, images, and related_questions arrays returned by the API are preserved under metadata.perplexity; for example, returned image results are available at metadata.perplexity.images.

Cost Tracking​

promptfoo uses the total returned by Perplexity in usage.cost.total_cost, including the charges calculated by the API for that request. If the API omits a valid total, cost is unavailable; prompt and completion token counts alone omit request, search, citation, or reasoning charges. For cached responses with known cost, cost retains that value for assertions and the evaluator records incurredCost: 0. See the Sonar response schema and Perplexity pricing.

The legacy usage_tier option does not determine billing. Use the documented search controls, such as web_search_options.search_context_size, to configure request behavior.

Advanced Use Cases​

Comprehensive Research​

For in-depth research reports:

providers:
- id: perplexity:sonar-deep-research
config:
temperature: 0.1
max_tokens: 4000
search_domain_filter: ['arxiv.org', 'researchgate.net', 'scholar.google.com']
passthrough:
reasoning_effort: 'high' # low, medium (default), or high

Step-by-Step Reasoning​

For problems requiring explicit reasoning steps:

providers:
- id: perplexity:sonar-reasoning-pro
config:
temperature: 0.2
max_tokens: 3000

Offline Creative Tasks​

The former offline r1-1776 model is retired. For Sonar Pro responses without web search, set disable_search through passthrough:

providers:
- id: perplexity:sonar-pro
config:
passthrough:
disable_search: true

Best Practices​

Model Selection​

  • sonar-pro: Use for complex queries requiring detailed responses with citations
  • sonar: Use for factual queries and cost efficiency
  • sonar-reasoning-pro: Use for step-by-step problem solving
  • sonar-deep-research: Use for comprehensive reports (may take 30+ minutes)

Search Optimization​

  • Set search_domain_filter to trusted domains for higher quality citations
  • Use search_recency_filter for time-sensitive topics
  • For Sonar, Sonar Pro, and Sonar Reasoning Pro, set web_search_options.search_context_size to "low" to reduce request fees
  • For Deep Research, set passthrough.reasoning_effort to balance depth and cost

Structured Output Tips​

  • When using structured outputs with reasoning models, responses will include a <think> section followed by the structured output
  • JSON schemas cannot include recursive structures or unconstrained objects

Example Configurations​

Check our perplexity.ai-example with multiple configurations showcasing Perplexity's capabilities:

  • promptfooconfig.yaml: Basic model comparison
  • promptfooconfig.structured-output.yaml: JSON Schema structured output
  • promptfooconfig.search-filters.yaml: Date and location-based filters
  • promptfooconfig.research-reasoning.yaml: Specialized research and reasoning models

You can initialize these examples with:

npx promptfoo@latest init --example provider-perplexity

Pricing and Rate Limits​

Token prices are only part of each request's cost:

ModelInput Tokens (per million)Output Tokens (per million)
sonar$1$1
sonar-pro$3$15
sonar-reasoning-pro$2$8
sonar-deep-research$2$8

Search request fees vary by web_search_options.search_context_size:

ModelLow (per 1K requests)Medium (per 1K requests)High (per 1K requests)
sonar$5$8$12
sonar-pro$6$10$14
sonar-reasoning-pro$6$10$14

Deep Research also charges $2 per million citation tokens, $5 per 1,000 search queries, and $3 per million reasoning tokens.

Check Perplexity's pricing page for current rates.

Troubleshooting​

  • Long Initial Requests: First request with a new schema may take 10-30 seconds
  • Citation Issues: Use search_domain_filter with trusted domains for better citations
  • Timeout Errors: For research models, consider increasing your request timeout settings
  • Reasoning Format: For reasoning models, outputs include <think> sections, which may need parsing for structured outputs