Perplexity Decisions API
The Decisions API from Perplexity — 1 operation(s) for decisions. Ask yes/no, multiple-choice, and rating questions about your content and get probabilities back (gateway preview).
The Decisions API from Perplexity — 1 operation(s) for decisions. Ask yes/no, multiple-choice, and rating questions about your content and get probabilities back (gateway preview).
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/perplexity:perplexity-decisions-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Decisions API
description: 'Ask yes/no, multiple-choice, and rating questions about your content and get probabilities back. Input tokens are billed at $0.02 per million; output tokens are free. Authenticate with your Perplexity API key as `Authorization: Bearer `.'
version: 0.1.0
servers:
- url: https://api.perplexity.ai/v1
tags:
- name: Decisions
paths:
/decisions:
post:
operationId: decisions_v1_decisions_post
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DecisionsRequest'
examples:
mixed-questions:
summary: Three question types about one product review
value:
model: pplx-decider-v1.1-27b
state:
title: Battery died after two weeks
review: The headphones sound great, but the battery stopped charging after two weeks.
questions:
defect:
type: noul
instructions: Does the review report a product defect?
sentiment:
type: choice
instructions: What is the overall sentiment of the review?
criteria:
positive: Mostly satisfied
mixed: Praise and complaints in one review
negative: Mostly dissatisfied
severity:
type: score
instructions: How severe is the reported problem?
criteria:
- Cosmetic
- Inconvenient
- Product unusable
responses:
'200':
headers:
x-request-id:
$ref: '#/components/headers/x-request-id'
x-ratelimit-limit:
$ref: '#/components/headers/x-ratelimit-limit'
x-ratelimit-remaining:
$ref: '#/components/headers/x-ratelimit-remaining'
x-ratelimit-used:
$ref: '#/components/headers/x-ratelimit-used'
x-ratelimit-reset:
$ref: '#/components/headers/x-ratelimit-reset'
content:
application/json:
schema:
$ref: '#/components/schemas/DecisionsResponse'
examples:
answers:
summary: One answer per question, typed like its question
value:
model: pplx-decider-v1.1-27b
answers:
defect:
type: noul
noul: 0.9424522889347015
sentiment:
type: choice
choice: mixed
confidence: 0.9255246944002182
probabilities:
positive: 0.020649883775315993
mixed: 0.9503497962668123
negative: 0.02900031995787183
severity:
type: score
score: 1.7838686319784252
confidence: 0.7838686319784252
legend:
'0': Cosmetic
'1': Inconvenient
'2': Product unusable
probabilities:
'0': 0.008423954913615923
'1': 0.199283458194343
'2': 0.7922925868920411
usage:
input_tokens: 367
output_tokens: 3
description: One answer per question, under the question's name.
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'405':
$ref: '#/components/responses/MethodNotAllowed'
'413':
$ref: '#/components/responses/PayloadTooLarge'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
'502':
$ref: '#/components/responses/BadGateway'
'503':
$ref: '#/components/responses/ServiceUnavailable'
'504':
$ref: '#/components/responses/GatewayTimeout'
security:
- HTTPBearer: []
summary: Answer questions
x-mint:
href: /api-reference/decisions-post
description: Evaluate one or more named questions against the content in `state`. Mix `noul`, `choice`, and `score` questions in one request; the response returns one answer per question under the same name, plus the model name and token usage. Set `model` to `pplx-decider-v1.1-27b` or `pplx-decider-v1-27b`; a missing or unknown model returns `400`.
tags:
- Decisions
components:
schemas:
ChoiceAnswer:
type: object
title: ChoiceAnswer
properties:
type:
type: string
enum:
- choice
title: Type
description: Always `choice`.
example: choice
choice:
type: string
title: Choice
description: The option with the highest probability.
example: mixed
confidence:
type: number
title: Confidence
description: Confidence in the selected option, from 0 to 1. Higher means more certainty.
example: 0.9255246944002182
probabilities:
type: object
additionalProperties:
type: number
title: Probabilities
description: Probability of each option, keyed by option name. Values are between 0 and 1 and sum to approximately 1.
example:
positive: 0.020649883775315993
mixed: 0.9503497962668123
negative: 0.02900031995787183
required:
- choice
- confidence
- probabilities
- type
description: 'Answer to a `choice` question: the selected option, a confidence value, and the probability of each option.'
NoulCriteria:
type:
- object
- 'null'
title: NoulCriteria
properties:
'true':
anyOf:
- type:
- string
- 'null'
- type:
- object
- 'null'
additionalProperties: true
- type:
- array
- 'null'
items: {}
title: 'True'
description: What a yes answer means for this question.
example: The review describes something broken or not working.
'false':
anyOf:
- type:
- string
- 'null'
- type:
- object
- 'null'
additionalProperties: true
- type:
- array
- 'null'
items: {}
title: 'False'
description: What a no answer means for this question.
example: The review describes normal wear or personal preference.
description: Optional definitions of what counts as yes and what counts as no.
Question:
oneOf:
- $ref: '#/components/schemas/NoulQuestion'
- $ref: '#/components/schemas/ChoiceQuestion'
- $ref: '#/components/schemas/ScoreQuestion'
discriminator:
propertyName: type
mapping:
choice: '#/components/schemas/ChoiceQuestion'
noul: '#/components/schemas/NoulQuestion'
score: '#/components/schemas/ScoreQuestion'
description: A named question about `state`. Discriminated by `type`.
Usage:
type: object
title: Usage
properties:
input_tokens:
type: integer
title: Input Tokens
description: Input tokens processed for the request.
example: 367
output_tokens:
type: integer
title: Output Tokens
description: Output tokens generated for the answers.
example: 3
required:
- input_tokens
- output_tokens
description: Token counts for the request. Input tokens are billed at $0.02 per million; output tokens are free.
ScoreAnswer:
type: object
title: ScoreAnswer
properties:
type:
type: string
enum:
- score
title: Type
description: Always `score`.
example: score
score:
type: number
title: Score
description: Probability-weighted average of the level indices. Can fall between two levels.
example: 1.7838686319784252
confidence:
type: number
title: Confidence
description: Confidence in the score, from 0 to 1. Higher means more certainty.
example: 0.7838686319784252
legend:
type: object
additionalProperties:
anyOf:
- type: string
- type: object
additionalProperties: true
- type: array
items: {}
title: Legend
description: Level index, as a string, mapped back to the `criteria` entry it stands for.
example:
'0': Cosmetic
'1': Inconvenient
'2': Product unusable
probabilities:
type: object
additionalProperties:
type: number
title: Probabilities
description: Probability of each level, keyed like `legend`. Values sum to approximately 1.
example:
'0': 0.008423954913615923
'1': 0.199283458194343
'2': 0.7922925868920411
required:
- score
- confidence
- legend
- probabilities
- type
description: 'Answer to a `score` question: the expected score, the rubric, a confidence value, and the probability of each level.'
ErrorResponse:
type: object
title: ErrorResponse
properties:
error:
$ref: '#/components/schemas/Error'
required:
- error
description: The body of an error response.
NoulAnswer:
type: object
title: NoulAnswer
properties:
type:
type: string
enum:
- noul
title: Type
description: Always `noul`.
example: noul
noul:
type: number
title: Noul
description: Probability of yes or true, from 0 to 1. Values near 0.5 mean the model is unsure.
example: 0.9424522889347015
required:
- noul
- type
description: 'Answer to a `noul` question: the probability that the answer is yes or the statement is true.'
Answer:
oneOf:
- $ref: '#/components/schemas/NoulAnswer'
- $ref: '#/components/schemas/ScoreAnswer'
- $ref: '#/components/schemas/ChoiceAnswer'
discriminator:
propertyName: type
mapping:
choice: '#/components/schemas/ChoiceAnswer'
noul: '#/components/schemas/NoulAnswer'
score: '#/components/schemas/ScoreAnswer'
description: One answer. Its `type` matches the question's `type`.
ChoiceQuestion:
type: object
title: ChoiceQuestion
properties:
type:
type: string
enum:
- choice
title: Type
description: Always `choice`.
example: choice
instructions:
anyOf:
- type:
- string
- 'null'
- type:
- object
- 'null'
additionalProperties: true
- type:
- array
- 'null'
items: {}
title: Instructions
description: What to decide when choosing between the options.
example: What is the overall sentiment of the review?
criteria:
type: object
additionalProperties:
anyOf:
- type:
- string
- 'null'
- type:
- object
- 'null'
additionalProperties: true
- type:
- array
- 'null'
items: {}
title: Criteria
description: Option names mapped to a description of when each applies. Use `null` to let the name speak for itself. 1 to 255 options.
example:
positive: Mostly satisfied
mixed: Praise and complaints in one review
negative: Mostly dissatisfied
minProperties: 1
maxProperties: 255
required:
- criteria
- type
description: A question that picks one of the options you define.
ScoreQuestion:
type: object
title: ScoreQuestion
properties:
type:
type: string
enum:
- score
title: Type
description: Always `score`.
example: score
instructions:
anyOf:
- type:
- string
- 'null'
- type:
- object
- 'null'
additionalProperties: true
- type:
- array
- 'null'
items: {}
title: Instructions
description: What to rate.
example: How severe is the reported problem?
criteria:
type: array
minItems: 1
items:
anyOf:
- type: string
- type: object
additionalProperties: true
- type: array
items: {}
title: Criteria
description: Ordered level descriptions. The index in this array is the level's score, starting at 0. 1 to 10 levels; use at least two.
example:
- Cosmetic
- Inconvenient
- Product unusable
maxItems: 10
required:
- criteria
- type
description: A question that rates the content on an ordered rubric.
DecisionsRequest:
type: object
title: DecisionsRequest
properties:
model:
type: string
title: Model
description: 'The model to use: `pplx-decider-v1.1-27b` or `pplx-decider-v1-27b`. A missing or unknown model returns `400`.'
example: pplx-decider-v1.1-27b
state:
anyOf:
- type: string
- type: object
additionalProperties: true
- type: array
items: {}
title: State
description: 'The content every question in the request refers to: a string, an object, or an array. Images go in an array as OpenAI-style `image_url` parts with base64 PNG, JPEG, or WebP data URLs.'
example: The headphones sound great, but the battery stopped charging after two weeks.
questions:
type: object
additionalProperties:
$ref: '#/components/schemas/Question'
minProperties: 1
title: Questions
description: Questions keyed by a non-empty name you choose. The response uses the same names. 1 to 128 questions.
example:
defect:
type: noul
instructions: Does the review report a product defect?
maxProperties: 128
required:
- model
- state
- questions
description: The content to evaluate and the named questions to ask about it. Unknown fields return `400`. Input must stay under 262,144 tokens and the body under 32 MiB.
additionalProperties: false
DecisionsResponse:
type: object
title: DecisionsResponse
properties:
model:
type: string
title: Model
description: The model name you sent, echoed back.
example: pplx-decider-v1.1-27b
answers:
type: object
additionalProperties:
$ref: '#/components/schemas/Answer'
minProperties: 1
title: Answers
description: One answer per question, under the question's name.
example:
defect:
type: noul
noul: 0.9424522889347015
usage:
allOf:
- $ref: '#/components/schemas/Usage'
description: Token counts for this request.
example:
input_tokens: 367
output_tokens: 3
required:
- model
- answers
- usage
description: Answers keyed by question name, plus the model that answered and token usage.
NoulQuestion:
type: object
title: NoulQuestion
properties:
type:
type: string
enum:
- noul
title: Type
description: Always `noul`.
example: noul
instructions:
anyOf:
- type:
- string
- 'null'
- type:
- object
- 'null'
additionalProperties: true
- type:
- array
- 'null'
items: {}
title: Instructions
description: The question to answer or the statement to check. Required unless `criteria` is set.
example: Does the review report a product defect?
criteria:
allOf:
- $ref: '#/components/schemas/NoulCriteria'
description: Optional definitions of yes and no. Required unless `instructions` is set.
example:
'true': Something is broken or not working.
'false': Normal wear or personal preference.
required:
- type
description: A yes/no question, or a statement to check, answered with the probability of yes or true.
Error:
type: object
title: Error
properties:
message:
type: string
description: What went wrong.
example: Noul question must have criteria or instructions
type:
type: string
description: The error category, for example `invalid_request_error`, `invalid_request`, `invalid_api_key`, or `too_many_requests`.
example: invalid_request
code:
description: A status code as a string or a number, or `null`. Do not branch on it; use the HTTP status.
anyOf:
- type:
- string
- 'null'
- type:
- integer
- 'null'
param:
type:
- string
- 'null'
description: Present on some errors; `null` when present.
required:
- message
- type
description: Details of the error.
responses:
InternalServerError:
description: The service failed. Retry with backoff.
PayloadTooLarge:
description: The request body is over 32 MiB.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
code: null
message: request body exceeds the maximum allowed size of 33554432 bytes
param: null
type: invalid_request_error
headers:
x-request-id:
$ref: '#/components/headers/x-request-id'
BadRequest:
description: The body is not valid JSON, `model` is missing or unknown, a field is unknown or the wrong type, a request limit is exceeded, or an image is not a supported data URL.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
message: Invalid model 'pplx-decider-v1.1-27b-latest'. Permitted models can be found in the documentation at https://docs.perplexity.ai/docs/getting-started/models.
type: invalid_request_error
param: null
code: null
headers:
x-request-id:
$ref: '#/components/headers/x-request-id'
ServiceUnavailable:
description: The model service is temporarily unavailable. Retry with backoff.
MethodNotAllowed:
description: Wrong method. Empty body.
headers:
Allow:
description: Always `POST`.
schema:
type: string
example: POST
x-request-id:
$ref: '#/components/headers/x-request-id'
NotFound:
description: Wrong path, including a trailing slash. Empty body, no request id.
GatewayTimeout:
description: The model did not answer in time, after about a minute. The body may be HTML rather than JSON. Retry, or send less input.
Unauthorized:
description: The API key is missing or invalid, or it was sent in `x-api-key`. No request id header.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
message: Invalid API key provided. You can find your API key at https://console.perplexity.ai.
type: invalid_api_key
code: 401
TooManyRequests:
description: Over the request or token limit. Wait `Retry-After` seconds, then retry.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
code: null
message: Request rate limit exceeded, please try again later.
param: null
type: too_many_requests
headers:
Retry-After:
$ref: '#/components/headers/Retry-After'
x-request-id:
$ref: '#/components/headers/x-request-id'
BadGateway:
description: The model service was unreachable. Retry with backoff.
headers:
x-ratelimit-remaining:
schema:
type: integer
description: Requests left in the current second.
x-request-id:
description: A UUID that identifies the request. Quote it in support requests.
schema:
type: string
format: uuid
example: 7a1504a6-a884-48e6-af6e-0c3140aeb6db
Retry-After:
schema:
type: integer
description: Seconds to wait before retrying.
x-ratelimit-reset:
schema:
type: integer
description: When the window resets, in Unix seconds.
x-ratelimit-used:
schema:
type: integer
description: Requests used in the current second.
x-ratelimit-limit:
schema:
type: integer
description: Requests allowed per second for your organization.
securitySchemes:
HTTPBearer:
type: http
scheme: bearer
description: 'Your Perplexity API key, sent as `Authorization: Bearer <key>`. The `x-api-key` header is not read.'