Voltar ao blog

Primeiros passosGuia

Primeira requisição à CheapTokens com HTTPie: chave no env, = e :=

Um comando http legível que envia um chat completion com a chave em uma variável de ambiente e depois mostra onde estão a resposta e o uso de tokens.

Por CheapTokens TeamPublicado em 5 min de leitura

Um terminal mostrando um comando http com uma variável de chave bearer e campos JSON
Nesta página
  1. O que = e := realmente fazem
  2. Onde está a resposta
  3. Troque o modelo: mude um campo
  4. Quanto custa uma requisição de teste
  5. Se não funcionar

Você quer saber que a chave funciona e que o id do modelo está certo, e quer saber isso em uma linha. O comando http do HTTPie faz isso com muito menos aspas que o curl: você digita os campos, ele monta o JSON. Aqui está a requisição completa, e o resto do artigo explica cada parte.

bash
export CHEAPTOKENS_API_KEY="paste-your-key-here"

http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
  POST https://api.cheaptokens.dev/v1/chat/completions \
  model=deepseek-ai/DeepSeek-V4-Flash-0731 \
  max_tokens:=200 \
  'messages:=[{"role":"user","content":"In one sentence, what is a token?"}]'

A API é compatível com OpenAI, então a URL base é https://api.cheaptokens.dev/v1 e as requisições de chat vão para /chat/completions sob ela. O id do modelo é o completo, deepseek-ai/DeepSeek-V4-Flash-0731 (o nome curto das tabelas de preço não é aceito). Se você nunca armazenou uma chave antes, armazene uma chave de API com segurança primeiro: digitar a linha export coloca a chave no histórico do seu shell, então um arquivo de perfil ou um gerenciador de segredos é um lugar melhor para ela.

A requisição em um terminal: chave bearer da variável, modelo como string, max_tokens como número, messages como array bruto
A mesma requisição como ela aparece no terminal

O que = e := realmente fazem#

Esta é a única parte do HTTPie que você precisa aprender. A documentação JSON do HTTPie (versão 3.2.4, de 1 de novembro de 2024, lida em 9 de novembro de 2026) diz que = define um campo string e := define um valor JSON bruto: um número, um booleano, um array ou um objeto. Campos fornecidos dessa forma são enviados como corpo JSON por padrão, então você não adiciona um cabeçalho Content-Type por conta própria.

Na nossa requisição isso dá três formatos diferentes:

  • model=deepseek-ai/DeepSeek-V4-Flash-0731 é uma string, então =.
  • max_tokens:=200 é um número, então :=. Com = você enviaria a string "200".
  • messages:=[…] é um array de objetos, então := de novo, e o valor vai entre aspas simples para o shell deixar as aspas duplas internas em paz.

A documentação também diz que um corpo vindo do stdin não pode ser combinado com campos de linha de comando, então escolha um estilo. Para um primeiro teste, os campos são mais curtos e fáceis de editar.

Verificação rápida

O que max_tokens=200 (com um = simples) envia?

Mostrar resposta

Resposta: A string "200"

= sempre cria uma string. Para um número você precisa de :=, então escreva max_tokens:=200.

Onde está a resposta#

A resposta segue o formato de chat-completions da OpenAI. Você procura três coisas, e elas ficam em lugares diferentes:

json
{
  "choices": [
    {
      "message": { "role": "assistant", "content": "…the answer text…" },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": …, "completion_tokens": …, "total_tokens": … }
}

O texto da resposta é choices[0].message.content. finish_reason fica ao lado dele na mesma choice, e usage fica no nível superior. usage mostra quantos tokens você enviou (prompt_tokens) e quantos o modelo escreveu (completion_tokens), o que é útil para estimar o custo de uma requisição.

Onde olhar na resposta: choices, message.content, finish_reason e usage
Três campos para ler em toda resposta

Se você só quer o texto, canalize o corpo para jq:

bash
http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
  POST https://api.cheaptokens.dev/v1/chat/completions \
  model=deepseek-ai/DeepSeek-V4-Flash-0731 \
  max_tokens:=200 \
  'messages:=[{"role":"user","content":"In one sentence, what is a token?"}]' \
  | jq -r '.choices[0].message.content'
Experimente você mesmoExperimente: deixe o limite pequeno demais e leia o finish_reasonMostrar resposta

Mude max_tokens:=200 para max_tokens:=5 e execute de novo. A resposta é cortada, e finish_reason lê length em vez de stop: o limite parou o modelo, não o fim do raciocínio. Por que uma resposta é cortada cobre a solução.

Troque o modelo: mude um campo#

O modelo é uma string, então testar outro é uma edição de uma palavra. Os dois ids abaixo estão disponíveis na CheapTokens com um único saldo; DeepSeek-V4-Flash oferece um contexto de 380K e até 32.768 tokens de saída por resposta, GLM-5.3-Flash um contexto de 390K e até 8.192.

Uma requisição, dois modelos

DeepSeek-V4-Flash

bash
http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
  POST https://api.cheaptokens.dev/v1/chat/completions \
  model=deepseek-ai/DeepSeek-V4-Flash-0731 \
  max_tokens:=200 \
  'messages:=[{"role":"user","content":"Name three uses of a token limit."}]'

GLM-5.3-Flash

bash
http --body -A bearer -a "$CHEAPTOKENS_API_KEY" \
  POST https://api.cheaptokens.dev/v1/chat/completions \
  model=zai-org/GLM-5.3-Flash \
  max_tokens:=200 \
  'messages:=[{"role":"user","content":"Name three uses of a token limit."}]'

Não sabe qual id usar? Liste os modelos com GET /v1/models e copie a string exata.

Quanto custa uma requisição de teste#

Uma pergunta curta como esta é barata. Digamos que a pergunta tenha cerca de 100 tokens e a resposta cerca de 150: essa requisição custa $0.000017. Mil delas ficam assim, com entrada e saída contadas juntas:

Modelo Por solicitação 1.000 solicitações OpenRouter, 1.000 solicitações
GLM-5.3-Flash $0.000008 $0.008 $0.0158
DeepSeek-V4-Flash $0.000017 $0.0165 $0.028
MiniMax-M2.7 $0.000028 $0.0275 $0.33

100 tokens de entrada e 150 tokens de saída por solicitação. Os preços por 1M de tokens são atuais e mudam junto com nossas tarifas; a coluna OpenRouter mostra preços de referência para a mesma carga de trabalho.

No total, com entrada e saída contadas juntas, o DeepSeek-V4-Flash sai mais barato que na OpenRouter, e o preço é uma tarifa fixa sem horários de pico. As tarifas atuais de cada modelo estão na página de preços.

Se não funcionar#

  • Você digitou messages=[…] com um = simples. O array vai como string, não como lista de mensagens. Use := e aspas simples em volta do valor inteiro.
  • O JSON dentro de := é inválido. Toda chave e string precisa de aspas duplas, e as aspas externas devem ser simples. Se você editar o texto da mensagem, mantenha as aspas balanceadas.
  • A chave está vazia. echo ${#CHEAPTOKENS_API_KEY} imprime o comprimento sem mostrar a chave; 0 significa que a variável não está definida neste terminal.
  • O id do modelo é o nome curto. Use o deepseek-ai/DeepSeek-V4-Flash-0731 completo. Para respostas 401 e 404, veja chave, URL base ou id de modelo errados.
  • Você recorreu a --session. A documentação de autenticação do HTTPie diz que arquivos de sessão armazenam credenciais em texto puro, então mantenha a chave no ambiente e deixe --session fora deste comando.

Verifique sua versão com http --version se alguma flag se comportar de forma diferente do que está acima. Prefere Python? A mesma requisição sem SDK está em primeira requisição em Python com requests. Para a referência completa da API, veja a documentação da CheapTokens.