Build on Fuelwright
One key reaches every agent and every relay enabled model. Usage is charged in credit at the public rate card. All timestamps are UTC.
Quick start
- Connect a Solana wallet on the account page.
- Get credit: buy it with SOL, receive it hourly as a holder, or buy it below face value on the market.
- Create an API key and send it as a Bearer token.
curl https://fuelwright.43-156-127-79.sslip.io/v1/runs \
-H "Authorization: Bearer fw_your_key" \
-H "Content-Type: application/json" \
-d '{"agent": "researcher", "task": "Summarize what changed in Solana fees this month."}'
Authentication
Base URL: https://fuelwright.43-156-127-79.sslip.io/v1
Send Authorization: Bearer fw_... on every request. Keys are shown once when created and can be revoked on the account page. A key spends the credit of the wallet that created it.
Agent runs
POST/v1/runs
Runs one agent to completion and returns the answer, the tool trace and the exact cost. A run can take up to a minute when it searches the web.
{
"agent": "researcher",
"task": "Your instruction, up to 8000 characters"
}
Response:
{
"object": "run",
"run": {
"id": "run_0123456789abcdef",
"agent": "researcher",
"status": "done",
"output": "...",
"model": "openai/gpt-oss-120b",
"tokens_in": 4210,
"tokens_out": 612,
"tool_calls": 2,
"cost": "0.010999",
"created": "2026-10-03 15:47:05 UTC",
"steps": [{"type": "tool", "name": "web_search", "args": {"query": "..."}, "preview": "..."}]
},
"balance": 4.989001
}
GET/v1/runs/{id} returns a past run. GET/v1/agents lists the agents:
| Agent | What it does | Tools |
|---|---|---|
| researcher | Searches the live web, reads the sources and returns a cited brief. | web_search, fetch_url |
| token-scout | Pulls live market data for a token and writes a sober risk brief. | token_lookup, web_search, fetch_url |
| ledger-analyst | Explains the public Fuelwright numbers: credits issued, credits used, revenue and realized discount. | ledger_stats |
| drafter | Writes and rewrites: posts, summaries, replies, documentation. No tools, lowest cost. | none |
Chat completions
POST/v1/chat/completions
Follows the OpenAI chat completions format, including stream, tools and response_format. Point an OpenAI client at the base URL above and use your Fuelwright key.
from openai import OpenAI
client = OpenAI(base_url="https://fuelwright.43-156-127-79.sslip.io/v1", api_key="fw_your_key")
reply = client.chat.completions.create(
model="openai/gpt-oss-120b",
messages=[{"role": "user", "content": "Hello"}],
)
print(reply.choices[0].message.content)
Models and prices
GET/v1/models
| Model id | Input per 1M tokens | Output per 1M tokens | Context | Relay |
|---|---|---|---|---|
| openai/gpt-oss-120b | 0.150 | 0.600 | 131,072 | off |
| qwen/qwen3.8-27b | 0.290 | 0.590 | 131,072 | off |
| openai/gpt-oss-20b | 0.075 | 0.300 | 131,072 | off |
Tool calls made by agents:
| Tool | Purpose | Credits per call |
|---|---|---|
| web_search | Web search | 0.0050 |
| fetch_url | Read a page | 0.0010 |
| token_lookup | Token market data | 0.0005 |
| ledger_stats | Fuelwright ledger | free |
Prices are in credits. One credit has a face value of $1.00.
Balance
GET/v1/balance
{
"wallet": "YourWalletAddress",
"credits": 12.5,
"transferable": 10.0,
"bonus": 2.5,
"listed": 0,
"spent": 3.21
}
Errors and limits
Errors use the OpenAI shape: {"error": {"message": "...", "type": "...", "code": "..."}}.
| Status | Code | Meaning |
|---|---|---|
| 401 | invalid_api_key | The key is missing, wrong or revoked. |
| 402 | insufficient_credits | The wallet does not hold enough credit for the request. |
| 404 | model_not_found | Unknown model or agent id. |
| 429 | rate_limit_exceeded | More than 60 requests in a minute. Retry after the Retry-After header. |
| 429 | too_many_requests | More than 3 requests of one wallet are running at the same time. Wait for one to finish. |
| 503 | relay_unavailable | The model is not cleared for raw relay. Use an agent run. |
How credit works
- Each token trade pays a 1.5% fee. 50% of it becomes credit for holders, which is 0.75% of volume.
- 40% of product revenue joins the same pool, 30% accrues to the buyback reserve and 30% pays for supply and operations.
- The pool is shared every hour between wallets whose time weighted balance over the last 24 hours is at least 1,000 tokens. Balances are sampled every 10 minutes.
- A wallet's share of the pool equals its time weighted balance divided by the total of all eligible wallets.
- Credit bought or earned can be listed on the market. Credit granted by the operator is spent first and cannot be resold.
- The marketplace fee is 5%, taken from the seller side inside the on chain payment.
Launchpad
Anyone can launch a token on a Meteora bonding curve. The token trades against the asset it is paired with: SOL, or a tokenized stock.
- Supply is 1,000,000,000 tokens with no mint authority and metadata that cannot be changed.
- The curve starts near 30 SOL market cap and migrates near 400 SOL, or the same value in the paired stock.
- The dev buy is always paid in SOL. For a stock pair the SOL is swapped to that stock and the first buy happens inside the launch transaction, so the creator never needs to hold the stock.
- Trading costs 1%. It starts at 25% and falls within 60 seconds to slow snipers.
- The creator earns 50% of the trading fees and claims them as SOL on the token page. The other half is protocol income.
- When the curve fills, 20% of the raise is taken for the Fuelwright treasury. The rest moves into a permanent pool whose liquidity is locked forever.
- Buyers and sellers can pay and receive SOL on every token. For a stock pair the swap through the stock happens in the same transaction.
- Protocol income from the launchpad is counted as product revenue on the ledger and follows the same split as everything else.
The first launch paired with a given stock opens that market once. The launcher pays that one time account cost, shown on the launch form.
Verify the ledger
Every closed hour has a frozen record. Its digest is the SHA-256 of the exact bytes served at /ledger/epoch/{hour}.json, where hour is the Unix time divided by 3600.
curl -s https://fuelwright.43-156-127-79.sslip.io/ledger/epoch/HOUR.json | sha256sum
When the ledger program is live, hours that had activity are posted in order. The program keeps one running value:
head = SHA-256( previous_head (32 bytes) + hour (8 bytes, little endian) + digest (32 bytes) )
Start from 32 zero bytes, fold in every posted hour, and the result must equal the chain field stored in the state account. A changed record breaks the chain from that hour onward.
Public data: state.json, ledger/daily.json.
Ledger program
Program: BjYQf48816ngSxgxicUhi6UP9UvNzFhonht6hiALLuxH
State account: EdWfpRLhLQEnY3urKnrqmvFEeVZi1qtnwp25CyAQUcRi
A small Solana program with one state account. It never holds user funds: payments pass straight through to the seller and the treasury in the same transaction.
| Instruction | Signer | Effect |
|---|---|---|
| purchase | Buyer | Sends SOL to the treasury for a quoted credit order and counts it. |
| settle | Buyer | Pays a marketplace seller and sends the fee to the treasury in one step. |
| post_epoch | Operator | Adds one hour to the hash chain. Hours must increase, so history cannot be rewritten. |
| set_config | Authority | Changes the operator, treasury, fee (capped at 20%) or the pause switch. |