Wallet API Reference
Every PoH miner exposes an HTTP API on walletApiPort (default 3456).
Balance responses are in μPOH (raw) — 1 POH = 1 000 000 000 μPOH.
Input amounts for /api/wallet/send and staking endpoints are in POH (the server converts internally).
Public miners (e.g. miner.proofofhuman.ge) expose the same routes over HTTPS. CORS is open for browser clients.
Generate Wallet
A PoH wallet is an ed25519 keypair. The address is derived from the signing public key — no seed phrases, no custodians. Follow these four steps to create a wallet and start submitting jobs.
Run this Node.js script (requires tweetnacl — npm i tweetnacl).
It deterministically derives an ed25519 signing keypair from 32 random bytes, then
computes the canonical PoH address as 'poh' + sha256(signingPublicKey).slice(0,40).
Keep poh-wallet.json secret.
The signingSecretKeyB64 is the private signing key — never share or commit it.
Post your address, signingPublicKey, and the proof from Step 1 to any miner.
The proof is an ed25519 signature over your address — it proves you hold the private key.
This binds your key to your address so the network can verify your job payment signatures.
Missing the proof returns 400 { "error": "address, signingPublicKey, and proof required" }.
An invalid proof returns 403 { "error": "invalid proof" }. To rotate to a new key later,
include a rotationProof signed by your existing key.
Registration is free and only needs to happen once per keypair. It does not require any POH balance.
Compute and skill jobs require a signed paymentTx with sufficient budget. Fund your address
via the P2P exchange, a transfer from another wallet, or a faucet.
Check your balance at any time:
Sign a payment proof and post to /job. The snippet below uses the wallet file from Step 1.
Chain & Wallet
/statusNode status — chain height, sync state, reputation.
/api/miner/infoVersion, uptime, peer count, wallet address.
/api/wallet/balance?address=<addr>Balance in μPOH for a PoH wallet address.
/api/wallet/nonce?address=<addr>Current nonce for transaction / payment signing.
/api/wallet/transactions?address=<addr>POH transfer history.
/api/wallet/history?address=<addr>Full history with block confirmations.
/api/wallet/jobs?address=<addr>&limit=20Public job history — joins job-submitted transitions with mined scanResults. Returns { jobs, latestSkillMemory, chatTurns }.
/api/wallet/register-keyRegister an ed25519 signing key for an address. Required before signed job payments. See Generate Wallet for how to produce the proof. proof = ed25519 signature over the address string.
/api/wallet/sendTransfer POH between wallets. The sender wallet must be stored on this node (loaded via walletManager). Amount is in POH (not μPOH). Optional fee and memo fields.
/api/tx/submitSubmit a pre-signed PoHTransaction to the mempool.
/api/tx/pendingInspect pending mempool transactions.
/api/chain/supply-auditChain supply audit — total issued vs. accounted balances.
Jobs
Submit compute work to the network. Types: verdict (identity scan, free), skill, compute.
skill and compute jobs require a signed payment proof (maxBudget in μPOH).
Paid jobs are metered per AI compute token at 1 μPOH per token (the default gasPrice; μPOH is the smallest unit, so this is the floor). Since 1 POH = 1 000 000 000 μPOH, one POH buys up to 1 billion tokens.
The fee is tokensUsed × gasPrice and is never less than the tokens actually used (1 000 tokens ⇒ ≥ 1 000 μPOH). Unused budget is refunded. A maxBudget too small to cover the job's token cost is rejected with 402 FEE_TOO_LOW.
Block reward. On top of the fee, each block's ~1 POH subsidy is split among the workers who completed jobs, weighted by delivered compute (a deterministic token estimate — splitting into many nodes earns nothing extra), minus a small (~10%) proposer cut. Blocks with no real work mint only a small keepalive, so emission tracks demand.
POH has no fixed price — the market defines it via the best open P2P order (see GET /api/p2p/price).
/jobSubmit a job. Returns { jobId, statusUrl, resultUrl }. paymentTx.txHash is a SHA-256 of { jobId, requesterAddress, minerAddress, amount, nonce } — not a blockchain transaction hash.
/job/:id/statusPoll job state: queued, computing, done, error.
/job/:id/resultFull result when the job is done.
/jobsList active jobs on this node.
/gossipReceive P2P gossip envelopes from peer miners.
Chat & Routing
/chat/routeRoute a message to the best matching skill.
/chat/askFull AI reply — routes to a skill or free chat. May return { fromChainHistory: true } for cached on-chain replies.
Private chat uses in-memory session history. Public (paid) jobs also pull on-chain history via
/api/wallet/jobs so follow-ups work across devices.
Chat History Search
Meilisearch runs locally on each miner (port 7700). Remote clients call these wallet API routes — not Meilisearch directly.
/api/search/suggest?q=<prefix>&wallet=<addr>&limit=8Autocomplete from indexed blockchain job history — past prompts and reply snippets.
/api/search/history-match?q=<message>&wallet=<addr>Return a full cached reply when the prompt closely matches prior on-chain history (similarity ≥ 0.86).
Blockchain Explorer
/api/explorer/blocks?page=0&limit=20Recent blocks (newest first). Each entry includes jobCount when the block contains mined results.
/api/explorer/block/:heightFull block JSON — scanResults, stateTransitions, hash, miner, reward.
/api/explorer/search?q=<query>Lookup by block height, tx/block hash, or wallet address. Address search returns balance, transfers, and completed jobs.
Skills
On-demand agent modules. Deploy a public skill for 100 POH; community staking reaches 1,000 POH to graduate a skill network-wide.
/api/skillsList skills with staking totals and economics: { proposeFeePoh, graduationThresholdPoh }.
/api/skills/prefs?address=<addr>Skill enable/disable and staking preferences for a wallet.
/api/skills/proposePropose a new skill. Public proposals cost 100 POH (escrowed for code_audit).
/api/skills/:id/stakeStake POH toward skill graduation. Amount is in POH (not μPOH). Uses the node's own wallet.
/api/skills/:id/unstakeWithdraw staked POH from a proposed skill.
/api/skills/:id/enable | /disableToggle whether this node runs a skill.
HF Datasets
Hugging Face datasets installed on this node. Compute jobs can reference them by ID. Chat will suggest installs when a dataset is missing.
Datasets are stored under ~/.poh-miner/brain-data/hf-datasets/.
/api/hf-datasetList installed datasets. Returns { datasets: [{ id, files, rowCount, source }] }.
/api/hf-dataset/:id/downloadInstall a dataset by Hugging Face ID. Falls back to pulling from a peer miner if HF is unreachable. Returns { ok: true, manifest } on success.
/api/hf-dataset/:idRemove an installed dataset from this node.
LLM & Brain
Inference runs in-process via QVAC. Brain state stores human feedback and signal weights.
/api/chatStreaming chat via local QVAC (Ollama-compatible body).
/api/generateQVAC generate endpoint (Ollama-compatible body).
/api/modelsModels available on this node (built-in + loaded + registry).
/api/network-modelsAggregated model list from connected peers.
/api/brain/stateWeights count, feedback count, model info.
/api/brain/weightsFull weights.json for the identity brain.
/api/brain/feedbackSubmit a human correction to improve signal weights.
/api/brain/voteVote on signal weight adjustments.
P2P Exchange
Peer-to-peer POH trading with on-chain escrow.
/api/p2p/currenciesSupported quote currencies.
/api/p2p/price?quoteCurrency=<cur>Reference POH price — the market price derived only from the best open P2P order(s): { price (mid), bestBid, bestAsk, source }. Omit quoteCurrency for a per-currency map. POH has no oracle/fixed price.
/api/p2p/ordersOpen order book. Filters: side, quoteCurrency.
/api/p2p/orders/my?address=<addr>Orders created by this address.
/api/p2p/ordersCreate a buy or sell order.
/api/p2p/orders/:id/cancelCancel an open order.
/api/p2p/orders/:id/selectTaker selects an order to begin a trade.
/api/p2p/trades/my?address=<addr>Active and completed trades for an address.
/api/p2p/trades/:id/:actionAdvance trade: payment-sent, release, cancel, dispute.
Push Notifications
/api/push/registerRegister an Expo push token for a wallet address.
/api/push/sendSend a push notification. Optional address filter.
Errors & Auth
Responses are JSON. Errors return { "error": "message" } with an appropriate HTTP status (400, 401, 402, 404, 500).
Payment-required (402): skill/compute jobs without a valid signed paymentTx are rejected before execution.
Signing: register your ed25519 key via /api/wallet/register-key, then sign payment proofs binding jobId + minerWallet + maxBudget + nonce.
SDKs: use runCompute() / submitJob() in poh-miner SDK to handle signing automatically.