OneProvider

SDK de Python

Usa el paquete anthropic u openai de Python con OneProvider cambiando solo base_url. Clientes síncronos y asíncronos, streaming, herramientas y reintentos.

Dos opciones en Python: anthropic para código nativo de Claude y openai para migraciones. Ambos funcionan cambiando solo base_url.

Todos los modelos, capacidades y precios Índice de la documentación para agentes de IA: https://oneprovider.dev/docs/llms.txt Sistema operativo Antes de empezar: una clave de tu panel Abre tu panel: el bot de Telegram @oneprovider_robot (Panel) o app.oneprovider.dev . Pulsa “Emitir una clave”, ponle un nombre (por ejemplo, este cliente) y un límite de gasto, y copia la clave. El saldo se recarga en el mismo lugar. Más sobre el panel y las claves .

Instalación

bash
pip3 install anthropic
# or, for OpenAI-style code:
pip3 install openai
# In a venv (recommended):
# python3 -m venv .venv && source .venv/bin/activate
# pip install anthropic openai

Anthropic SDK

python
import os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ["ONEPROVIDER_KEY"],
base_url="https://api.oneprovider.dev",
)
resp = client.messages.create(
model="claude-sonnet-5-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Say hi."}],
)
print(resp.content[0].text)

Compatible con OpenAI

python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ONEPROVIDER_KEY"],
base_url="https://api.oneprovider.dev/v1",
)
resp = client.chat.completions.create(
model="claude-sonnet-5-5",
messages=[{"role": "user", "content": "Say hi."}],
)
print(resp.choices[0].message.content)

Cliente asíncrono

python
import asyncio
from anthropic import AsyncAnthropic
async def main():
client = AsyncAnthropic(base_url="https://api.oneprovider.dev")
resp = await client.messages.create(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{"role": "user", "content": "Hi async."}],
)
print(resp.content[0].text)
asyncio.run(main())

Streaming

python
with client.messages.stream(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{"role": "user", "content": "Tell me a haiku."}],
) as stream:
for chunk in stream.text_stream:
print(chunk, end="", flush=True)

Uso de herramientas

python
tools = [{
"name": "get_weather",
"description": "Get current weather for a city.",
"input_schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
}]
resp = client.messages.create(
model="claude-sonnet-5-5",
max_tokens=1024,
tools=tools,
messages=[{"role": "user", "content": "What's the weather in Frankfurt?"}],
)
# resp.stop_reason == "tool_use"
# Inspect resp.content for tool_use blocks.

Reintentos y manejo de errores

python
from anthropic import APIStatusError
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=0.5, min=0.5, max=4),
retry_error_cls=APIStatusError,
)
def call():
return client.messages.create(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{"role": "user", "content": "Hi."}],
)
No escribas la clave en el código Lee siempre la clave desde una variable de entorno o un gestor de secretos. Las claves escritas en el código acaban filtrándose al control de versiones tarde o temprano.

Qué modelo elegir

Pasa el ID en model. claude-sonnet-5-5 es la opción por defecto para la mayoría del código, claude-haiku-5-5 para llamadas rápidas y de gran volumen y claude-opus-5-5 para razonamiento difícil. La forma compatible con OpenAI también acepta ID de GPT como gpt-6.1-terra. Usa la forma de Anthropic con https://api.oneprovider.dev y la forma de OpenAI con https://api.oneprovider.dev/v1. Los ID están en la página de modelos .

Errores frecuentes y soluciones

404 NotFoundError

SDK de Anthropic: base_url="https://api.oneprovider.dev" sin /v1. SDK de OpenAI: base_url="https://api.oneprovider.dev/v1" con /v1.

401 AuthenticationError

La variable de entorno está vacía o tiene un salto de línea al final. Imprime len(os.environ["ONEPROVIDER_KEY"]) antes de la llamada.

429 RateLimitError

Revisa el mensaje: “Insufficient balance” significa que hay que recargar el saldo (no reintentes); cualquier otro 429 es un límite de frecuencia, así que espera un poco más entre intentos y respeta Retry-After.

APIConnectionError o tiempo de lectura agotado

Desactiva la VPN o las variables de proxy (HTTPS_PROXY) y usa streaming para respuestas largas: una solicitud sin streaming debe empezar a responder en un máximo de 6 minutos.

400 sobre max_tokens

El SDK de Anthropic exige max_tokens en cada solicitud.

Preguntas frecuentes

¿Puedo conservar los SDK oficiales?

Sí. Solo cambian la clave y base_url; consulta migrar desde Anthropic y migrar desde OpenAI .

¿Funciona el streaming?

Sí, con ambos SDK; consulta Streaming .

¿Dónde guardo la clave?

En una variable de entorno, nunca en el repositorio.

Respuestas rápidas

¿Qué base URL uso?

Claude Code y los SDK de Anthropic usan https://api.oneprovider.dev. Los SDK de OpenAI y los clientes compatibles con OpenAI usan https://api.oneprovider.dev/v1. Una misma clave funciona con ambas; la lista de modelos está en la página de modelos y las tarifas, en la página de precios .

¿Cómo me autentico?

Envía la clave sk-… tal cual en x-api-key o en Authorization: Bearer: en uno de los dos, nunca en ambos. Guarda la clave en una variable de entorno, no en un archivo que se suba al repositorio. Más sobre la autenticación .

¿Dónde obtengo una clave?

Abre tu panel en el bot de Telegram @oneprovider_robot o en app.oneprovider.dev, recarga el saldo y pulsa “Emitir una clave”. Cada clave puede tener su propio límite de gasto. Panel y claves de API .

¿Qué significan 401, 404 y 429?

401: falta la clave, está mal escrita o se envió en un encabezado equivocado; pega la clave completa, sin comillas ni espacios. 404: casi siempre es una base URL incorrecta, por ejemplo con /v1 ausente o duplicado. 429 con “Insufficient balance”: se agotó el saldo del panel o el límite de gasto de la clave, así que recarga en lugar de reintentar; cualquier otro 429 es un límite de frecuencia, así que espera según Retry-After. Detalles: códigos de error y solución de problemas .

¿Por qué se cortan o se reinician los streams?

Las VPN y los proxies VLESS suelen almacenar SSE en búfer o romper la negociación de HTTP/2. OneProvider no tiene restricciones regionales y no almacena los streams en búfer: desactiva el proxy y reintenta.

¿Dónde pregunto si esto no basta?

Escribe a @Oneproviderhelpbot en Telegram o abre “Soporte” en el panel web, con el código de estado HTTP y el mensaje de error exacto. Cómo funciona el soporte .

Última actualización: 2026-11-08 ¿Encontraste un error? @Oneproviderhelpbot