The policy described chat history and enclave models carefully but never addressed the API path, and §2 read as though all content is retained — which is wrong for members using their own keys. Verified before writing, rather than restating policy language: a request with a distinctive marker was sent through the gateway and searched for afterwards. It appears nowhere in the gateway's logs, `litellm_settings` enables no content logging, and the request records carry usage fields only (model, tokens, cost, key). - privacy-policy.md §2: content retention now depends on the surface, with a pointer. - privacy-policy.md §4: new subsection on API requests, including the two limits that stop it being read as more than it says — we can still link a request to a key and therefore a member, and "not stored by us" says nothing about the provider. - api-access.md: a "what we store" section, since that is the page an API user reads before worrying about it. - models.md: the privacy-limitations section now distinguishes chat from API.
3.7 KiB
API access
Members can use the co-op's models programmatically through an OpenAI-compatible API. It's the same infrastructure that powers the chat — any OpenAI-compatible client works.
Quick facts
- Base URL:
https://gateway.inference.coop/v1 - Auth: a bearer API key (create one in the Member Dashboard)
- Format: OpenAI chat completions —
POST https://gateway.inference.coop/v1/chat/completions - Models: see the model list.
API usage draws from the same monthly allowance as chat — there's no separate quota.
What the co-op stores about your requests
Usage records, and nothing else: the model, token counts, cost, and which key made the request — that is how your monthly metering works. Your prompts and the responses are not stored on our side. The API path keeps no conversation, so there is no transcript to delete later.
Two things worth being precise about:
- The chat interface is different — it saves your conversations so you can revisit them. If you want the API's behaviour there instead, use a temporary chat.
- The provider is a separate question. Whether a model's operator retains anything is set by that provider, not by us, and it varies by model — the model list distinguishes policy-based zero retention from enclave-based protection.
Full detail, including what we can and cannot see: privacy policy.
Get a key
Log in to the Member Dashboard and create an
API key. The key is an sk-… string you pass as a bearer token.
Plain curl
curl https://gateway.inference.coop/v1/chat/completions \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{"model": "tinfoil/deepseek-v4-1-flash", "messages": [{"role": "user", "content": "Hello"}]}'
OpenAI SDK (Python, Node, etc.)
Point the SDK at our base URL and use your member key:
from openai import OpenAI
client = OpenAI(
base_url="https://gateway.inference.coop/v1",
api_key="sk-your-key",
)
resp = client.chat.completions.create(
model="tinfoil/deepseek-v4-1-flash",
messages=[{"role": "user", "content": "Hello"}],
)
Any OpenAI-compatible client works the same way: set the base URL to
https://gateway.inference.coop/v1 and the API key to your member key.
Coding agents and other OpenAI-compatible clients
Any tool that speaks the OpenAI API works. Where a tool asks for provider or endpoint configuration:
- Base URL / endpoint:
https://gateway.inference.coop/v1 - API type / protocol: "OpenAI compatible" (or
openai-completionswhere a protocol string must be named) — not "Ollama", "Anthropic", or "Responses" - API key: your member key (the
sk-…string) - Model: one from the model list, e.g.
tinfoil/deepseek-v4-1-flashorgreenpt/glm-5.3-flash
A typical provider entry looks like:
{
"providers": {
"inference-coop": {
"baseUrl": "https://gateway.inference.coop/v1",
"api": "openai-completions",
"apiKey": "sk-your-key",
"models": [
{ "id": "tinfoil/deepseek-v4-1-flash" },
{ "id": "tinfoil/gpt-oss-120b" },
{ "id": "tinfoil/glm-5.3" },
{ "id": "greenpt/glm-5.3-flash" }
]
}
}
}
If a tool's own docs show a local-server example (e.g.
baseUrl: http://localhost:11434/v1 with api: "openai-completions"),
substitute our base URL and your member key for apiKey — the protocol value
stays the same. Some tools append /chat/completions to the base URL themselves;
if your base URL already ends in /v1, that's correct and you should not add
/chat/completions.