April 20267 min readJohan Bretonneau

Migrar de OpenRouter a HiWay en 5 minutos
Un paso a paso concreto con código before/after completo

Migrar de OpenRouter a HiWay2LLM lleva 5 minutos. Código before/after completo en Python y Node.js, lo que se rompe, lo que sigue igual.

Migrar de OpenRouter a HiWay2LLM es una de las migraciones más pequeñas en infra moderna. Cambias un endpoint compatible OpenAI por otro. Tu SDK no cambia. Tu código de streaming no cambia. Tu tool use no cambia.

Lo que cambia: aportas tus propias claves de proveedor (BYOK), tu facturación se vuelve transparente, y los nombres de modelos pasan del formato author/model de OpenRouter a IDs de modelos directos.

Aquí tienes la ruta completa, cronometrada.

Los 5 pasos

  1. Registro en HiWay2LLM (60 segundos).
  2. Añadir tus claves de proveedor — Anthropic, OpenAI, Google, Mistral, lo que uses (2 minutos).
  3. Generar tu API key de HiWay (30 segundos).
  4. Cambiar base_url y la API key en tu código, actualizar los nombres de modelos (1 minuto).
  5. Lanzar tu test suite existente, verificar que nada se ha roto (1 minuto).

Eso es todo. El resto de este post es código.

Paso 1: Registro

Vete a app.hiway2llm.com, crea una cuenta. Sin tarjeta bancaria para el plan Free (2 500 requests/mes). Confirma tu email.

Paso 2: Añadir tus claves de proveedor

En el dashboard, ve a Providers y pega tus claves ya existentes:

  • Anthropic (para los modelos Claude)
  • OpenAI (para GPT y los modelos o-series)
  • Google (para Gemini)
  • Mistral, Groq, DeepSeek, xAI, Cerebras — opcionales

Tus claves se almacenan cifradas. Nunca salen de nuestra infra UE-hosted. HiWay las usa para llamar a los proveedores en tu nombre; los proveedores te facturan directamente al precio wholesale.

Este es el paso BYOK. Si vienes de OpenRouter, nunca has necesitado cuentas de proveedor — OpenRouter pagaba. Créalas ahora si hace falta; son 30 segundos de signup por proveedor.

Paso 3: Generar tu API key de HiWay

En el dashboard, ve a API KeysCreate new key. Dale un nombre (ej. production-web), cópiala. Tiene esta pinta:

hw_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Guárdala en tu secret manager o tu .env. No la commitees nunca.

Paso 4: Cambiar tu código

Aquí tienes todo el cambio de código. Como HiWay es compatible OpenAI, cualquier SDK que hable con OpenAI funciona sin modificar — solo cambias base_url y la API key.

Python (OpenAI SDK)

Antes (OpenRouter):

from openai import OpenAI

client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key=os.environ["OPENROUTER_API_KEY"],
)

response = client.chat.completions.create(
    model="anthropic/claude-sonnet-4.6",
    messages=[{"role": "user", "content": "Hello"}],
)

Después (HiWay):

from openai import OpenAI

client = OpenAI(
    base_url="https://app.hiway2llm.com/v1",
    api_key=os.environ["HIWAY_API_KEY"],
)

response = client.chat.completions.create(
    model="claude-sonnet-4-6",  # ID directo, sin prefijo author/
    messages=[{"role": "user", "content": "Hello"}],
)

Dos líneas cambiadas. Imports del SDK, streaming, tool use, structured outputs — todo idéntico.

Node.js (OpenAI SDK)

Antes:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://openrouter.ai/api/v1",
  apiKey: process.env.OPENROUTER_API_KEY,
});

const response = await client.chat.completions.create({
  model: "openai/gpt-4.1",
  messages: [{ role: "user", content: "Hello" }],
});

Después:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://app.hiway2llm.com/v1",
  apiKey: process.env.HIWAY_API_KEY,
});

const response = await client.chat.completions.create({
  model: "gpt-4-1",
  messages: [{ role: "user", content: "Hello" }],
});

Vercel AI SDK

Antes:

import { createOpenAI } from "@ai-sdk/openai";

const openrouter = createOpenAI({
  baseURL: "https://openrouter.ai/api/v1",
  apiKey: process.env.OPENROUTER_API_KEY,
});

const result = await streamText({
  model: openrouter("anthropic/claude-sonnet-4.6"),
  prompt: "Hello",
});

Después:

import { createOpenAI } from "@ai-sdk/openai";

const hiway = createOpenAI({
  baseURL: "https://app.hiway2llm.com/v1",
  apiKey: process.env.HIWAY_API_KEY,
});

const result = await streamText({
  model: hiway("claude-sonnet-4-6"),
  prompt: "Hello",
});

LangChain (Python)

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    base_url="https://app.hiway2llm.com/v1",
    api_key=os.environ["HIWAY_API_KEY"],
    model="claude-sonnet-4-6",
)

curl

curl https://app.hiway2llm.com/v1/chat/completions \
  -H "Authorization: Bearer $HIWAY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "messages": [{"role": "user", "content": "Hello"}]
  }'
Empezar a ahorrar →

Sin tarjeta de crédito

Lo que sigue igual

  • SDK: mantén el SDK compatible OpenAI que tienes. Sin reescritura.
  • Streaming: stream: true funciona idéntico.
  • Tool use / function calling: mismo schema.
  • Structured outputs / JSON mode: igual.
  • Objeto usage: response.usage.prompt_tokens y completion_tokens se devuelven como esperas.
  • Códigos de error: 429, 500, 502, 504 significan lo mismo.

Lo que cambia

Nombres de modelos

OpenRouter usa author/model (ej. anthropic/claude-sonnet-4.6). HiWay usa IDs directos (ej. claude-sonnet-4-6). Puedes encontrar el ID exacto para cualquier modelo soportado en el catálogo de modelos del dashboard.

Una tabla de mapeo rápida para los más habituales:

OpenRouterHiWay
anthropic/claude-opus-4.7claude-opus-4-7
anthropic/claude-sonnet-4.6claude-sonnet-4-6
anthropic/claude-haiku-4.6claude-haiku-4-6
openai/gpt-4.1gpt-4-1
openai/gpt-4.1-minigpt-4-1-mini
google/gemini-2.5-progemini-2-5-pro
mistralai/mistral-largemistral-large

Facturación

OpenRouter te facturaba directamente, markup incluido. HiWay no factura la inferencia — tus proveedores te facturan directamente al precio wholesale, y le pagas a HiWay una suscripción flat (Free, Build a 15 €, Scale a 39 €, o Business a 249 €/mes según el volumen). Dos facturas en lugar de una. Un poco más de setup, mucha más transparencia — y el smart routing recorta típicamente un 40-85% sobre la parte de inferencia encima.

Smart routing (opcional)

OpenRouter rutea hacia el modelo que especificas. HiWay puede hacer lo mismo — o, si pasas el ID mágico auto, elige el modelo óptimo por request según la complejidad en menos de 1 ms:

response = client.chat.completions.create(
    model="auto",  # HiWay elige el tier correcto
    messages=[{"role": "user", "content": "Hello"}],
)

Los saludos cortos van a Haiku. El razonamiento duro a Opus. Todo lo intermedio a Sonnet. Ves qué modelo se ejecutó realmente en los metadata de la respuesta.

Es opcional. Si quieres control total, especifica los nombres de modelos explícitamente.

Paso 5: Verificar

Lanza tu test suite existente contra la nueva base_url. Las assertions que pasaban con OpenRouter deberían pasar idénticas con HiWay — misma superficie API, misma semántica.

Un smoke test rápido:

from openai import OpenAI

client = OpenAI(
    base_url="https://app.hiway2llm.com/v1",
    api_key=os.environ["HIWAY_API_KEY"],
)

r = client.chat.completions.create(
    model="claude-haiku-4-6",
    messages=[{"role": "user", "content": "Responde OK."}],
)
assert "ok" in r.choices[0].message.content.lower()
print("HiWay funciona.")

Si imprime HiWay funciona., tu migración está terminada.

Plan de rollback

Si algo falla, repunta base_url hacia https://openrouter.ai/api/v1 y tu app vuelve a OpenRouter al instante. HiWay no te hace lock-in — todo el sentido del BYOK es que tus claves de proveedor son tuyas, y cualquier router compatible OpenAI puede usarlas.

Trampas clásicas

  • Typos en el ID del modelo: el formato es claude-sonnet-4-6 (guiones, sin puntos, sin prefijo author). El dashboard tiene un botón copy al lado de cada uno.
  • Clave de proveedor que falta: si llamas a claude-sonnet-4-6 pero no has añadido tu clave de Anthropic, HiWay devuelve un mensaje de error claro diciéndote qué proveedor falta.
  • Rate limits: aplican los rate limits de tu proveedor, no los de HiWay. Si pegabas en el quota compartido de OpenRouter, ahora pegarás en tu propio quota de Anthropic. Generalmente tienes más margen, no menos.
  • Stats de uso: la UI de uso por request de OpenRouter está en su dashboard. La de HiWay está en el nuestro. Si tenías dashboards BI apuntando a OpenRouter, repúntalos.

El takeaway

Cinco minutos. Un cambio de base_url. Mismo SDK. Si la migración tarda más, algo va mal — generalmente una clave de proveedor olvidada o un typo en el ID del modelo.

La ganancia más grande es lo que pasa después: sin markup en la inferencia, facturación transparente de cada proveedor, smart routing opcional, y claves BYOK que te siguen si te marchas algún día.


Próximo: por qué construimos HiWay en primer lugar — la founder's story.

Share

Was this useful?

Comments

Be the first to comment.