ai.rowe.lol

// Pool many AI keys into one stable API · bad keys auto-disabled

Operator sign in

An OpenAI-compatible AI gateway. Enter the console password to manage keys and tokens.

Console access additionally requires an allowlisted IP. The password is verified server-side (SHA-256); the session is an httpOnly cookie.

Available models

Model IDProviderContextMax outputRef. price $/1M in/out
Loading…

ai.rowe.lol

// Approval required · admin enables your account

Account pending approval

Signed in as:

Submitted. Once an admin approves your account you can create API tokens.

Sign out

ai.rowe.lol

// AI key pool
Sign out

Dashboard

// Welcome back

Endpoints

Primary API (OpenAI-compatible):
…
Balance (USD)
Insufficient balance — please top up
…
Requests (30d)
…
Tokens (30d)

Quick start

Replace $KEY with your token above. Model IDs are on the Models page.

My tokens

// These tokens are yours only · keep them secret

New token

Token list

idNameTokenOnUsageRate limitExpiresCreated
Loading…

Models

// Models currently routable

Shows models with at least one active key and not marked unavailable. Reference pricing and context from models.dev(USD / 1M tokens); not necessarily what you pay here.

Available models

Model IDProviderContextMax outputRef. price $/1M in/out
Loading…

Free chain · live order

Loading…
Failover order for the free alias, resolved per request (the same order the public docs page shows). Hosts and model ids only, no keys.

Model leaderboard

// Compare real usage to pick the right model

Last 7 days of real requests. Latency and avg output use successful calls only; price is what you pay (discount included). Click headers to sort: lower latency = faster, lower price = cheaper.

Model comparison

ModelsProvider Latency ▲ Success rate Price $/1M in/out Avg output Calls (7d)
Loading…
Latency: time until the response starts (TTFT for streams, full round-trip otherwise). Price = USD per 1M tokens (discount included), sorted by output price. More samples = more reliable; models with no successes show – for latency.

Docs

// OpenAI / Anthropic compatible · use the same SDKs

API & auth

Chat Completions endpoint:
Auth header:
Authorization: Bearer <your token>

curl

OpenAI SDK

Anthropic compatible (Claude SDK)

This gateway implements Anthropic Messages; Claude SDK / Claude Code can connect directly:
POST
Auth: x-api-key: <your token> or Authorization: Bearer <your token>. Use the Base URL above for base_url; model IDs are the same as the OpenAI API.
Request body is Anthropic format: messages + max_tokens (required). Responses include X-KeyPool-Provider / X-KeyPool-Model (the upstream model that answered) / X-KeyPool-Requested-Model / X-KeyPool-Fallback (model may differ after fallback).

Model ID

Model IDProviderContextMax outputRef. price $/1M in/out
Loading…

POST /v1/chat/completions

Base URL (use for OpenAI baseURL):
Request body (OpenAI-compatible; supports stream:true SSE):
By default the gateway falls back to a similar model if yours is unavailable. Set "fallback": false to disable fallback and fail if the model is unavailable.

Response headers

Response headersMeaning
X-KeyPool-ProviderProvider actually used (e.g. gemini)
X-KeyPool-ModelUpstream model ID that actually answered (for free or value, the real model, not the alias; may differ after fallback)
X-KeyPool-Requested-ModelModel ID the request asked for (e.g. free or value)
X-KeyPool-FallbackPresent (1) when a hop or provider after the first choice answered

Other endpoints

GET /v1/models — lists routable models (active keys, not marked unavailable). When models.dev data is present, each entry includes pricing (prompt / completion / cache_read / cache_write, USD / 1M tokens; see pricing_unit), context_window, max_output, modalities.
GET
Native passthrough (provider-native protocols; gateway picks keys and bills):
/gemini/*  ·  /mistral/*  ·  /openrouter/*
Append the provider path after the prefix, e.g. /gemini/v1beta/models/...:generateContent. Auth: Authorization: Bearer <your token>.

Error codes

Errors are OpenAI-shaped; message is in body.error.message:
StatusMeaning / what to do
402Insufficient balance — top up and retry
429Rate limited / quota — back off and retry
4xxClient error (params / model id / auth)
5xxUpstream error — retry later

Billing

Billed per token: input and output settled separately; prices are in admin Model prices. Requests fail when balance is insufficient. See Usage and Balance for history.

Overview

// Key pool health

Pool status

Active
–
Cooldown
–
Disabled
–
ProviderActiveCooldownDisable
Loading…

Console access

Loading…

Devin quota

Loading…

Bifrost migration

bifrost.rowe.lol is mounted on this Worker (custom-domain route in wrangler.toml). It is served by the same Worker and binds the same D1 store as ai.rowe.lol, so its usage, log and alias counts show up in this console.

Key pool

// Import to enable · bad keys auto-disabled

Import keys

Supported: gemini openai mistral openrouter deepseek groq moonshot glm qwen deepinfra fireworks cerebras ai21 cohere elevenlabs stability. Duplicates are skipped; bad keys are disabled on first failed use.

Status by provider

ProviderActiveCooldownDisable
Loading…
Need per-key detail?

Model availability

Loading…
Probe each model once; unavailable ones (billing / retired) are greyed out and omitted from /v1/models.

Check all keys · one batch

Runs POST /admin/check-all-keys: live probes of up to 48 due keys, with the same revive and disable rules as the health check. To sweep the whole pool, use Key list → Check all.

Key list

// Per-key view · probe / balance (OpenRouter)

All keys

ProviderkeyReq / failLast errorProbe / balanceAddedActions
Loading…
Probe checks live: OpenRouter shows real balance; Gemini/Mistral only report up/down (rate limits count as up). A successful probe can revive disabled/cooldown keys.

Rotate key

The field is cleared as soon as you submit. The server result never includes the secret.

Bulk rotate · one provider

Preview lists the rows that would change and each new key's length, never the key itself. Confirm stays disabled until the counts match. Keys are cleared after submit.

Users

// Approval workflow · pending users first

User list

EmailRoleStatusCreated
Loading…

Token

// Global tokens · including admin-issued

Issue token

Shown once — copy and store it now

Token list

idNameRoleOwnerUsageRPMExpiresOnCreatedActions
Loading…

Token

Only changed fields are sent. Role and the secret are not shown or editable here; the secret is shown once, when the token is issued.

Rotate token

New secret. It is shown ONCE. Copy it now: it will not be shown again.

Model manager

// Visibility overrides · value and free are locked

Models

Model idProviderVisibleSourceReasonAction
Loading…
Hide and Show write an override (PUT /admin/models/:id/visibility). Clear sends null and returns the model to its rule or default. value and free cannot be hidden.

Free order

// Drag to pin the failover order · Save applies it

Pinned order

Drag a row by its handle, or focus a row and press Alt+↑ / ↓. Pinned hops run first, in this order. Hops that are not pinned follow below in their Terminal-Bench order.
Then, not pinned (Terminal-Bench order):

Free lineup (daily)

When free_lineup_mode is daily, a scheduled job reorders only unpinned hops by Terminal-Bench. The pinned prefix in free_pinned_order is never moved.

Value order

// Drag to reorder the value fallback steps · Save applies it

Fallback steps

The value alias always tries OpenCode Go first, with the value_model target below. That step is not reorderable.
1OpenCode Go always first
Then, in this order. Drag a row by its handle, or focus a row and press Alt+↑ / ↓. Each step runs only when the steps before it failed.

Settings

// Stored in D1 · the server validates every save

Trusted IPv4

Default: ·

Trusted IPv6 /64 prefixes

Default: ·

Value model

Default: ·

Hidden name needles

Default: ·

Chat

// Chat with any model · billed per token

Balance – USD
Start a conversation…

Debug chat

// Chat through one key · no pool · not billed

Debug replies are capped at 256 tokens by default
Pick a key to test…

Usage

// Last 30 days · your traffic

Total requests
–
Success rate
–
Total tokens
–

Alias routing · resolved upstreams

Requests served through the value and free aliases, grouped by the upstream that actually answered (after fallback). Top 5 per window. Global counts, not per user.
Loading…

Requests (14 days) OK Failed

By provider

ProviderRequestsOKAvg latencytoken
Loading…

Recent requests

TimeProviderModelsStatusLatencytokensession
Loading…

Logs

// Last 30 days · all traffic

Total requests
–
Success rate
–
Total tokens
–

Requests (14 days) OK Failed

By provider

ProviderRequestsOKAvg latencytoken
Loading…

Top users · 30 days

#UsersRequestsSuccess ratetokenLast
Loading…
Click a row to filter logs to that user.

Recent requests Page 1

TimeUsersProviderModelsStatusLatencytokensession
Loading…

Billing

// Balances · top-ups · ledger · pricing

Top up

Balance overview

Total balance USD
–
Users
–
Users with balance
–
EmailsubBalance USD
Loading…

Recent transactions Up to 100 most recent

TimeUsersTypeAmount USDBalance USDModelstokenNote
Loading…

Model prices

ModelsInput $/MtokOutput $/Mtok
Loading…
Stored as micro-USD per Mtok; input and output billed separately.

Balance

// Your balance and ledger

Current balance

Balance USD
–

Top up

Top-up processing; balance updates automatically (click Refresh in a moment).
Pay online via Stripe. Balance credits after payment confirms.

Recent transactions

TimeTypeAmount USDBalance USDModelstokenNote
Loading…