Dasha Compute API v0.1.0

OpenAI-compatible inference on community Macs; every completed job gets a signed receipt on a public chain. Observed from live traffic Sep 11-12, 2026; adopted and verified by the impl lane Sep 14, 2026.

Servers

Endpoints

POST/compute/api/guest-keys

Mint a 24h guest key (3/hour/IP)

responses
  • 201 Key minted. Response also carries status/reason/hint/next/mint/name/prefix/note fields. Save api_key now; only its hash is stored. Guest keys serve /v1/chat/completions and /v1/models; other inference endpoints 403 guest_key_scope. Drives accept the same dgk_.
GET/compute/api/v1/models

List models (community + hosted). No auth required.

responses
  • 200 OpenAI-style model list
POST/compute/api/v1/chat/completions

Chat completion; settled jobs return an inline receipt

auth: bearer key required

request body
  • model * string - e.g. qwen3-4b
  • messages * array - 1-12 user/assistant messages, max 2000 chars each, 6000 total
  • max_tokens integer - (min 1, max 4096, default 512)
  • temperature number - (min 0, max 2, default 0.6)
responses
  • 200 OpenAI chat completion + job_id + inline receipt record (pending operator settlement)
  • 401 invalid_api_key
  • 400 invalid_messages | unsupported_model | invalid_drive_id | tools/tool_choice present (tools unsupported - fail-loud)
  • 402 spend limit
  • 409 one queued job per key
  • 429 per-key rate limit
  • 499 client abort
  • 504 timeout
  • 503 no_mac_online (community down) | hosted_offline (hosted model unavailable) - fail-loud
POST/compute/api/v1/drives

Files. Get-or-create an R2 drive by name. Works with providers_online=0. Binding DRIVES.

auth: bearer dsk_ or guest dgk_

responses
  • 201 created
  • 200 existing name for this key owner
  • 401 invalid_api_key
  • 503 drives_unavailable (R2 binding DRIVES missing)
POST/compute/api/v1/drives/:id/dream

Dream. Hosted Ask reads memory/ (or the whole drive) and writes memory/dreamed.json. format md writes memory/dreamed.md. Works with providers_online=0.

auth: bearer dsk_ or guest dgk_

responses
  • 200 drive.dream route hosted
  • 401 invalid_api_key
  • 502 hosted_failed
  • 503 hosted_offline | drives_unavailable
GET/compute/api/verify

JSON verdict. Optional hash param (receipt hash | job_id | request_id)

param hash (query)

responses
  • 200 settled.verify.v0 - ANCHORED | SELF-CONSISTENT | INVALID + chain state + query result
GET/compute/api/chain

Full receipt chain (public)

responses
  • 200 receipts[] with job_id, engine, tokens, cents, at, prev_hash, hash, sig, signer, model, latency_ms, kind
GET/heads

Signed heads log (tail). Anchors the chain; see llms.txt for format

responses
  • 200 head[] with ts, tip, prev_head_hash, hash, sig, signer
GET/compute/api/network

Live network state (public)

responses
  • 200 providers_online, models_available, capacity[] (measured tok/s), jobs_queued, kit_versions
GET/compute/api/readyz

Readiness probe

responses
  • 200 ready
GET/compute/api/pricing

Live pricing

responses
  • 200 pricing.compute.v0 - $0.05/successful completion
GET/heads/checkpoint

Signed checkpoint of current head (external-anchor friendly)

responses
  • 200 checkpoint JSON
GET/heads/archive/{date}.json

Archived heads for a UTC date

param date (path) required - e.g. 2026-09-12

responses
  • 200 heads[]
GET/compute/api/receipts

Owner view (401 unauthenticated)

auth: bearer key required

responses
  • 401 owner-only
GET/keys.json

Published verification keys (Ed25519 spki_pem)

responses
  • 200 dasha.keys.v0
POST/compute/api/v1/responses

Not implemented (Vercel AI SDK default route) - use /v1/chat/completions

auth: bearer key required

responses
  • 401 invalid_api_key
  • 403 guest_key_scope (guest keys are chat + models only)
  • 400 responses are not supported; use POST /v1/chat/completions

Sources: /compute/api/network · /compute/api/chain · /keys.json · format: /compute/llms.txt. Errors are fail-loud and machine-readable; nothing degrades silently. Run a Mac: /compute.