sableum network
DocsWhitepaperOperators$SABLEUM

Developers

Docs

Sableum speaks the OpenAI wire format. Point your existing client at our base URL, swap the key, and you are on sealed compute.

Quickstart

Create a key in the Portal, set a monthly ceiling on it, and export it. Nothing else needs to change.

export SABLEUM_API_KEY="sbl_live_..."

curl https://api.sableum.xyz/v1/chat/completions \
  -H "Authorization: Bearer $SABLEUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sableum-sealed-qwen3-32b",
    "messages": [{"role": "user", "content": "Summarise this contract."}]
  }'

Or with the Python client you already have installed:

from openai import OpenAI

client = OpenAI(
    api_key=os.environ["SABLEUM_API_KEY"],
    base_url="https://api.sableum.xyz/v1",
)

response = client.chat.completions.create(
    model="sableum-sealed-qwen3-32b",
    messages=[{"role": "user", "content": "Summarise this contract."}],
)

API reference

Four surfaces, all under /v1:

  • POST /v1/chat/completions — streaming and non-streaming chat
  • POST /v1/embeddings — dense vectors
  • POST /v1/sandboxes — start an isolated execution container
  • GET /v1/receipts/:id — fetch the signed record for a call

Sandboxes

A sandbox is a throwaway container with no outbound network unless you grant it. It is billed by the second and torn down when the handle is released or the ceiling is reached, whichever comes first.

sandbox = client.sandboxes.create(
    image="python:3.12-slim",
    egress="deny",
    ttl_seconds=180,
)

result = sandbox.run("python -c 'print(41 + 1)'")
print(result.stdout)   # 42
sandbox.release()

Pricing & metering

Inference is priced per thousand tokens, split by direction. Sandboxes are priced per second of wall clock. Every response carries a receipt id, and every receipt is a signed statement of what was consumed — model, unit counts, duration, and the attestation of the frame it ran in. No prompt text is recorded in it.

Set a ceiling per key rather than per account. When a key reaches its limit it starts returning 429 budget_exhausted and stops spending. This is the single most useful guardrail for an agent that can call itself.

Embeddings

sableum-embed-large returns 1024 dimensions and accepts batches of up to 256 inputs. Embedding requests take the same sealed path as chat, so the source text is never persisted on our side.

Webhooks

Subscribe to budget.threshold, key.exhausted, and receipt.created. Deliveries are signed with your endpoint secret; reject anything whose signature does not verify.