LLM API Protocols

Atlas Cloud speaks OpenAI Chat Completions, Completions, Responses, Images, Anthropic Messages, and Google Gemini. One key, one base URL, six wire formats.

Atlas Cloud accepts six different request formats on the same base URL with the same API key. Point an existing SDK at Atlas Cloud and it generally works unchanged — no rewrite, no adapter layer of your own.

https://api.atlascloud.ai

Protocol matrix

ProtocolEndpointUse it when
OpenAI Chat CompletionsPOST /v1/chat/completionsDefault choice. Widest model coverage
OpenAI CompletionsPOST /v1/completionsLegacy text completion. Few models support it
OpenAI ResponsesPOST /v1/responsesYou already use the Responses API
OpenAI ImagesPOST /v1/images/generations, /v1/images/editsSynchronous image calls through an OpenAI client
Anthropic MessagesPOST /v1/messagesYou already use the Anthropic SDK or Claude Code
Google GeminiPOST /v1beta/models/{model}:generateContentYou already use the Google GenAI SDK

Not every model speaks every protocol. Each model publishes a supported_apis list — check it before switching formats. The list is ordered: the first entry is the recommended one for that model. Gemini-family models, for example, expose their full multimodal capability only on the native Gemini format.

Authentication

Your API key works with any of four header styles, so SDKs built for other providers authenticate without modification:

-H "Authorization: Bearer $ATLASCLOUD_API_KEY"

Recommended, and works with every protocol.

Atlas Cloud API keys begin with apikey-. See API Keys.

OpenAI Chat Completions

The most widely supported format.

curl https://api.atlascloud.ai/v1/chat/completions \
  -H "Authorization: Bearer $ATLASCLOUD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/deepseek-v3.2",
    "messages": [{"role": "user", "content": "Explain HTTP vs HTTPS"}],
    "max_tokens": 1024,
    "stream": true
  }'

Using the OpenAI SDK — change two lines:

from openai import OpenAI

client = OpenAI(
    api_key=os.environ["ATLASCLOUD_API_KEY"],
    base_url="https://api.atlascloud.ai/v1",
)

response = client.chat.completions.create(
    model="deepseek-ai/deepseek-v3.2",
    messages=[{"role": "user", "content": "Explain HTTP vs HTTPS"}],
)
print(response.choices[0].message.content)

Sampling parameters. Support varies per model — each model publishes its own supported_sampling_parameters. Commonly available: temperature (0–2), top_p (0–1), top_k, min_p, frequency_penalty (−2–2), presence_penalty (−2–2), repetition_penalty, stop, seed, logit_bias, logprobs, top_logprobs (0–20).

Structured output. response_format accepts both {"type": "json_object"} and a json_schema definition, on models that advertise json_mode or structured_outputs.

Tool calling. tools, tool_choice, and parallel_tool_calls are passed through on models that advertise tools.

Multimodal input. Images, video, and audio can be attached as content parts:

{
  "role": "user",
  "content": [
    { "type": "text", "text": "What is in this image?" },
    { "type": "image_url", "image_url": { "url": "https://example.com/photo.jpg" } },
    { "type": "video_url", "video_url": { "url": "https://example.com/clip.mp4" } },
    { "type": "input_audio", "input_audio": { "data": "<base64>", "format": "mp3" } }
  ]
}

video_url is an Atlas Cloud extension beyond the OpenAI specification. Audio must be inline Base64 — a URL is not accepted for input_audio.

Anthropic Messages

curl https://api.atlascloud.ai/v1/messages \
  -H "x-api-key: $ATLASCLOUD_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/deepseek-v3.2",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Hello"}]
  }'

Point the Anthropic SDK at Atlas Cloud by setting base_url to https://api.atlascloud.ai.

Supported. system (string or block array), stop_sequences, tools with input_schema, tool_choice, thinking, image blocks (both base64 and url sources), document blocks, and tool_result. Assistant thinking blocks map to reasoning output.

Differences to know about:

BehaviorDetail
stop_sequencesTruncated to the first 4 entries
tool_choice: "any"Mapped to required
cache_controlIgnored when the target model is served through a translated protocol, so prompt caching will not apply
Built-in server toolsWeb search, computer use, and similar Anthropic-hosted tools are not available
POST /v1/messages/count_tokensNot implemented
MultimodalImages only. Video and audio parts are not accepted on this protocol

Streaming follows the Anthropic event sequence: message_start, content_block_start, content_block_delta, content_block_stop, message_delta, message_stop. There is no [DONE] sentinel.

OpenAI Responses

curl https://api.atlascloud.ai/v1/responses \
  -H "Authorization: Bearer $ATLASCLOUD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/deepseek-v3.2",
    "input": [{"role": "user", "content": [{"type": "input_text", "text": "Hello"}]}],
    "max_output_tokens": 1024
  }'

Supported. instructions, input in all its shapes, tools, tool_choice, reasoning.effort, text.format (both json_object and json_schema), text.verbosity, temperature, top_p, stream, parallel_tool_calls.

Silently ignored — accepted without error but with no effect: previous_response_id, store, include, background, conversation, prompt, truncation, max_tool_calls, top_logprobs, and reasoning.summary. metadata is echoed back but not forwarded.

Because previous_response_id and store have no effect, server-side conversation state is not available. Send the full conversation with each request.

Multimodal. Images and audio. No video on this protocol. Images use {"type": "input_image", "image_url": "<url string>"} — note the value is a plain string, not an object.

Streaming emits the standard Responses event set, ending with response.completed, response.incomplete, or response.failed. There is no [DONE] sentinel.

Google Gemini

# Non-streaming
curl "https://api.atlascloud.ai/v1beta/models/MODEL_ID:generateContent" \
  -H "x-goog-api-key: $ATLASCLOUD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{"role": "user", "parts": [{"text": "Hello"}]}],
    "generationConfig": {"maxOutputTokens": 1024, "temperature": 0.7}
  }'

# Streaming — the alt=sse parameter is required
curl "https://api.atlascloud.ai/v1beta/models/MODEL_ID:streamGenerateContent?alt=sse" \
  -H "x-goog-api-key: $ATLASCLOUD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contents": [{"role": "user", "parts": [{"text": "Hello"}]}]}'

?alt=sse is mandatory for streaming. Without it the request returns 404.

Supported. contents[] with user and model roles, systemInstruction, generationConfig, and tools.

Multimodal. Images, video, and audio — inline via inline_data, or by reference via file_data.file_uri.

This protocol is served only by models that natively speak it. Models whose identifier contains nano, banana, or omni are rejected here; use Chat Completions or the media generation endpoints for those instead.

OpenAI Images

Synchronous image generation for OpenAI-compatible clients:

curl https://api.atlascloud.ai/v1/images/generations \
  -H "Authorization: Bearer $ATLASCLOUD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "MODEL_ID", "prompt": "a cat", "n": 1, "size": "1024x1024"}'

/v1/images/edits takes multipart/form-data. Only a small number of models advertise this protocol.

This is a different path from the main image pipeline. Most image models — and all video, audio, and 3D models — use the asynchronous endpoints described in Predictions. Check a model's supported_apis before choosing.

Gateway behavior

The gateway normalizes a few things on the way through. These are not in the upstream specifications, and they will surprise you if you are debugging a response:

BehaviorApplies toDetail
Usage stats forced onStreaming requestsstream_options.include_usage is set to true, so a final usage chunk always arrives
Default system promptChat Completions, Messages, ResponsesIf you send no system prompt, "You are a helpful assistant." is inserted
max_completion_tokens rewrittenChat CompletionsConverted to max_tokens
Reasoning flags normalizedChat Completionsenable_thinking, thinking.type, and reasoning_effort: "none" are unified
Keep-alive commentsStreamingIdle streams emit SSE comment lines starting with :. Clients must ignore them
Request body limitAll endpoints50 MB. Larger payloads return 413 — use a URL or upload the file

Not available

These endpoints do not exist on Atlas Cloud. Requests to them will not work regardless of the model:

  • /v1/embeddings
  • /v1/rerank
  • /v1/audio/speech and /v1/audio/transcriptions — audio goes through the audio endpoint
  • /v1/messages/count_tokens

Providers such as Ollama, Cohere, and Bedrock are not exposed as native protocols. Models from many vendors are available, but always through one of the six formats above.

Rate limits and errors

Rate limits apply per account and per model. When you exceed one, the API returns 429.

LLM endpoints do not return X-RateLimit-* headers, and 429 responses on these endpoints do not carry Retry-After. Implement exponential backoff on the client side rather than relying on response headers.

Every response carries an X-Request-ID header. Include it when contacting support.

Last updated on

On this page