UPROUTERONLINE

$ uprouter.online --developers

Public API & open data

Everything that powers the Uprouter directory is available keylessly: normalized per-1M pricing, free-tier values, live status and uptime for 100+ AI API providers — as JSON, CSV, RSS and embeddable badges. No account, no key, no tracking for read endpoints. Data is CC BY 4.0 — attribute UPROUTER.ONLINE and link the source entry.

// conventions
base url
https://uprouter.online

All endpoints below are relative to this origin. HTTPS only.

errors

Errors return a stable machine code: { "error": "rate_limited" } with an appropriate HTTP status. Successful responses are plain JSON unless stated.

caching

Dataset and badge endpoints send long public cache headers (s-maxage + stale-while-revalidate). Query APIs are per-request — send a short client cache if you poll.

ordering neutrality

Sort keys are neutral data signals (price, free credits, status, votes, freshness). Affiliate status, listing fees and Connect participation are never sort inputs — in the API or on the site.

/api/providersauth: none

The same engine that powers the public directory — full filter/sort parity, server-side, never client-filtered. Ordering is computed from neutral signals only; affiliate or commercial participation is not a sort input.

query params
paramtypedescription
qstringFree-text search over name, domain and description.
categorycsve.g. multi_router, inference, gpu — comma-separated list.
typecsvRouter types (freemium, paid_api, open_source, …).
riskcsvlow, medium, high — editorial risk tier.
statuscsvup, degraded, down, unknown — last probe result.
free_tier1|0Only providers with a free tier (1) or without (0).
payg1|0Pay-as-you-go availability.
sub1|0Subscription plan availability.
connect1|0Callable through Uprouter Connect.
credit_min / credit_maxnumberFree-credit value range (USD).
in_min / in_maxnumberMin per-1M input price (USD) range.
out_min / out_maxnumberMin per-1M output price (USD) range.
confnumberMinimum editorial confidence (0–100).
fresh_daysnumberMax days since the last status verification.
min_votesnumberMinimum community vote score.
modelcsvProviders offering any of these model slugs.
sortenumname, category, router_type, risk, confidence, live_status, credit_value, price_in, price_out, last_verified, last_updated, model_count, vote_score, review_count, date_added, multiplier, min_spend.
dirasc|descSort direction (default desc).
page / per_pagenumberPagination — per_page clamps to 6–100 (default 24).
request
curl "https://uprouter.online/api/providers?free_tier=1&connect=1&sort=credit_value&dir=desc&per_page=5"
response · 200
{
  "rows": [
    {
      "slug": "openrouter",
      "name": "OpenRouter",
      "domain": "openrouter.ai",
      "category": "multi_router",
      "routerType": "freemium",
      "riskTier": "low",
      "confidence": 86,
      "liveStatus": "up",
      "creditValueUsd": 5,
      "hasFreeTier": true,
      "connectCompatible": true,
      "minInput": 0.0001,
      "minOutput": 0.0003,
      "votesUp": 44, "votesDown": 1,
      "models": [ { "slug": "gpt-4o-mini", "per1MInputUsd": 0.15, "per1MOutputUsd": 0.6 } ],
      "entryUrl": "https://uprouter.online/s/openrouter"
    }
  ],
  "total": 74, "page": 1, "perPage": 5, "totalPages": 15
}
  • Rows are a projection per sort key — use per_page=100 to page through everything.
  • Internal and unpublished entries are always excluded.
/api/datasetauth: none

One-shot export of the complete filtered directory, including per-model pricing arrays. Same query params as the directory, so any filtered view on the site has an exact API mirror.

request
# JSON — full structured rows with per-model pricing
curl "https://uprouter.online/api/dataset?free_tier=1"

# CSV — spreadsheet-friendly download (attachment)
curl -OJ "https://uprouter.online/api/dataset?format=csv"
response · 200
{
  "license": "CC BY 4.0 — attribute UPROUTER.ONLINE and link to the source entry. …",
  "generated_at": "2026-08-28T08:30:00.000Z",
  "count": 74,
  "export_cap": 1000,
  "providers": [
    {
      "slug": "openrouter",
      "name": "OpenRouter",
      "free_credit_value_usd": 5,
      "free_credit_value_is_estimate": false,
      "connect_compatible": true,
      "min_input_usd": 0.0001,
      "min_output_usd": 0.0003,
      "votes": { "up": 44, "down": 1 },
      "models": [
        { "slug": "gpt-4o-mini", "name": "GPT-4o mini",
          "per_1m_input_usd": 0.15, "per_1m_output_usd": 0.6 }
      ],
      "entry_url": "https://uprouter.online/s/openrouter"
    }
  ]
}
  • License: CC BY 4.0 — attribute "UPROUTER.ONLINE" and link the source entry.
  • CORS: Access-Control-Allow-Origin: * — call it from the browser.
  • Capped at 1,000 rows per response; cached up to 1h at the edge (stale-while-revalidate 24h).
/api/modelsauth: none

The OpenRouter-parity model index behind /models — canonical per-1M pricing, context windows, tokenizers, knowledge cutoffs, licenses, documented capabilities, sourced benchmark results with provenance, and per-endpoint provider counts. Same filter/sort contract as the /models page, so any filtered catalog view has an exact API mirror.

query params
paramtypedescription
qstringFree-text search over model name, slug and creator.
in_modal / out_modalcsvInput / output modalities — text, image, audio, video, embedding.
familycsvgpt, claude, gemini, llama, mistral, deepseek, qwen, glm, …
creatorcsvPublishing organization (exact value).
licensecsvopen-weights, commercial, proprietary, research.
streaming / tools / structured / image_input / audio_input / reasoning / image_output1Capability filters — match documented-true only; undocumented models never match.
free / priced1free = operator documents a 0 rate for both prompt and completion; priced = any canonical per-1M price on record.
in_min / in_max / out_min / out_maxnumberCanonical prompt / completion price range (USD per 1M tokens).
ctx_min / ctx_maxnumberContext-window range (tokens).
has_bench / bench / bench_min1 / string / numberHas any sourced benchmark; named benchmark (e.g. "SWE-bench Verified"); minimum score — bench_min only applies together with bench (units differ across benchmarks).
sortenumname (default), newest, price_in, price_out, context, bench. Price/context sorts keep unpriced/unknown models last in both directions.
dirasc|descSort direction (default asc).
page / per_pagenumberPagination — per_page clamps to 12–100 (default 24).
request
curl "https://uprouter.online/api/models?tools=1&sort=bench&dir=desc&per_page=3"
response · 200
{
  "models": [
    {
      "slug": "openai-gpt-4o",
      "name": "GPT-4o",
      "creator": "OpenAI",
      "family": "gpt",
      "modality": "text",
      "inputModalities": ["text", "image"],
      "outputModalities": ["text"],
      "canonicalInputUsd": 2.5,
      "canonicalOutputUsd": 10,
      "contextWindow": 128000,
      "maxOutputTokens": 16384,
      "knowledgeCutoff": "2023-10",
      "licenseType": "commercial",
      "licenseName": null,
      "specUrl": "https://example.com/docs/gpt-4o",
      "capabilities": { "streaming": true, "toolCalling": true, "structuredOutputs": true,
        "imageInput": true, "audioInput": false, "reasoning": false, "imageOutput": false },
      "samplingParams": ["temperature", "top_p"],
      "createdAt": "2026-08-01T00:00:00.000Z",
      "providerCount": 12,
      "benchmarkBest": { "name": "HumanEval", "score": 90.2, "unit": "%" },
      "benchmarks": [
        { "name": "HumanEval", "version": "v1", "score": 90.2, "unit": "%",
          "provenance": "independent", "conditions": "zero-shot, single-shot",
          "sourceUrl": "https://example.com/eval", "evaluatedAt": "2026-08-20T00:00:00.000Z",
          "verifiedAt": "2026-08-21T00:00:00.000Z", "confidence": "verified" }
      ]
    }
  ],
  "total": 413, "page": 1, "perPage": 3, "totalPages": 138
}
  • Capability booleans are true, false or null — null means undocumented; the index never infers or guesses (absent is a value, not a gap).
  • Only models served by at least one published, non-internal provider are listed — internal sandbox endpoints never leak into the API.
  • Each benchmark row carries provenance (independent | vendor | community), evaluation conditions, source URL, evaluated/verified dates and a confidence grade; scores are comparable only within matching conditions.
/api/search/suggestauth: none

Lightweight typeahead over published providers and models — the same endpoint the header search box uses.

query params
paramtypedescription
qstringMinimum 2 characters, truncated at 80.
request
curl "https://uprouter.online/api/search/suggest?q=open"
response · 200
{
  "providers": [
    { "slug": "openrouter", "name": "OpenRouter", "category": "multi_router",
      "liveStatus": "up", "riskTier": "low", "hasFreeTier": true,
      "creditValueUsd": 5, "connectCompatible": true }
  ],
  "models": [ { "slug": "openai-gpt-4o", "name": "GPT-4o" } ]
}
  • Rate limit: 60 requests/min/IP. Exceeding it returns 429 with a Retry-After header.
/api/statsauth: none

The numbers behind the homepage tiles — entry counts by category/type/risk, free-tier and Connect coverage, live-up count, total free-credit value.

request
curl "https://uprouter.online/api/stats"
response · 200
{
  "total": 106,
  "byCategory": { "multi_router": 34, "inference": 22, "...": 0 },
  "byRouterType": { "freemium": 61, "paid_api": 38, "...": 0 },
  "byRisk": { "low": 71, "medium": 30, "high": 5 },
  "withFreeTier": 74,
  "connectCompatible": 40,
  "up": 105,
  "modelsTracked": 54,
  "totalFreeCreditValue": 849.1,
  "lastUpdated": "2026-08-28T06:12:00.000Z"
}
/feed.xmlauth: none

RSS 2.0 feed of the Uprouter journal — real pipeline events: new entries, price changes, status flips, methodology notes.

request
curl "https://uprouter.online/feed.xml"
response · 200
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>UPROUTER Journal</title>
    <link>https://uprouter.online/journal</link>
    <item>
      <title>Price change — Deepgram: output $0.0043 → $0.0040 /1M</title>
      <link>https://uprouter.online/journal#evt_…</link>
      <pubDate>Thu, 27 Aug 2026 09:00:00 GMT</pubDate>
    </item>
  </channel>
</rss>
/badge/{slug}.svgauth: none

Shields-style terminal SVG with the provider’s name, live status and 7-day uptime. Paste it anywhere — no scripts, no tracking, cacheable.

embed
<!-- HTML -->
<img alt="UPROUTER status badge for OpenRouter"
     src="https://uprouter.online/badge/openrouter.svg">

<!-- Markdown -->
[![Uprouter status](https://uprouter.online/badge/openrouter.svg)](https://uprouter.online/s/openrouter)
rendered output
>_ uprouter | ● openrouter · up 99%  uprouter.online

# 393×28 SVG · Cache-Control: public, max-age=300, s-maxage=600
# unknown providers render a neutral badge; bad slugs return a 404 badge
  • Per-provider live preview + copy on every entry page → the embed_badge panel.
/api/statusauth: none

Machine-readable companion to the live status board and the embeddable badges: per-provider live status, 7-day uptime, latency and probe counts — plus an aggregate summary. Same probe pipeline and uptime math as the /status board.

query params
paramtypedescription
slugstringOptional comma-separated provider slugs (max 50), e.g. slug=openrouter,together-ai.
statusenumOptional row filter: up, degraded, down or unknown. Filters rows only — the summary always describes the whole board.
formatenumjson (default) or csv for a spreadsheet-friendly download.
request
# everything, JSON
curl "https://uprouter.online/api/status"

# two providers only
curl "https://uprouter.online/api/status?slug=openrouter,together-ai"

# currently-degraded providers, CSV
curl -OJ "https://uprouter.online/api/status?status=degraded&format=csv"
response · 200
{
  "license": "CC BY 4.0 — attribute UPROUTER.ONLINE. …",
  "generated_at": "2026-08-28T09:20:00.000Z",
  "summary": {
    "providers_total": 106,
    "up": 105, "degraded": 0, "down": 1, "unknown": 0,
    "overall_uptime_7d": 98.4
  },
  "count": 106,
  "providers": [
    {
      "slug": "openrouter",
      "name": "OpenRouter",
      "live_status": "up",
      "uptime_7d": 99.1,
      "checks_7d": 42,
      "avg_latency_ms_7d": 187,
      "last_latency_ms": 176,
      "last_check_at": "2026-08-28T09:18:00.000Z",
      "entry_url": "https://uprouter.online/s/openrouter",
      "badge_url": "https://uprouter.online/badge/openrouter.svg"
    }
  ]
}
  • uptime_7d is the share of successful probes over the last 7 days (0.1% precision) — identical math to the /status board and badges.
  • Best-effort probes from our network location; not a guarantee. Cache: s-maxage=300, stale-while-revalidate 24h; CORS: *.
  • Poll it to wire Uprouter status into your own dashboards or alerting — pair each row with its badge_url for embeds.
/api/connect/v1/chat/completionsauth: upr_live_… key

One OpenAI- & Claude-compatible API across every Connect-compatible provider in the directory. Address any upstream as provider-alias/model, get automatic ordered failover, and see exactly which upstream served each request and what it cost — billed in Uprouter compute, only on success. Create keys and sandbox aliases in the Connect console.

request
curl "https://uprouter.online/api/connect/v1/chat/completions" \
  -H "Authorization: Bearer upr_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openrouter/anthropic/claude-3.5-sonnet",
    "messages": [{ "role": "user", "content": "Hello" }]
  }'
response · 200
{
  "id": "chatcmpl-…",
  "choices": [{ "message": { "role": "assistant", "content": "Hi!" } }],
  "usage": { "prompt_tokens": 12, "completion_tokens": 9, "total_tokens": 21 },
  "uprouter": {
    "provider_used": "openrouter",
    "credits_charged": 0.0042,
    "request_id": "req_…",
    "failover_chain": ["openrouter", "direct"]
  }
}
  • Model resolution: a plain alias (my-claude) uses your configured failover chain; a fully-qualified path (openrouter/anthropic/claude-3.5-sonnet) pins one upstream.
  • Insufficient balance returns 400 insufficient_credits and never routes — earn more at /earn.
  • Keys, per-provider credentials (envelope-encrypted), daily spend caps and the request log live in the Connect console.

Uprouter command palette

Jump to a page, provider, model or action

Keyboard shortcuts

Every keyboard shortcut available on Uprouter