Build with one gateway
Create an API key, select an available model, and connect OpenAI-compatible, Anthropic, Gemini, or asynchronous image workflows through VibeLearning.
Quickstart
Create an account, issue a dedicated API key, and run a minimal request against the OpenAI-compatible endpoint.
Create an API key
Sign in to the dashboard and create a key for one client or workload.
Select a model
Use a model name currently available to your account.
Send a test request
Replace the placeholder key below and keep the initial test small.
curl https://halo.vibelearning.top/v1/responses \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"model": "your-model",
"input": "Reply with: connection successful"
}'Base URLs
Use the endpoint that matches the client's native protocol. Do not append OpenAI paths to Anthropic or Gemini-native configuration fields.
https://halo.vibelearning.top/v1https://halo.vibelearning.tophttps://halo.vibelearning.topOpenAI SDK configuration normally ends in /v1. Claude Code and Gemini CLI use the site root.
API keys
Create separate keys for separate clients. This makes usage easier to audit and lets you revoke one integration without affecting another.
NameUse a workload label such as “Production Codex” or “Image worker”.QuotaSet a dedicated limit for automation and test keys whenever possible.ExpirationUse an explicit expiration time for temporary or shared tests.Model accessRestrict the key to required models when you need tighter control.Authorization: Bearer sk-your-keyClaude Code
Claude Code uses the Anthropic Messages protocol. Configure the Halo site root and a dedicated API key.
export ANTHROPIC_BASE_URL="https://halo.vibelearning.top"
export ANTHROPIC_AUTH_TOKEN="sk-your-key"
claudeCodex CLI
Configure an OpenAI-compatible provider with the Halo /v1 endpoint.
[model_providers.vibelearning]
name = "VibeLearning"
base_url = "https://halo.vibelearning.top/v1"
env_key = "VIBELEARNING_API_KEY"
wire_api = "responses"
model_provider = "vibelearning"
model = "your-model"Gemini CLI
Use the Gemini-native site root with a dedicated key.
export GOOGLE_GEMINI_BASE_URL="https://halo.vibelearning.top"
export GEMINI_API_KEY="sk-your-key"
geminiCore endpoints
All requests require an API key. Availability depends on the models enabled for your account.
| Method | Path | Purpose |
|---|---|---|
| POST | /v1/responses | OpenAI Responses |
| POST | /v1/chat/completions | Chat Completions |
| POST | /v1/messages | Anthropic Messages |
| GET | /v1/models | Models available to the key |
| POST | /api/image/jobs | Asynchronous image generation or editing |
| GET | /api/image/jobs/{job_id} | Poll an image job |
Request examples
Chat Completions
curl https://halo.vibelearning.top/v1/chat/completions \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"model": "your-model",
"messages": [{"role": "user", "content": "Reply with: connection successful"}],
"stream": false
}'Anthropic Messages
curl https://halo.vibelearning.top/v1/messages \
-H "x-api-key: sk-your-key" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "your-model",
"max_tokens": 256,
"messages": [{"role": "user", "content": "Reply with: connection successful"}]
}'Asynchronous image jobs
Long-running image requests should use task submission and polling. Save the returned job ID and poll until the task reaches a terminal state.
curl https://halo.vibelearning.top/api/image/jobs \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"endpoint": "images/generations",
"body": {
"model": "your-image-model",
"prompt": "A minimal product photograph on a neutral background",
"n": 1,
"size": "1024x1024"
}
}'curl https://halo.vibelearning.top/api/image/jobs/job_xxx \
-H "Authorization: Bearer sk-your-key"Recommended polling interval: 5–10 seconds. Stop polling after succeeded, failed, or timeout.
Troubleshooting
HTML returned instead of JSON
Check that OpenAI-compatible requests include /v1. The correct paths are /v1/responses and /v1/chat/completions.
401 / Invalid token
Confirm the key is active, unexpired, and sent in the required authentication header.
403 / Access denied
Confirm the key can access the selected model and has sufficient quota.
429 / Rate limit
Reduce concurrency and apply exponential backoff with jitter.
No available channel for the model
Refresh the model list and select a model currently available to your account.
Share the request time, model, path, HTTP status, error message, and log ID. Never send a complete API key.