How AI Coins work
AI Coins are the only currency here. They cannot be bought, sold or converted into money — they exist so that the network stays roughly balanced between people who give GPU time and people who use it.
The rates
| What happens | AI Coins |
|---|---|
| New account, once | – |
| Being online, admitted and ready — per minute | – |
| Generating an answer for someone else — per token | – |
| Your prompt — per token sent | – |
| Your answer — per token received | – |
| An answer from the free fallback model — flat, per answer | – |
The rates are configuration, not code, and can be retuned as the network grows. This page always shows the values the server is actually using right now.
When no GPU is online
This is a peer-to-peer network, so some of the time there is simply nobody in it. Rather than let you watch a spinner until the request expires, a free fallback model answers instead — and the answer says so, every time:
No community GPU online right now — answered by a free fallback model (…).
- It is never disguised as a volunteer's answer. The chat shows the line above, and the API sends
the header
x-bonsai-served-by: fallbacktogether withbonsai_swarm.served_byandbonsai_swarm.fallback_model. A community answer sayscommunityand keeps its "served by a volunteer's GPU" label. - Nobody earns AI Coins for it. No volunteer did the work, so there is nothing to pay out — it does not count towards levels, badges, streaks or the leaderboard.
- It costs a flat, reduced amount — – AI Coins per answer, however long the answer is, instead of the per-token price of a real swarm answer.
- It is rationed, because unlike the swarm it costs somebody real money: – answers per account per hour, – per connection per hour, and – for the whole site per day. When the budget is gone, the request waits for a real GPU like it always did.
- The swarm always gets first refusal. If any volunteer is online, your prompt goes to them; the fallback only takes over when the network is empty, when nobody has picked the job up after – seconds, or when the volunteer answering you disappears.
If you would rather the network stayed purely peer-to-peer: share your GPU on the Share my GPU page and the fallback stops being needed.
Right now every answer comes from a volunteer's GPU. If nobody is sharing one, your question waits a while and then gives up rather than being answered by a server.
The rules
- A balance can never go negative. If you cannot afford a whole answer, the answer is shortened to what you can pay for; if you cannot afford even the prompt, the request is politely refused.
- You never earn coins from your own prompts. The coordinator never assigns your request to your own browser, so you cannot run in a circle and mint coins.
- Only real minutes count. A browser earns per-minute coins only while it is connected, has passed the speed test, is not paused, and is still answering the coordinator's heartbeat. Loading time earns nothing.
- Tokens are counted by the server, not by the volunteer. The coordinator counts the tokens it actually relayed to the consumer, so a modified browser cannot claim work it did not do. An answer is also hard-capped at the length the request asked for.
- Failed work is free. If a volunteer drops out before the first token, the request is re-queued to somebody else and nobody is charged or paid for the attempt.
- The ledger is append-only. Every change is one row with a reason; your balance is the sum of those rows, and you can read all of them on your wallet page.
Levels, streaks and badges
Lifetime earned coins decide your level — Seedling, Sprout, Sapling, Bonsai, Grove, Canopy, Old Growth. A streak counts the days in a row on which your GPU earned something, in your own timezone. Badges are unlocked by the server from the same ledger rows, never by the browser, so nobody can award themselves one. The leaderboard is opt-in and shows a display name, a level and earned coins — nothing else.
Using the swarm from your own code
Create a token on the wallet page and point any OpenAI-compatible client at
/api/v1:
curl $ORIGIN/api/v1/chat/completions \
-H "authorization: Bearer bsw_..." -H "content-type: application/json" \
-d '{"model":"ternary-bonsai-2-27b","stream":true,
"messages":[{"role":"user","content":"Hi"}]}'
The response carries the usual OpenAI fields plus a bonsai_swarm object with
coins_charged and the provider's measured speed. For the OpenAI Responses and Anthropic Messages
shapes, run the downloadable client — it puts LiteLLM in front of this endpoint on your own machine.
Why a welcome budget?
So you can try the network before you contribute anything. It is small on purpose: a few conversations. After that, open the Share my GPU page for a while — an evening of sharing pays for a lot of chatting.
Rate limits
Per account: 20 chat requests per minute and at most two requests in flight at the same time. Per connection: a limited number of sign-ins per hour and new accounts per day. These exist to keep one script from starving the volunteers.