{
  "id": 12315964,
  "title": "Stop managing six AI vendor accounts: one key for 109 models",
  "url": "https://urgent.news/2026/10/06/stop-managing-six-ai-vendor-accounts-one-key-for-109-models",
  "topic": "ai",
  "section": "AI",
  "published": "2026-10-06T06:12:09.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/2048lr/stop-managing-six-ai-vendor-accounts-one-key-for-109-models-194a"
  },
  "original_language": "en",
  "account": "The migration process involves making only two changes to existing code if it currently uses the OpenAI SDK. The gateway requires switching the base URL from https://api.openai.com/v1 to https://api.liurun.click/v1, and updating the API key. The client import also needs to be updated to use the new base URL. After these changes, the code can still create chat completions using any of 109 available models, with the model string being the only configuration difference between vendors. A fallback chain of models can be implemented as a list, trying each model in order until successful. Streaming responses is standard Server-Sent Events format. The gateway accepts the Anthropic SDK's /v1/messages endpoint with a simple base URL swap to https://api.liurun.click. The pricing is per model, with input and output token costs displayed in USD. Billing is prepaid with no subscription, minimums, or contracts. The system provides detailed logs of token usage and cost for each request. If self-hosting, the gateway is open-source and can be deployed on any platform. A checklist is provided to verify the migration works correctly, including testing streaming, cache token metering, and confirming the model list includes all 109 models.",
  "summary": "The migration is two lines If your code already uses the OpenAI SDK, a gateway that speaks the OpenAI wire format requires exactly two changes: from openai import OpenAI client = OpenAI ( base_url = \" https://api.liurun.click/v1 \" , # was \"https://api.openai.com/v1\" api_key = \" sk-your-liurun-key \" , # was your OpenAI key ) resp = client . chat . completions . create ( model = \" claude-sonnet-5 \"…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}