Torna al blog

Per iniziareGuida

Passare da OpenRouter a CheapTokens: base_url, chiave, id del modello

Cambia base_url, chiave API e id del modello nell'SDK OpenAI (Python e JavaScript), invia una prima richiesta e verifica che abbia funzionato.

Di CheapTokens TeamPubblicato il 5 min di lettura

Copertina: passare un'app basata sull'SDK OpenAI da OpenRouter a CheapTokens cambiando base_url, chiave e id del modello
In questa pagina
  1. Cosa cambia davvero
  2. Il codice dopo il passaggio
  3. Verifica che abbia funzionato
  4. Quale modello sostituisce cosa
  5. Quanto costa lo stesso traffico
  6. Se non funziona
  7. Prima di pubblicare

La tua app chiama già OpenRouter tramite l'SDK OpenAI e vuoi che chiami CheapTokens. Cambi tre valori — base_url, la chiave API e l'id model — ed elimini due header opzionali. Il resto del codice resta com'è.

Qui sotto trovi le righe esatte per Python, JavaScript e curl, un modo rapido per confermare che il passaggio ha funzionato e una tabella che indica quale modello si adatta a quale compito. Se non hai mai inviato una richiesta a CheapTokens, la guida alla prima richiesta API copre account e chiave; la documentazione contiene il riferimento completo.

Cosa cambia davvero#

La quickstart di OpenRouter (verificata il 27 ottobre 2026) configura il client OpenAI con il base URL https://openrouter.ai/api/v1 e nomina i modelli come provider/model-name. CheapTokens parla lo stesso formato OpenAI Chat Completions su https://api.cheaptokens.dev/v1. Quindi la classe del client, chat.completions.create e il modo in cui leggi la risposta non cambiano.

Prima e dopo: i tre valori che cambiano passando da OpenRouter a CheapTokens
I tre valori da sostituire. La chiave è mostrata come variabile d'ambiente, mai nel codice.

È una sostituzione per riga:

  • base URL — https://api.cheaptokens.dev/v1 invece dell'indirizzo OpenRouter;
  • chiave API — una chiave del tuo account CheapTokens, letta da una variabile d'ambiente;
  • id del modello — l'id completo CheapTokens, ad esempio deepseek-ai/DeepSeek-V4-Flash-0731. Prendi gli id dalla documentazione CheapTokens: provider diversi nominano lo stesso modello in modo diverso, e gli id brevi delle etichette di prezzo non sono accettati.

E una eliminazione. Gli header HTTP-Referer e X-OpenRouter-Title di OpenRouter sono opzionali e alimentano solo le classifiche di OpenRouter. Rimuovili da default_headers / defaultHeaders; qui non ti servono.

Il codice dopo il passaggio#

Stessa richiesta, tre runtime. Scegli quello che usa la tua app.

Il tuo codice dopo il passaggio

Python

python
import os
from openai import OpenAI

client = OpenAI(
    base_url='https://api.cheaptokens.dev/v1',
    api_key=os.environ['CHEAPTOKENS_API_KEY'],
)

resp = client.chat.completions.create(
    model='deepseek-ai/DeepSeek-V4-Flash-0731',
    messages=[{'role': 'user', 'content': 'Reply with one word: ready'}],
    max_tokens=20,
)
print(resp.choices[0].message.content)

JavaScript

javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://api.cheaptokens.dev/v1',
  apiKey: process.env.CHEAPTOKENS_API_KEY,
});

const resp = await client.chat.completions.create({
  model: 'deepseek-ai/DeepSeek-V4-Flash-0731',
  messages: [{ role: 'user', content: 'Reply with one word: ready' }],
  max_tokens: 20,
});
console.log(resp.choices[0].message.content);

curl

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "deepseek-ai/DeepSeek-V4-Flash-0731", "messages": [{"role": "user", "content": "Reply with one word: ready"}], "max_tokens": 20}'

Un'altra cosa prima di eseguirlo. Se la tua richiesta contiene campi esclusivi di OpenRouter — liste di routing o fallback, preferenze del provider, id modello ~alias — quelli appartengono a OpenRouter. Mantieni la richiesta sui campi standard di Chat Completions: model, messages, temperature, max_tokens, stream.

Verifica che abbia funzionato#

Una risposta non è prova sufficiente. Stampa tre cose accanto ad essa: quale modello ha risposto, perché si è fermato e quanti token ha addebitato.

python
print(resp.model)
print(resp.choices[0].finish_reason)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)
L'ambiente e lo script di verifica eseguiti in un terminale
Imposta la chiave una volta, esegui la verifica, leggi model, finish_reason e usage.

finish_reason di stop significa che il modello ha terminato da solo. length significa che max_tokens ha interrotto la risposta. usage mostra i token di input e di output separatamente, e sono i due numeri su cui si basa la tua fattura — gli stessi due che tenevi sotto controllo su OpenRouter.

Provalo tu stessoProva: cosa dice finish_reason se imposti max_tokens a 1?Mostra risposta

Dice length — la risposta è stata interrotta da max_tokens. Un buon test per verificare che il tuo codice gestisca una risposta troncata.

Quale modello sostituisce cosa#

Scegli il modello in base al compito, non in base al nome che usavi su OpenRouter. I dati qui sotto provengono dal listino prezzi CheapTokens verificato il 27 ottobre 2026; un solo saldo copre tutti e tre i modelli e il prezzo non cambia con l'ora del giorno.

Modello id model Contesto Risposta max
DeepSeek-V4-Flash deepseek-ai/DeepSeek-V4-Flash-0731 380K 32.768 token
GLM-5.3-Flash zai-org/GLM-5.3-Flash 390K 8.192 token
MiniMax-M2.7 MiniMaxAI/MiniMax-M2.7 180K 8.192 token

Non sai quale riga è la tua? Parti da cosa fa l'app:

Scegli il tuo caso

Cosa fa principalmente la tua app?

Richieste brevi e frequenti — classificazione, estrazione, risposte al supporto

Prova zai-org/GLM-5.3-Flash: contesto da 390K, risposte fino a 8.192 token, ed è più economico di OpenRouter in totale, input e output sommati insieme.

Risposte lunghe, codice, cicli di agenti

Prova deepseek-ai/DeepSeek-V4-Flash-0731: risposte fino a 32.768 token, contesto da 380K, un unico prezzo a qualsiasi ora del giorno.

Un carico di lavoro costante per cui oggi paghi una tariffa OpenRouter elevata

Prova MiniMaxAI/MiniMax-M2.7: contesto da 180K, risposte fino a 8.192 token, e in totale risulta più economico di OpenRouter.

Quanto costa lo stesso traffico#

Supponiamo che il tuo bot invii 1.000 richieste, ciascuna con circa 500 token di input e 300 di output. È un'ipotesi — sostituiscila con i tuoi numeri da usage. La tabella qui sotto è aggiornata: i nostri prezzi e la colonna OpenRouter provengono dal listino attuale, input e output sommati insieme.

Modello Per richiesta 1000 richieste OpenRouter, 1000 richieste
GLM-5.3-Flash $0.000022 $0.022 $0.0434
DeepSeek-V4-Flash $0.000038 $0.0375 $0.0708
MiniMax-M2.7 $0.00007 $0.07 $0.51

500 token di input e 300 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.

Su DeepSeek-V4-Flash quelle 1.000 richieste arrivano a $0.0375. I prezzi completi sono nella pagina dei prezzi; il concetto di cosa ti viene addebitato è in input vs output tokens.

Se non funziona#

Dopo un passaggio, tre errori coprono la maggior parte dei problemi. Abbina il messaggio alla causa:

Abbina le coppie

Abbina ogni sintomo alla sua causa

  • 401 UnauthorizedLa chiave manca, è scritta male o è ancora quella di OpenRouter
  • 404 Not FoundIl percorso del base URL è sbagliato o l'id del modello non è un id CheapTokens completo
  • Risposta interrotta a metà frasemax_tokens è inferiore a quanto serve alla risposta; finish_reason dice length

L'articolo sulla risoluzione dei problemi 401 e 404 esamina ciascuno con i messaggi esatti, e cos'è base_url spiega perché una sola barra sbagliata rompe il percorso.

Prima di pubblicare#

Lista di controllo

Checklist del passaggio