Documentation
Developers
Integrate once. The public Gateway is OpenAI-compatible, region-pinned, and documented below exactly as the contract defines it.
Quickstart
Pick your region — EU, USA or LATAM — and the example follows: the exact Gateway base URL, the OpenAI-compatible standard client, and a clearly labeled placeholder key. You create and manage your API key in your region's Console. The first available model is qwen-3-8 (Qwen 3.8, 320K context). Access is on the waitlist: join, pick your region, and your key arrives when that region opens.
# Region endpoint — OpenAI-compatible /v1 base URL
export CCSIO_AI_BASE_URL=https://api.eu.ccsio.ai/v1
export CCSIO_AI_API_KEY=<your-api-key> # placeholder, issued with your region
import os
from openai import OpenAI # the standard OpenAI client
client = OpenAI(
base_url=os.environ["CCSIO_AI_BASE_URL"],
api_key=os.environ["CCSIO_AI_API_KEY"],
)
response = client.chat.completions.create(
model="qwen-3-8", # first available model, 320K context
messages=[{"role": "user", "content": "Hello"}],
)Regional endpoints and Consoles
Your region choice maps one-to-one to your Gateway and your Console: EU — https://api.eu.ccsio.ai/v1 with https://console.eu.ccsio.ai; USA — https://api.us.ccsio.ai/v1 with https://console.us.ccsio.ai; LATAM — https://api.latam.ccsio.ai/v1 with https://console.latam.ccsio.ai. No silent cross-region routing: your key, your calls, and your data stay in the region you selected.
| Region | Gateway endpoint | Console |
|---|---|---|
| EU | https://api.eu.ccsio.ai/v1 | console.eu.ccsio.ai |
| LATAM | https://api.latam.ccsio.ai/v1 | console.latam.ccsio.ai |
| USA | https://api.us.ccsio.ai/v1 | console.us.ccsio.ai |
Live Gateway reference
The operations below are generated from the published Gateway contract — method, path, parameters, and error contract exactly as deployed. We document only what you can call today; nothing speculative ships as an instruction.
Authentication
Authorization: Bearer <JWT>x-api-key: <api-key>Supply one credential per request — never both. Credentials are created and managed in your region's Console; the examples above use placeholders only.
- POST
/v1/chat/completionsoperationId: chatCompletionsSSEStream a chat completion
Accepts only streaming requests. stream must be true; false or omitted returns 400 with code non-streaming-not-supported before any SSE headers are committed. Successful responses contain SSE data frames and terminate with data: [DONE]. Pre-commit failures use the JSON ErrorEnvelope rather than SSE.
Parameters
name in required description X-Data-Region header required Declared data region used during placement. X-Request-ID header required Required request ULID. Lowercase input is accepted; the response X-Request-ID header uses the canonical uppercase form. X-Residency header required Declared request residency used during placement. X-Trace-ID header required Required trace correlation identifier. Request body:
application/json— schemaChatRequestResponses
200SSE stream. Frames are data: {"content":"..."}, data: {"usage":{"prompt_tokens":n,"completion_tokens":n}}, data: {"content":"...","usage":{"prompt_tokens":n,"completion_tokens":n}}, or after a committed-stream failure data: {"error":"..."}. The terminal frame is data: [DONE].400Client refusal unrelated to authentication, including malformed input, a denied or failed request.401Step-1 credential refusal: missing credentials, rejected or invalid credentials, or duplicate/both credential forms.404The requested resource or path was not found.405The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.500Platform failure, rendered without internal cause details.502Failure in an external dependency or malformed provider response.
Example
curl -N https://api.eu.ccsio.ai/v1/chat/completions \ -H "Authorization: Bearer $CCSIO_AI_API_KEY" -H "X-Request-ID: 01J9ZK8WQ3V6X4M2T5R7N1B8C0" -H "X-Trace-ID: <your-trace-id>" -H "X-Residency: <your-region>" -H "X-Data-Region: <your-region>" -H "Content-Type: application/json" -d '{"model":"qwen-3-8","stream":true,"messages":[{"role":"user","content":"Hello"}]}' - POST
/v1/responsesoperationId: createResponsesSSECreate a response (OpenAI-compatible)
Creates a response through a qualified responses deployment. The input is reduced to a single prompt at decode time (the authority rule): a string input is verbatim; an items input is the items in array order, each item's string content verbatim or its input_text parts concatenated in order, item texts joined by a blank line; a non-empty instructions string is prepended before a blank line. The twelve functional fields (tools, tool_choice, tool_usage, parallel_tool_calls, previous_response_id, conversation, background, text, reasoning, truncation, safety, store) are refused on presence with the pinned responses-<field>-not-supported code; inert parameters (metadata, user) are tolerated and ignored. Malformed or empty provider response data returns 502 with code responses-body-malformed or responses-output-missing. Unknown provider usage is represented by zero for all three usage fields.
Parameters
name in required description X-Data-Region header required Declared data region used during placement. X-Request-ID header required Required request ULID. Lowercase input is accepted; the response X-Request-ID header uses the canonical uppercase form. X-Residency header required Declared request residency used during placement. X-Trace-ID header required Required trace correlation identifier. Request body:
application/json— schemaResponsesRequestResponses
200The SSE stream (stream: true) or the final response object (stream: false).400Client refusal unrelated to authentication, including malformed input, a denied or failed request.401Step-1 credential refusal: missing credentials, rejected or invalid credentials, or duplicate/both credential forms.404The requested resource or path was not found.405The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.500Platform failure, rendered without internal cause details.502Failure in an external dependency or malformed provider response.
Example
curl https://api.eu.ccsio.ai/v1/responses \ -H "Authorization: Bearer $CCSIO_AI_API_KEY" -H "X-Request-ID: 01J9ZK8WQ3V6X4M2T5R7N1B8C0" -H "X-Trace-ID: <your-trace-id>" -H "X-Residency: <your-region>" -H "X-Data-Region: <your-region>" -H "Content-Type: application/json" -d '{"model":"qwen-3-8","input":"Hello"}' - POST
/v1/embeddingsoperationId: createEmbeddingsCreate embeddings
Creates embeddings through a qualified embeddings deployment. Malformed or empty provider embedding data returns 502 with code embedding-body-malformed or embedding-data-missing. Unknown provider usage is represented by zero for all three usage fields.
Parameters
name in required description X-Data-Region header required Declared data region used during placement. X-Request-ID header required Required request ULID. Lowercase input is accepted; the response X-Request-ID header uses the canonical uppercase form. X-Residency header required Declared request residency used during placement. X-Trace-ID header required Required trace correlation identifier. Request body:
application/json— schemaEmbeddingsRequestResponses
200Embedding list and the usage from the metered provider attempt.400Client refusal unrelated to authentication, including malformed input, a denied or failed request.401Step-1 credential refusal: missing credentials, rejected or invalid credentials, or duplicate/both credential forms.404The requested resource or path was not found.405The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.500Platform failure, rendered without internal cause details.502Failure in an external dependency or malformed provider response.
Example
curl https://api.eu.ccsio.ai/v1/embeddings \ -H "Authorization: Bearer $CCSIO_AI_API_KEY" -H "X-Request-ID: 01J9ZK8WQ3V6X4M2T5R7N1B8C0" -H "X-Trace-ID: <your-trace-id>" -H "X-Residency: <your-region>" -H "X-Data-Region: <your-region>" -H "Content-Type: application/json" -d '{"model":"qwen-3-8","input":"Hello"}' - GET
/v1/modelsoperationId: listModelsList active published models
Returns the verified tenant's active published models, deduplicated by model id. Enumeration is authenticated but is not grant-gated. A catalog read failure such as bundle-not-cached returns 400.
Parameters
name in required description X-Request-ID header optional Optional case-insensitive ULID for model listing. Lowercase input is accepted and canonicalized to uppercase in the response X-Request-ID header; when the header is absent or invalid, middleware mints the request context and response id. Responses
200The tenant's model list.400Client refusal unrelated to authentication, including malformed input, a denied or failed request.401Step-1 credential refusal: missing credentials, rejected or invalid credentials, or duplicate/both credential forms.404The requested resource or path was not found.405The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.500Platform failure, rendered without internal cause details.502Failure in an external dependency or malformed provider response.
Example
curl https://api.eu.ccsio.ai/v1/models \ -H "Authorization: Bearer $CCSIO_AI_API_KEY"
Authentication
The Gateway defines two credential alternatives — supply one, never both: a Bearer JWT verified against your issuer's JWKS, or the x-api-key header carrying your tenant API key. You create and manage credentials in your region's Console. Nothing on this page is a live credential: every key in the examples is a labeled placeholder.
Platform APIs coming next
Identity, Memory, Metering, Models, and Audit are designed and under construction; they are not public yet, and there are no live endpoints for them here. The roadmap tells you what ships next and at what stage.
View the roadmapDeveloper FAQ
- Is the API OpenAI-compatible?
- Yes. The Gateway speaks OpenAI-compatible contracts: chat completions and responses as SSE streams, embeddings as JSON, and a model list. Point the standard OpenAI client at your region's /v1 base URL.
- How do I authenticate?
- With a Bearer JWT or the x-api-key header — one of the two, verified against your region. You create and manage credentials in your region's Console: console.eu.ccsio.ai, console.us.ccsio.ai, or console.latam.ccsio.ai. The examples on this page use placeholders only.
- Which operations exist in the public Gateway?
- POST /v1/chat/completions (SSE stream), POST /v1/responses, POST /v1/embeddings, and GET /v1/models — the four operations of the published contract. The control-plane surfaces (Identity, Memory, Metering, Models, Audit) are on the roadmap, not public.
- Where does my region's data run?
- Pinned to your chosen region — EU, USA, or LATAM. Your key is scoped to that region's endpoint, and calls are never moved between regions implicitly.
Get your first API key
The waitlist is the path: account, region, key.