{"language":"en","translation":{"brand":{"name":"Route Key","label":"AI routing control plane"},"nav":{"home":"Home","dashboard":"Dashboard","models":"Models","docs":"Docs","blog":"Blog","about":"About","privacy":"Privacy","terms":"Terms"},"menus":{"dashboard":{"eyebrow":"Workspace","title":"Console overview, API keys, and usage logs","items":{"overview":"Overview","overviewDesc":"Review account quota, usage, and model distribution.","wallet":"Wallet","walletDesc":"Recharge balance, redeem codes, and review top-up orders.","apiKeys":"API Keys","apiKeysDesc":"Review token status, balance, and copy masked key values.","usageLogs":"Usage Logs","usageLogsDesc":"Inspect recent request records, cost, tokens, and latency.","settings":"Settings","settingsDesc":"Keep the account entry aligned with the main console."}},"models":{"eyebrow":"Model access","title":"GPT, Claude, Gemini, DeepSeek, Grok, Qwen, and more","items":{"catalog":"Model Catalog","catalogDesc":"Compare providers, context windows, endpoints, health, and routing posture.","pricing":"Live Pricing","pricingDesc":"Show model ratios and billing groups before requests are routed.","routing":"Smart Routing","routingDesc":"Select a specific model or let policy choose by price, speed, and availability.","multimodal":"Multimodal APIs","multimodalDesc":"Support chat, responses, images, audio, and custom upstream endpoints."}},"docs":{"eyebrow":"Developer onboarding","title":"Replace the base URL and keep your workflow","items":{"quickstart":"Quickstart","quickstartDesc":"Use one API key with OpenAI-compatible request formats.","compatibility":"SDK Compatibility","compatibilityDesc":"Keep existing SDKs, tools, and request formats where possible.","examples":"Code Examples","examplesDesc":"Copy cURL, JavaScript and server-side snippets for common tasks.","billing":"Billing Guide","billingDesc":"Understand quotas, groups, token prices, and usage logs."}},"blog":{"eyebrow":"Product thinking","title":"Guides for building cheaper and more reliable AI apps","items":{"savings":"Cost Playbooks","savingsDesc":"How teams reduce token spend without rewriting their app.","routing":"Routing Notes","routingDesc":"Practical tradeoffs between price, latency, availability, and quality.","models":"Model Updates","modelsDesc":"Track newly supported providers, aliases and endpoint capabilities.","builders":"Builder Stories","buildersDesc":"Use cases for chatbots, AI apps, content workflows, and internal tools."}},"about":{"eyebrow":"Company profile","title":"Brand, team, and positioning","items":{"origin":"Origin","originDesc":"How Route Key started, when it was founded, and how the product evolved.","team":"Team","teamDesc":"Founder background, core members, and practical delivery capability.","position":"Positioning","positionDesc":"What the site does, which services it provides, and the mission behind it.","mission":"Mission","missionDesc":"Why the product exists and the standards it aims to keep."}}},"actions":{"exploreModels":"Explore models","readDocs":"Read docs","copyRequest":"Copy request","copyFailed":"Copy failed","getYourKey":"Create API key","copied":"Copied","viewBlueprint":"View API blueprint","inspectPricing":"Inspect pricing","changeLanguage":"Change language","switchTheme":"Switch theme","actions":"Actions","openMenu":"Open menu","closeMenu":"Close menu","cancel":"Cancel","close":"Close","confirm":"Confirm","clear":"Clear","reset":"Reset","refresh":"Refresh","previous":"Previous","next":"Next","search":"Search","done":"Done"},"hero":{"status":"Live gateway telemetry","fallback":"Demo data, ready for backend sync","kicker":"OpenAI-compatible routing layer","titleA":"Route every","titleB":"request.","accessibleTitle":"OpenAI-compatible AI API gateway","definition":"OpenAI-compatible AI API gateway","description":"Route Key is an OpenAI-compatible AI API gateway for GPT, Claude, Gemini, DeepSeek, Grok, Qwen, and custom channels. Use one API key, compare model cost, and route requests by health, price, and latency.","discountBadge":"Cost signal","promises":{"aggregate":"Unified model access","discount":"Price-aware routing","compatible":"Drop-in compatibility"},"liveRequests":"Live requests","routedToday":"Requests routed","avgDecision":"Avg routing time","protectedSpend":"Spend saved"},"support":{"eyebrow":"Model routing fabric","title":"GPT, Claude, Gemini, DeepSeek, Qwen and private channels","description":"Use one account and one compatible gateway across chat, coding, reasoning, long-context, multimodal, and regional model capacity."},"contactWidget":{"trigger":"Contact us","title":"Contact us","intro":"Choose the channel that best matches your request.","liveChatTitle":"Chat with us","liveChatDescription":"For questions you want help with while using Route Key.","supportTitle":"Customer support","supportDescription":"For account, billing, technical, or follow-up requests.","supportSubject":"Route Key support","close":"Close contact panel"},"siteNotice":{"title":"System announcements","loading":"Loading announcement...","empty":"There is no current announcement.","notifications":"Notifications","timeline":"Timeline","dismissToday":"Hide today","close":"Done"},"messageCenter":{"title":"Message center","markAllRead":"Mark all as read","close":"Close","back":"Back to messages","openLink":"Open link","loading":"Loading messages...","empty":"You are all caught up.","types":{"adminMessage":"Admin message","balanceWarning":"Balance alert","securityAlert":"Security alert","supportTicket":"Support ticket","systemAnnouncement":"Announcement","systemErrorAlert":"Critical alert"}},"aboutPage":{"badge":"About Route Key","title":"A focused brand for AI routing, control, and visibility","description":"Route Key presents a restrained cyber-modern interface for AI model access, platform operations, and multilingual product delivery.","heroLabel":"Company brief","heroCaption":"Brand story, team strength, and product positioning in one place.","indexLabel":"About map","backToTop":"Back to top","signals":{"story":"Brand story","team":"Team profile","positioning":"Positioning"},"sections":{"story":{"title":"Brand story","content":["Route Key started as a compact control plane for teams that needed cleaner model access, clearer routing, and fewer hidden costs.","The project was established in 2026 with a simple goal: turn fragmented AI traffic into a reliable operating surface that feels calm, precise, and easy to trust."]},"path":{"title":"Our path","content":["The first release focused on compatibility, pricing visibility, and a routing console that could work across common AI providers.","It then expanded into live usage telemetry, account workflows, documentation, and a multilingual interface for international teams."]},"team":{"title":"Team profile","content":["The company is led by a founder team with product, infrastructure, and frontend experience.","Core contributors cover routing logic, platform reliability, interface design, and support operations, with a focus on practical execution over broad claims."]},"capability":{"title":"Capability","content":["Route Key is built as an AI routing and control platform for individuals, builders, and teams that need one entry point for models, billing, usage, and policy.","The service is designed around stable access, observable behavior, and business-grade presentation across dark and light themes."]},"positioning":{"title":"Positioning","content":["We provide a clean routing layer, model access surface, and console tooling for teams that want to manage AI work without stitching together many separate systems.","The brand direction stays direct: less noise, clearer control, and a stronger premium technical identity."]},"mission":{"title":"Mission","content":["Our mission is to make AI infrastructure easier to operate, easier to inspect, and easier to scale across languages, markets, and devices.","We aim to keep the product fast on desktop and mobile while maintaining a restrained cyber-modern visual language."]}},"mobile":{"imageAlt":"company campus","title":"AI routing control brand","lead":"A compact gateway for model access, cost policy, and traffic visibility.","briefTitle":"Brand signals in three layers","routing":"Routing","routingValue":"Cost + health","security":"Security","securityValue":"Key isolation","ecosystem":"Ecosystem","ecosystemValue":"Multi-vendor","storySummary":"Built for teams that want one calm surface instead of scattered provider work.","capabilitySummary":"Unifies model access, billing, usage, policy, and observable traffic behavior.","missionSummary":"Keeps AI infrastructure easier to inspect, operate, and scale across devices.","statement":"Fast on desktop and mobile, with a restrained cyber-modern visual language."}},"illustrations":{"motionEyebrow":"Policy flight path","motionTitle":"Requests enter once. Policy chooses the best route.","motionDescription":"SDKs keep their request shape while Route Key resolves catalog metadata, channel pricing, streaming continuity, and failover posture behind the gateway.","motionAlt":"Animated route map showing API requests moving through catalog, policy, savings and compatibility nodes","routingImageAlt":"Compact dashboard illustration showing requests routed to a highlighted model lane","pricingImageAlt":"Compact analytics illustration showing a descending AI cost curve","modelImageAlt":"Compact model catalog illustration showing AI capability cards around an account module","coreLabel":"Gateway","catalogLabel":"Catalog","policyLabel":"Policy","savingsLabel":"Savings","compatLabel":"Compatibility","readoutLabel":"routing delta"},"footer":{"ariaLabel":"Site footer","socialAriaLabel":"Route Key social profiles","github":"GitHub","contact":"Contact","email":"Email","privacy":"Privacy","terms":"Terms","copyright":"Copyright {{year}} Route Key. All rights reserved.","restriction":"Route Key is prohibited for users located in mainland China. If use from mainland China is discovered, Route Key may suspend or terminate the account,","refund":"and any paid fees or remaining balance will not be refunded."},"command":{"title":"Traffic console","subtitle":"Policy chooses a healthy route before your app notices.","inbound":"Inbound","policy":"Policy","selected":"Selected","health":"Health","routeScore":"Routing score","costDelta":"Cost delta","failover":"Failover","streaming":"Streaming","accepted":"accepted","evaluated":"evaluated","dispatched":"dispatched"},"mobile":{"eyebrow":"AI routing control plane","title":"Route every request.","description":"Use one API key and compatible gateway to compare AI model cost, then steer GPT, Claude, Gemini, DeepSeek, Qwen, and custom channels.","quickModels":"Models","quickDocs":"Docs","quickBlog":"Blog","drawerSubtitle":"Control plane"},"sections":{"stackEyebrow":"Control plane","stackTitle":"A colder cockpit for AI API traffic","stackDescription":"Route Key separates application code from provider sprawl: one API key, one compatible entry point, live model pricing, policy dispatch, masked keys, streaming continuity, and usage telemetry.","modelsEyebrow":"Lane intelligence","pricingTitle":"Inspect model routes before traffic moves","pricingDescription":"The model matrix exposes provider, context, endpoint, price posture, and latency signals so teams can compare AI API cost before choosing a route.","developerEyebrow":"Integration panel","developerTitle":"Swap the endpoint, keep the workflow"},"cards":{"catalog":"Lane catalog","catalogDesc":"Map providers, endpoints, context windows, and health posture in one dense matrix.","policy":"Policy dispatch","policyDesc":"Resolve each request by price, latency, and availability before dispatch.","billing":"Key vault","billingDesc":"Connect once, mask credentials, and track quota and balance from the same console.","speed":"Stream continuity","speedDesc":"Keep SSE-style responses alive while the gateway selects a healthy channel.","privacy":"Scoped telemetry","privacyDesc":"Keep logs focused on account visibility, cost, token, and request diagnostics.","failover":"Cold standby lanes","failoverDesc":"Shift away from expensive or unhealthy routes without changing application code."},"home":{"offer":{"eyebrow":"Cost posture","label":"Delta","title":"Price-aware routing","description":"Policy can prefer lower-cost healthy channels while preserving compatible request formats."},"speed":{"label":"Decision","title":"Sub-second policy decision","description":"Gateway policy selects a healthy channel before the response stream reaches your app."},"privacy":{"title":"Privacy guardrails","value":"Scoped","description":"API keys are masked, account data stays behind the console, and logs focus on usage visibility."},"security":{"title":"Account isolation","description":"User tokens, billing, and preferences stay tied to the signed-in account."},"advantagesEyebrow":"Operator posture","advantagesTitle":"Less provider drift, cleaner traffic control","steps":{"createKey":"Issue key","createKeyDesc":"Generate or copy an API token from Dashboard.","replaceUrl":"Replace base URL","replaceUrlDesc":"Point your SDK to the Route Key compatible endpoint.","sendRequest":"Route traffic","sendRequestDesc":"Choose a model route or let policy pick a healthy channel."},"agentBridge":{"title":"Use Route Key with coding agents","description":"Codex · Claude Code · Gemini CLI · Cursor","action":"Configure agents"},"requestConsole":{"title":"Request console"},"faq":{"eyebrow":"FAQ","title":"Questions before requests enter the gateway","description":"Short answers for teams checking model coverage, compatibility, pricing posture, privacy, and streaming behavior.","items":{"models":{"q":"What is Route Key, and which models can it connect?","a":"Route Key is an OpenAI-compatible AI API gateway and routing control plane. It exposes the models enabled in the current catalog, including GPT, Claude, Gemini, DeepSeek, Qwen, and compatible custom channels. Open the Models page to compare vendor, context length, endpoint support, group availability, and the exact model ID before sending production traffic."},"compatibility":{"q":"Is Route Key compatible with the OpenAI SDK and APIs?","a":"Usually yes. Most integrations keep the familiar OpenAI request body and SDK code: replace the base URL with the Route Key compatible endpoint, set a Route Key API key, and choose a supported model ID. Test a short non-streaming request first, then add streaming, tools, or longer context after the response and usage log look correct."},"pricing":{"q":"How does Route Key route requests and control AI API costs?","a":"The gateway evaluates available routes using configured group ratios, input and output token prices, cache settings, latency, and health. You can pin a model when consistency matters or let policy choose a healthy lower-cost route. Compare the selected model, tokens, group, and cost in Usage Logs so savings are measurable rather than assumed."},"privacy":{"q":"Can I monitor API usage, costs, and request logs?","a":"Yes. API keys are masked in the console, while Dashboard usage logs provide account visibility into request status, selected model, cost, input and output token counts, latency, and timestamps, subject to configured privacy controls. Use separate keys for applications or coding agents so access can be rotated and usage can be attributed cleanly."},"speed":{"q":"Does Route Key support failover and streaming responses?","a":"Route selection happens before dispatch, so the gateway can avoid an unhealthy or unavailable channel before your request is sent. For streaming endpoints, Route Key retains SSE-style responses while selecting a healthy route. Check latency and error records after rollout, and configure a fallback policy for provider incidents instead of retrying blindly in every client."},"production":{"q":"How do I start using Route Key in production?","a":"Create a dedicated API key in the Dashboard, point your SDK to the Route Key compatible endpoint, select an exact model ID, and send a small test request. Confirm the response, quota, endpoint, token usage, latency, and cost in Usage Logs. Then add streaming, concurrency, retries, and fallback rules one at a time so a provider change is observable and reversible."}}}},"labels":{"models":"Models","vendors":"Vendors","endpoints":"Endpoints","groups":"Groups","price":"Price","context":"Context","latency":"Latency","endpoint":"Endpoint","updated":"Updated","connected":"Connected","demo":"Demo mode","live":"Live","trafficControl":"AI traffic control","perMillionTokens":"/ M tokens","savePercent":"Save {{percent}}%","lanes":"{{count}} lanes"},"auth":{"authMode":"Authentication mode","login":"Sign In","register":"Register","loginTitle":"Login to Dashboard","registerTitle":"Create an account","forgotTitle":"Recover password","resetConfirmTitle":"Confirm password reset","loginDescription":"Use your account to open the console.","registerDescription":"Register with the account endpoint.","forgotDescription":"Enter the email bound to your account. We will send a reset link.","resetConfirmDescription":"Confirm the email reset link and generate a new temporary password.","username":"Username","usernamePlaceholder":"Enter username","usernameRequired":"Username is required.","usernameFormat":"Username can only contain letters, numbers, and underscores.","usernameLength":"Username must be {{min}}-{{max}} characters.","email":"Email","emailAddress":"Email Address","emailOptional":"Email Address (optional)","emailOrUsername":"Email or username","emailOrUsernamePlaceholder":"Enter email or username","emailPlaceholder":"[email protected]","password":"Password","passwordPlaceholder":"Enter password","passwordRequired":"Password is required.","passwordRuleLength":"8-64 characters.","passwordRuleTypes":"Use a strong mixed password.","passwordRuleNoEdgeSpaces":"No spaces at the beginning or end.","passwordRuleNoIdentity":"Do not reuse your username or email in the password.","confirmPassword":"Confirm password","repeatPassword":"Repeat password","repeatPasswordPlaceholder":"Type your password again","showPassword":"Show password","hidePassword":"Hide password","verificationCode":"Verification code","verificationCodePlaceholder":"Optional when backend does not require it","sendCode":"Send code","codeCooldown":"Resend ({{seconds}})s","signIn":"Sign in","signInWithEmail":"Sign in with Email","signUpWithEmail":"Sign up with Email","continueWith":"Or continue with","google":"Google","github":"GitHub","signInWithProvider":"Sign in with {{provider}}","signUpWithProvider":"Sign up with {{provider}}","oauthStartFailed":"Unable to start provider login. Please try again.","oauthProcessing":"Securing provider session...","oauthSuccess":"Provider session confirmed.","oauthCallbackTitle":"OAuth handshake","oauthCallbackDescription":"Keep this window open while the console verifies the identity token.","oauthCallbackInvalid":"Invalid OAuth callback parameters.","oauthCallbackFailed":"Provider login failed. Please try again.","forgotPassword":"Forgot password?","sendResetEmail":"Send reset email","resetEmailCooldown":"Resend ({{seconds}})s","confirmReset":"Confirm reset","backToLogin":"Back to login","generatedPassword":"Generated password","copyPassword":"Copy","createAccount":"Create account","needAccount":"No account? Register","haveAccount":"Already have an account? Login","required":"Username and password are required.","resetEmailRequired":"Email is required to reset your password.","emailRequired":"Email is required when email verification is enabled.","emailInvalid":"Enter a valid email address.","captchaImageAlt":"Captcha image","captchaPlaceholder":"Enter captcha","passwordTooShort":"Password must be at least {{min}} characters long.","passwordTooLong":"Password must be at most {{max}} characters long.","confirmPasswordRequired":"Please confirm your password.","passwordMismatch":"The two passwords do not match.","verificationCodeRequired":"Please enter the verification code.","verificationCodeInvalid":"Verification code must be {{length}} characters long.","failed":"Authentication failed. Please try again.","successTitle":"Signed in","registerReadyTitle":"Registration successful","registerReadyLogin":"Please sign in to continue.","registerDisabled":"Registration is currently disabled.","verificationSentTitle":"Code sent","verificationSent":"Check your email for the verification code.","verificationFailed":"Failed to send verification code. Please try again.","resetEmailSentTitle":"Reset email sent","resetEmailSent":"Check your inbox and open the password reset link.","resetEmailFailed":"Failed to send reset email. Please try again.","resetLinkInvalid":"Invalid reset link. Please request a new password reset.","passwordResetSuccessTitle":"Password reset","passwordResetSuccess":"A new temporary password has been generated and copied when possible.","passwordResetFailed":"Failed to reset password. Please request a new reset link.","passwordCopiedTitle":"Password copied","passwordCopied":"The generated password is in your clipboard.","loginSuccess":"Dashboard is ready.","registerVerifyTitle":"Security verification","riskEmbeddedBrowserWarning":"Your embedded browser environment may be blocked by risk control. Open this page in a standard browser and try again.","riskNetworkWarning":"The current network environment is still being rejected by risk control. Change network or try again later.","riskVerifyHint":"Additional verification is required before retrying registration.","riskVerifyTitle":"Risk control verification","securityCheckDescription":"Complete the configured security check to continue.","turnstileLoadFailed":"Cloudflare Turnstile failed to load. Check your network or refresh the page.","turnstileTimeout":"Cloudflare Turnstile timed out. Please retry the verification."},"gameCaptcha":{"completed":"Verification complete","failedRetrying":"Verification failed. Refreshing challenge.","failedRetryingWithReason":"{{reason}}. Refreshing challenge.","instruction":"Drag modules to build a safe path and avoid hazards.","invalidPlacement":"This module cannot be placed there.","loading":"Loading challenge...","loadFailed":"Game verification failed to load.","pathNotReady":"The path is not ready. Adjust the modules and retry.","required":"Complete the game verification first.","secureTransportFailed":"This browser does not support secure verification. Please upgrade and retry.","verifyFailed":"Game verification failed.","verifyPath":"Verify path"},"account":{"menu":"Account menu","apiKeys":"API Keys","billing":"Balance \u0026 Billing","tickets":"Tickets","settings":"Settings","logout":"Log Out"},"pages":{"docs":{"eyebrow":"Developer documentation"},"models":{"eyebrow":"Model catalog","endpointEyebrow":"Endpoint spotlight"},"legal":{"navLabel":"Legal navigation","signalLabel":"Legal signals"},"privacy":{"eyebrow":"Privacy policy","title":"Privacy Policy","lead":"How Route Key handles account, API, usage, billing, and support data.","mapLabel":"Privacy sections","signals":{"handling":"Data handling","security":"Security posture","choices":"User choices"}},"terms":{"eyebrow":"Terms of use","title":"Terms of Use","lead":"Service access, account responsibility, billing, and platform obligations.","mapLabel":"Terms sections","signals":{"access":"Service access","obligations":"User obligations","commercial":"Commercial terms"}}},"docsPage":{"title":"Docs","subtitle":"Integration guide","breadcrumbLabel":"Breadcrumb","badge":"Developer documentation","backToTop":"Back to top","heading":"Connect once, route every model.","description":"A Route Key documentation surface for the compatible endpoints: create keys, replace the base URL, choose models, then inspect usage and billing from Dashboard.","search":"Search docs","searchPlaceholder":"Search endpoint, category, method...","itemCount":"{{count}} items","modelsIndexed":"models indexed","endpointCount":"{{count}} endpoints","modelEndpoints":"model API endpoints","providerCategories":"provider categories","modelApiGroup":"model APIs","referenceDescription":"Use Route Key with provider-compatible request formats for OpenAI, Anthropic, Gemini, Qwen, DeepSeek, Grok, MiniMax, and more.","commonErrors":"Common Errors","baseUrl":"Base URL setup","categories":{"quickstart":"Quick Start","concepts":"Core Concepts","models":"Choosing a Model","reference":"API Reference"},"quickstart":{"createKey":"Create a key","createKeyDesc":"Open Dashboard \u003e API Keys, create or copy a token, and keep the full key private.","setBaseUrl":"Set baseURL","setBaseUrlDesc":"Point your SDK or HTTP client to the Route Key relay URL while keeping familiar request bodies.","pickModel":"Pick a model","pickModelDesc":"Start with a low-cost chat model, then compare pricing, groups and endpoints on the Models page.","verifyLogs":"Verify logs","verifyLogsDesc":"After the first request, check Usage Logs for model, token, latency and cost confirmation."},"quickstartCheck":"First integration checklist","checks":{"key":"Use Authorization: Bearer sk-xxxx","baseUrl":"Replace only the provider base URL","logs":"Confirm the call in Usage Logs"},"concepts":{"apiKey":"API key","apiKeyDesc":"An account token authenticates requests to supported upstream models and is shown in your Dashboard.","baseUrl":"Base URL","baseUrlDesc":"Route Key keeps OpenAI-style request shapes and changes where the SDK sends traffic.","modelName":"Model name","modelNameDesc":"Keep the requested model in the payload. Routing and availability are resolved by the backend channel setup.","billing":"Usage and billing","billingDesc":"Costs, token counts and latency appear in usage endpoints after requests complete."},"modelDefaults":"Model defaults","modelDefaultsDesc":"Starter choices derived from the pricing endpoint currently loaded by the app.","fromPricing":"From /api/pricing","routingAdvice":"Routing posture","routingLevels":{"0":"Start with low-cost chat","1":"Move up for reasoning","2":"Check group pricing before production"},"recommendations":{"general":"General chat","generalHint":"Start here for smoke tests, chatbots and low-cost traffic.","reasoning":"Reasoning or coding","reasoningHint":"Use after the basic request works and you need stronger task quality.","longContext":"Long context","longContextHint":"Use when prompts carry large documents or long conversation history."},"referenceList":"Endpoints","endpointDetails":"Endpoint details","authentication":"Authentication","parameters":"Parameters","response":"Response","example":"Example","codeExamples":"Code examples","requestExample":"Request example","responseExample":"Response example","curlExample":"cURL Example","name":"Name","type":"Type","required":"Required","descriptionLabel":"Description","yes":"Yes","no":"No","noParameters":"No parameters are required.","authBearer":"Add Authorization: Bearer sk-your-key to the request headers.","authRealtime":"Open the WebSocket session with Authorization: Bearer sk-your-key.","authSession":"Requires the browser session created by /api/user/login.","authCookieOptional":"Public pricing can usually be read without login; authenticated deployments may require cookies.","contentType":"Content-Type","authorizationHeader":"Authorization header","authHeaderHelp":"Add this value to the HTTP request headers.","noAuthRequired":"-","endpointContext":"Endpoint context","coreConceptsDescription":"These are the pieces new users usually need to understand before debugging an integration.","commonErrorsDescription":"Most first-run failures are caused by authentication, model names, quota, or request shape.","notes":"Notes","notesCompatible":"Use the same request shape as the matching provider API when the backend channel is enabled.","errors":{"authenticationTitle":"Authentication failed","unauthorizedDesc":"Check that Authorization uses Bearer plus your Route Key API key.","accessTitle":"No access or balance","modelDesc":"Check key status, account balance, model access, and billing settings.","quotaTitle":"Quota or rate limit","quotaDesc":"Reduce concurrency, retry with backoff, or review account limits.","payloadTitle":"Upstream or routing failure","payloadDesc":"Retry later and inspect Usage Logs for route status and provider errors."},"markdownDocs":{"quickstart":"# Quick Start\n\nUse Route Key as a compatible relay for mainstream model APIs. The usual integration path is:\n\n1. Create or copy an API key from Dashboard.\n2. Replace the provider base URL with the Route Key relay URL.\n3. Keep the familiar request body and choose a supported model name.\n4. Confirm the request in Usage Logs after the first call.\n\n## OpenAI SDK-compatible setup\n\n```ts\nimport OpenAI from 'openai'\n\nconst client = new OpenAI({\n apiKey: 'sk-your-key',\n baseURL: 'https://api.routekey.ai/v1',\n})\n```\n\n## First request checklist\n\n| Check | What to confirm |\n| --- | --- |\n| API key | Send `Authorization: Bearer sk-your-key` with every model call. |\n| Base URL | Replace only the provider base URL, not the request shape. |\n| Model | Copy a model name from the Models page or model list response. |\n| Logs | Confirm tokens, status, route, and cost in Usage Logs. |\n","concepts":"# Core Concepts\n\nThese are the pieces new users usually need to understand before debugging an integration.\n\n## API key\n\nAn API key authenticates requests to every supported model route. Keep it private and send it with the `Authorization` header.\n\n## Base URL\n\nThe relay keeps provider-compatible request shapes. In most SDKs, you only change the base URL and keep the rest of your code familiar.\n\n## Model name\n\nKeep the requested model in the payload. Route Key resolves route availability, pricing, and channel behavior behind the gateway.\n\n## Usage and billing\n\nCosts, token counts, request status, and latency appear in Dashboard after requests complete.\n","models":"# Choosing a Model\n\nStart with the lowest-risk endpoint that proves your integration works, then move to stronger or multimodal models only when needed.\n\n| Scenario | Suggested starting point |\n| --- | --- |\n| General chat | `gpt-4o-mini`, `qwen-plus`, or another low-cost chat model. |\n| Reasoning or coding | A stronger reasoning or Codex model after the first request works. |\n| Long context | A model with a larger context window from the Models page. |\n| Images, audio, video | Use the matching endpoint category in API Reference. |\n| Production traffic | Compare pricing groups and route health before scaling usage. |\n","errors":"# Common Errors and Fixes\n\nMost first-run failures are caused by authentication, model names, quota, or request shape.\n\n| Code | Meaning | Fix |\n| --- | --- | --- |\n| `401` | Authentication failed | Check that `Authorization` uses `Bearer` plus your Route Key API key. |\n| `403` | No access or balance | Check key status, account balance, model access, and billing settings. |\n| `429` | Rate limited | Reduce concurrency, retry with backoff, or review account limits. |\n| `5xx` | Upstream or routing failure | Retry later and inspect Usage Logs for route status and provider errors. |\n","referenceOverview":"# API Reference\n\nCall model services with request formats compatible with each provider's official API. Use this section after your first request works, or when you need provider-specific endpoint details.\n\nThe reference below is generated from structured endpoint data so methods, paths, parameters, response fields, and examples stay consistent across provider categories.\n","openai":"# OpenAI-compatible Endpoints\n\nOpenAI-compatible routes cover model listing, chat completions, Responses, image generation, video tasks, speech, embeddings, moderation, realtime sessions, and Codex response workflows.\n\nUse these endpoints when your application already uses OpenAI-style SDKs or request bodies.\n","anthropic":"# Anthropic Endpoints\n\nClaude models use the Messages request shape. This route keeps the native `messages`, `max_tokens`, `system`, `tools`, and `stream` fields visible in the parameter table.\n","gemini":"# Gemini Endpoints\n\nGemini routes support native `generateContent` payloads plus video task submission through compatible relay endpoints.\n","qwen":"# Qwen Endpoints\n\nQwen routes include chat completions, Responses, image generation, embeddings, and rerank operations.\n","deepseek":"# DeepSeek Endpoints\n\nDeepSeek supports OpenAI-compatible chat completions and text completions. Use chat completions for most integrations and completions for legacy prompt-style workloads.\n","grokXai":"# Grok / xAI Endpoints\n\nGrok routes cover chat, Responses, image generation, and video generation entries.\n","minimax":"# MiniMax Endpoints\n\nMiniMax routes include chat completions, image generation, and speech synthesis through compatible relay endpoints.\n","xunfei":"# Xunfei Spark Endpoints\n\nSpark models use an OpenAI-compatible chat completions route for standard text conversations.\n"},"endpointCopy":{"openai-models":{"title":"List Models","format":"Official API-compatible models","description":"Lists currently available OpenAI-style models. Anthropic and Gemini model-list requests can be routed by compatible headers when enabled."},"openai-chat":{"title":"Create Chat Completion","format":"OpenAI Chat Completions","description":"Creates a model response from conversation history with streaming, tools, and usage accounting."},"openai-responses":{"title":"Create Response","format":"OpenAI Responses","description":"Creates a Responses API response, including scenarios that need compact response formats."},"openai-images":{"title":"Image Generations","format":"OpenAI Images","description":"Creates images with generation or editing capabilities depending on the upstream model."},"openai-video":{"title":"Create Video","format":"OpenAI Sora Task","description":"Submits a Sora/OpenAI video generation task handled by the relay and upstream channel."},"openai-audio-speech":{"title":"Create Speech","format":"OpenAI Audio","description":"Converts text to speech and returns audio binary content."},"openai-embeddings":{"title":"Create Embeddings","format":"OpenAI Embeddings","description":"Creates text embeddings for retrieval, clustering, and similarity search."},"openai-moderations":{"title":"Create Moderation","format":"OpenAI Moderations","description":"Moderates input text and returns category results."},"openai-realtime":{"title":"Realtime Connection","format":"OpenAI Realtime WebSocket","description":"Opens a WebSocket realtime session and forwards event streams."},"anthropic-messages":{"title":"Create Message","format":"Anthropic Messages","description":"Creates a model response using Claude native Messages format."},"gemini-generate":{"title":"Generate Content","format":"Gemini Native","description":"Creates text or multimodal responses through Gemini native generateContent."},"gemini-images":{"title":"Gemini Image Generation","format":"Gemini Native Image","description":"Creates image content through Gemini multimodal generation."},"gemini-video":{"title":"Gemini / Veo Video Task","format":"Gemini Task Adaptor","description":"Submits Gemini/Veo video tasks and lets the relay manage task status."},"ali-chat":{"title":"Qwen Chat Completion","format":"Ali Official-Compatible","description":"Calls Qwen chat models with a format compatible with the official Qwen API."},"ali-responses":{"title":"Qwen Responses","format":"Ali Responses","description":"Calls Qwen models through the Responses format."},"ali-images":{"title":"Qwen Image","format":"Ali Image","description":"Calls Ali image generation or editing models."},"ali-embeddings":{"title":"Qwen Embeddings","format":"Ali Embeddings","description":"Creates text embeddings with Ali embedding models."},"ali-rerank":{"title":"Qwen Rerank","format":"Ali Rerank","description":"Reranks candidate documents by relevance."},"xunfei-chat":{"title":"Spark Chat Completion","format":"Xunfei Official-Compatible","description":"Calls Xunfei Spark chat models with a format compatible with the official Spark API."},"deepseek-chat":{"title":"DeepSeek Chat Completion","format":"DeepSeek Official-Compatible","description":"Calls DeepSeek chat completion models."},"deepseek-completions":{"title":"DeepSeek Completion","format":"DeepSeek Official-Compatible","description":"Calls DeepSeek models through the text completions format."},"xai-chat":{"title":"Grok Chat Completion","format":"xAI Official-Compatible","description":"Calls Grok chat models with a format compatible with the official Grok API."},"xai-responses":{"title":"Grok Responses","format":"xAI Responses","description":"Calls Grok models through the Responses format."},"xai-images":{"title":"Grok Image Generation","format":"xAI Image Adaptor","description":"Creates images with Grok image generation models."},"xai-video":{"title":"Grok Video Model","format":"xAI Video Model Entry","description":"Submits Grok video generation tasks through the video model entry."},"minimax-chat":{"title":"MiniMax Chat Completion","format":"MiniMax OpenAI-Compatible Route","description":"Calls MiniMax chat models through an OpenAI-compatible route."},"minimax-images":{"title":"MiniMax Image Generation","format":"MiniMax Image Adaptor","description":"Creates images with MiniMax image generation models."},"minimax-audio":{"title":"MiniMax Speech","format":"MiniMax TTS Adaptor","description":"Converts text to speech with MiniMax speech models."},"codex-responses":{"title":"Codex Responses","format":"Codex Responses","description":"Calls Codex models through the Responses format for coding tasks."},"codex-responses-compact":{"title":"Codex Responses Compact","format":"Codex Compact Responses","description":"Calls compact Codex response models for patching and coding workflows."}},"endpointFeatures":{"audio":{"title":"Speech","description":"Converts text to speech and returns audio content through the selected model."},"anthropic":{"title":"Message","description":"Creates a model response using Claude native Messages format."},"chat":{"title":"Chat Completion","description":"Creates a model response from conversation history with optional streaming and tools."},"codex":{"title":"Codex Responses","description":"Calls Codex models through the Responses format for coding workflows."},"completions":{"title":"Completion","description":"Calls text completion models for legacy prompt-style workloads."},"embeddings":{"title":"Embeddings","description":"Creates text embeddings for retrieval, clustering and similarity search."},"gemini":{"title":"Generate Content","description":"Creates text, image or multimodal responses through Gemini native payloads."},"images":{"title":"Image Generation","description":"Creates images with generation or editing capabilities."},"models":{"title":"List Models","description":"Lists currently available models through the relay."},"moderations":{"title":"Moderation","description":"Moderates input text and returns category results."},"realtime":{"title":"Realtime Connection","description":"Opens a WebSocket realtime session and forwards event streams."},"rerank":{"title":"Rerank","description":"Reranks candidate documents by relevance."},"responses":{"title":"Responses","description":"Creates a response through the Responses API format."},"videos":{"title":"Video Task","description":"Submits a video generation task handled by the relay and upstream channel."}},"params":{"model":"Target model name from the Models page or model-list response.","messages":"OpenAI-compatible chat messages for text endpoints.","input":"Text, multimodal input, or structured input items for the target provider.","instructions":"Optional system-level instructions for Responses API calls.","tools":"Tool definitions or function schemas supported by the selected model.","stream":"Enable server-sent streaming responses when supported.","maxOutputTokens":"Maximum output tokens for Responses API calls.","prompt":"Natural-language prompt for generation endpoints.","n":"Number of generated results to return.","size":"Requested output size where the model supports it.","quality":"Requested generation quality where the model supports it.","responseFormat":"Optional output format or response encoding.","inputReference":"Optional source media or reference object for video tasks.","seconds":"Requested video duration where the model supports it.","voice":"Voice identifier for speech generation.","speed":"Speech speed multiplier where supported.","encodingFormat":"Embedding encoding format.","dimensions":"Requested embedding dimensions where supported.","contents":"Gemini native content parts.","generationConfig":"Gemini generation options.","safetySettings":"Gemini safety setting overrides.","query":"Search query or ranking query.","documents":"Candidate documents to rerank.","topN":"Maximum number of rerank results.","temperature":"Sampling temperature.","topP":"Nucleus sampling value.","maxTokens":"Maximum tokens for completion output.","system":"System prompt or system content blocks."},"responseFields":{"data":"Result array or provider response data.","id":"Response, task, or resource ID.","object":"Response object type.","choices":"Candidate model outputs.","usage":"Token usage statistics.","output":"Structured output items.","created":"Creation timestamp.","status":"Task status.","progress":"Task progress.","binary":"Audio binary data.","results":"Moderation, ranking, or classification results.","events":"Realtime session event stream.","type":"Object type.","content":"Content blocks.","candidates":"Candidate outputs.","usageMetadata":"Usage statistics.","model":"Model used for the request.","size":"Generated media size."},"reference":{"modelsTitle":"List Models","modelsDesc":"Lists OpenAI-style models available through the relay.","modelsResponse":"Result array or provider-compatible model data.","pricingTitle":"List Pricing","pricingDesc":"Reads model ratios, groups, vendors, and supported endpoint types from the pricing endpoint.","pricingResponse":"Pricing records and group metadata used by the Models page.","userTitle":"Current User","userDesc":"Returns the logged-in user for Dashboard personalization.","userResponse":"Current account profile, quota and usage fields.","compatibleDesc":"OpenAI-compatible {{endpoint}} endpoint routed through compatible channels.","providerResponse":"Provider-compatible response body.","chatTitle":"Create Chat Completion","responsesTitle":"Create Response","messagesTitle":"Create Message","imagesTitle":"Create Image","audioTitle":"Create Audio","embeddingsTitle":"Create Embedding","moderationsTitle":"Create Moderation"}},"modelsPage":{"title":"Compare AI model API pricing","backToTop":"Back to top","description":"Compare GPT, Claude, Gemini, DeepSeek, Grok, Qwen, and other AI API cost signals from the pricing endpoint before routing traffic through Route Key.","pricingGuideEyebrow":"AI API pricing guide","pricingGuideTitle":"Compare token costs before you route production traffic","pricingGuideIntro":"AI API pricing is rarely one number. Compare input, output, cache, billing group, and endpoint signals together so you can choose a model that fits both quality and budget. Route Key keeps these model details in one searchable catalog and lets you route compatible requests without changing your application shape.","catalogEyebrow":"Comparison resources","catalogTitle":"Continue into model pricing comparisons","catalogIntro":"Use the live catalog for current model signals, then open the comparison guides when you need a deeper pricing or integration workflow.","pricingFaqEyebrow":"AI API pricing FAQ","pricingFaqTitle":"Common model cost questions","pricingFaqAriaLabel":"AI API pricing FAQ","pricingGuideIllustrationAlt":"AI model pricing and routing illustration","modelIndexTitle":"Complete model ID index","modelIndexSummary":"Browse all {{count}} available model IDs","modelIndexDescription":"Expand this index to inspect every model ID currently returned by the pricing catalog. Select an ID to filter the live model table.","pricingConcepts":{"inputOutputTitle":"Input, output, and cache pricing","inputOutputDescription":"Input tokens are the prompt and context you send. Output tokens are generated text and often cost more. Cache pricing shows whether repeated context can be served at a different rate. Check all three when estimating a real request.","billingTitle":"Token-based versus per-request billing","billingDescription":"Most chat and reasoning models bill by tokens, while some endpoints add a per-request fee or use a different quota unit. The billing filter helps you compare like for like before selecting a model.","ratioTitle":"Group ratio and model ratio","ratioDescription":"A group ratio represents the account or channel multiplier applied to a model. A model ratio describes the model-specific adjustment. Together they explain why the same model can have different effective costs across groups.","providerTitle":"GPT, Claude, Gemini, DeepSeek, and Qwen comparisons","providerDescription":"Use the vendor and search filters to compare GPT API cost, Claude API pricing, Gemini pricing, DeepSeek cost, Qwen pricing, and other supported families from the same catalog.","endpointTitle":"Choose the right API endpoint","endpointDescription":"Confirm that the endpoint supports your request type, such as chat, responses, embeddings, images, or audio. An enabled model ID and endpoint combination is the safest starting point for an integration.","selectionTitle":"A practical model selection workflow","selectionDescription":"Start with task quality, then compare input and output cost, context length, latency expectations, and channel health. Test a small sample, inspect Usage Logs, and only then move the model into a larger routing policy."},"pricingGuideLinks":"Continue with the developer docs or open the integration guide to send your first request.","integrationGuideLink":"Integration guide","filters":"Filters","vendor":"Vendor","group":"Group","billing":"Billing","tags":"Tags","endpoint":"Endpoint","context":"Context","search":"Search models","searchPlaceholder":"Search model, vendor, tag, endpoint...","currency":"Currency","unit":"Token unit","ratio":"Ratios","cardView":"Card view","tableView":"Table view","resultSummary":"{{shown}} of {{total}} models","activeFilters":"{{count}} active filters","pageSize":"Page size","copyModel":"Copy model name","noDescription":"No model description is provided by the pricing endpoint.","input":"Input","output":"Output","cache":"Cache","officialPrice":"Official","groupRatio":"Group ratio","modelRatio":"Model ratio","completionRatio":"Completion ratio","cacheRatio":"Cache ratio","usedGroup":"Used group","perRequest":"Per request","perToken":"Per token","priceBasis":"per 1M tokens","allVendors":"All vendors","allGroups":"All groups","allBilling":"All billing","allTags":"All tags","allEndpoints":"All endpoints","model":"Model","actions":"Actions","pagination":"{{start}}-{{end}} of {{total}}","groupPricing":"Group pricing","selectGroupPreview":"Select a group to preview price","selectGroupPreviewDescription":"The same model can be available in multiple account groups. Pick a group first; prices below update with that group ratio.","activeRatio":"Active ratio","closeDetails":"Close model details","basicInfo":"Basic info","notAvailable":"Not available","emptyTitle":"No matching models","emptyDescription":"Change the search keyword or reset filters."},"integrationGuide":{"heroTitle":"Connect apps and coding agents","heroDescription":"Use one Route Key API key and compatible gateway for applications, SDKs, and coding tools.","beforeKicker":"Before you start","beforeTitle":"Prepare a safe, repeatable API connection","beforeDescription":"Route Key uses an OpenAI-compatible request shape, so most existing SDKs and tools only need a base URL, an API key, and a supported model ID. Keep those values separate from application code and start with a small test environment before moving traffic to a production key.","apiKeyTitle":"Create and protect your API key","apiKeyDescription":"Create a key from Dashboard, give it a clear name, and use one key per application or coding tool. Store it in an environment variable or secret manager. Never commit a key to a repository, client-side bundle, issue, or shared screenshot. Rotate a key if it appears in logs or leaves the intended team boundary.","requestValuesTitle":"Understand the three request values","requestValuesDescription":"The base URL selects the Route Key gateway, the Bearer token authenticates the request, and the model ID selects an enabled model. Use the exact model ID shown on the Models page; display names are not always valid API identifiers.","accessTitle":"Confirm access before a full rollout","accessDescription":"Check that your account has balance or quota, the selected model is enabled for your group, and the endpoint supports your request type. A short non-streaming request is the fastest way to isolate authentication and model-selection issues.","stepOneKicker":"Step 01","stepOneTitle":"Connect your AI application","stepOneDescription":"Three values are enough to send your first compatible request.","baseUrl":"Base URL","authorization":"Authorization","model":"Model","modelDescription":"Choose an exact enabled ID from Models.","firstRequest":"First working request","verifyKicker":"Verify the connection","verifyTitle":"Confirm the first response and inspect Usage Logs","verifyDescription":"A successful HTTP response proves more than authentication: it confirms that the base URL, model ID, request format, and account quota are aligned. Keep the first test small and deterministic so a failure has one obvious cause.","verifyStepOne":"Send a short request. Use a small prompt and a low output limit, then check for a normal response object or streamed delta.","verifyStepTwo":"Record the model and endpoint. Keep the exact model ID and endpoint that returned a response so the same configuration can be reproduced.","verifyStepThree":"Open Usage Logs. Confirm the request, token counts, latency, and cost are visible. This is the authoritative place to validate what the gateway billed.","verifyStepFour":"Expand gradually. Add streaming, tools, larger context, or production concurrency one variable at a time.","authErrorTitle":"401 or 403 authentication errors","authErrorDescription":"Check the Authorization: Bearer prefix, remove extra whitespace, verify the key is active, and confirm the request is reaching the /v1 base URL.","modelErrorTitle":"Model not found or unavailable","modelErrorDescription":"Copy the enabled model ID from Models, confirm its group and endpoint, and avoid assuming that a provider display name is an API ID.","quotaErrorTitle":"Quota, balance, or rate errors","quotaErrorDescription":"Review wallet balance, account limits, and Usage Logs. Reduce concurrency or output length for the test, then retry after the account state is updated.","stepTwoKicker":"Step 02","stepTwoTitle":"Configure a coding agent","stepTwoDescription":"Use a dedicated key per tool, then copy the matching setup profile.","agentSetup":"Route Key compatible setup","officialDocs":"Official docs","officialDownload":"Official download","agentCheckKey":"Create a dedicated Route Key API key.","agentCheckModel":"Choose an enabled model from Models.","agentCheckLogs":"Restart the tool and verify it in Usage Logs.","operationalKicker":"Operational checklist","operationalTitle":"Keep every integration maintainable","operationalDescription":"OpenAI compatibility reduces migration work, but a reliable integration still needs clear ownership and observability. Give each tool its own key, pin a tested model ID, and keep the base URL in configuration so you can change routing policy without editing business logic. When a provider changes, compare alternatives on the Models page before changing a production default.","docsLink":"Read the developer docs","modelsLink":"Compare supported models","faq":{"sdkQuestion":"Can I use an existing OpenAI SDK?","sdkAnswer":"Usually yes. Keep the SDK request format, set its base URL to the Route Key /v1 endpoint, and pass a Route Key API key. Validate endpoint-specific features with a small request first.","keyQuestion":"Should one key be shared by multiple tools?","keyAnswer":"No. A dedicated key per application or coding agent makes Usage Logs easier to read and lets you rotate or revoke one integration without interrupting the others.","costQuestion":"Where do I investigate a cost difference?","costAnswer":"Compare the model, group ratio, input and output tokens, endpoint, and timestamp in Usage Logs. Then use the pricing catalog to compare another supported route."}},"dashboard":{"title":"Workspace","subtitle":"Account and usage overview","console":"Console","overview":"Overview","overviewDesc":"Quota, spend, and traffic summary","wallet":"Wallet","walletDesc":"Recharge balance, redeem codes, and review top-up orders","apiKeys":"API Keys","apiKeysDesc":"Token list and key status","usageLogs":"Usage Logs","usageLogsDesc":"Request history and billing details","session":"Session","guest":"Guest account","syncing":"Syncing","accountData":"Account data","usageStatistics":"Usage summary","resourceConsumption":"Consumption overview","performanceMetrics":"Performance metrics","balance":"Balance","historicalUsage":"Historical usage","periodRequests":"7-day requests","statisticalRequests":"Statistical requests","periodCost":"7-day cost","statisticalTokens":"Statistical tokens","averageRpm":"Average RPM","averageTpm":"Average TPM","modelAnalytics":"Model usage","modelAnalyticsDesc":"Usage distribution from the data endpoint.","quotaDistribution":"Cost","callTrend":"Trend","trendPeak":"Peak","trendTotal":"Total","trendPoints":"{{count}} points","unknownModel":"Unknown model","noUsageData":"No recent usage data","apiInfo":"API details","apiInfoEmpty":"The API info panel follows the console entry and is ready for backend metadata.","walletBalance":"Wallet balance","walletUsed":"Used balance","walletRedeem":"Redeem code","walletRedeemDesc":"Apply a redemption code to this account.","walletRedeemPlaceholder":"Enter redemption code","walletRedeemAction":"Redeem","walletRedeemSuccess":"Redeemed","walletRedeemFailed":"Redeem failed","walletRedeemAdded":"Added {{value}} to your balance.","walletPaymentMethod":"Payment method","walletPaymentDesc":"Choose an enabled payment provider.","walletNoPaymentMethods":"No payment methods are enabled","walletMinTopup":"Min {{value}}","walletMinTopupHint":"Please enter the recharge amount, starting from {{value}} USD.","walletAmount":"Amount","walletWaffoAuto":"Auto select","walletEstimated":"Estimated payment","walletEstimating":"Estimating","walletPayAction":"Continue to pay","walletPayConfirmTitle":"Confirm {{asset}} recharge","walletPayConfirmAction":"Confirm and continue","walletPayConfirmCancel":"Back to edit","walletPayConfirmDesc":"Use the {{network}} network and transfer exactly to the address and amount shown on the payment page. Do not round, underpay, overpay, or deduct exchange withdrawal fees. Only one pending {{asset}} order is kept within 30 minutes.","walletPayFailed":"Payment failed","walletRedirecting":"Redirecting","walletPaymentOpened":"Payment page opened in a new tab.","walletRequestFailed":"Request failed. Please try again.","walletNoPaymentLink":"The payment response did not include a redirect link.","walletUsdtReminderTitle":"{{asset}} recharge notice","walletUsdtConfirmExactAmount":"Please confirm that you will use the {{network}} network and transfer exactly to the address and amount shown on the payment page.","walletUsdtConfirmNetwork":"Network","walletUsdtReminderAmount":"Do not round, underpay, or overpay. Pay exchange withdrawal fees separately and do not deduct them from the payable amount.","walletUsdtReminderSupport":"If the amount does not match, the recharge may not be credited automatically. If it is not credited, keep the TxID and contact support.","walletUsdtConfirmPendingLimit":"After submission, this account can keep only one pending {{asset}} order within 30 minutes.","walletUsdtConfirmNoCancel":"The order cannot be cancelled manually. It will be credited automatically after successful payment, or timeout automatically after 30 minutes if unpaid.","walletHistory":"Top-up history","walletHistoryDesc":"Recent wallet orders from the top-up endpoint.","walletSearchOrder":"Search order number","walletNoOrders":"No top-up orders found","walletPaid":"Paid","walletHistoryWindow":"Recent records","walletHistoryWindowDesc":"The backend returns user top-up records within its configured recent history window.","orderNo":"Order No.","paymentMethod":"Payment","walletStatus":{"success":"Success","pending":"Pending","failed":"Failed","expired":"Expired"},"settings":"Settings","settingsDesc":"Account preferences and workspace settings","tickets":"Tickets","ticketsDesc":"Track support tickets and payment issues","copyFailed":"Copy failed","settingsEmpty":"Settings are linked to the console and will appear here when profile options are available.","emailBinding":"Email Binding","emailBindingDesc":"Bind the email address used for verification and notifications.","currentEmail":"Current Email","notBound":"Not bound","changeEmail":"Change Email","bindEmail":"Bind Email","emailAddress":"Email Address","emailBindDesc":"Bind an email address to your account.","emailBindChangeDesc":"Current email: {{email}}. Enter a new email to change.","emailBindEmailPlaceholder":"Enter your email","verificationCode":"Verification Code","verificationCodePlaceholder":"Enter code","emailBindCooldown":"{{seconds}}s","emailBindEmailInvalid":"Please enter a valid email address.","emailBindCodeRequired":"Please enter the verification code.","emailBindCodeSent":"Verification code sent","emailBindCodeSentDesc":"Please check your email for the verification code.","emailBindCodeSendFailed":"Failed to send verification code.","emailBound":"Email bound successfully","emailBoundDesc":"Your account email binding has been updated.","emailBindFailed":"Failed to bind email.","accountSecurity":"Account Security","accountSecurityDesc":"Keep your sign-in password current. If you used email recovery, use the temporary password as your current password.","changePassword":"Change Password","changePasswordDesc":"Update the password for your account.","currentPassword":"Current password","currentPasswordPlaceholder":"Enter current password","newPassword":"New password","newPasswordPlaceholder":"Enter new password","confirmNewPassword":"Confirm new password","confirmNewPasswordPlaceholder":"Enter new password again","passwordRequired":"Current password and new password are required.","passwordSameAsCurrent":"New password must be different from the current password.","passwordChanged":"Password changed","passwordChangedDesc":"Your account password has been updated.","passwordChangeFailed":"Failed to change password. Please try again.","preferences":"Preferences","preferencesDesc":"Interface and account-level preferences.","languagePreference":"Language Preference","languagePreferenceDesc":"Choose your preferred interface language and save it locally.","notificationSettings":"Notification Settings","notificationSettingsDesc":"Configure local notification preferences for this account.","notificationMethod":"Notification Method","emailNotification":"Email Notification","webhookNotification":"Webhook Notification","barkNotification":"Bark Notification","gotifyNotification":"Gotify Notification","notificationEmail":"Notification Email","notificationEmailPlaceholder":"Leave empty to use bound account email","balanceWarningThreshold":"Balance Warning Threshold","balanceWarningThresholdDesc":"Send a notification when your account quota balance falls below this value. 500000 equals $1 by default.","webhookUrl":"Webhook URL","webhookUrlPlaceholder":"https://example.com/webhook","webhookSecret":"Webhook Secret","webhookSecretPlaceholder":"Enter secret key","barkUrl":"Bark Push URL","barkUrlPlaceholder":"https://api.day.app/yourkey/{{title}}/{{content}}","barkUrlDesc":"Template variables: {{title}}, {{content}}","gotifyUrl":"Gotify Server URL","gotifyUrlPlaceholder":"https://gotify.example.com","gotifyToken":"Gotify Application Token","gotifyTokenPlaceholder":"Enter application token","gotifyPriority":"Message Priority","settingsValidationFailed":"Check settings","settingsSaveFailed":"Settings save failed","settingsSaveFailedDesc":"Failed to update settings. Please try again.","balanceWarningThresholdInvalid":"Balance warning threshold must be greater than 0.","notificationEmailInvalid":"Enter a valid notification email address.","webhookUrlRequired":"Webhook URL is required.","webhookUrlInvalid":"Enter a valid HTTP or HTTPS Webhook URL.","barkUrlRequired":"Bark push URL is required.","barkUrlInvalid":"Enter a valid HTTP or HTTPS Bark push URL.","gotifyUrlRequired":"Gotify server URL is required.","gotifyUrlInvalid":"Enter a valid HTTP or HTTPS Gotify server URL.","gotifyTokenRequired":"Gotify application token is required.","gotifyPriorityInvalid":"Gotify priority must be between 0 and 10.","privacySettings":"Privacy Settings","privacySettingsDesc":"Control request handling preferences where supported by the backend.","acceptModelsWithoutPricing":"Accept models without pricing","acceptModelsWithoutPricingDesc":"Allow calls when a model has no configured price. Enable only if you trust the site pricing policy.","recordRequestIp":"Record request and error log IP","recordRequestIpDesc":"When enabled, consume and error logs record the client IP address.","logoutDesc":"Sign out of the current account and return to the login page.","settingsSaved":"Settings saved","languageSaved":"Language preference updated.","notificationSaved":"Notification preferences saved to your account.","privacySaved":"Privacy preferences saved to your account.","save":"Save","searchTokens":"Search token name","searchTokenKey":"Search key","searchLogs":"Search model name","startTime":"Start Time","endTime":"End Time","allTypes":"All Types","modelNamePlaceholder":"Model Name","groupPlaceholder":"Group","searchTokenName":"Search token name","tokenNamePlaceholder":"Token Name","requestId":"Request ID","requestIdPlaceholder":"Request ID","timing":"Timing","tokenBreakdown":"Token Breakdown","details":"Details","search":"Search","addToken":"Add token","copySelectedTokens":"Copy selected","deleteSelectedTokens":"Delete selected","selectAllTokens":"Select all tokens","selectToken":"Select {{name}}","editToken":"Edit token","deleteToken":"Delete token","enableToken":"Enable","disableToken":"Disable","saveToken":"Save token","tokenEditorDesc":"Create or update an account token with quota, group, and access limits.","tokenGroupPlaceholder":"Default account group","tokenMetadataLoadFailed":"Failed to load available groups or models.","groupRatioLabel":"Ratio {{ratio}}","remainAmount":"Remaining amount","expiredTime":"Expiration time","expiredTimePlaceholder":"Never expires","expiredTimeSelectPlaceholder":"Select date","unlimitedQuota":"Unlimited quota","unlimitedQuotaDesc":"When enabled, this token is not limited by its own remaining quota.","crossGroupRetry":"Cross-group retry","crossGroupRetryDesc":"Allow New API to retry through another group when smart fallback is available.","addModelLimit":"Add","availableModels":"Available models","availableModelsPlaceholder":"Select/Search/Add available models, empty means no restrictions.","modelLimits":"Model limits","modelLimitsPlaceholder":"Select models, empty means unlimited","modelNoMatches":"No matching models.","modelSearchPlaceholder":"Search or add a model","modelSelectedCount":"{{count}} selected","allowIps":"IP whitelist","allowIpsPlaceholder":"Single IP (e.g. 192.168.1.1) or CIDR format (e.g. 192.168.1.0/24), multiple entries separated by commas.","ipWhitelist":"IP whitelist","ipWhitelistPlaceholder":"Single IP (e.g. 192.168.1.1) or CIDR format (e.g. 192.168.1.0/24), multiple entries separated by commas.","tokenNameRequired":"Token name is required.","tokenQuotaRequired":"Enter a quota amount greater than 0.","tokenExpiredInvalid":"Expiration time format is invalid.","tokenActionSuccess":"Token updated","tokenActionFailed":"Token action failed","tokenCreated":"Token created. Copy it from the list when needed.","tokenUpdated":"Token updated.","tokenDeleted":"Token deleted.","tokenEnabled":"Token enabled.","tokenDisabled":"Token disabled.","tokenBatchCopied":"Copied {{count}} selected tokens.","tokenBatchDeleted":"Deleted {{count}} selected tokens.","selectTokenFirst":"Select at least one token first.","confirmDeleteToken":"Delete this token? This action cannot be undone.","confirmBatchDeleteTokens":"Delete {{count}} selected tokens? This action cannot be undone.","name":"Name","key":"Key","group":"Group","quota":"Quota","used":"Used","remain":"Remain","status":"Status","actions":"Actions","copyKey":"Copy key","hideKey":"Hide key","keyCopied":"Key copied.","moreActions":"More actions","showKey":"Show key","unlimited":"Unlimited","enabled":"Enabled","disabled":"Disabled","unknown":"Unknown","loading":"Loading data...","noTokens":"No API keys found","statQuota":"Stat quota","statTokens":"Stat tokens","time":"Time","type":"Type","model":"Model","token":"Token","prompt":"Prompt","completion":"Completion","cost":"Cost","latency":"Latency","recharge":"Recharge","consume":"Consume","manage":"Manage","system":"System","error":"Error","refund":"Refund","noLogs":"No usage logs found","authGateEyebrow":"Secure control plane","authGateTitle":"Account access required","authGateCopy":"Login or register to inspect balance, tokens, usage logs, and account controls.","signIn":"Sign in","all":"All","optional":"Optional","page":"Page","basicInfo":"Basic info","billing":"Billing","billingProcess":"Billing process","cacheSummary":"Cache summary","cacheTokens":"Cache tokens","category":"Category","channelTest":"Channel test","completedTime":"Completed time","confirmPassword":"Confirm password","contact":"Contact","content":"Content","controlSettings":"Control settings","copied":"Copied","copyAddress":"Copy address","createTicket":"Create ticket","createdTime":"Created time","currentSelection":"Current selection","dateYear":"Year","dateMonth":"Month","dateDay":"Day","dateHour":"Hour","dateMinute":"Minute","downstreamError":"Downstream error","duration":"Duration","emptyData":"No data","info":"Info","input":"Input","invite":"Invite","inviteRewardTransfer":"Invite reward transfer","ip":"IP","log":"Log","logDetails":"Log details","logId":"Log ID","noGroupsMatched":"No groups matched","noTickets":"No tickets found","noTicketsMobileDesc":"Submit a ticket when payment, account, or API issues need support.","nonStream":"Non-stream","onlineTopup":"Online top-up","otherDetails":"Other details","output":"Output","quotaPolicy":"Quota policy","reason":"Reason","reasoningEffort":"Reasoning effort","rechargeAmount":"Recharge amount","refundAmount":"Refund amount","rejectReason":"Reject reason","request":"Request","requestPath":"Request path","runtime":"Runtime","searchGroup":"Search group","selectGroup":"Select group","sendCode":"Send code","spend":"Spend","stream":"Stream","submitSupportTicket":"Submit support ticket","support":"Support","timeFirstWord":"Time","tokenIdentityDesc":"Name the token and choose its account group.","tokenModelScopeDesc":"Limit the models this token can call, or leave empty for no restriction.","tokenNetworkScopeDesc":"Restrict token access by IP address or CIDR when needed.","tokenQuotaPolicyDesc":"Set quota, expiration, and retry behavior for this token.","tokens":"Tokens","uploadAttachment":"Upload attachment","upstreamModel":"Upstream model","upstreamModelUpdateNotifyEnabled":"Model update notification","upstreamModelUpdateNotifyEnabledDesc":"Notify this account when upstream model availability changes.","username":"Username","warning":"Warning","agencyReward":"Agency reward","asyncRetryRebalance":"Async retry rebalance","attachment":"Attachment","attachments":"Attachments","walletRecords":"Wallet records","walletBuiltinExistingOrder":"Pending {{asset}} order exists","walletBuiltinExistingOrderDesc":"Only one pending {{asset}} order can be kept within {{minutes}} minutes. Complete the current order or wait for it to expire.","walletBuiltinTxInvalid":"Enter a valid {{asset}} transaction hash.","walletPaymentSubmitted":"Payment submitted","walletPaymentSubmittedDesc":"We will check the payment status after the transfer is confirmed.","walletPaymentSuccess":"Payment confirmed","walletPaymentSuccessDesc":"The top-up has been credited to your account.","walletPaymentPending":"Payment pending","walletPaymentPendingDesc":"Waiting for the payment network to confirm this order.","walletPaymentTimeoutDesc":"This payment order has expired. Create a new order to continue.","walletPaymentQrCreated":"Payment order created","walletPaymentQrCreatedDesc":"Scan or open the payment page to complete the order.","walletPaymentAmount":"Payment amount","walletPaymentQrTitle":"Complete payment","walletPaymentQrDesc":"Scan the QR code or open the payment app, then complete the exact payment.","walletPaymentCheckPaid":"Check payment","walletPaymentOpenApp":"Open payment app","walletPaymentPendingTitle":"Payment pending","walletBuiltinPaying":"On-chain payment","walletBuiltinPayingTitle":"Complete {{asset}} payment","walletBuiltinReceiveAddress":"Receive address","walletBuiltinQrHint":"Scan with a wallet app that supports {{network}}.","walletBuiltinPaymentAmount":"Payment amount","walletBuiltinPaymentNetwork":"Payment network","walletBuiltinRemainingTime":"Remaining time","walletBuiltinOrderNo":"Order no.","walletBuiltinExpiresAt":"Expires at","walletBuiltinBuyCrypto":"Buy crypto","walletBuiltinStrictTitle":"Pay the exact amount","walletBuiltinStrictDesc":"Use the selected network and transfer the exact amount shown. Do not round, underpay, overpay, or deduct exchange withdrawal fees.","walletBuiltinTxTitle":"Submit transaction hash","walletBuiltinTxDesc":"After transfer, paste the wallet transaction hash so support can match the payment if needed.","walletBuiltinTxLabel":"Transaction hash","walletBuiltinTxPlaceholder":"Enter TxID / transaction hash","walletBuiltinSubmitTx":"Submit TxID","ticketFetchFailed":"Failed to load tickets.","ticketDetailFailed":"Failed to load ticket details.","ticketAttachmentLimit":"You can upload up to {{count}} attachments.","ticketAttachmentTooLarge":"Each attachment must be no larger than {{size}}MB.","ticketAttachmentUploadFailed":"Failed to upload attachment: {{name}}","ticketAttachmentDisabled":"Attachment upload is disabled.","ticketAttachmentHint":"Select files, or paste files from the clipboard directly into the text box to upload automatically.","ticketReplyRequired":"Please enter a reply.","ticketReplyFailed":"Failed to send reply.","ticketReplySuccess":"Reply sent.","ticketCloseFailed":"Failed to close ticket.","ticketClosed":"Ticket closed.","ticketReopenFailed":"Failed to reopen ticket.","ticketReopened":"Ticket reopened.","ticketCreateFailed":"Failed to submit ticket.","ticketCreated":"Ticket submitted.","ticketCreatedDesc":"Support will follow up in the ticket thread.","ticketWriteBlocked":"Ticket writing is currently disabled.","ticketCloseConfirm":"Close this ticket? You can reopen it later if needed.","ticketRequired":"Please complete the required ticket fields.","ticketContactPlaceholder":"Email, Telegram, or another contact method","ticketPaymentRepairTitle":"Self-service recharge repair","ticketPaymentRepairDesc":"If you completed an on-chain transfer, enter the order number and transaction hash. The system will try automatic repair before creating a manual ticket.","ticketPaymentRepairEnable":"I completed the transfer. Try automatic repair first.","ticketPaymentRepairRequired":"Please complete the recharge repair fields.","ticketPaymentRepairSuccess":"Recharge repaired","ticketPaymentRepairSuccessTitle":"Recharge repaired","ticketPaymentRepairSuccessDesc":"The payment was matched and credited automatically.","ticketPaymentRepairFallbackTitle":"Manual ticket created","ticketPaymentRepairFallback":"Automatic repair did not pass, so a manual ticket was created. Reason: {{reason}}","ticketRechargeChain":"Recharge chain","ticketRechargeChainPlaceholder":"Select the transfer chain","ticketRechargeOrderNo":"Recharge order No.","ticketTxHash":"Transaction hash","ticketTxHashPlaceholder":"Enter the transaction hash from your wallet or block explorer","pagination":"Page {{page}} / {{pages}}, {{total}} total"},"supportTicket":{"ticket":"Ticket","detailTitle":"Ticket detail","detailDesc":"Inspect the ticket and reply.","emptyReplies":"No replies yet","internalNote":"Internal","status":{"open":"Open","pending":"Pending","closed":"Closed"},"filters":{"all":"All"},"fields":{"keyword":"Keyword","status":"Status","category":"Category","ticketNo":"Ticket No.","title":"Title","priority":"Priority","lastReply":"Last reply","actions":"Actions","createdAt":"Created at","contact":"Contact","relatedLogId":"Log ID","relatedOrderNo":"Order No."},"placeholders":{"keyword":"Ticket No., title, log ID, order No.","reply":"Enter reply"},"sections":{"support":"Support","timeline":"Timeline","conversation":"Conversation","nextStep":"Next step","reply":"Reply","meta":"Meta","ticketInfo":"Ticket info"},"actions":{"search":"Search","reset":"Reset","detail":"Detail","close":"Close","reopen":"Reopen","sendReply":"Send reply","uploadAttachment":"Upload attachment","closeTicket":"Close ticket","submitTicket":"Submit ticket"},"attachments":{"hint":"Select files, or paste files from the clipboard directly into the text box to upload automatically."}},"topup":{"support":{"submitTicket":"Submit support ticket","defaultTicketTitle":"Recharge issue for order {{orderNo}}","recordTicketContent":"Please help review this recharge order.\nOrder No.: {{orderNo}}\nPayment method: {{paymentMethod}}\nAmount: {{amount}}\nStatus: {{status}}"}},"language":{"en":"English","fr":"Français","ja":"日本語","ko":"한국어","ru":"Русский","vi":"Tiếng Việt"},"theme":{"light":"Light","dark":"Dark"}}}
Provider: OpenAI-compatible
Base URL: https://api.routekey.ai/v1
API key: YOUR_ROUTEKEY_API_KEY
Model: <route-key-model>
Create a dedicated Route Key API key.
Choose an enabled model from Models.
Restart the tool and verify it in Usage Logs.
Operational checklist
Keep every integration maintainable
OpenAI compatibility reduces migration work, but a reliable integration still needs clear ownership and observability. Give each tool its own key, pin a tested model ID, and keep the base URL in configuration so you can change routing policy without editing business logic. When a provider changes, compare alternatives on the Models page before changing a production default. Models.
Create a key from Dashboard, give it a clear name, and use one key per application or coding tool. Store it in an environment variable or secret manager. Never commit a key to a repository, client-side bundle, issue, or shared screenshot. Rotate a key if it appears in logs or leaves the intended team boundary.
Understand the three request values
The base URL selects the Route Key gateway, the Bearer token authenticates the request, and the model ID selects an enabled model. Use the exact model ID shown on the Models page; display names are not always valid API identifiers. Models.
Confirm access before a full rollout
Check that your account has balance or quota, the selected model is enabled for your group, and the endpoint supports your request type. A short non-streaming request is the fastest way to isolate authentication and model-selection issues.
Confirm the first response and inspect Usage Logs
Send a short request. Use a small prompt and a low output limit, then check for a normal response object or streamed delta.
Record the model and endpoint. Keep the exact model ID and endpoint that returned a response so the same configuration can be reproduced.
Open Usage Logs. Confirm the request, token counts, latency, and cost are visible. This is the authoritative place to validate what the gateway billed.
Expand gradually. Add streaming, tools, larger context, or production concurrency one variable at a time.
401 or 403 authentication errors
Check the Authorization: Bearer prefix, remove extra whitespace, verify the key is active, and confirm the request is reaching the /v1 base URL.
Model not found or unavailable
Copy the enabled model ID from Models, confirm its group and endpoint, and avoid assuming that a provider display name is an API ID.
Quota, balance, or rate errors
Review wallet balance, account limits, and Usage Logs. Reduce concurrency or output length for the test, then retry after the account state is updated.
Can I use an existing OpenAI SDK?
Usually yes. Keep the SDK request format, set its base URL to the Route Key /v1 endpoint, and pass a Route Key API key. Validate endpoint-specific features with a small request first.
Should one key be shared by multiple tools?
No. A dedicated key per application or coding agent makes Usage Logs easier to read and lets you rotate or revoke one integration without interrupting the others.
Where do I investigate a cost difference?
Compare the model, group ratio, input and output tokens, endpoint, and timestamp in Usage Logs. Then use the pricing catalog to compare another supported route.