{"slug": "what-is-perplexity-s-decisions-api", "title": "What Is Perplexity's Decisions API?", "summary": "Perplexity released the Decisions API, which evaluates supplied content and returns typed predictions with probabilities using its pplx-decider-v1-27b model that accepts text and images. The API separates evidence in a state field from questions defined in a questions map, supporting three question types — Choice, Score, and Noul — with answers returned under caller-assigned names. Developers set PERPLEXITY_API_KEY and call the endpoint at api.perplexity.ai/v1/decisions from Node.js 22 or later, while the application code defines what happens after each prediction.", "body_md": "[Perplexity's Decisions API](https://docs.perplexity.ai/docs/decisions/quickstart) evaluates supplied content and returns typed predictions with probabilities. You provide state and questions, then use the answers to classify content or choose an application action. Its model, `pplx-decider-v1-27b`, accepts text and images. Your code defines what happens after the prediction.\n\nFor example, a support application could combine a customer's message with a screenshot to suggest a queue. The application might accept a clear billing prediction and send an ambiguous case to a person. That review policy belongs in your application, where you can test and change it independently of the model.\n\n## [Copy link to heading](#how-does-the-api-work)How does the API work?\n\nEach request separates the evidence from the questions. The `state` contains the material to evaluate, such as a ticket or an application record. The `questions` map defines what you want to know about it. Answers come back under the names you assigned to those questions.\n\nThis separation helps when several parts of a workflow need the same evidence. For a support ticket, you might want a destination queue and a separate indication of whether the customer explicitly requests a refund. Those questions describe different properties of one record. Treating them separately prevents a routing label from also having to encode refund intent.\n\nThe [decision-model approach](https://vercel.com/i/what-are-decision-models) suits tasks with defined outcomes. Before writing a question, decide which answers your application can use. If every possible answer leads to the same action, the question may not belong in that workflow.\n\n## [Copy link to heading](#what-kinds-of-questions-can-you-ask)What kinds of questions can you ask?\n\nPerplexity supports three question types:\n\nUse a Choice when the outcomes are categories. Billing and account access are different destinations, so assigning numbers to them would imply an order that doesn't exist. Use a Score when the levels have a meaningful sequence, such as missing reproduction steps, partial steps, and complete steps.\n\nFor that three-level rubric, a score between two levels represents a weighted result across the levels. It doesn't create a new rubric description. If your interface needs a label, define how it converts the result and retain the distribution for cases near a boundary.\n\nNoul fits a separate yes/no property. Keep the question precise enough that two reviewers could label the same example consistently. “Does the customer explicitly request a refund?” is narrower than “Should we refund the customer?” The latter also requires the refund policy, transaction status, and whatever authorization checks your product enforces.\n\n## [Copy link to heading](#how-do-you-make-a-request)How do you make a request?\n\nThe following Node.js example asks about a ticket's destination and refund intent. It uses an invented ticket and prints the returned answers; it doesn't issue a refund or move a ticket.\n\nSet `PERPLEXITY_API_KEY` in your server environment, save the code as `decisions.mjs`, and run `node decisions.mjs` using Node.js 22 or later.\n\n``` js\nconst apiKey = process.env.PERPLEXITY_API_KEY;if (!apiKey) throw new Error(\"Set PERPLEXITY_API_KEY before running.\");\nconst response = await fetch(\"https://api.perplexity.ai/v1/decisions\", {  method: \"POST\",  headers: {    Authorization: `Bearer ${apiKey}`,    \"Content-Type\": \"application/json\",  },  body: JSON.stringify({    model: \"pplx-decider-v1-27b\",    state: {      subject: \"Charged after cancellation\",      message: \"I canceled last week, but another charge appeared. Please refund it.\",    },    questions: {      queue: {        type: \"choice\",        instructions: \"Which queue should investigate the customer's main issue?\",        criteria: {          billing: \"Charges, invoices, or refund requests.\",          account_access: \"Difficulty signing in or recovering an account.\",          other: \"Any issue outside these categories, or insufficient evidence.\",        },      },      refund_requested: {        type: \"noul\",        instructions: \"Does the customer explicitly request a refund?\",      },    },  }),  signal: AbortSignal.timeout(30_000),});\nif (!response.ok) {  throw new Error(`Decisions request failed with HTTP ${response.status}`);}\nconst { answers } = await response.json();console.log(answers.queue);console.log(answers.refund_requested);\n```\n\nInspect the returned answers before connecting them to actions. The sample's `other` option gives the model somewhere to place an issue outside the specialist queues or a ticket that lacks enough information to route. In a larger support workflow, separate those cases if they need different follow-up steps.\n\n## [Copy link to heading](#how-should-an-application-use-the-probabilities)How should an application use the probabilities?\n\nThe selected Choice is the highest-probability option, but being first doesn't necessarily make it a useful automatic decision. In an illustrative distribution of 0.46 for billing, 0.44 for account access, and 0.10 for other, billing wins by a narrow margin. These numbers are an example, not an observed result from the request above.\n\nYour application could send that case for review. To select a threshold, label representative tickets and check how often the accepted predictions send them to the correct queue. Examine the cases you would automate separately from those you would hold back. An overall accuracy figure can hide a poor result in a less common queue.\n\nChoice and Score answers also include `confidence`, which differs from an individual option's probability. Use the specific returned field your policy was tested against. Substituting `confidence` for an option's probability changes the rule, even though both values fall between zero and one.\n\nIf a wrong route only adds a manual reassignment, your acceptance policy may differ from one that starts a consequential action. Keep transaction permissions and eligibility rules in code. Predicting that someone requested a refund doesn't establish that the refund is authorized.\n\nIf you're evaluating an existing Jev workflow, compare [Jev and Perplexity's Decisions API](https://vercel.com/i/jev-vs-perplexity) using the same cases and routing policy.\n\n## [Copy link to heading](#what-does-image-support-make-possible)What does image support make possible?\n\nImages let you evaluate visible evidence alongside the customer's description. Consider “I can't get past this screen” with an attached payment error. The message alone gives little basis for routing. The screenshot can supply the missing context.\n\nThe same design can apply to other bounded visual tasks. In a catalog workflow, you could ask whether a submitted photograph shows the required product view. For bug-report intake, the question could identify which application screen appears in an attachment. Include an outcome for insufficient evidence so a blurred or unrelated image doesn't have to become a confident-looking category.\n\nDecide what the visual prediction will change before collecting more images. For the support example, suggesting a queue needs less evidence than diagnosing the underlying payment failure. The latter may require logs or account records that a screenshot cannot supply.\n\nBuild a [support screenshot classifier with Perplexity](https://vercel.com/i/classify-images-perplexity-decisions-api) to try image preparation and a review threshold in code.\n\n## [Copy link to heading](#can-you-run-the-model-yourself)Can you run the model yourself?\n\nPerplexity publishes [the model weights under Apache 2.0](https://huggingface.co/perplexity-ai/pplx-decider-v1-27b), along with [Python inference code](https://huggingface.co/perplexity-ai/pplx-decider-v1-27b/blob/main/inference.py). This provides a separate path for running predictions on infrastructure you operate.\n\nSelf-hosting changes the work your team owns. You need to provision the model, build the serving application, and test how it handles your workload. The provided local inference interface also differs from the hosted HTTP request, so treat the two implementations as separate integrations.\n\n## [Copy link to heading](#what-should-you-use-another-tool-for)What should you use another tool for?\n\nThe Decisions API returns bounded predictions. Use a generative model when the product needs a written support reply or an explanation for the customer. If a decision depends on current account facts, retrieve those facts before evaluation rather than asking the model to infer them from the customer's message.\n\nDefined outputs don't resolve missing evidence or conflicting policies. When reviewers cannot agree on a label, clarify the category definitions before tuning a threshold. Your evaluation dataset should include those disputed cases so the application has a deliberate way to handle them.\n\n## [Copy link to heading](#frequently-asked-questions)Frequently asked questions\n\n### [Copy link to heading](#is-perplexity's-decisions-api-a-chat-api)Is Perplexity's Decisions API a chat API?\n\nNo. The Decisions API evaluates content against questions with defined answer types. Use a conversational model when you need a generated response for a person to read.\n\n### [Copy link to heading](#what-does-noul-mean-in-a-decision-request)What does Noul mean in a decision request?\n\nNoul is the yes/no question type, with a numeric answer representing the probability of yes. The application chooses how to interpret that number, including when to ask for human review.\n\n### [Copy link to heading](#does-a-decision-model-explain-why-it-chose-an-answer)Does a decision model explain why it chose an answer?\n\nThe Decisions API does not generate a written rationale. If your workflow needs an explanation, design that as a separate step and distinguish the explanation from evidence that the prediction is correct.\n\n### [Copy link to heading](#are-perplexity's-decision-model-weights-available)Are Perplexity's decision-model weights available?\n\nYes. Perplexity publishes the weights for pplx-decider-v1-27b and example inference code. Running them yourself also means operating and validating your own model-serving setup.", "url": "https://wpnews.pro/news/what-is-perplexity-s-decisions-api", "canonical_source": "https://vercel.com/i/what-is-perplexity-decisions-api", "published_at": "2026-10-05 07:31:46+00:00", "updated_at": "2026-10-05 07:48:55.731719+00:00", "lang": "en", "topics": ["ai-products", "ai-tools", "artificial-intelligence", "large-language-models", "developer-tools"], "entities": ["Perplexity", "Decisions API", "pplx-decider-v1-27b", "Node.js", "PERPLEXITY_API_KEY", "Vercel"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/what-is-perplexity-s-decisions-api", "markdown": "https://wpnews.pro/news/what-is-perplexity-s-decisions-api.md", "text": "https://wpnews.pro/news/what-is-perplexity-s-decisions-api.txt", "jsonld": "https://wpnews.pro/news/what-is-perplexity-s-decisions-api.jsonld"}}