Pular para o conteúdo
NotHolyDocs

Referência da API

Chat completions

POST /v1/chat/completions no formato da OpenAI, com streaming, ferramentas, imagens e raciocínio.

Ver em Markdown

A requisição e a resposta do OpenAI Chat Completions, rodando nos modelos da NotHoly. Aponte um SDK da OpenAI para a URL base e não mude mais nada.

POSThttps://api.notholy.com/v1/chat/completions

Requisição

CampoTipoObrigatórioObservações
modelstringSimUm ID de modelo, por exemplo notholy-specter. Veja Modelos
messagesarraySimPapéis system, developer (lido como system), user, assistant e tool. O conteúdo é uma string ou uma lista de partes text e image_url
max_completion_tokens / max_tokensnumberNãoLimite de saída. Se os dois vierem, vale max_completion_tokens. O padrão é a saída máxima do modelo; um valor maior retorna 400
streambooleanNãotrue retorna server-sent events. Veja Streaming
toolsarrayNãoSó ferramentas do tipo function. Outros tipos retornam 400 unsupported_parameter
tool_choicestring ou objectNãoRepassado ao modelo quando tools está definido
reasoning_effortstringNãoUm dos reasoning_efforts do modelo. Qualquer outro valor retorna 400. Veja Raciocínio
response_formatobjectNãoRepassado ao modelo
temperature, top_p, stopnumber, number, string ou arrayNãoRepassados ao modelo
nnumberNãoSó 1

Campos desconhecidos são ignorados. Imagens são aceitas nos modelos cujo input_modalities inclui image; nos outros, retornam 400 unsupported_parameter.

Resposta sem streaming

JSON
{
  "id": "chatcmpl-8Kp2c1Vx",
  "object": "chat.completion",
  "created": 1793836800,
  "model": "notholy-specter",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "An IDOR lets a user read or change another user's object by changing its ID…",
        "refusal": null,
        "reasoning_content": "…"
      },
      "finish_reason": "stop",
      "logprobs": null
    }
  ],
  "usage": {
    "prompt_tokens": 42,
    "completion_tokens": 118,
    "total_tokens": 160,
    "prompt_tokens_details": { "cached_tokens": 0 },
    "completion_tokens_details": { "reasoning_tokens": 64 }
  }
}
  • reasoning_content só aparece quando o modelo raciocinou.
  • Com tool calls, message.tool_calls traz itens {id, type: "function", function: {name, arguments}}, finish_reason é tool_calls e content é null quando não há texto.
  • finish_reason é stop, length, tool_calls ou content_filter.
  • Com streaming, o último chunk antes de data: [DONE] sempre traz usage, mandando ou não stream_options.include_usage.

Exemplo

curl https://api.notholy.com/v1/chat/completions \
  -H "Authorization: Bearer $NOTHOLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "notholy-specter",
    "messages": [
      {"role": "system", "content": "You are reviewing code for an authorized assessment."},
      {"role": "user", "content": "What does a missing ownership check in GET /api/invoices/:id lead to?"}
    ]
  }'

Cabeçalhos de resposta

CabeçalhoSignificado
x-request-idMande para o suporte quando reportar um problema
x-notholy-concurrency-limitQuantas requisições você pode rodar ao mesmo tempo
x-notholy-concurrency-remainingVagas livres quando esta requisição começou
x-notholy-credits-remainingCréditos disponíveis em USD quando esta requisição começou

Erros

400 corpo ou parâmetro inválido · 401 chave ausente ou inválida · 402 créditos ou orçamento da chave insuficientes · 403 a chave não pode usar este modelo · 404 modelo desconhecido · 429 limite de taxa ou de concorrência (respeite o retry-after) · 502/504 o modelo falhou ou estourou o tempo · 503 modelo indisponível. Tabela completa: Erros.