Web search
The model decides when a question needs fresh information and writes the query.
// docs · minerai-1
minerai is an OpenAI-compatible AI for developers. It runs on graphics cards lent by the community instead of a data center. This page explains every part of it, shows what is live and what is not, and lets you check the network yourself.
Reading the network…
// 01 · status
We only call something live when it runs in production. Everything else is marked for what it is.
| Part | Status |
|---|---|
| Chat, API, streaming, miner network | Live |
| Miner checks: signed handshake, probation, canaries, reputation, bans | Live |
| Wallet sign-in, accounts, API keys, balances | Live |
| Connectors: web, Solana, market data, GitHub, web pages | Live |
| End-to-end encrypted conversation sync | Live |
| Balances in $MINERAI, one for one (no free credits) | Built, opens when the token launches |
| Miner earnings: 80% of the $MINERAI spent on their answers | Live |
| Automatic daily $MINERAI payouts | Built, dry runs until the operator turns them on |
| On-chain ledger proofs | Not built |
| External security audit | Not done yet |
// 02 · quickstart
mk_.curl {{BASE}}/v1/chat/completions \
-H "Authorization: Bearer $MINERAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minerai-1",
"messages": [{"role": "user", "content": "Write a debounce function in TypeScript"}]
}'
import os
from openai import OpenAI
client = OpenAI(base_url="{{BASE}}/v1", api_key=os.environ["MINERAI_API_KEY"])
reply = client.chat.completions.create(
model="minerai-1",
messages=[{"role": "user", "content": "Write a debounce function in TypeScript"}],
extra_body={"connectors": ["web", "github"]},
)
print(reply.choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "{{BASE}}/v1", apiKey: process.env.MINERAI_API_KEY });
const stream = await client.chat.completions.create({
model: "minerai-1",
messages: [{ role: "user", content: "Write a debounce function in TypeScript" }],
stream: true,
});
for await (const chunk of stream) process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
// 03 · terminal
One command installs minerai. It is an AI agent for your projects, and the same command mines. It updates itself.
irm {{BASE}}/install.ps1 | iex
curl -fsSL {{BASE}}/install.sh | sh
| Command | What it does |
|---|---|
minerai login | Connects your account: paste the API key from the app's API page |
minerai | The agent, in the current folder. It reads files, writes files and runs commands, and asks before each write or command |
minerai "question" | One answer, then exit |
minerai mine | Mines: your graphics card answers the network, you earn $MINERAI |
minerai models | The models unlocked on the network (--model <name> picks one) |
minerai balance | Your $MINERAI balance |
minerai update | Gets the latest version (it also updates by itself) |
Inside the agent: /model, /models, /balance, /clear, /yes (approve everything), /exit. The agent can only touch files inside the folder you start it in.
// 04 · architecture
Three parts: your app, the router, and the miners. Click a step to see what happens there.
// 05 · api
The API follows OpenAI's Chat Completions format. Send your key as Authorization: Bearer mk_…. Base URL: {{BASE}}/v1.
| Field | Type | Default | Notes |
|---|---|---|---|
messages | array | required | 1 to 64 messages, roles system, user, assistant, 32,000 characters in total |
stream | boolean | false | Server-sent events in OpenAI format |
max_tokens | integer | 1024 | Capped at 2,048 and at what your balance can pay for |
temperature | number | 0.7 | 0 to 2 |
seed | integer | random | Passed to the miner |
connectors | string[] | [] | Any of web, solana, market, github, page |
Responses add a minerai object with the request's cost, your remaining balance in credits (that is, $MINERAI), and, with connectors, the tools used and their sources.
The answer streams here. Each run spends a little $MINERAI from your balance.
/v1/modelsThe network modelReturns minerai-1. No key needed.
/api/accountBalance and usageYour balance, today's usage, your last 50 requests and the pricing. Needs your key.
/api/account/rotateNew API keyReplaces the key used for the call. The old one stops working immediately.
/api/wallet/challengeSign-in messageBody { address }. Returns the Sign-In With Solana message to sign, valid 10 minutes, single use.
/api/wallet/verifySign inBody { message, signature } (base64). Signs in to the wallet's account, creates it on first sign-in, or links the wallet to the account of the key you send.
/api/conversationsEncrypted chat syncCiphertext only. See Privacy.
/api/networkLive networkMiners online with reputation and stats, the router's public key, totals. No key needed.
/api/transparencySolvency reportVault value next to what is owed to users and miners. No key needed. See Transparency.
/api/miner/<wallet>Miner earningsHeld, payable, paid and cancelled earnings of a miner wallet.
| Status | Type | Meaning |
|---|---|---|
| 401 | authentication_error | Missing or unknown key |
| 402 | insufficient_credits | Balance too low |
| 403 | permission_error | The account has no linked wallet |
| 429 | rate_limit | Too many requests |
| 502 | upstream_error | A miner failed mid-answer |
| 503 | no_capacity | No miner free within 30 seconds |
// 06 · connectors
Connectors run on the router, never on a miner's PC. Their results reach the model as numbered sources it cites as [1], [2], framed as untrusted text so a web page can't give it orders. Each successful call costs 0.5 $MINERAI, with at most 4 per request.
The model decides when a question needs fresh information and writes the query.
Paste an address or a transaction: balances, holdings, token authorities, transfers. Read-only, mainnet.
Type $SOL: price, volume, liquidity. Symbols resolve through a verified token list, and copycat tokens are flagged.
Paste a repository or file link: metadata, README, open issues, file contents. Public repositories.
Paste any link and the model reads it. Private and internal addresses are refused.
// 07 · pricing
Your balance is $MINERAI, one for one: deposit 1,000 $MINERAI and your balance is 1,000. Requests have a fixed price in dollars and are paid in $MINERAI at the token's average price over the last hour. The higher the coin, the fewer tokens a request takes, so the AI stays affordable and miners keep a steady income whatever the market does.
Every $MINERAI you spend is split: 80% to the miner who served you, 10% burned for good, 10% to the treasury. Holders of 1,000,000 $MINERAI or more (in their wallet plus their balance) pay 20% less.
Everything that comes in ends up as demand for $MINERAI, and everything that goes out is held or burned:
The stats card shows it all live: answers paid, $MINERAI bought back, staked by miners, burned.
| Market cap (1B supply) | 1,000 output tokens ($0.001) | Miner | Burned |
|---|---|---|---|
| $50k | 20 $MINERAI | 16 | 2 |
| $500k | 2 $MINERAI | 1.6 | 0.2 |
| $5M | 0.2 $MINERAI | 0.16 | 0.02 |
// 08 · wallets
You sign in by signing a short text message in the standard Sign-In With Solana format. It is not a transaction: it costs nothing and cannot move a single token. Your wallet shows it as a message to sign, with the site's domain, and warns you if the domain doesn't match.
// 09 · privacy
Conversations sync between your devices, but the router only ever stores ciphertext it cannot read.
One honest limit: to answer you, a miner has to read your prompt. Prompts are in clear text on the router and on one miner while they are being answered. Never paste passwords, private keys or personal data.
// 10 · mining
A miner runs minerai-1 on its graphics card and answers the questions the router sends it. It needs an NVIDIA, AMD or Apple GPU with 8 GB of memory or more.
One command installs everything and starts mining. The Become a miner window in the app writes it for you with your Solana address already in it. Next time, just type minerai mine.
irm "{{BASE}}/install.ps1?wallet=YOUR_SOLANA_ADDRESS" | iex
curl -fsSL "{{BASE}}/install.sh?wallet=YOUR_SOLANA_ADDRESS" | sh
When the network unlocks a bigger model, every miner whose card can hold it downloads and installs it in the background, without stopping. Bigger models cost users more per answer, so they pay miners more: minerai-1 Pro pays 2× per token, Coder 3×. A card with more memory earns more. The miner also installs new versions of itself between answers.
The miner checks your card at startup and warns you if it has less than 8 GB.
// 11 · transparency
This report is read live from /api/transparency. The rule it checks: what the vault holds must cover what is owed to users and miners.
Every job produces a receipt signed by the router's key, published at /api/network. Payout batches are public at /api/payouts/<date>. Deposits and payouts are Solana transactions anyone can open in an explorer.
// 12 · security
| Risk | What stops it |
|---|---|
| Stolen API keys from a data leak | Keys are stored as SHA-256 hashes only |
| A miner faking or tampering with answers | Probation, random canaries, reputation, bans, 24 h earnings hold |
| A miner inflating its usage | Counts capped by the text the router relayed |
| A phishing site copying minerai | Sign-in messages bound to the real domain, never a transaction |
| A web page attacking the router | The page reader refuses private addresses and re-checks every redirect |
| Script injection through an answer | Answers are sanitized and the app runs under a strict Content Security Policy |
| Copycat tokens in market data | Verified token list first, look-alikes flagged in the answer |
What we will never do: ask for your seed phrase or private key, DM you first, ask you to approve a transaction to sign in, or promise returns. Found a vulnerability? Report it privately through GitHub's Security → Report a vulnerability.
// 13 · open source
The router, the miner, the app and the training pipeline are open source under Apache 2.0. Everything described on this page can be checked in the code: how keys are hashed, how canaries work, how balances are counted, how conversations are encrypted.
// 14 · faq
Judge by what you can check: the code is open, signing in never involves a transaction, the solvency report is live on this page, and everything not running yet is labeled as such. We never ask for a seed phrase and never promise returns.
A miner sees the prompt it is answering, while it answers. Your saved conversations are end-to-end encrypted and unreadable by the router. Don't paste secrets.
A wallet is your account: it signs you in on any device, unlocks your encrypted conversations, and holds the $MINERAI you deposit or earn. It replaces email and password, and signing in costs nothing.
You can't send requests until it is back. Your balance and conversations are kept.
No. $MINERAI is what you spend on AI calls. Nothing on minerai promises a return or a price.
Yes. The router is one Node.js process with a Dockerfile; the self-hosting guide in the repository lists every setting.