OneProvider

SDK Node / TypeScript

Usa @anthropic-ai/sdk o il pacchetto npm openai con OneProvider sovrascrivendo baseURL. TypeScript, streaming con async iterator e runtime edge.

@anthropic-ai/sdk è il client consigliato. Anche il pacchetto ufficiale di OpenAI funziona con un override di baseURL.

Tutti i modelli, le funzionalità e i prezzi Indice della documentazione per agenti AI: https://oneprovider.dev/docs/llms.txt Sistema operativo Prima di iniziare: una chiave dalla tua area personale Apri la tua area personale: nel bot Telegram @oneprovider_robot («Area personale») oppure su app.oneprovider.dev . Premi «Emetti una chiave», dalle un nome (per esempio, questo client) e un limite di spesa, poi copia la chiave. Il saldo si ricarica nello stesso posto. Altro sull'area personale e sulle chiavi .

Installazione

bash
npm i @anthropic-ai/sdk
# or
npm i openai
# pnpm / yarn / bun all work too:
# pnpm add @anthropic-ai/sdk
# bun add @anthropic-ai/sdk

TypeScript

ts
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: process.env.ONEPROVIDER_KEY!,
baseURL: "https://api.oneprovider.dev",
});
const msg = await client.messages.create({
model: "claude-sonnet-5-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Say hi." }],
});
if (msg.content[0].type === "text") {
console.log(msg.content[0].text);
}

Compatibile con OpenAI

ts
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.ONEPROVIDER_KEY!,
baseURL: "https://api.oneprovider.dev/v1",
});
const resp = await client.chat.completions.create({
model: "claude-sonnet-5-5",
messages: [{ role: "user", content: "Say hi." }],
});
console.log(resp.choices[0].message.content);

Streaming tramite iteratore asincrono

ts
const stream = client.messages.stream({
model: "claude-sonnet-5-5",
max_tokens: 1024,
messages: [{ role: "user", content: "stream me a poem" }],
});
for await (const event of stream) {
if (event.type === "content_block_delta" && event.delta.type === "text_delta") {
process.stdout.write(event.delta.text);
}
}

Runtime edge

Funziona subito in Vercel Edge e Cloudflare Workers. L'SDK usa il fetch nativo disponibile in entrambi i runtime.

ts
// Cloudflare Worker
export default {
async fetch(req: Request, env: Env) {
const client = new Anthropic({ apiKey: env.ONEPROVIDER_KEY, baseURL: "https://api.oneprovider.dev" });
const msg = await client.messages.create({
model: "claude-haiku-5-5",
max_tokens: 256,
messages: [{ role: "user", content: "ping" }],
});
return Response.json(msg);
},
};
Non inviare mai la chiave al browser Anche in un Worker, se sono coinvolti dati degli utenti fai passare le richieste dal tuo backend: la chiave di OneProvider autorizza la spesa, non solo l'accesso.

Quale modello scegliere

Passa l'ID in model. claude-sonnet-5-5 è la scelta predefinita per la maggior parte del codice, claude-haiku-5-5 per chiamate veloci ad alto volume e claude-opus-5-5 per ragionamenti difficili. Con il pacchetto openai puoi usare anche ID GPT come gpt-6.1-terra. L'SDK Anthropic accetta baseURL: "https://api.oneprovider.dev", l'SDK OpenAI accetta baseURL: "https://api.oneprovider.dev/v1". Gli ID sono nella pagina dei modelli .

Errori comuni e soluzioni

404 NotFoundError

SDK Anthropic: baseURL: "https://api.oneprovider.dev" senza /v1. SDK OpenAI: baseURL: "https://api.oneprovider.dev/v1" con /v1.

401 AuthenticationError

process.env.ONEPROVIDER_KEY è undefined in questo processo, per esempio perché manca il caricamento di .env. Registra nel log la sua lunghezza, mai il suo valore.

429 RateLimitError

«Insufficient balance» significa che devi ricaricare l'area personale (non riprovare). Qualsiasi altro 429 è un limite di frequenza: rallenta e rispetta Retry-After.

Fetch fallito o timeout

Disattiva le impostazioni di VPN o proxy; usa lo stream per le risposte lunghe, perché una richiesta senza streaming deve iniziare entro 6 minuti.

400 su max_tokens

L'SDK Anthropic richiede max_tokens in ogni richiesta.

FAQ

Funziona sui runtime edge?

Sì, Vercel Edge e Cloudflare Workers funzionano perché l'SDK usa fetch.

È sicuro chiamarlo dal browser?

No. La chiave autorizza la spesa; chiama dal tuo backend.

Posso mantenere gli SDK ufficiali?

Sì, cambiano solo la chiave e baseURL, vedi migrare da Anthropic .

Risposte rapide

Quale base URL devo usare?

Claude Code e gli SDK Anthropic usano https://api.oneprovider.dev. Gli SDK OpenAI e i client compatibili con OpenAI usano https://api.oneprovider.dev/v1. Con una sola chiave funzionano entrambi; l'elenco dei modelli è nella pagina dei modelli , le tariffe nella pagina dei prezzi .

Come mi autentico?

Invia la chiave sk-… così com'è in x-api-key oppure in Authorization: Bearer: uno dei due, mai entrambi. Tieni la chiave in una variabile d'ambiente, non in un file che finisce nel commit. Altro sull'autenticazione .

Dove ottengo una chiave?

Apri la tua area personale nel bot Telegram @oneprovider_robot oppure su app.oneprovider.dev, ricarica il saldo e premi «Emetti una chiave». Ogni chiave può avere un proprio limite di spesa. Area personale e chiavi API .

Cosa significano 401, 404 e 429?

401: la chiave manca, è scritta male o è inviata nell'header sbagliato; incolla la chiave intera, senza virgolette né spazi. 404: di solito la base URL è sbagliata, per esempio manca /v1 o è doppio. 429 con “Insufficient balance”: il saldo dell'area personale o il limite di spesa della chiave è esaurito, quindi ricarica invece di riprovare; qualsiasi altro 429 è un limite di frequenza, quindi attendi il tempo indicato in Retry-After. Dettagli: codici di errore e risoluzione dei problemi .

Perché gli stream si interrompono o si resettano?

VPN e proxy VLESS spesso mettono in buffer gli SSE o rompono la negoziazione HTTP/2. OneProvider non ha restrizioni regionali e non mette in buffer gli stream: disattiva il proxy e riprova.

Dove chiedo se non basta?

Scrivi a @Oneproviderhelpbot su Telegram oppure apri «Assistenza» nell'area personale sul sito, indicando il codice di stato HTTP e il testo esatto dell'errore. Come funziona l'assistenza .

Ultimo aggiornamento: 2026-11-08 Hai trovato un errore? @Oneproviderhelpbot