Documentation

Base URL: https://api.strue.com/v1

Quick start

1. Get a key at strue.com/signup. Free — 500 credits + 2GB storage + 100 data queries.

2. Make your first call:

curl
curl -X POST https://api.strue.com/v1/inference \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Hello","model":"deepseek-ai/DeepSeek-V3","max_tokens":256}'

Authentication

Bearer token: Authorization: Bearer your-api-key

Enterprise mTLS: see identity page.

Trial Keys

GET/v1/trial0 credits

Get a temporary API key with 500 credits, expires in 7 days. No auth required. Rate limited to 1 per IP per day.

curl
curl https://api.strue.com/v1/trial
Response
{
  "key": "sk_trial_abc123...",
  "credits": 500,
  "expires_at": "2026-04-04T00:00:00Z",
  "message": "Trial key — 500 credits, expires in 7 days."
}

Inference

POST/v1/inferencetiered

Open source models via Chutes SN64. Tiered pricing per 1K tokens: Budget (1 cr) — MiMo, Qwen3-235B, Llama 3.3, Covenant-72B. Standard (2 cr) — DeepSeek V3, Qwen3-Coder. Premium (5 cr) — Kimi K2.5, DeepSeek R1. Minimum 1 credit per call. See GET /v1/models for live list. Auth required.

Request
{
  "prompt": "Explain quantum computing",
  "model": "deepseek-ai/DeepSeek-V3",
  "max_tokens": 256
}
Response
{
  "text": "...",
  "tokensInput": 12,
  "tokensOutput": 187,
  "subnet": "chutes-sn64"
}
curl
curl -X POST https://api.strue.com/v1/inference \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Explain quantum computing","model":"deepseek-ai/DeepSeek-V3","max_tokens":256}'

Chat Completions

POST/v1/chat/completionstiered

OpenAI-compatible chat completions. Drop-in replacement. Same tiered pricing as /v1/inference. Auth required.

Request
{
  "model": "deepseek-ai/DeepSeek-V3",
  "messages": [{ "role": "user", "content": "Hello" }]
}
Response
{
  "id": "chatcmpl-...",
  "choices": [{ "message": { "role": "assistant", "content": "..." }}],
  "model": "deepseek-ai/DeepSeek-V3",
  "usage": { "prompt_tokens": 5, "completion_tokens": 42 }
}
curl
curl -X POST https://api.strue.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"deepseek-ai/DeepSeek-V3","messages":[{"role":"user","content":"Hello"}]}'

Confidential Compute

POST/v1/confidential3 credits

TEE-verified private inference via Targon SN4. ~$0.20/M tokens. Auth required.

Request
{ "prompt": "Analyze this sensitive data...", "max_tokens": 256 }
Response
{
  "text": "...",
  "tee_attestation": "...",
  "subnet": "targon-sn4"
}
curl
curl -X POST https://api.strue.com/v1/confidential \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Analyze this sensitive data...","max_tokens":256}'

Additional confidential endpoints

GET/v1/confidential/:workload_id — Check workload status.

DELETE/v1/confidential/:workload_id — Delete a confidential workload.

Evaluate

POST/v1/evaluate1 credit

Content quality evaluation via Ridges SN62. ~$0.005/eval. Auth required.

Request
{ "prompt": "Content to evaluate...", "criteria": "accuracy" }
Response
{ "score": 0.87, "analysis": "...", "subnet": "ridges-sn62" }
curl
curl -X POST https://api.strue.com/v1/evaluate \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Content to evaluate...","criteria":"accuracy"}'

POST/v1/search2 credits

Web search via Apex SN1. Auth required.

Request
{ "query": "Bittensor subnet architecture", "num_results": 10 }
Response
{
  "results": [{ "title": "...", "url": "...", "snippet": "..." }],
  "subnet": "apex-sn1"
}
curl
curl -X POST https://api.strue.com/v1/search \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"Bittensor subnet architecture","num_results":10}'

Deep Research

POST/v1/research10 credits

Multi-source research synthesis via Apex SN1. Returns a job ID to poll. Auth required.

Request
{
  "query": "Impact of decentralized training on model quality",
  "depth": "deep",
  "publish": true,
  "storage": "arweave"
}
Response
{ "job_id": "res_abc123", "status": "running", "query": "..." }

GET/v1/research/:job_id — Poll for results. Returns report, sources, arweave_url when complete.

curl
curl -X POST https://api.strue.com/v1/research \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"Impact of decentralized training","depth":"deep","publish":true}'

Autoresearch Agent

autoresearch.py
from strue import Client

agent = Client(api_key="your-key")

gaps = agent.evaluate(model="my-agent-v2", criteria="accuracy")
data = agent.data(query=gaps.weakest_topic, sources=["twitter","reddit"])
train_set = agent.inference(prompt=f"Generate QA pairs from: {data}")
result = agent.finetune(base_model="deepseek-ai/DeepSeek-V3", data=train_set)
score = agent.evaluate(model=result.model_id, criteria="accuracy")

if score.improved:
    agent.store(filename="agent-v3.bin", data=result.weights)

Social Data

POST/v1/data2 credits

Data Universe SN13. X, Reddit, YouTube. 100 free queries/month. Auth required.

Request
{
  "source": "X",
  "keywords": ["bitcoin", "sentiment"],
  "start_date": "2026-03-01",
  "end_date": "2026-03-28",
  "limit": 100
}
Response
{
  "items": [{ "text": "...", "author": "...", "timestamp": "..." }],
  "count": 100,
  "subnet": "data-universe-sn13"
}
curl
curl -X POST https://api.strue.com/v1/data \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"source":"X","keywords":["bitcoin"],"limit":50}'

Price Feeds

GET/v1/data/price?pair=ETH/USD0 credits (free)

Chainlink oracle prices. 15+ independent nodes. Cached 60s. Auth required.

Pairs: ETH/USD, BTC/USD, LINK/USD, USDC/USD, DAI/USD, USDT/USD

Response
{
  "pair": "ETH/USD",
  "price": 3321.45,
  "verified": true,
  "source": "chainlink"
}
curl
curl "https://api.strue.com/v1/data/price?pair=ETH/USD" \
  -H "Authorization: Bearer YOUR_KEY"

Blockchain Data

POST/v1/chain/balances1 credit

Token balances via The Graph. Ethereum, BSC, Base, Arbitrum, Optimism, Polygon. Auth required.

Request
{ "address": "0x...", "network": "ethereum" }
Response
{
  "address": "0x...",
  "network": "ethereum",
  "tokens": [{ "symbol": "USDC", "balance": "1250.00", "usd_value": 1250.00 }]
}
curl
curl -X POST https://api.strue.com/v1/chain/balances \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"address":"0x...","network":"ethereum"}'

POST/v1/chain/transfers1 credit

Token transfer history. Auth required.

Request
{ "address": "0x...", "network": "ethereum", "limit": 50 }
Response
{
  "transfers": [{ "from": "0x...", "to": "0x...", "token": "USDC", "amount": "500", "tx_hash": "0x..." }]
}
curl
curl -X POST https://api.strue.com/v1/chain/transfers \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"address":"0x...","network":"ethereum","limit":50}'

GPU Rental

POST/v1/compute500 credits

Lium SN51. H100, A100, A6000. ~$5/hr H100, ~$2/hr A100. Auth required.

Request
{
  "gpu_type": "H100",
  "gpu_count": 1,
  "duration_hours": 1.0,
  "docker_image": "nvidia/cuda:12.4.1-runtime-ubuntu22.04",
  "command": "python train.py"
}
Response
{
  "job_id": "...",
  "ssh_host": "...",
  "ssh_port": 22,
  "subnet": "lium-sn51"
}
curl
curl -X POST https://api.strue.com/v1/compute \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"gpu_type":"H100","duration_hours":1.0}'

Fine-Tuning

POST/v1/finetune1000 credits

Gradients SN56/SN81. GRPO with cryptographic proof. Auth required.

Request
{
  "model": "llama-3.2-8b",
  "dataset": "gsm8k",
  "epochs": 3,
  "learning_rate": 0.00001
}
Response
{ "job_id": "ft_abc123", "status": "queued" }

GET/v1/finetune/:job_id — Check fine-tuning status.

curl
curl -X POST https://api.strue.com/v1/finetune \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"llama-3.2-8b","dataset":"gsm8k","epochs":3}'

Distributed Training

POST/v1/train1000 credits

Templar SN3. Full distributed pre-training runs. Auth required.

Request
{
  "model": "llama-3.2-8b",
  "dataset": "fineweb",
  "method": "pulse",
  "epochs": 1
}
Response
{ "job_id": "tr_abc123", "status": "queued" }

GET/v1/train/:job_id — Check training status.

curl
curl -X POST https://api.strue.com/v1/train \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"llama-3.2-8b","dataset":"fineweb","method":"pulse"}'

Storage

POST/v1/store1 credit

Multi-backend: R2 (default, free tier), Arweave (permanent), Hippius SN75 (decentralized). Auth required.

Request
{
  "data": "<base64-encoded-content>",
  "filename": "data.bin",
  "content_type": "application/octet-stream"
}
Response
{ "key": "hip_abc123", "size_bytes": 1024, "subnet": "hippius-sn75" }
curl
curl -X POST https://api.strue.com/v1/store \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data":"aGVsbG8=","filename":"hello.txt"}'

POST/v1/retrieve1 credit

Retrieve a file by key. Auth required.

Request
{ "key": "hip_abc123" }
curl
curl -X POST https://api.strue.com/v1/retrieve \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"key":"hip_abc123"}'

Memory — Store

POST/v1/memory/store1 credit

Store a memory in EverMemOS. Semantically indexed for later recall. Auth required.

Request
{
  "content": "User prefers Python for data analysis",
  "sender": "agent",
  "tags": ["preference", "language"],
  "session_id": "default"
}
Response
{
  "memory_id": "mem_k8f3j2...",
  "stored": true,
  "backend": "cloud",
  "subnet": "evermemos"
}
curl
curl -X POST https://api.strue.com/v1/memory/store \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content":"User prefers Python","tags":["preference"]}'

Memory — Recall

POST/v1/memory/recall0 credits (free)

Recall memories by semantic similarity. Auth required.

Request
{ "query": "What language does the user prefer?", "limit": 5 }
Response
{
  "memories": [{
    "memory_id": "mem_k8f3j2...",
    "content": "User prefers Python for data analysis",
    "relevance": 0.92,
    "tags": ["preference"]
  }]
}
curl
curl -X POST https://api.strue.com/v1/memory/recall \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"What language does the user prefer?","limit":5}'

GET/v1/memory/search?q=keyword&limit=100 credits (free)

Keyword search across stored memories. Auth required.

curl
curl "https://api.strue.com/v1/memory/search?q=preference&limit=10" \
  -H "Authorization: Bearer YOUR_KEY"

Memory — Forget

DELETE/v1/memory/forget0 credits (free)

Delete a specific memory. Auth required.

Request
{ "memory_id": "mem_k8f3j2..." }
curl
curl -X DELETE https://api.strue.com/v1/memory/forget \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"memory_id":"mem_k8f3j2..."}'

Memory — Stats

GET/v1/memory/stats0 credits (free)

Memory usage statistics. Auth required.

Response
{
  "total_memories": 247,
  "storage_bytes": 1250000,
  "top_tags": [{ "tag": "preference", "count": 42 }]
}
curl
curl https://api.strue.com/v1/memory/stats \
  -H "Authorization: Bearer YOUR_KEY"

GET/v1/loop/search?q=query&limit=100 credits (free, no auth)

Search published research in the Arloop library.

curl
curl "https://api.strue.com/v1/loop/search?q=autoresearch&limit=10"
Response
{
  "results": [{ "id": "...", "query": "...", "topics": [...], "arloop_url": "..." }],
  "count": 1
}

Research Library — Recent

GET/v1/loop/recent?limit=200 credits (free, no auth)

Most recent published research entries.

curl
curl "https://api.strue.com/v1/loop/recent?limit=20"

Research Library — Read Entry

GET/v1/loop/r/:entry_id0 credits (free, no auth)

Read a specific research entry including the full report.

curl
curl https://api.strue.com/v1/loop/r/entry-0

Research Library — Stats

GET/v1/loop/stats0 credits (free, no auth)

Aggregate statistics for the Arloop research library.

curl
curl https://api.strue.com/v1/loop/stats

Research Library — Upload

POST/v1/loop/upload0 credits (free, no auth, rate limited)

Upload research content. Rate limited to 10 uploads/hr per IP.

Request
{
  "content": "# My Research Report\n\nFindings...",
  "title": "My Research",
  "topics": ["ml", "agents"],
  "license": "CC-BY-4.0"
}
curl
curl -X POST https://api.strue.com/v1/loop/upload \
  -H "Content-Type: application/json" \
  -d '{"content":"# My Research\n\nFindings...","title":"My Research","topics":["ml"]}'

Research Library — Fetch URL

POST/v1/loop/fetch0 credits (free, no auth, rate limited)

Fetch and extract content from a URL. Supports arXiv, HuggingFace papers, and general web pages.

Request
{ "url": "https://arxiv.org/abs/2301.12345" }
curl
curl -X POST https://api.strue.com/v1/loop/fetch \
  -H "Content-Type: application/json" \
  -d '{"url":"https://arxiv.org/abs/2301.12345"}'

Bounties — List

GET/v1/bounty0 credits (no auth)

List open research bounties.

curl
curl https://api.strue.com/v1/bounty
Response
{
  "bounties": [{
    "id": "bounty_abc123",
    "question": "...",
    "reward_credits": 500,
    "deadline": "2026-04-15",
    "submissions_count": 3
  }],
  "count": 1
}

Bounties — Create

POST/v1/bountyreward_credits escrowed

Create a research bounty. Credits are escrowed from your balance. Auth required.

Request
{
  "question": "What are the most efficient fine-tuning methods for small LLMs?",
  "reward_credits": 500,
  "deadline": "2026-04-15",
  "criteria": "Must include benchmarks and source code"
}
Response
{
  "bounty_id": "bounty_abc123",
  "status": "open",
  "reward_credits": 500,
  "credits_escrowed": true
}
curl
curl -X POST https://api.strue.com/v1/bounty \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"question":"Best fine-tuning methods?","reward_credits":500,"deadline":"2026-04-15"}'

Bounties — Get Details

GET/v1/bounty/:id0 credits (no auth)

Get bounty details including submissions.

curl
curl https://api.strue.com/v1/bounty/bounty_abc123

Bounties — Submit

POST/v1/bounty/:id/submit0 credits

Submit an Arloop entry as a bounty answer. Auth required.

Request
{ "arloop_entry_id": "entry-123" }
curl
curl -X POST https://api.strue.com/v1/bounty/bounty_abc123/submit \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"arloop_entry_id":"entry-123"}'

Bounties — Award

POST/v1/bounty/:id/award0 credits

Award bounty to a submission. Poster only. Credits transferred to winner. Auth required.

Request
{ "arloop_entry_id": "entry-123" }
curl
curl -X POST https://api.strue.com/v1/bounty/bounty_abc123/award \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"arloop_entry_id":"entry-123"}'

Bounties — Cancel

POST/v1/bounty/:id/cancel0 credits (refund)

Cancel a bounty and refund escrowed credits. Poster only. Auth required.

curl
curl -X POST https://api.strue.com/v1/bounty/bounty_abc123/cancel \
  -H "Authorization: Bearer YOUR_KEY"

Credits

GET/v1/credits0 credits

Check credit balance and usage. Auth required.

curl
curl https://api.strue.com/v1/credits \
  -H "Authorization: Bearer YOUR_KEY"

Purchase Credits

POST/v1/purchase/checkout0 credits

Create a Stripe checkout session for credit packages ($5, $20, $100) or subscriptions (builder, pro, agent). Auth required.

Request
{ "package": "20" }
// or
{ "subscription": "pro" }
curl
curl -X POST https://api.strue.com/v1/purchase/checkout \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"package":"20"}'

Crypto Purchase

POST/v1/purchase/crypto0 credits

Purchase credits with USDC (+10% bonus) or TAO (+15% bonus). Auth required.

Request
{ "currency": "USDC", "amount": 20 }
curl
curl -X POST https://api.strue.com/v1/purchase/crypto \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"currency":"USDC","amount":20}'

Profile

GET/v1/profile0 credits

Your agent profile and usage stats. Auth required.

curl
curl https://api.strue.com/v1/profile \
  -H "Authorization: Bearer YOUR_KEY"

Export

GET/v1/export0 credits

Full data export: profile, usage, files, credit history. Auth required.

curl
curl https://api.strue.com/v1/export \
  -H "Authorization: Bearer YOUR_KEY"

Register

POST/v1/register0 credits (no auth)

Create an account and get an API key with 500 free credits.

Request
{ "email": "you@example.com", "password": "min-8-chars" }
Response
{ "api_key": "sk_live_...", "credits": 500 }
curl
curl -X POST https://api.strue.com/v1/register \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com","password":"your-password"}'

OpenAI format

Python
from openai import OpenAI
client = OpenAI(base_url="https://api.strue.com/v1", api_key="your-key")
r = client.chat.completions.create(model="deepseek-ai/DeepSeek-V3", messages=[{"role":"user","content":"Hello"}])

LangChain

Python
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(base_url="https://api.strue.com/v1", api_key="key", model="deepseek-ai/DeepSeek-V3")

CrewAI

Python
from crewai import Agent, LLM
llm = LLM(model="openai/deepseek-ai/DeepSeek-V3", base_url="https://api.strue.com/v1", api_key="key")

MCP server

Full guide: MCP page

Config
{ "mcpServers": { "strue": { "url": "https://api.strue.com/mcp", "auth": { "type": "bearer", "token": "key" }}}}

Pentos Bridge

Install
pip install pentos-bridge
pentos-bridge start --key "your-strue-key"

Auto-detects Ollama, LM Studio. Smart routing: local when free, cloud when needed. Full guide

Health Dashboard

GET/v1/health0 credits (no auth)

Returns status of every backend service.

curl
curl https://api.strue.com/v1/health
Response
{
  "status": "ok",
  "backends": {
    "chutes_sn64": { "status": "up", "latency_ms": 45 },
    "targon_sn4": { "status": "up", "latency_ms": 62 },
    "data_universe_sn13": { "status": "up", "latency_ms": 38 },
    "lium_sn51": { "status": "up", "latency_ms": 55 },
    "evermemos": { "status": "up", "latency_ms": 30 },
    "arweave": { "status": "up", "latency_ms": 120 },
    "arloop_ao": { "status": "up", "latency_ms": 85 }
  }
}

Error codes

CodeMeaning
400Invalid request body or parameters
401Invalid or missing API key
402Insufficient credits
403Forbidden (wrong permissions)
404Resource not found
429Rate limit exceeded
500Subnet routing error (retry)
502Upstream service error
503Subnet temporarily unavailable

Rate limits

TierReq/minConcurrent
Free305
Standard12020
Pro600100

Models

GET/v1/models0 credits

List available inference models. Auto-discovered from Chutes (SN64) and cached for 1 hour. No auth required. Pass any model id from this list to /v1/inference or /v1/chat/completions.

curl
curl https://api.strue.com/v1/models
Response
{
  "models": [
    {
      "id": "deepseek-ai/DeepSeek-V3",
      "name": "DeepSeek V3",
      "context_window": 131072,
      "credit_tier": "standard",
      "credits_per_1k_tokens": 2,
      "recommended_for": "agent/chat"
    },
    ...
  ],
  "tiers": { "budget": 1, "standard": 2, "premium": 5 },
  "count": 8
}

Credit tiers

TierCredits / 1K tokensModels
Budget1MiMo V2 Flash, Qwen3-235B, Llama 3.3, Covenant-72B
Standard2DeepSeek V3, Qwen3-Coder
Premium5Kimi K2.5 Thinking, DeepSeek R1

Minimum 1 credit per call regardless of token count.

Recommended defaults

Use caseModelTier
Agent / Chatdeepseek-ai/DeepSeek-V3Standard
Autoresearchcovenant-72bBudget
CodingQwen/Qwen3-Coder or MiMo/MiMo-V2-FlashStandard / Budget
Reasoningmoonshotai/Kimi-K2.5-ThinkingPremium
BudgetQwen/Qwen3-235B-A22BBudget