Connect your agent
sealrelay.com is an OpenAI-compatible API. Any agent or terminal that lets you add a custom provider works with three values: a base URL, an API key and a model id.
The three values
Create one on the API keys page of your dashboard. It starts with sealrelay- and is shown only once, so paste it somewhere safe. Use one key per tool or machine so you can cap or revoke each on its own.
- qwen3.8-27b-uncensoredQwen 3.8 27B Uncensored
Setup in any tool
- 1Create an account and redeem your invite code.
- 2Create an API key for the tool you're setting up.
- 3In the tool's settings, add a custom provider. Choose the OpenAI-compatible type when it asks.
- 4Paste the base URL and your key, and enter one or more model ids.
- 5Pick the model in the tool and send a message. Usage shows up on your dashboard.
Tool by tool
Where the setting lives in each tool. Menus change between versions, so check the tool's own docs for the exact field names.
- opencodeAdd a custom provider in opencode's config that uses the OpenAI-compatible provider type, with the base URL, your key and the model ids you want.
- piAdd sealrelay.com as a custom provider in pi's models configuration, using the OpenAI chat completions API type.
- WarpAdd a custom OpenAI-compatible endpoint in Warp's AI settings. Warp sends requests through its own servers, so your prompts pass through Warp before they reach us.
- AiderSet the OpenAI API base and API key (as environment variables or in Aider's config file) and pass the model as openai/ followed by the model id.
- ClineIn Cline's settings, pick the OpenAI Compatible provider and fill in the base URL, API key and model id.
- Roo CodeIn Roo Code's settings, pick the OpenAI Compatible provider and fill in the base URL, API key and model id.
- Kilo CodeIn Kilo Code's settings, pick the OpenAI Compatible provider and fill in the base URL, API key and model id.
- ContinueAdd a model to Continue's config with the OpenAI provider, and set its API base to the base URL.
- ZedIn the Agent Panel settings, add an OpenAI-compatible provider with the base URL and key, then add the model ids.
- CrushAdd a custom provider of the OpenAI-compatible type to Crush's config file, with the base URL, key and model ids.
- CodexComing soonCodex uses the OpenAI Responses API, which sealrelay.com doesn't serve yet. Support is planned.
- Claude CodeComing soonClaude Code uses the Anthropic Messages API, which sealrelay.com doesn't serve yet. Support is planned. Anthropic doesn't officially support Claude Code with other models.
API reference
Send your key as Authorization: Bearer sealrelay-… (or x-api-key: sealrelay-…). Requests and responses follow the OpenAI format.
- GET /v1/models
- The models being served, with context length and max output. No key needed.
- POST /v1/chat/completions
- Chat completions, streaming or not, with tool calls and structured output.
nmust be 1. Request bodies are limited to 8 MB. An account, across all its keys, starts 1 request a second on average, in bursts of up to 5, and runs up to 2 at once.
The model
- Model id
- qwen3.8-27b-uncensoredqwen3.8-27b-uncensored-2026-09-15 pins this version; the plain id always means the newest.
- Context window
- 262,144 tokensPrompt and output together.
- Max output
- 32,768 tokensmax_tokens (or max_completion_tokens) is capped at this, and set to it when you leave it out.
- Price per million tokens
- $0.30 input · $0.13 cached input · $2.50 output
- Input
- Text, and imagesImages go inline as data:image/… URLs; links to remote images are refused.
Thinking
Qwen 3.8 27B thinks before it answers. The thinking comes back in the message's (or the stream delta's) reasoning field, apart from content, and is billed as output. Set how much it thinks with reasoning_effort, at the top level of the request or in chat_template_kwargs:
noneNo thinking: the answer starts right away. Top level only.lowShort thinking. minimal is read as low.mediumThe default, when reasoning_effort is left out.xhighThe longest thinking. high and max are read as xhigh.
"chat_template_kwargs": {"enable_thinking": false} also turns thinking off, whatever the effort. Any other effort is refused with a 400.
Sampling
What you leave out takes the model's own defaults:temperature 1.0, top_p 0.95 and top_k 20. Besides the OpenAI parameters you can set top_k, min_p, repetition_penalty and min_tokens. Fields the API doesn't know, and user and metadata, are dropped before the request reaches the model.
Usage and billing
Every response is billed from its token usage: uncached input, cached input and output, each at the model's price. Agents that send a session id (opencode and pi do) keep a conversation on the server that has its context cached, so more of each turn is billed as cached input. To see usage on a stream, set stream_options.include_usage to true. If you disconnect mid-stream, the tokens generated so far are charged; failed requests are not.
Example
curl https://api.sealrelay.com/v1/chat/completions \
-H "Authorization: Bearer $SEALRELAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "qwen3.8-27b-uncensored", "stream": true,
"reasoning_effort": "low",
"stream_options": {"include_usage": true},
"messages": [{"role": "user", "content": "Hello"}]}'Errors
Errors use the OpenAI shape, with a stable code you can match on. Every response carries an X-Request-Id to quote to support.
- 400invalid_requestThe request is malformed: bad JSON, n other than 1, a remote image URL.
- 400upstream_rejectedThe model server refused it, for example a prompt longer than the context window. Not charged.
- 401invalid_api_keyThe key is missing, wrong, expired or revoked.
- 402insufficient_balanceYour balance can't cover the request. Add credit or redeem a code.
- 402key_cap_reachedThis key hit its monthly cap.
- 403account_suspendedThe account is suspended, for example for breaking the acceptable use policy.
- 404model_not_foundThe model id doesn't exist.
- 413request_too_largeThe request body is larger than 8 MB.
- 429too_many_concurrent_requestsYour account already has 2 requests running. Wait for one to finish.
- 429capacity_exceededEvery model server is full. Retry after the Retry-After header's seconds.
- 429rate_limitedYour account is starting requests too fast. Retry after the Retry-After header's seconds.
- 502upstream_errorThe model server failed. You aren't charged; retry after a moment.