Skip to content
saylek

Use your Circle from anywhere

The hosted endpoint speaks the OpenAI API, so an existing OpenAI-compatible client can reach your Circle from any machine with your API key. Nothing needs to run locally.

This is the hosted surface. For pointing a client at a daemon on your own machine, with no key and no network hop, see Connect your app.

Which one do I want

Local daemonHosted endpoint
Base URLhttp://127.0.0.1:8443/v1https://api.saylek.com/v1
AuthNone (any non-empty string)Your member API key
Serves fromThis machine first, then your CircleHosts across your Circles
Can requests leave your machineYes, unless local-only is setYes, always
Works when your machine is offNoYes

Note the second row, because it surprises people: the local daemon is not a local-only path. When your own machine cannot serve a request, the daemon falls back to a Host in your Circle by default, exactly as the hosted endpoint does. Local-only mode is what makes the daemon stay local. See Privacy and egress.

Use the hosted endpoint when you want your Circle's capacity from a machine that is not running a daemon at all.

1. Create an API key

Create one from your account's keys page at /account/keys.

A key's secret is shown once, at creation. Save it then. If you lose it, create a new key rather than trying to recover the old one.

2. Find a model your Circle serves

Model ids are carried verbatim, exactly as the Pool advertises them. There are no aliases, so a name from another provider will not resolve. List what is actually available:

curl https://api.saylek.com/v1/models \
  -H "Authorization: Bearer YOUR_API_KEY"

Pick an id from that response and use it as MODEL_ID below.

3. Point your client at it

Most OpenAI SDKs take a base URL and a key:

from openai import OpenAI

client = OpenAI(
    base_url="https://api.saylek.com/v1",
    api_key="YOUR_API_KEY",
)

resp = client.chat.completions.create(
    model="MODEL_ID",
    messages=[{"role": "user", "content": "hello"}],
)
print(resp.choices[0].message.content)
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.saylek.com/v1",
  apiKey: "YOUR_API_KEY",
});

const resp = await client.chat.completions.create({
  model: "MODEL_ID",
  messages: [{ role: "user", content: "hello" }],
});
console.log(resp.choices[0].message.content);

Most tools that accept an OpenAI base URL take the same two values. Set OPENAI_BASE_URL and OPENAI_API_KEY when a tool reads them from the environment:

export OPENAI_BASE_URL="https://api.saylek.com/v1"
export OPENAI_API_KEY="YOUR_API_KEY"

4. Confirm it works

curl https://api.saylek.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MODEL_ID",
    "messages": [{"role": "user", "content": "hello"}]
  }'

When it can answer

Calls work while a Host in one of your Circles is online and serving the model you asked for. When none is, requests fail until one comes back. That is the honest shape of a pool of people's machines rather than a datacentre.

Requests through this endpoint run on a Circle-mate's GPU, which means your prompt is handled by their machine. Read Privacy and egress before sending anything sensitive through it. The local-only controls described there apply to the daemon, not to this hosted path: if you need a request to stay on your own machine, use the local daemon.

Provider-run tools have nothing behind them here. A Host serves a model, not a search engine or a sandbox, so a built-in web search returns an empty result set rather than an error. Give your client a tool it runs itself instead: Web search.

Next steps

Last checked 2026-07-24 · read as markdown at /docs/connect-openai.md