Use any OpenAI-compatible endpoint
Pick the Custom provider, paste a base URL and a model ID, and OpenClay talks to it exactly like a built-in provider. One adapter covers Azure, the aggregators, and anything you run yourself.
Why one adapter covers so much
Practically every inference provider implements OpenAI's /v1/chat/completions shape, because that is what most client libraries expect. So rather than writing an integration per vendor, OpenClay speaks that one dialect and lets you name the host.
| Provider | Base URL | Notes |
|---|---|---|
| Azure OpenAI | https://YOUR-RESOURCE.openai.azure.com/openai/v1 | Your deployment name is the model ID |
| OpenRouter | https://openrouter.ai/api/v1 | One key, hundreds of models |
| Groq | https://api.groq.com/openai/v1 | Very fast inference on open models |
| Together | https://api.together.xyz/v1 | Open-weight models at low cost |
| Fireworks | https://api.fireworks.ai/inference/v1 | Open models, fast |
| DeepInfra | https://api.deepinfra.com/v1/openai | Cheap open-weight hosting |
| Ollama | http://localhost:11434/v1 | Local models, self-host only |
| LM Studio | http://localhost:1234/v1 | Local models, self-host only |
| vLLM | http://your-server:8000/v1 | Your own GPU server |
Setting it up
- In step 3, choose Custom.
- Paste the base URL. Ending it at
/v1is enough, because OpenClay appends/chat/completions. Pasting the full path works too. - Enter the model ID exactly as your provider names it.
- Optionally enter the token prices so cost estimates work. Leave them at zero and OpenClay reports token counts without inventing a price.
- Add your key in step 4, or leave it blank for a local gateway that needs none.
Azure OpenAI
Azure names things differently: your deployment name is the model ID, and the key goes in an api-key header rather than Authorization. OpenClay sends both headers, so either convention works without configuration.
Base URL: https://my-resource.openai.azure.com/openai/v1 Model ID: my-gpt5-deployment
Azure throttles on tokens-per-minute rather than requests, which is exactly what the run panel's peak-TPM figure is for. Size your quota against the peak, not the average, because the average hides the bursts that actually trigger a 429.
Web search
Most OpenAI-compatible gateways do not implement a server-side search tool, so the custom provider does not send one. Your prompts still run, and answers come from the model's training data rather than the live web. Use a built-in provider whenever freshness matters.
Local models and the private-address rule
The hosted instance at openclay.io refuses base URLs on loopback, private or link-local addresses. That is not an arbitrary restriction: the proxy runs on our server, so localhost would mean our localhost, and a URL like http://169.254.169.254/ would let a visitor read cloud metadata through us.
On your own machine the same reasoning inverts, because localhost means your own Ollama, so self-hosted installs can opt in:
# .env.local OPENCLAY_ALLOW_PRIVATE_ENDPOINTS=true
Only set this on an instance you control and that is not exposed to the public internet.
Troubleshooting
- 404 on validate: the model ID is wrong, or the base URL already included
/chat/completionstwice. - 401: wrong key, or Azure expecting the deployment rather than the base model name.
- Empty responses: some gateways ignore
response_format: json_object. Add “Return ONLY valid JSON” to your prompt in the advanced template editor. - Refused private address: expected on the hosted instance. Self-host and set the environment variable above.
No account, no card, no platform fee.
Bring your own API key and pay the model provider directly.
Set up a custom endpoint