apixly.ai

Quickstart

Create an API key, pick an endpoint family, and send your first request in minutes. apixly gives you one key and one gateway for the world's leading AI models — chat, images and video.

1. Create an API key

Open the developer console (https://platform.apixly.ai) and go to the API Keys page. Create a key and bind it to a group — the group decides which platform (OpenAI / Claude / Gemini) and which models the key can access.

Copy the key right after creating it: it is shown only once. A key without a group cannot be used; you can assign one at any time from the Group column in the key list.

The platform label shown next to each group (Claude / OpenAI / Gemini) is the API family your key will work with.

2. Know your base URLs

All endpoint families use the same API key; only the base URL and auth header differ:

Endpoint familyBase URLAuth header
OpenAI-compatiblehttps://apixly.aiAuthorization: Bearer YOUR_API_KEY
Anthropic Messageshttps://apixly.aix-api-key + anthropic-version
Gemini generateContenthttps://apixly.aix-goog-api-key: YOUR_API_KEY

Every family shares the same origin — the version prefix lives in the request path: POST /v1/chat/completions, POST /v1/messages, POST /v1beta/models/{model}:generateContent. SDKs are the exception: an OpenAI or Gemini client's base_url still ends in /v1 (or /v1beta) and appends the endpoint itself. Exception: the Gemini CLI's GOOGLE_GEMINI_BASE_URL must be the BARE domain (no /v1beta) — the CLI appends /v1beta itself.

3. Confirm a live model ID

Copy a currently published model ID from the live catalog instead of guessing from memory:

Each entry in data[] is one available model — use its id directly as the model field in your requests.

bash
curl https://apixly.ai/v1/models \
  -H "Authorization: Bearer YOUR_API_KEY"
json
{
  "object": "list",
  "data": [
    { "id": "gpt-5.5", "type": "model", "display_name": "gpt-5.5", "created_at": "2024-01-01T00:00:00Z" },
    { "id": "claude-sonnet-4-6", "type": "model", "display_name": "claude-sonnet-4-6", "created_at": "2024-01-01T00:00:00Z" }
  ]
}
// Entry fields vary by deployment/platform — rely only on data[].id as the model name.

4. Send your first request

Keep the first request minimal — no streaming, tools or multimodal input yet:

bash
curl https://apixly.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.5",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

A successful response

If you can read choices[0].message.content, your integration works:

json
{
  "choices": [
    {
      "message": { "role": "assistant", "content": "Hello! How can I help?" },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 12,
    "total_tokens": 21
  }
}

If it fails, check these first

CheckWhat should match
PathPOST /v1/chat/completions
HeadersAuthorization + Content-Type: application/json
Bodymodel + messages only for the first test
Model IDCopy one from GET /v1/models
Key groupThe key's group platform must match the endpoint family

Next steps

  • Read “API keys & base URL” for group binding details.
  • Pick your endpoint guide: OpenAI-compatible, Anthropic or Gemini.
  • Generate images and video with the same key.
  • Plug the key into Claude Code, Codex and other coding tools.
  • See “Credits & billing” for pricing.

Errors, status codes & limits

Error bodies use the envelope of the protocol family you called: OpenAI-compatible endpoints return {"error":{"type","message"}}; Anthropic returns {"type":"error","error":{"type","message"}}; Gemini returns {"error":{"code","message","status"}}; the video API returns {"error":{"type","message"}} where type is a stable code; the Responses API returns {"error":{"code","message"}}. Parse per family — there is no single global envelope.

Do not confuse two different layers on the video API: synchronous HTTP errors use error.type as shown above, while a FAILED TASK's terminal error (in polling responses and webhooks) uses error.code — the stable enum documented on the Video page. Values like insufficient_balance exist in both layers with different delivery paths.

SituationTypical response
Invalid or missing API key401 authentication_error
Key not bound to any group403
Insufficient balance403 billing_error ("insufficient balance")
Rate limit / platform quota exhausted429 rate_limit_exceeded, with a Retry-After header
Concurrency queue full429 rate_limit_error
No available upstream account / wait timeout503 api_error
Request body too large413 (limit 256 MiB)
Client disconnected mid-request499 (logged server-side)

Rate limiting is per user and per group (requests per minute) plus per-user concurrency — there is no per-key RPM. Per-key limits are USD quota windows (5h / 1d / 7d) configured in the console.