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://api.sporeintel.com/api/v1Authentication
Section titled “Authentication”Authorization: Bearer sk_spore_YOUR_API_KEYList models
Section titled “List models”curl https://api.sporeintel.com/api/v1/models \ -H "Authorization: Bearer sk_spore_YOUR_API_KEY"Model names include a context tier, e.g. qwen3.5-4b:8k or
qwen3.6-35b-a3b:32k. Append :personal to any model name to route the
request to your own nodes only. Personal requests are free.
Each entry includes recommended, catalog_role (when set), and
available. Recommended models are listed first. Previous model ids remain
valid and stay listed; available is false when the model cannot currently
accept a request.
Chat completions
Section titled “Chat completions”curl https://api.sporeintel.com/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk_spore_YOUR_API_KEY" \ -d '{ "model": "qwen3.6-35b-a3b:32k", "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://api.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://api.sporeintel.com/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk_spore_YOUR_API_KEY" \ -d '{ "model": "qwen3.5-4b: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://api.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://api.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://api.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://api.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://api.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://api.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.
Cursor desktop
Section titled “Cursor desktop”Cursor can use Spore through its OpenAI-compatible override. Create a
sk_spore_ key from the
API Keys tab (shown once at
creation; mint a new key if you no longer have it), then:
-
Open Cursor Settings and go to Models.
-
Enable OpenAI API Key and paste your
sk_spore_key. The field is labeled OpenAI even for compatible providers. -
Enable Override OpenAI Base URL and paste:
https://api.sporeintel.com/api/v1 -
Click + Add Model and type a Spore model id verbatim (
name:tierfromGET /models). Append:personalto any model ID to route directly to your own node. No credits charged. -
Click Verify. Cursor hits
https://api.sporeintel.com/api/v1/modelsto check the connection.
Tab completion and Cmd-K stay on Cursor’s backend. Only chat that uses this OpenAI-compatible override is sent to Spore.
The stock OpenAI-compatible path is plaintext. It is not the community end-to-end encrypted chat path.
Override OpenAI Base URL is global. It hijacks Cursor’s Pro and built-in models until you turn it off. Leave the override off when using Cursor’s own models.
The in-app Code page walks through the same setup with the model ids 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.