> ## Documentation Index
> Fetch the complete documentation index at: /docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Decisions

> Responda perguntas de sim/não, de múltipla escolha e com pontuação sobre qualquer texto ou estado JSON com um modelo de classificação por meio do AI Gateway.

Consulte [URLs e autenticação HTTP](/docs/pt-BR/reference/base-urls.md) e a referência da API para os formatos completos de solicitação e resposta.

> [!NOTE]
>
> Decisions está em Beta, e seu contrato de requisição e resposta corresponde à [TypeSafe Classify API](https://docs.typesafe.ai/api).
>
> * Responde por meio de APIs nativas de decisão ou de saídas estruturadas em modelos de chat compatíveis: consulte [Modelos compatíveis](#supported-models).
> * Ainda não aplica plugins de PII, guardrails nem evaluators: consulte [Aplicação durante a Beta](#enforcement-during-the-beta).
> * Requer uma chave de API com a permissão `classify`.
> * Disponível apenas pela API e pelo SDK.

## Visão geral

**Decisions** responde a perguntas tipadas sobre um conteúdo em uma única chamada. Envie o conteúdo como `state` e uma ou mais `questions` nomeadas para [`POST /decisions`](/docs/pt-BR/reference/decisions/create-decisions) na URL base do **AI Gateway**, `https://router.toqan.ai/eu/v3/router`.

A resposta retorna uma resposta estruturada por pergunta, portanto nada precisa ser extraído de texto livre. Uma resposta `choice` ou `score` também traz as probabilidades que a fundamentam e uma confiança para a opção ou o nível selecionado.

Uma pergunta combina `instructions` em linguagem natural com um `type` que define o formato da resposta e `criteria` que definem a rubrica:

| `type` | O que é a resposta | Quando usar |
| - | - | - |
| `noul` | A probabilidade de que a afirmação em `instructions` seja verdadeira, em `[0, 1]` | Decisões de sim/não, ou uma probabilidade à qual aplicar um limite em vez de um rótulo fixo |
| `choice` | Uma opção de uma rubrica nomeada, com uma probabilidade para cada opção | O conteúdo pertence a um conjunto conhecido: uma fila, um tópico, uma categoria |
| `score` | Uma posição em uma escala ordenada, com uma probabilidade para cada nível | A resposta é um grau em vez de uma categoria: sentimento, qualidade, esforço |

`state` não se limita a texto: um objeto ou array é serializado como JSON antes da classificação, de modo que a mesma chamada pode avaliar uma mensagem de cliente, um payload de ferramenta ou um registro inteiro.

Várias perguntas podem ser feitas de uma só vez, cada uma com sua própria rubrica, de modo que uma requisição custa uma única ida e volta em vez de uma chamada por pergunta. Consulte [Tipos de pergunta](#question-types) para ver os `criteria` esperados por cada tipo.

A requisição é rastreada, precificada e tem limite de taxa como qualquer outro tráfego do gateway. Consulte [Aplicação durante a Beta](#enforcement-during-the-beta) para saber o que se aplica atualmente.

## Casos de uso

* **Triagem e roteamento.** Pergunte com `noul` se a mensagem relata um problema e com `choice` qual é o tópico ou produto; em seguida, roteie com base nos rótulos e escale as linhas com baixa confiança.
* **Criação de dados rotulados.** Transforme uma rubrica em uma pergunta `choice` para rotular um corpus para Evaluators ou Datasets e use `probabilities` para escolher as linhas que merecem revisão humana.
* **Pontuação de feedback aberto.** Use `score` em respostas de pesquisas, transcrições de suporte ou textos de avaliações para obter uma leitura ordinal sem escrever um prompt de pontuação.
* **Filtro antes de trabalhos caros.** Use uma pergunta `noul` no modelo nativo, cujos tokens de saída são gratuitos, como verificação prévia, e envie apenas as requisições aprovadas para um modelo maior.
* **Enriquecimento de registros estruturados.** Passe um registro como `state` e faça uma pergunta por campo a ser derivado, em vez de criar um prompt por campo.
* **Comparação de modelos com uma única rubrica.** Faça as mesmas perguntas a `typesafe/jev-latest` e a um modelo de chat para ver onde divergem. Limites ajustados em um não se transferem para o outro, então compare as respostas em vez das probabilidades brutas.

## Modelos compatíveis

| Modelo | Como responde |
| - | - |
| `alibaba/decision-model-preview` | Nativo |
| `anthropic/claude-haiku-4-5` | Emulado |
| `anthropic/claude-haiku-4-5-20251001` | Emulado |
| `anthropic/claude-haiku-5-5` | Emulado |
| `aws/au.anthropic.claude-haiku-4-5-20251001-v1:0` | Emulado |
| `aws/au.anthropic.claude-haiku-5-5` | Emulado |
| `aws/eu.anthropic.claude-haiku-4-5-20251001-v1:0` | Emulado |
| `aws/eu.anthropic.claude-haiku-5-5` | Emulado |
| `aws/global.anthropic.claude-haiku-4-5-20251001-v1:0` | Emulado |
| `aws/global.anthropic.claude-haiku-5-5` | Emulado |
| `aws/jp.anthropic.claude-haiku-4-5-20251001-v1:0` | Emulado |
| `aws/jp.anthropic.claude-haiku-5-5` | Emulado |
| `aws/qwen.qwen3-32b-v1:0` | Emulado |
| `aws/us-east-1.openai.gpt-5.6-luna` | Emulado |
| `aws/us-east-2.openai.gpt-5.6-luna` | Emulado |
| `aws/us-west-2.openai.gpt-5.6-luna` | Emulado |
| `aws/us.anthropic.claude-haiku-4-5-20251001-v1:0` | Emulado |
| `aws/us.anthropic.claude-haiku-5-5` | Emulado |
| `azure/eu.gpt-5.6-luna` | Emulado |
| `azure/global.gpt-5.6-luna` | Emulado |
| `azure/microsoft-decision-1` | Nativo |
| `baseten/elephant-1` | Nativo |
| `baseten/glm-5.3-flash` | Emulado |
| `baseten/mammoth-1` | Nativo |
| `berget/Cloudflare/clef-flash` | Nativo |
| `berget/convaiinnovations/laya` | Nativo |
| `berget/Qwen/Qwen3.5-2B` | Nativo |
| `cerebras/qwen-3.8-27b` | Emulado |
| `cloudflare/clef` | Nativo |
| `cloudflare/clef-flash` | Nativo |
| `cloudflare/clef-omni` | Nativo |
| `fireworks/glm-5.3-flash` | Emulado |
| `fireworks/gpt-oss-120b` | Emulado |
| `google-ai/gemini-3.8-flash` | Emulado |
| `google-ai/gemini-4-argon` | Emulado |
| `google/claude-haiku-4-5` | Emulado |
| `google/eu.claude-haiku-5-5` | Emulado |
| `google/eu.gemini-3.8-flash` | Emulado |
| `google/eu.gemini-4-argon` | Emulado |
| `google/gemini-3.8-flash` | Emulado |
| `google/gemini-4-argon` | Emulado |
| `google/global.claude-haiku-5-5` | Emulado |
| `google/us.claude-haiku-5-5` | Emulado |
| `google/us.gemini-3.8-flash` | Emulado |
| `google/us.gemini-4-argon` | Emulado |
| `groq/openai/gpt-oss-120b` | Emulado |
| `groq/openai/gpt-oss-20b` | Emulado |
| `groq/openai/gpt-oss-safeguard-20b` | Emulado |
| `groq/qwen/qwen3.8-27b` | Emulado |
| `inception/mercury-decide` | Nativo |
| `inceptron/zai-org/GLM-5.3-Flash` | Emulado |
| `liquid/d1` | Nativo |
| `liquid/d1:free` | Nativo |
| `munito/blockbrain/cygnet@eu` | Nativo |
| `munito/perplexity-ai/pplx-decider-v1.2@eu` | Nativo |
| `nebius/openai/gpt-oss-120b` | Emulado |
| `nebius/zai-org/GLM-5.3-Flash` | Emulado |
| `openai/eu.gpt-5.6-luna` | Emulado |
| `openai/eu.gpt-6-luna` | Nativo |
| `openai/gpt-5.6-luna` | Emulado |
| `openai/gpt-6-luna` | Nativo |
| `orq/decider-4b` | Nativo |
| `perplexity/perplexity/glm-5.3-flash` | Emulado |
| `perplexity/pplx-decider-v1-27b` | Nativo |
| `tencent/glm-5.3-flash` | Emulado |
| `tencent/glm-5.3-flashx` | Emulado |
| `tensorix/openai/gpt-oss-120b` | Emulado |
| `tensorix/openai/gpt-oss-20b` | Emulado |
| `tensorix/z-ai/glm-5.3-flash` | Emulado |
| `typesafe/jev-latest` | Nativo |
| `typesafe/jev-preview` | Nativo |
| `wafer/GLM-5.3-Flash` | Emulado |
| `wafer/Qwen3.8-27B` | Emulado |
| `zai/glm-5.3-flash` | Emulado |
| `zai/glm-5.3-flashx` | Emulado |

Esta lista inclui ofertas e versões ativas do catálogo de modelos. Modelos nativos usam a API de decisão do provedor; modelos emulados respondem por meio de saídas estruturadas ou de uma chamada de ferramenta forçada. Consulte [Preços e limites](#pricing-and-limits) para detalhes de cobrança.

Modelos de chat retornam os mesmos campos com suas próprias probabilidades, que expressam a estimativa do modelo e não são calibradas; portanto, limites ajustados em um modelo não se transferem para outro.

Na classificação emulada, o raciocínio é definido no mínimo permitido pelo modelo.

O OpenAI Decisions aceita texto, arrays de mensagens e histórico de funções ou ferramentas personalizadas em `state`. Mensagens de usuário aceitam partes `input_text`, `input_image` e `input_json`. As imagens podem usar data URLs base64 inline ou URLs HTTP(S) públicas. Mensagens de system e developer aceitam texto; mensagens de assistant aceitam texto de saída e recusas. IDs de arquivo, áudio, referências de itens e partes de conteúdo soltas não são compatíveis. Outros objetos e arrays são serializados como texto. A OpenAI pode retornar `{"type": "refusal"}` na chave de uma pergunta individual; trate as recusas antes de ler os campos pontuados.

Qualquer outro modelo retorna `400`.

## Início rápido

```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl -X POST https://router.toqan.ai/eu/v3/router/decisions \
  -H "Authorization: Bearer $TOQAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "typesafe/jev-latest",
    "state": "The package arrived two days late and the box was damaged, but support refunded me right away.",
    "questions": {
      "is_complaint": {
        "type": "noul",
        "instructions": "Does the customer report a problem with their order?",
        "criteria": {
          "true": "A problem with the order is described",
          "false": "No problem is described"
        }
      },
      "topic": {
        "type": "choice",
        "instructions": "What is the main topic of the message?",
        "criteria": {
          "shipping": "Delivery timing or packaging",
          "billing": "Charges, refunds or invoices",
          "other": null
        }
      },
      "satisfaction": {
        "type": "score",
        "instructions": "How satisfied is the customer overall?",
        "criteria": ["Unhappy", "Neutral", "Satisfied"]
      }
    }
  }'
```

## Requisição

| Campo | Tipo | Obrigatório | Descrição |
| - | - | - | - |
| `model` | string | Sim | Um dos [modelos compatíveis](#supported-models). |
| `state` | string, object ou array | Sim | O conteúdo a ser classificado. Objetos e arrays comuns são serializados como JSON. O OpenAI nativo também aceita arrays de mensagens e de histórico de ferramentas com texto, JSON e imagens inline ou hospedadas. |
| `questions` | object | Sim | Mapeia cada chave de pergunta para sua definição. A resposta usa as mesmas chaves em `answers`. O OpenAI nativo aceita de 1 a 400 perguntas. |
| `name` | string | Não | Nome exibido no trace. Um nome padrão é usado quando omitido. |
| `metadata` | object | Não | Pares chave-valor anexados ao trace, para filtragem posterior. |
| `fallbacks` | array | Não | Até 10 modelos de fallback ordenados, cada um com um ID em `model`. Todo modelo deve oferecer suporte a classificação e passar nas verificações de acesso. Requisições com imagens no state ou nas instruções das perguntas exigem fallbacks OpenAI nativos. |
| `retry` | object | Não | Configuração de novas tentativas para esta requisição: `count` (0 a 5) e `on_codes`, os códigos de status que acionam uma nova tentativa. |
| `timeout` | object | Não | Defina `call_timeout` como um número positivo de milissegundos para cada chamada de modelo, incluindo cada nova tentativa e fallback. Use `2000` para dois segundos. |
| `prompt_cache_key` | string | Não | Somente OpenAI nativo. Particiona a reutilização de entrada compartilhada com uma chave de no máximo 64 caracteres. |
| `prompt_cache_options` | object | Não | Somente OpenAI nativo. Defina `mode` como `implicit` ou `explicit`; `ttl` aceita apenas `30m`. |
| `cache` | object | Não | Cache de respostas por correspondência exata para esta requisição: `type` deve ser `exact_match`, e `ttl` é o tempo de vida em segundos, de 1 a 259200 (3 dias), com 3600 como padrão. Consulte [Cache](#caching). |
| `identity` | object | Não | Atribui a requisição a um usuário final, como nos outros endpoints do gateway: a identidade no corpo tem precedência sobre `X-TOQAN-IDENTITY-ID` e sobre o proprietário da chave de API. Consulte [Metadados da requisição](/docs/pt-BR/ai-gateway/request-metadata.md). |

Cada pergunta tem um `type` e `instructions`, que podem ser uma string, um objeto ou um array. O OpenAI nativo preserva arrays de partes `input_text`, `input_image` e `input_json`, de modo que cada pergunta pode incluir suas próprias imagens. O limite de 128 imagens abrange a entrada compartilhada e as instruções das perguntas em conjunto. O formato de `criteria` depende do tipo de pergunta.

### Tipos de pergunta

#### `noul`

Retorna a probabilidade de que a afirmação em `instructions` seja verdadeira para `state`. A probabilidade é calibrada em `typesafe/jev-latest` e informada pelo próprio modelo nos modelos de chat.

O objeto opcional `criteria` pode definir o que conta como `true` e `false`.

```json JSON theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "type": "noul",
  "instructions": "Does the customer report a problem with their order?",
  "criteria": {
    "true": "A problem with the order is described",
    "false": "No problem is described"
  }
}
```

#### `choice`

Seleciona uma opção de uma rubrica. O objeto obrigatório `criteria` mapeia o nome de cada opção para uma descrição. Defina uma descrição como `null` quando o nome da opção for suficiente para que o modelo a interprete.

```json JSON theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "type": "choice",
  "instructions": "What is the main topic of the message?",
  "criteria": {
    "shipping": "Delivery timing or packaging",
    "billing": "Charges, refunds or invoices",
    "other": null
  }
}
```

#### `score`

Retorna uma posição em uma escala ordenada. Defina `criteria` como um array com pelo menos duas descrições de nível, ordenadas do mais baixo para o mais alto. O índice da resposta se refere a esse array.

```json JSON theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "type": "score",
  "instructions": "How satisfied is the customer overall?",
  "criteria": ["Unhappy", "Neutral", "Satisfied"]
}
```

## Resposta

Provedores nativos retornam seus próprios `confidence` e `score`. A classificação emulada usa uma única chamada de saída estruturada. O OpenAI Decisions retorna uma pontuação ponderada por probabilidade e preserva sua própria confiança. Os campos abaixo descrevem essas diferenças entre provedores.

```json JSON theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "model": "typesafe/jev-latest",
  "answers": {
    "is_complaint": { "type": "noul", "noul": 0.97 },
    "topic": {
      "type": "choice",
      "choice": "shipping",
      "probabilities": { "shipping": 0.79, "billing": 0.2, "other": 0.01 },
      "confidence": 0.68
    },
    "satisfaction": {
      "type": "score",
      "score": 1.41,
      "legend": { "0": "Unhappy", "1": "Neutral", "2": "Satisfied" },
      "probabilities": { "0": 0.03, "1": 0.52, "2": 0.45 },
      "confidence": 0.28
    }
  },
  "usage": {
    "input_tokens": 412,
    "output_tokens": 0,
    "input_cost": 0.000017304,
    "output_cost": 0,
    "total_cost": 0.000017304
  },
  "telemetry": {
    "trace_id": "4f2294c4bd55372a354be496871aa917",
    "span_id": "a354be496871aa91"
  }
}
```

| Campo | Descrição |
| - | - |
| `model` | O ID solicitado do modelo que respondeu, incluindo um modelo de fallback quando um foi usado. |
| `answers` | Uma entrada para cada chave de pergunta. Cada entrada repete o `type` da pergunta. |
| `answers.<key>.noul` | Somente `noul`. Probabilidade no intervalo `[0, 1]` de que a afirmação seja verdadeira. |
| `answers.<key>.choice` | Somente `choice`. O nome da opção selecionada. |
| `answers.<key>.score` | Somente `score`. Posição na escala, não um índice. Em modelos de chat emulados e no OpenAI Decisions, é o índice ponderado: cada índice de nível multiplicado pela probabilidade desse nível, somados, de modo que uma resposta de três níveis resulta em uma fração como `1.42` para a distribuição acima. `typesafe/jev-latest` retorna sua própria pontuação, e é por isso que essa resposta mostra `1.41` ao lado de uma distribuição cujo índice ponderado é `1.42`. |
| `answers.<key>.type` | `noul`, `choice`, `score` ou `refusal`. Recusas não contêm campos pontuados. |
| `answers.<key>.legend` | Somente `score`. Mapeia cada índice de nível para sua descrição no array `criteria`. |
| `answers.<key>.probabilities` | `choice` e `score`. Probabilidade para cada nome de opção ou índice de nível. |
| `answers.<key>.confidence` | `choice` e `score`. O quanto o modelo tem certeza da resposta que selecionou. Em modelos de chat emulados, é o maior valor em `probabilities`, portanto não traz informação além delas. `typesafe/jev-latest` retorna seu próprio valor calibrado, que pode ficar abaixo da maior probabilidade: no exemplo acima, `0.68` contra `0.79` para a resposta `choice` e `0.28` contra `0.52` para a resposta `score`. |
| `usage.input_tokens` | Total de tokens de entrada, incluindo tokens em cache. |
| `usage.input_tokens_details` | `cached_tokens` e `cache_write_tokens` opcionais, informados pelo provedor. Esses tokens estão incluídos em `input_tokens`. O OpenAI Decisions cobra leituras e gravações de cache pelas tarifas de cache do modelo. |
| `usage.output_tokens` | Tokens de saída. Gratuitos para provedores nativos de classify, cobrados pela tarifa do modelo em modelos de chat emulados. |
| `usage.input_cost` | Custo em USD dos tokens de entrada. Presente quando a cobrança foi calculada. |
| `usage.output_cost` | Custo em USD dos tokens de saída. `0` para provedores nativos de classify. Presente quando a cobrança foi calculada. |
| `usage.total_cost` | Custo total em USD. Segue o mesmo formato dos campos `usage` da Responses API. |
| `telemetry.trace_id` / `telemetry.span_id` | Identificadores do trace e do span raiz registrados para a requisição. Os mesmos valores são retornados nos cabeçalhos `x-orq-trace-id` e `x-orq-trace-span-id`. |

A resposta inclui `telemetry` opcional. Leia `x-orq-trace-id` e `x-orq-trace-span-id` dos cabeçalhos da resposta quando SDKs ou implantações mais antigos o omitirem. O handler os define assim que a requisição é rastreada, portanto uma requisição rejeitada antes desse ponto não traz nenhum dos dois: autenticação e autorização (`401`, e `403` para a falta da permissão `classify` ou para um modelo que não está habilitado no workspace nem compartilhado com o projeto), limites de plano e de orçamento (`429`) e validação do corpo da requisição (o `400` para um corpo malformado, o `422` para uma requisição inválida). Tudo o que for rejeitado após o rastreamento os traz, incluindo o `400` para um modelo que não oferece suporte a classify. O próprio objeto `telemetry` é opcional e retornado por builds mais recentes do que algumas implantações executam, então recorra aos cabeçalhos quando ele estiver ausente.

Modelos de chat emulados retornam os mesmos campos pontuados, mas os números não têm o mesmo significado: suas probabilidades são estimativas do próprio modelo e não são calibradas, e seu `confidence` é simplesmente o maior desses valores. Compare `choice` e `score` entre modelos, não `confidence`.

Consulte a referência da API [Create decisions](/docs/pt-BR/reference/decisions/create-decisions.md) para ver o esquema completo de requisição e resposta, incluindo os campos aceitos além dos listados acima.

## Fallbacks, novas tentativas, timeouts, cache e identidade

Use estas opções em `/decisions`:

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "model": "openai/gpt-6-luna",
  "state": "The customer loves the product.",
  "questions": {
    "positive": { "type": "noul", "instructions": "Is the sentiment positive?" }
  },
  "fallbacks": [{ "model": "openai/gpt-5.6-luna" }],
  "timeout": { "call_timeout": 2000 },
  "retry": { "count": 2, "on_codes": [429, 502, 503, 504] },
  "cache": { "type": "exact_match", "ttl": 3600 },
  "identity": { "id": "customer-demo", "display_name": "Sample customer" }
}
```

`retry.count` define as novas tentativas após a primeira, de 0 a 5. Defina `0` para fazer exatamente uma chamada por modelo.

* Omitir `retry` mantém o padrão do gateway de duas novas tentativas nos códigos de status padrão.
* As novas tentativas são acionadas para os códigos em `on_codes`, com `408` sempre incluído. O gateway respeita `Retry-After` e aguarda um segundo quando o cabeçalho está ausente.
* Depois que as novas tentativas se esgotam, o gateway tenta o próximo fallback, até 10 por requisição.
* A resposta informa o modelo bem-sucedido e seus custos. Um fallback de chat paga as tarifas de entrada e saída do modelo de chat.

`timeout.call_timeout` se aplica separadamente a cada chamada de modelo, incluindo modelos nativos e emulados. Cada nova tentativa e fallback recebe um novo timeout. Se todos os modelos excederem o tempo limite, a requisição retorna `408`. Essas opções também se aplicam a `/classify`.

Em requisições com imagens inline, todo fallback deve oferecer suporte à classificação de imagens OpenAI nativa; cadeias incompatíveis são rejeitadas com `422` antes de uma chamada ao provedor.

Um fallback inacessível interrompe o restante da cadeia de fallbacks. Chaves de sessão devem permitir todos os modelos solicitados conforme sua política de factory.

### Cache

O cache de prompt nativo da OpenAI reutiliza `state` compartilhado correspondente entre requisições, mesmo quando as perguntas mudam. Ele é habilitado implicitamente por padrão para prefixos de pelo menos 1.024 tokens. Defina `prompt_cache_key` para particionar a reutilização. Adicione `prompt_cache_breakpoint: {"mode": "explicit"}` a partes de texto ou imagem compartilhadas para marcar limites; defina `prompt_cache_options.mode` como `explicit` para usar apenas os limites marcados. As instruções das perguntas não podem conter breakpoints e ficam fora do prefixo reutilizável. Decisions oferece suporte a um tempo de vida mínimo de 30 minutos; a opção de 12 horas se aplica à Responses API.

Defina `cache` para atender uma requisição repetida a partir da resposta armazenada em vez de chamar o provedor novamente, como nos outros endpoints do gateway. A chave de cache é o corpo completo da requisição junto com o workspace e o projeto, portanto qualquer alteração em `state`, `questions`, `model` ou outro campo do corpo gera uma entrada diferente. Uma resposta em cache retorna os `model`, `answers` e `usage` armazenados; a requisição continua sendo rastreada, mas nenhuma chamada ao provedor é feita e nenhum custo é adicionado. O cabeçalho de resposta `X-Cache` informa `HIT` ou `MISS`, e `telemetry` identifica o trace da requisição atual. Uma regra de roteamento com configuração de cache aplica o mesmo cache às requisições de Decisions correspondentes.

## Batch

Envie grandes cargas de trabalho offline como um batch de Decisions em vez de uma requisição por decisão. Defina o `endpoint` do batch como `/v3/router/decisions` e dê a cada linha uma requisição de Decisions como `body`. Cada linha aceita os campos de [Requisição](#request), e a chave de API precisa das permissões `batches` e `classify`.

```json JSON theme={"theme":{"light":"github-light","dark":"github-dark"}}
{"custom_id": "ticket-1", "method": "POST", "url": "/v3/router/decisions", "body": {"model": "typesafe/jev-latest", "state": "My card was charged twice for the same order.", "questions": {"refund": {"type": "noul", "instructions": "Is the customer asking for a refund?"}}}}
```

Consulte [Batches](/docs/pt-BR/ai-gateway/features/batches.md) para ver o formato do arquivo de entrada, o fluxo de criação, consulta e download, o formato dos resultados e os limites de batch.

## Aplicação durante a Beta

Aplicado em todas as requisições:

| O quê | Efeito |
| - | - |
| Autenticação | Uma chave ausente ou inválida é rejeitada com `401`. |
| A permissão `classify` | Uma chave sem ela é rejeitada com `403`. O preset padrão de chave do gateway a concede. |
| Acesso ao modelo | O modelo deve estar habilitado no workspace ou compartilhado com o projeto; caso contrário, a requisição é rejeitada com `403`. Ele também deve oferecer suporte a classify; caso contrário, a requisição é rejeitada com `400`. |
| Limites de taxa do plano e orçamentos | A requisição conta para ambos, e uma rejeição retorna `429` exatamente como nos outros endpoints. Consulte [Limites de taxa e cotas](/docs/pt-BR/ai-gateway/features/rate-limits.md). |
| Rastreamento, uso e custo | A requisição é rastreada e cobrada, e a resposta informa `usage`; `telemetry` é opcional. |
| Mascaramento de traces | As máscaras configuradas por meio de plugins do workspace se aplicam ao trace armazenado. Em modelos de chat, as instruções que conduzem a resposta estruturada são sempre removidas do span do modelo. |
| `retry` no nível da requisição | Repete cada modelo para os `on_codes` correspondentes e erros de timeout antes de passar para o seu fallback. |
| `timeout` no nível da requisição | Limita cada chamada de modelo, incluindo novas tentativas e fallbacks, a `call_timeout` milissegundos. |
| `fallbacks` no nível da requisição | Tenta os modelos na ordem fornecida quando o modelo anterior falha. Todo modelo deve oferecer suporte a classify e passar nas verificações de acesso. Uma recusa é uma resposta bem-sucedida e não aciona o fallback. |
| `cache` no nível da requisição | Atende uma requisição idêntica a partir da resposta armazenada durante o `ttl` configurado. O cabeçalho `X-Cache` informa `HIT` ou `MISS`. |
| Identidade | `identity.id` do corpo, depois `x-toqan-identity-id` e depois a identidade do proprietário da chave de API determinam a atribuição do trace. Os detalhes de identidade do corpo são publicados para upsert. |

Não aplicado durante a Beta:

* **Plugins de PII.** `state` e `instructions` chegam ao provedor exatamente como foram enviados, mesmo quando um plugin de redação está configurado para tráfego que de outra forma corresponderia.
* **Guardrails e evaluators.** Eles não são executados, portanto uma regra de guardrail correspondente não pode bloquear uma requisição de Decisions.
* **Regras de roteamento.** Uma regra não reescreve o modelo nem adiciona fallbacks; apenas sua configuração de cache se aplica.
* **`load_balancer`, `plugins` e `guardrails` no nível da requisição.** Eles não fazem parte deste contrato. Campos desconhecidos no corpo são ignorados em vez de rejeitados, portanto enviá-los não tem efeito e não retorna erro.

## Preços e limites

| Modelo | Entrada | Saída | Limites |
| - | - | - | - |
| `typesafe/jev-latest` | US\$ 0,042 por 1M de tokens | Gratuito | Janela de contexto de 64k, e `state` mais a pergunta mais longa devem caber em 32k tokens |
| OpenAI Decisions | US$ 0,10 por milhão de tokens de entrada sem cache; US$ 0,20 acima de 272K tokens de entrada. Leituras de cache custam 0,1× a entrada; gravações custam 1,25× a entrada. As tarifas da UE incluem um adicional de 10% | Gratuito | Somente `gpt-6-luna`; de 1 a 400 perguntas, no máximo 128 imagens |
| Modelos de chat emulados | A tarifa do próprio modelo | A tarifa do próprio modelo | Os limites do modelo no Model Garden. A resposta estruturada adiciona algumas centenas de tokens de saída por requisição |

## Erros

| Status | Causa |
| - | - |
| `400` | Corpo JSON malformado, configuração inválida de retry, timeout ou cache, um modelo de fallback vazio, mais de 10 fallbacks ou um modelo que não é um [modelo compatível](#supported-models). |
| `408` | A chamada de modelo excedeu `timeout.call_timeout` e nenhuma nova tentativa ou fallback teve sucesso. |
| `401` | A chave de API está ausente, é inválida ou foi revogada. |
| `403` | A chave é válida, mas não tem a permissão `classify`, ou o modelo não está habilitado no workspace nem compartilhado com o projeto. |
| `422` | O JSON é válido, mas a estrutura de classificação não é. Por exemplo, uma pergunta `choice` não tem `criteria`, uma pergunta `score` tem menos de dois níveis ou uma requisição com imagem tem um fallback incompatível. |
| `429` | Um limite de taxa do plano ou um limite de orçamento foi atingido antes de o provedor ser chamado. Consulte [Limites de taxa e cotas](/docs/pt-BR/ai-gateway/features/rate-limits.md). |
| `429` / `529` | O provedor upstream atingiu um limite de taxa ou está sobrecarregado. A resposta mantém o status upstream e o cabeçalho `Retry-After`. Tente novamente após o intervalo especificado. |
| `500` | Ocorreu um erro interno de resolução de modelo. Os detalhes da infraestrutura interna são registrados em log sem serem retornados na resposta. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.