Sellers
If you have spare capacity on an AI provider key — your own GPUs, a self-hosted open-weights model, or credits you are allowed to resell — you can list it on UberLLM. Buyers are sent to your offer whenever it is the cheapest healthy option for the model they asked for, and you earn exactly what they pay.
The easy way is the seller page: Account → Sell capacity → New offer. It walks you through five steps: Provider, Discover, Health test, Pricing, Review. Nothing goes live until you confirm.
Everything the page does is also an API, so your agent can do it too (see For agents).
How an offer works
- One provider key, one base URL, many models. An offer is one model served
through one key at one address. The same key can serve as many models as you
like, but you can't list the same model twice on the same key and address — a
second one is refused with
409 duplicate_offer_for_credential(and, when the existing offer is yours, its id inerror.detail.existing_offer_id). - The model name on your server can differ from ours (e.g. we call it
deepseek/deepseek-v4-flash, your server calls itdeepseek-v4-flash). Discovery matches them for you; by hand, sendupstream_model. - Your key is encrypted at rest, decrypted only to serve a request sent to you, never returned by any read and never logged. A new key is tested before it is accepted — if the test fails, your old key stays. Removing an offer erases the stored key.
Pricing
Text offers are priced as a discount off the model's list price (the price a
buyer would pay going direct). Send discount_pct (e.g. 45 = 45% off) or the
same thing as multiplier (0.55). Per-token prices (input_usd_per_mtok /
output_usd_per_mtok) are no longer accepted for text models.
"match_best": true sets your price to the deepest discount buyers can get on
that model right now, so you're first in line. You can change it any time.
Buyers pay your price; all of it is credited to you as each request completes. UberLLM takes no fee from your sales. Your own cost is whatever your provider charges your key.
Optional daily_cap_usd: once buyers have spent that much on the offer in a day,
it stops getting requests until the next day.
Health
Health comes from real buyer traffic — we never ping your key on a timer.
- When you list or turn on an offer, or change its key, we send one small test request (it may use a tiny bit of your quota).
- If a buyer's request to you fails, the buyer is moved to the next seller and your offer sits out of routing for a while: 30 s → 1 min → 2 min → 10 min for server errors and timeouts, 10 → 20 → 40 → 60 min for a refused key or no credit, 15–30 s for rate limits. When the wait ends your offer gets requests again; a request that goes through resets it.
- Fixed it sooner?
POST /seller/offers/{id}/reset-health(the Fixed it, try again button) puts it back at once. GET /seller/health-logsays, in plain words, why an offer was skipped and when it came back.
Earnings and payouts
GET /seller/earnings?range=7d|30d|90d|all— earned, sales and tokens, by model, with the market around each of your models (cheapest discount right now and the market's realized discount in the last hour) so you can see how to price.GET /seller/payouts— owed, on the way and paid as separate numbers, plus your payout history.
What you're owed goes into a payout automatically once it reaches $5, or
72 hours after your oldest unpaid sale (checked every 10 minutes). You can
also ask for one at any time (POST /seller/payouts/request, the Pay me now
button). Payouts are sent by hand, in US dollars, by our team for now: we
email you at your sign-in address to arrange it, and a payout counts as paid
only once it has really been sent.
API
Signed in on the web, the seller API is under /api/v1/seller. With your
UberLLM API key (the one your agent got from uberllm sign-in), the same API is
under /v1/seller:
| Call | What it does |
|---|---|
POST /seller/register {display_name} |
Start selling (once). |
GET /seller/providers |
Providers and their base URLs. |
POST /seller/discover {base_url, api_key} or {config_id} |
The models a key can serve, matched to ours. Costs no quota. |
POST /seller/test {base_url, api_key, models[]} |
One small test request per model. |
POST /seller/offers/bulk |
List many models on one key: {endpoint_url, api_key, save_config, daily_cap_usd, offers:[{model_id, upstream_model, discount_pct | match_best}]}. Each model is tested as it's listed; one that fails is left out with the reason. |
POST /seller/offers |
List one model: {model_id, endpoint_url, api_key, upstream_model, discount_pct, daily_cap_usd}. |
GET /seller/offers · GET /seller/offers/{id} |
Your offers with price, % off, health and live rank (where you stand among everything buyers can be sent to for that model). |
PATCH /seller/offers/{id} |
Reprice (discount_pct), cap (daily_cap_usd, 0 removes it), status: paused | active. |
POST /seller/offers/{id}/rotate-credential {api_key} |
New key, tested before it's accepted. |
POST /seller/offers/{id}/reset-health |
Back into routing now. |
DELETE /seller/offers/{id} |
Remove: out of routing, stored key erased. |
GET /seller/configs · DELETE /seller/configs/{id} |
Saved keys for starting new offers (only a 4-character hint is ever shown). |
GET /seller/health-log |
Why offers were skipped. |
GET /seller/earnings · GET /seller/payouts · POST /seller/payouts/request |
Money. |
curl https://api.uberllm.dev/v1/seller/offers/bulk \
-H "Authorization: Bearer $UBERLLM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"endpoint_url": "https://api.together.xyz/v1",
"api_key": "<your provider key>",
"save_config": true,
"offers": [
{ "model_id": "meta-llama/llama-3.3-70b-instruct", "match_best": true },
{ "model_id": "qwen/qwen3-235b-a22b-instruct", "discount_pct": 40 }
]
}'
For agents
Your agent already has an UberLLM API key after sign-in. It can register, find
models on a provider key, list them and watch earnings with the calls above under
/v1/seller. No other key type is needed.
Only list what you may resell
- ✅ Open-weights or self-hosted models you run.
- ✅ Provider capacity you are allowed to resell.
- ❌ Reselling frontier-lab API access (OpenAI, Anthropic, Google and similar) is not allowed — their terms forbid it, and such offers are removed.
Use a dedicated provider key with a spending cap. You are responsible for the licensing and lawful operation of what you list.