Torna al blog

Per iniziareGuida

Prima richiesta a CheapTokens con HTTPie: chiave nell'env, = e :=

Un comando http leggibile che invia un chat completion con la chiave in una variabile d'ambiente, poi mostra dove sono la risposta e l'utilizzo dei token.

Di CheapTokens TeamPubblicato il 4 min di lettura

Un terminale che mostra un comando http con una variabile di chiave bearer e campi JSON
In questa pagina
  1. Cosa fanno davvero = e :=
  2. Dove si trova la risposta
  3. Cambia il modello: modifica un campo
  4. Quanto costa una richiesta di test
  5. Se non funziona

Vuoi sapere che la chiave funziona e che l'id del modello è corretto, e vuoi saperlo in una riga. Il comando http di HTTPie lo fa con molte meno virgolette di curl: digiti i campi, lui costruisce il JSON. Ecco la richiesta completa, e il resto dell'articolo spiega ogni pezzo.

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?"}]'

L'API è compatibile con OpenAI, quindi l'URL di base è https://api.cheaptokens.dev/v1 e le richieste di chat vanno a /chat/completions sotto di esso. L'id del modello è quello completo, deepseek-ai/DeepSeek-V4-Flash-0731 (il nome breve delle tabelle dei prezzi non è accettato). Se non hai mai memorizzato una chiave, prima memorizza una chiave API in modo sicuro: digitare la riga export mette la chiave nella cronologia della shell, quindi un file di profilo o un gestore di segreti è una casa migliore per essa.

La richiesta in un terminale: chiave bearer dalla variabile, modello come stringa, max_tokens come numero, messages come array grezzo
La stessa richiesta come appare nel terminale

Cosa fanno davvero = e :=#

Questa è l'unica parte di HTTPie che devi imparare. La documentazione JSON di HTTPie (versione 3.2.4, datata 1 novembre 2024, letta il 9 novembre 2026) dice che = imposta un campo stringa e := imposta un valore JSON grezzo: un numero, un booleano, un array o un oggetto. I campi forniti in questo modo vengono inviati come corpo JSON per impostazione predefinita, quindi non aggiungi tu stesso un header Content-Type.

Nella nostra richiesta questo dà tre forme diverse:

  • model=deepseek-ai/DeepSeek-V4-Flash-0731 è una stringa, quindi =.
  • max_tokens:=200 è un numero, quindi :=. Con = invieresti la stringa "200".
  • messages:=[…] è un array di oggetti, quindi di nuovo :=, e il valore va tra virgolette singole così la shell lascia stare le virgolette doppie interne.

La documentazione dice anche che un corpo da stdin non può essere combinato con i campi da riga di comando, quindi scegli uno stile. Per un primo test i campi sono più brevi e più facili da modificare.

Verifica rapida

Cosa invia max_tokens=200 (con un semplice =)?

Mostra risposta

Risposta: La stringa "200"

= crea sempre una stringa. Per un numero ti serve :=, quindi scrivi max_tokens:=200.

Dove si trova la risposta#

La risposta segue il formato chat-completions di OpenAI. Stai cercando tre cose, e si trovano in posti diversi:

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

Il testo della risposta è choices[0].message.content. finish_reason è accanto ad esso nella stessa choice, e usage è al livello superiore. usage mostra quanti token hai inviato (prompt_tokens) e quanti ne ha scritti il modello (completion_tokens), il che è comodo per stimare il costo di una richiesta.

Dove guardare nella risposta: choices, message.content, finish_reason e usage
Tre campi da leggere in ogni risposta

Se vuoi solo il testo, passa il corpo a 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'
Provalo tu stessoProvalo: rendi il limite troppo piccolo e leggi finish_reasonMostra risposta

Cambia max_tokens:=200 in max_tokens:=5 ed esegui di nuovo. La risposta viene troncata, e finish_reason legge length invece di stop: il limite ha fermato il modello, non la fine del pensiero. Perché una risposta viene troncata spiega la soluzione.

Cambia il modello: modifica un campo#

Il modello è una stringa, quindi provarne un altro è una modifica di una parola. Entrambi gli id sotto sono disponibili su CheapTokens con un solo saldo; DeepSeek-V4-Flash ti dà un contesto di 380K e fino a 32.768 token di output per risposta, GLM-5.3-Flash un contesto di 390K e fino a 8.192.

Una richiesta, due modelli

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."}]'

Non sei sicuro di quale id usare? Elenca i modelli con GET /v1/models e copia la stringa esatta.

Quanto costa una richiesta di test#

Una domanda breve come questa costa poco. Diciamo che la domanda sia di circa 100 token e la risposta di circa 150: quella richiesta costa $0.000017. Mille di queste appaiono così, con input e output contati insieme:

Modello Per richiesta 1000 richieste OpenRouter, 1000 richieste
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 token di input e 150 token di output per richiesta. I prezzi per 1M di token sono attuali e cambiano insieme alle nostre tariffe; la colonna OpenRouter mostra i prezzi di riferimento per lo stesso carico di lavoro.

In totale, con input e output contati insieme, DeepSeek-V4-Flash risulta più economico di OpenRouter, e il prezzo è una tariffa fissa senza ore di punta. Le tariffe attuali per ogni modello sono sulla pagina dei prezzi.

Se non funziona#

  • Hai digitato messages=[…] con un semplice =. L'array viene inviato come stringa, non come elenco di messaggi. Usa := e virgolette singole attorno all'intero valore.
  • Il JSON dentro := non è valido. Ogni chiave e stringa richiede virgolette doppie, e le virgolette esterne devono essere singole. Se modifichi il testo del messaggio, mantieni le virgolette bilanciate.
  • La chiave è vuota. echo ${#CHEAPTOKENS_API_KEY} stampa la lunghezza senza mostrare la chiave; 0 significa che la variabile non è impostata in questo terminale.
  • L'id del modello è il nome breve. Usa il deepseek-ai/DeepSeek-V4-Flash-0731 completo. Per risposte 401 e 404, vedi chiave, URL di base o id del modello sbagliati.
  • Hai pensato a --session. La documentazione sull'autenticazione di HTTPie dice che i file di sessione memorizzano le credenziali in testo semplice, quindi tieni la chiave nell'ambiente e lascia --session fuori da questo comando.

Controlla la tua versione con http --version se un flag si comporta diversamente da quanto sopra. Preferisci Python? La stessa richiesta senza SDK è in prima richiesta in Python con requests. Per il riferimento completo dell'API, vedi la documentazione di CheapTokens.