The API
One endpoint. OpenAI and Anthropic compatible.
Batches, at half price
Half price. Answered within your deadline when spare low-cost capacity is free; if none comes free in time, the prompt expires and you pay nothing.
Code repositories
GET /api/v1/code/repos?list=trending|week|month|hot|new|top&lang=&topic=&limit= is the cached GitHub repository ranking read through OpenVibe.Sources: trending is repositories created today by stars, week and month the same for 7 and 30 days, hot the most stars gained in 24 hours and 7 days (never totals), new the newest repositories and top the all-time most starred. lang and topic filter exactly; limit is 1–100 (default 30).
GET /api/v1/code/search?q=&lang=&sort=stars|updated|best&page= is a live GitHub repository search through the same source, cached ten minutes and rate-limited per person or address. GitHub's own query syntax passes through: q=stars:>500 topic:ai, q=language:rust pushed:>2026-10-01. Both endpoints need no key and no session, and both answer Cache-Control: public.
Shape: { items: [{ full_name, url, description, language, topics, stars, stars_gained_1d, stars_gained_7d, forks, open_issues, license, created, pushed, owner_avatar_url, homepage }] }. A gain with no reading yet is null, never 0. The browse page is Code.
curl 'https://openvibe.exchange/api/v1/code/repos?list=week&limit=3' \
-H 'Accept: application/json'curl 'https://openvibe.exchange/api/v1/code/search?q=stars:%3E500%20topic:ai' \
-H 'Accept: application/json'What a blueprint run costs
POST /api/v1/estimate prices one run of an agent blueprint (agents.blueprint@1, at most 200 KB) before anything runs. Send { "blueprint": { ... }, "turns": 4 }; turns is 1–50 and defaults to 4, and each turn is counted as 2,000 input and 800 output tokens. Signed in, the answer uses the choices you actually have — your machine, a signed-in plan, your own key, the free allowance, then credits. Signed out, it uses OpenVibe's public offers only, on the allowance and credits rungs.
The answer is { usd_per_run, cheapest: { id, name, rung }, free_on, why, turns, tokens: { in, out } }. free_on lists the rungs where a run costs nothing. A blueprint nothing can run answers 200 with usd_per_run: null and the reason in why; an invalid blueprint answers 422 with its errors. The route is rate-limited like Exchange's other public API reads and never records the blueprint's text.
curl -X POST 'https://openvibe.exchange/api/v1/estimate' \
-H 'Content-Type: application/json' \
-d '{"turns":4,"blueprint":{"id":"bp_vibe","version":1,"state":"published","published_at":"2026-11-12T00:00:00Z","name":"Vibe","summary":"A general assistant.","author":{"type":"service","id":"openvibe"},"visibility":"public","brain":{"pick":"auto","rungs":["allowance","credits"],"max_usd_per_m":1},"knows":{"instructions":"Help with the question."}}}'Compute prices
GET /api/compute/prices is the reviewed compute tariff behind Compute prices, as JSON. It needs no key and no session: the answer is public and carries Access-Control-Allow-Origin: *, so another origin can read it in a browser. It is cached for 60 seconds (Cache-Control: public, max-age=60). The prices are provider tariffs, not quotes: each row keeps the date it was checked (checked_at) and the date it must be reviewed again (expires_at).
Shape: { checked_at, prices: [{ id, provider, region?, kind: "cpu" | "gpu", cpu?, ram_mb?, gpu?, gpu_mb?, currency, hourly, per_second, billing_seconds, promotion?, promotion_expires?, interruptible?, expires_at, source }] }. hourly and per_second are USD; expires_at is epoch milliseconds; source is the provider's own price page. Storage, network and plan fees are not included.
The same list is filtered, sorted and compared on OpenVibe.Compare, which serves the comparison at https://openvibe.compare/api/v1/compute.
One endpoint
https://api.openvibe.exchange/v1/chat/completions speaks OpenAI's Chat Completions; https://api.openvibe.exchange/v1/messages speaks Anthropic's Messages API, so Claude Code works by pointing ANTHROPIC_BASE_URL at it.
Coming from OpenRouter or a provider's own API? Move your application to Exchange: the first request, the gateway settings, routing checks and limited keys, step by step.
curl https://api.openvibe.exchange/v1/chat/completions \
-H "Authorization: Bearer $OPENVIBE_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"openvibe/auto","messages":[{"role":"user","content":"Hello"}]}'Keys
Keys are OpenVibe.Network developer keys: make one, name its scope, and revoke it any time. They are shown once and never stored here. Manage your own provider API keys and browser session cookies on Your keys and accounts; saved values stay sealed on OpenVibe.AI and are never shown again.
Make a key on Network Your keys and accounts
Strict privacy
Sign in to set strict privacy on your keys.
Routing and fallbacks
Chat completions and Messages accept provider.order, only, ignore, allow_fallbacks, sort, max_price, data_collection and zdr. Put model fallbacks in models: ["maker/first", "maker/backup"]. All attempts share one request hold; an Idempotency-Key replay does not charge again.
Sort by price, throughput, latency, quality or value. Quality uses the Bench board rating shown by Report; value is rating per dollar. Offers without the required evidence are excluded. Ratings arrive through the existing Bench event feed; provisional ratings are excluded. Speed uses observed decode throughput or time to first token.
max_price: {"prompt": 1, "completion": 2} caps dollars per million tokens. data_collection: "deny" requires no training; zdr: true requires no retention. Unknown facts cannot satisfy a hard limit. Append :free, :floor or :nitro to require zero prices, prefer the lowest price, or prefer measured throughput. Explicit provider credentials and only-my-keys mode cannot currently combine with these routing controls.
Service tier and data policy
Send service_tier: "flex" on Chat Completions or Messages to ask for the provider's slower, cheaper Flex tier: the request runs in the background class, and the answer says which tier really ran. Send data_policy: "private" to keep the prompt off every provider that trains on or retains it (the router refuses rather than fall back to one); "anonymized" marks work that is not sensitive, and "community" allows a person's machine.
Request accounting
usage: {"include": true} adds cost in dollars, latency in milliseconds and provider to token usage. Look up your own request with GET /v1/generation?id=<response-id>. A different owner receives 404.
Saved request presets
Save model, fallbacks, system prompt, provider routing and sampling under a name using POST /v1/presets/import, then request @preset/name. Use your person token to list or save at /api/v1/exchange/presets, or delete at /api/v1/exchange/presets/:name. Inference keys do not authorize provisioning. The import preview remains write-free.
Other compatible endpoints
POST /v1/completions: one string prompt, with streaming.POST /v1/embeddings: strings or string arrays, float vectors.GET /v1/models: catalogue entries with per-token pricing, context and provider limits.POST /v1/images/generations: the existing image adapter on configured non-metered capacity; paid image accounting is not yet supported.
Model ids
openvibe/auto lets the router pick by your floor, ceiling and policy, and the answer says which model ran and why. An exact id pins one artifact. Bring your own provider key and those requests pay the provider directly, at no fee from us.
| Model id | Context |
|---|---|
openai/gpt-5-nano | – |
openai/gpt-5-mini | – |
deepseek/deepseek-flash | 1,048,576 |
deepseek/deepseek-v4-pro | 1,048,576 |
openai/gpt-4.1-mini | – |
openai/gpt-4o-mini | – |
openai/gpt-5 | – |
meta/muse-ember-1.0 | 1,048,576 |
meta/muse-spark-1.3 | 1,048,576 |
Usage
Aggregate, from OpenVibe.AI: no prompt and no person.
| Day | Requests | Tokens | Cost |
|---|---|---|---|
| 2026-11-13 | 492 | 1.82M | $0.14 |
| 2026-11-12 | 968 | 203.7k | $0.0463 |
| 2026-11-11 | 3,048 | 477.6k | $0.0760 |
| 2026-11-10 | 1,212 | 615.2k | $0.0901 |
| 2026-11-09 | 8,667 | 4.24M | $0.56 |
| 2026-11-08 | 2,666 | 4.36M | $0.57 |
| 2026-11-07 | 1,034 | 3.06M | $0.42 |
| 2026-11-06 | 1,341 | 4.01M | $0.55 |
| 2026-11-05 | 1,551 | 4.90M | $0.59 |
| 2026-11-04 | 964 | 2.73M | $0.36 |
| 2026-11-03 | 732 | 1.82M | $0.23 |
| 2026-11-02 | 903 | 1.63M | $0.23 |
| 2026-11-01 | 461 | 989.5k | $0.13 |
| 2026-10-31 | 853 | 1.32M | $0.18 |
What it costs
Every price is the offer's own, per million tokens, and the answer carries the exact cost of that run. A small free daily allowance comes with every account; it grows with account age and contribution. Paid use, when the owner turns money on, is at cost plus a margin and shown before the request.