API PRIMERO
Compatible con OpenAI. Drop-in.
Auth con JWT firmado por cartera. Los mismos SDK que ya usas. Tokens facturados en SPACE o USD. Llama, DeepSeek, Mixtral, Qwen — más visión, embeddings y voz.
Devs
Construye con space-os
Auth firmada por cartera, inferencia compatible con OpenAI, pagos on-chain, un Open Node Protocol. Los mismos SDK que ya usas — apuntando a nuestra red.
Inicio rápido
- Genera o usa una cartera EOA existente (MetaMask / ethers / viem).
- Solicita un nonce: GET /api/auth/nonce?address=0x...
- Firma el mensaje con tu cartera.
- Verifica: POST /api/auth/verify → JWT.
- Crea una clave API: POST /api/router/keys
- Llama a inferencia: POST https://spacerouter.ai/v1/chat/completions
Inferencia (SpaceRouter)
Compatible con OpenAI. Los mismos SDK que ya usas — solo cambia la base URL. SpaceRouter enruta la petición al proveedor GPU disponible más barato que soporte el modelo solicitado.
# curl
curl https://spacerouter.ai/v1/chat/completions \
-H "Authorization: Bearer $SPACEROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "meta-llama/Llama-3.1-70B-Instruct",
"messages": [{ "role": "user", "content": "Hello" }]
}'# python
from openai import OpenAI
client = OpenAI(
base_url="https://spacerouter.ai/v1",
api_key=os.environ["SPACEROUTER_API_KEY"],
)
resp = client.chat.completions.create(
model="deepseek-ai/DeepSeek-V3",
messages=[{"role": "user", "content": "Hello"}],
)// typescript
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://spacerouter.ai/v1",
apiKey: process.env.SPACEROUTER_API_KEY,
});
const res = await client.chat.completions.create({
model: "Qwen/Qwen2.5-72B-Instruct",
messages: [{ role: "user", content: "Hello" }],
});Endpoints: /v1/chat/completions, /v1/completions, /v1/embeddings. Consulta el catálogo de modelos para ver lo disponible hoy.
Autenticación
Los agentes se autentican con la firma de una cartera EOA. Sin contraseñas. Sin claves API para auth — la cartera misma es la credencial.
// 1. Get nonce
GET https://test.app-api.spaceos.com/api/auth/nonce?address=0xYourWallet
→ { "message": "Sign this message to authenticate..." }
// 2. Sign & verify (EIP-191)
POST https://test.app-api.spaceos.com/api/auth/verify
{ "address": "0x...", "message": "...", "signature": "0x..." }
→ { "token": "eyJ..." }
// 3. Use JWT in all requests (7-day expiry)
Authorization: Bearer eyJ...Claves API
Crea y rota claves de SpaceRouter vía la app-api. Hasta 10 claves activas por cartera.
POST https://test.app-api.spaceos.com/api/router/keys
Authorization: Bearer {jwt}
{ "name": "my-agent" }
→ { "key": "sk-...", "id": "..." }
// List models routed by SpaceRouter
GET https://test.app-api.spaceos.com/api/router/models
// Usage summary
GET https://test.app-api.spaceos.com/api/router/usageDescubrimiento de agentes
Múltiples formatos de manifiesto para que los frameworks de agentes descubran space-os automáticamente.
AI Plugin Manifest
Formato de plugin de OpenAI (JSON)
/.well-known/ai-plugin.jsonSkills Markdown
Documentación de integración completa (Markdown)
/SKILLS.mdAPI Skills
Guía rápida (Markdown)
/api/skillsAPI Skills JSON
Capacidades legibles por máquina
/api/skills.jsonPagos y créditos
Cada usuario autenticado obtiene una cartera proxy. Recarga con SPACE, USD.s, USDT.s o USDC.s en la EVM de space-os (chain 800000). Las tarifas de inferencia se liquidan desde este saldo.
// Get your proxy wallet address
GET https://test.app-api.spaceos.com/api/keys/proxy
→ { "proxyAddress": "0x..." }
// Check credit balance
GET https://test.app-api.spaceos.com/api/user
→ { "credits": { "balance": 10.50, "spend": 2.30 } }
// Top up (after sending tokens to proxy)
POST https://test.app-api.spaceos.com/api/user/topup
{ "paymentId": "tx_hash", "source": "space_token", "amountUsd": 10 }Carteras
Cada usuario autenticado obtiene tres carteras, automáticamente:
Cartera conectada
Tu EOA externa (MetaMask, etc). Se usa para iniciar sesión.
Cartera proxy
Cartera EVM gestionada por el servidor en la cadena space-os. Sostiene tokens, paga la inferencia. Claves en KIS.
Cuenta nativa
Cuenta nativa space-os para staking, votación y gobernanza.
GET https://test.app-api.spaceos.com/api/keys/proxy → { "proxyAddress": "0x..." }
GET https://test.app-api.spaceos.com/api/keys/native → { "nativeAccount": "...", "publicKey": "..." }Staking y nodos GPU
Haz stake de SPACE token para ganar yield, registrarte como proveedor GPU, o ambas cosas. Los multiplicadores de nivel componen con el APY base.
// Stake
POST /tx { "method": "spaceos_stake", "params": ["0x...", "100.0000 SPACE"] }
// Check stake
POST /tx { "method": "spaceos_getStake", "params": ["0x..."] }
→ { "stake": { "quantity": "100.0000 SPACE", "tier": "basic", "claimable": "1.5000 SPACE" } }
// Claim rewards
POST /tx { "method": "spaceos_claim", "params": ["0x..."] }El setup completo de proveedor con instalación de un comando para nodos GPU / CPU / Network está en /network.
Detalles de la cadena
space-os ejecuta una EVM integrada (Silkworm en WASM) sobre la cadena nativa basada en Antelope. Las llamadas de contrato EVM se ejecutan de forma determinista dentro del consenso Antelope — sin un conjunto de validadores aparte, sin puente light-client.
SPACE OS EVM
800000
150 gwei (fixed)
Legacy (type 0) only
~0.5s
SPACE (18 decimals)
testnet.evm.spaceos.com
testnet.evm-explorer.spaceos.com
EIP-1559 no es compatible. Usa siempre transacciones legacy con gasPrice explícito.
Protocolo de nodo abierto
La red completa está especificada en NODE_PROTOCOL.md — roles, manifiestos de capacidad, escalera de niveles, scopes de capacidad, estados de presencia, gramática WebSocket, peer-RPC. Diseñado para que clientes de terceros puedan interoperar sin ninguno de nuestros servicios hospedados.
El white paper v0 cubre el protocolo en §3. Lee el libro blanco para el resumen anotado, o coge la spec del repo fuente.
Ejemplo completo
import { Wallet } from 'ethers';
const API = 'https://test.app-api.spaceos.com/api';
const ROUTER = 'https://spacerouter.ai';
const wallet = Wallet.createRandom();
// 1. Authenticate
const { message } = await fetch(`${API}/auth/nonce?address=${wallet.address}`).then(r => r.json());
const signature = await wallet.signMessage(message);
const { token } = await fetch(`${API}/auth/verify`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ address: wallet.address, message, signature })
}).then(r => r.json());
// 2. Get inference API key
const { key } = await fetch(`${API}/router/keys`, {
method: 'POST',
headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ name: 'my-agent' })
}).then(r => r.json());
// 3. Call inference
const res = await fetch(`${ROUTER}/v1/chat/completions`, {
method: 'POST',
headers: { Authorization: `Bearer ${key}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
model: 'meta-llama/Llama-3.1-70B-Instruct',
messages: [{ role: 'user', content: 'Hello!' }]
})
}).then(r => r.json());
console.log(res.choices[0].message.content);