Skip to content

This page is shown in English. A संस्कृतम् version is not yet available.

Review deployment — not yet open for customers. Inference runs on the platform's own model on CPU; no payment provider is connected, so nothing is sold or charged.

SOVEREIGN AI CLOUDPOWERED BY MEDIA HOLDING

Interface

API

One OpenAI-compatible API format, served under /v1 by the control plane and backed by Sovereign AI. The format is compatible so that your client libraries work unchanged; the models, the machines and the operator are Media Holding's. No OpenAI services are involved.

Endpoints

The inference gateway behind these endpoints exists and is measured (see Sovereign AI). The public, key-authenticated layer is the control plane: built and tested in isolation, labelled BUILT, not yet published.

POST /v1/chat/completions

Measured

Chat completions in the OpenAI-compatible format; stream: true for Server-Sent Events, stream_options.include_usage for usage in the final chunk; tools and response_format pass through. At the inference gateway: measured on 2026-10-12.

POST /v1/completions

Built

Legacy text generation for clients that still use the completions format.

GET /v1/models

Built

The models available to your project, with the default alias.

GET /v1/models/{id}

Built

One model by id or alias.

GET /v1/usage

Built

Your own usage for a period — requests and token counts per model. Metadata only; never content.

GET /health

Built

Liveness of the control plane and the state of the inference backend; no authentication; never reveals paths or internal versions.

Status labels — MEASURED — exists and was measured on the stated date by the stated method. BUILT — exists and works, not yet measured under load. PLANNED — designed, not yet built. A line without a label is not a claim of this platform.

OpenAI-compatible API format. No OpenAI services are involved.

Open the API reference

The contract

Authentication

Built

Authorization: Bearer sk-sov-<prefix>-<secret>. The secret is shown once and stored only as a keyed one-way hash (HMAC-SHA-256); the prefix identifies the key in the cabinet and never the secret.

Request identifiers

Built

Every response carries X-Request-Id; every error body carries the same id in error.request_id. Quote it in support requests. The inference gateway already writes a request id into its audit line.

Streaming

Measured

Server-Sent Events; the stream ends with data: [DONE]; with include_usage the final chunk carries the token counts. Measured at the inference gateway.

Usage accounting

Built

prompt_tokens, completion_tokens and total_tokens are counted by the backend and written to the metering ledger before the response is finalised, so an invoice never counts what you did not receive.

Rate limits and budgets

Built

429 with Retry-After when a rate limit or a project budget is reached. Rate-limit headers (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset) are planned; their final names are published in the generated specification.

Versioning

Built

Base path /v1. A change that is not backwards-compatible is announced at least 30 days in advance (Terms of Service §5).

What is not offered

Built

Embeddings, images, audio, fine-tuning, assistants, threads and batch endpoints are not offered; an unknown route answers 404 with a machine-readable code.

Errors

Every error is one JSON shape with the HTTP status that names its class. The message never contains URLs, tokens, paths or upstream exception text.

HTTPerror.typeWhenRetry-After
400invalid_request_errorThe request body or parameters are invalid.no
401authentication_errorMissing, malformed, revoked or unknown API key.no
403permission_errorThe key is valid but may not use this model, project or route.no
404invalid_request_errorUnknown model or route; code names it.no
429rate_limit_error · budget_exceededA rate limit or a project budget is reached; wait the seconds given.yes
500server_errorAn unexpected failure on our side; quote the request id.no
503backend_busy · upstream_unavailableThe GPU is held by another job, or the inference provider is down. No fallback to an external supplier exists.yes
{
  "error": {
    "type": "rate_limit_error",
    "code": "requests_per_minute",
    "message": "Too many requests for this project. Retry after the number of seconds in Retry-After.",
    "request_id": "5b8e2b2e-4a2f-4b7c-9d2e-1f3a4b5c6d7e"
  }
}