API
The Spore API is OpenAI-compatible. Create an API key from your profile’s API Keys tab, then point your existing OpenAI client at Spore.
Base URL
Section titled “Base URL”https://app.sporeintel.com/api/v1Authentication
Section titled “Authentication”Authorization: Bearer sk_spore_YOUR_API_KEYList models
Section titled “List models”curl https://app.sporeintel.com/api/v1/models \ -H "Authorization: Bearer sk_spore_YOUR_API_KEY"Model names include a context tier, e.g. qwen3-4b-2507:8k or
qwen3-4b-2507:32k. Append :personal to any model name to route the
request to your own nodes only. Personal requests are free.
Chat completions
Section titled “Chat completions”curl https://app.sporeintel.com/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk_spore_YOUR_API_KEY" \ -d '{ "model": "qwen3-4b-2507:8k", "messages": [ {"role": "user", "content": "Hello!"} ], "stream": false }'Set "stream": true for server-sent events; stream_options: {"include_usage": true} adds token usage to the final chunk, matching the
OpenAI streaming format.
To keep a completion so you can fetch it later, add "store": true — see
Retrieving completions.
Reasoning
Section titled “Reasoning”Many models can reason (“think”) before answering. Control it with the
OpenAI-standard reasoning_effort:
curl https://app.sporeintel.com/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk_spore_YOUR_API_KEY" \ -d '{ "model": "qwen3.6-27b:32k", "messages": [{"role": "user", "content": "How many rs are in strawberry?"}], "reasoning_effort": "low" }'reasoning_effortacceptsnone,minimal,low,medium, orhigh.noneturns reasoning off on models that support toggling it; any other value turns it on. Models with graded effort (e.g. gpt-oss) use the level; always-on models ignorenone.- The reasoning text is returned separately in
message.reasoning_content(anddelta.reasoning_contentwhen streaming), socontentstays clean. - A boolean
enable_thinkingis also accepted and takes precedence overreasoning_effortwhen both are sent.
Reasoning support is per model. Each entry from /api/v1/models includes
supports_thinking, thinking_default_on, and thinking_toggleable so you
can detect it programmatically.
Retrieving completions
Section titled “Retrieving completions”By default, completions aren’t retained — the response is returned once and
then discarded. Send "store": true to keep a completion so you can fetch it
later, and optionally attach metadata (up to 16 key–value pairs) for
filtering:
curl https://app.sporeintel.com/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk_spore_YOUR_API_KEY" \ -d '{ "model": "qwen3-4b-2507:8k", "messages": [{"role": "user", "content": "Hello!"}], "store": true, "metadata": {"project": "demo"} }'Stored completions are kept for your account’s data-retention window (30 days
by default; Pro accounts can configure it). After that the record remains but
its content is cleared (content_purged: true on retrieval).
Retrieve one using the id from the completion response:
curl https://app.sporeintel.com/api/v1/chat/completions/CHAT_COMPLETION_ID \ -H "Authorization: Bearer sk_spore_YOUR_API_KEY"List your stored completions (newest first). Query params: limit (1–100,
default 20), order (asc or desc), model, metadata[KEY]=VALUE, and
after (a completion id, for pagination):
curl "https://app.sporeintel.com/api/v1/chat/completions?limit=20&metadata[project]=demo" \ -H "Authorization: Bearer sk_spore_YOUR_API_KEY"The response is a list: {"object": "list", "data": [...], "first_id": "...", "last_id": "...", "has_more": false}.
List the input messages of a stored completion:
curl https://app.sporeintel.com/api/v1/chat/completions/CHAT_COMPLETION_ID/messages \ -H "Authorization: Bearer sk_spore_YOUR_API_KEY"Update a stored completion’s metadata (the only mutable field):
curl https://app.sporeintel.com/api/v1/chat/completions/CHAT_COMPLETION_ID \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk_spore_YOUR_API_KEY" \ -d '{"metadata": {"project": "archived"}}'Delete a stored completion (removes it and clears its content):
curl -X DELETE https://app.sporeintel.com/api/v1/chat/completions/CHAT_COMPLETION_ID \ -H "Authorization: Bearer sk_spore_YOUR_API_KEY"Requests you submit with Spore’s end-to-end encryption are stored as
ciphertext; retrieval returns that ciphertext with is_encrypted: true, since
the server can’t decrypt it.
Using coding tools
Section titled “Using coding tools”Any tool that speaks the OpenAI protocol works: set its base URL to
https://app.sporeintel.com/api/v1 and use your sk_spore_ key. The app’s
Code page generates ready-to-paste
configuration (including an OpenCode config with
per-model context limits) from the models currently on the network.
Pricing
Section titled “Pricing”Requests are charged in credits by model, context tier, and token counts. See Credits & Pricing. Personal-mode requests are free.