Os três valores
- URL base
https://nokeep.ai/v1- Chave de API
sk-nokeep-test (free) or your sk-nokeep-… key- Modelo
deepseek-v4.1-flash-uncensored
Os SDKs oficiais da OpenAI leem a URL base e a chave do ambiente, então, em muitos projetos, a troca não exige nenhuma mudança de código:
export OPENAI_BASE_URL="https://nokeep.ai/v1"
export OPENAI_API_KEY="sk-nokeep-…"Depois, troque o nome do modelo onde você faz a chamada. Todas as outras linhas continuam iguais.
Em Python, JavaScript e curl
import os
from openai import OpenAI
client = OpenAI(
base_url="https://nokeep.ai/v1",
api_key=os.environ["NOKEEP_API_KEY"],
)
reply = client.chat.completions.create(
model="deepseek-v4.1-flash-uncensored",
messages=[{"role": "user", "content": "Write a haiku about moving house."}],
)
print(reply.choices[0].message.content)Streaming, ferramentas, saída em JSON e imagens funcionam como no formato próprio da OpenAI. Bibliotecas e frameworks construídos sobre o SDK da OpenAI usam a mesma URL base e a mesma chave. Experimente a chamada aqui primeiro:
O que é suportado
| Recurso | Suportado |
|---|---|
POST /v1/chat/completions, completo ou em streaming | Sim, os dois modelos |
GET /v1/models e GET /v1/models/{id} | Sim, com tamanho de contexto, resposta mais longa e preço por token |
| Papéis: system, developer, user, assistant, tool | Sim |
Chamadas de ferramenta: tools, tool_choice | Sim. No GLM, tool_choice aceita só auto ou none. |
reasoning_effort | DeepSeek: none, low, high, max. GLM: low, high. |
Imagens como partes image_url, links ou data URLs | deepseek-v4.1-flash-uncensored, até 10 por requisição |
response_format, temperature, top_p, stop, seed, penalidades | deepseek-v4.1-flash-uncensored |
stream_options.include_usage, max_tokens, max_completion_tokens | Sim |
Entrada em cache em usage.prompt_tokens_details.cached_tokens | Sim, cobrada pelo preço de cache |
Cada campo, modelo por modelo: Chat completions.
O que não é
| Não suportado | O que você recebe |
|---|---|
| Outras rotas: embeddings, imagens, áudio, arquivos, batch, moderações, as APIs Responses e Assistants, completions legadas | 404 not_found, com o nome das quatro rotas que existem |
n diferente de 1 | 400 unsupported_n |
Um reasoning_effort que o modelo não aceita | 400 invalid_reasoning_effort, com o nome dos que ele aceita |
Uma função nomeada ou required como tool_choice em glm-5.3-flash-uncensored | 400 unsupported_tool_choice |
Imagens para glm-5.3-flash-uncensored; partes de áudio ou vídeo para qualquer um dos modelos | 400 unsupported_input, com o nome do modelo que lê imagens |
| Mais de 10 imagens, ou mais de 2.000 mensagens | 400 too_many_images, 400 invalid_messages |
Campos que nenhum dos modelos aceita, como logprobs, logit_bias, user ou store | Descartados, e nomeados no cabeçalho x-nokeep-ignored |
Nada sem suporte é adivinhado nem trocado em silêncio: a requisição é recusada com um código, ou os campos não usados são nomeados em um cabeçalho. Cada código e a sua correção: Erros.
Pequenas diferenças que vale saber
usage.nokeep_creditsinforma quanto a chamada custou, e os cabeçalhosx-nokeep-creditsex-nokeep-balanceinformam isso em uma resposta inteira.- A cobrança é feita com créditos pré-pagos: 1.000 valem US$ 1, a partir de US$ 5, e nunca expiram. Uma chamada recusada não custa nada.
- Limite de taxa: 120 requisições por minuto por chave. Um
429trazRetry-After. - O host do GLM pode ficar ocupado nos horários de pico; uma chamada ocupada responde
503 busycomRetry-After: 5e não custa nada.
Perguntas
Preciso mudar o meu código para trocar?
Só a URL base, a chave e o nome do modelo. Com os SDKs oficiais, as duas primeiras podem vir de OPENAI_BASE_URL e OPENAI_API_KEY no ambiente.
Funciona com apps que aceitam um endpoint personalizado da OpenAI?
Sim. Qualquer app com uma configuração de endpoint compatível com a OpenAI ou personalizado funciona. Guias: SillyTavern, Open WebUI e agentes de código na página de agentes de código.
Quais modelos da OpenAI posso chamar?
Nenhum: o formato é o da OpenAI, mas os modelos são deepseek-v4.1-flash-uncensored e glm-5.3-flash-uncensored. GET /v1/models lista todos os ids.
Existe um endpoint de embeddings?
Ainda não. A API serve chat completions, a lista de modelos e uma rota de status. Novas rotas aparecerão no changelog.
O que acontece com os campos que vocês não suportam?
Eles são descartados e nomeados no cabeçalho x-nokeep-ignored, para você ver exatamente o que não foi usado. Valores que mudariam o sentido de uma requisição, como n acima de 1, são recusados com um 400.