Skip to main content
In this guide, you will create an API key and send two requests. One goes to Chat Completions, and one goes to Messages. Both use the same key, the base URL https://api.overcontrolgroup.com/v1, and the model lume-3.5.
Included text requests scale with your plan. Plus is 5× Free, and Pro is 20× Free. Chat Completions and Messages share that allowance. Pricing has the token rates and the plan multiples.

Create an API key

Sign in at app.overcontrolgroup.com, then create a key in the API dashboard. Copy the key when it is created and keep it somewhere secure. Your application will use it to authenticate requests. Keys start with oc_sk_.
Treat the key like a password. It belongs on your server, not in client-side code, a repository, a screenshot, or a support message.
Store it in an environment variable, so the value stays out of your source code.
You can send the key as Authorization: Bearer $OVERCONTROL_API_KEY, or as x-api-key. Either header is enough. Authentication explains what happens when both are present, and which scope each endpoint expects.

Call Chat Completions

Chat Completions is the OpenAI-compatible text API. POST /v1/chat/completions expects a key with the chat:completions scope. lume-3.5 has a 400,000 token context window and can write up to 16,384 tokens. The examples below set max_tokens to 256, so the call asks for a short reply. If you leave max_tokens out, the request reserves the full 16,384. A value above 16,384 is brought down to that cap. The official OpenAI SDKs work when you point them at the OverControl base URL.
A successful response is a chat completion. The assistant’s reply is in choices[0].message.content. Token counts are in usage. When some of the input was cached, usage also includes prompt_tokens_details.cached_tokens. The counts below are only an illustration. A real response varies with the prompt.
The response includes an X-Request-Id header. If the model ID is not one OverControl serves, such as not-a-model, the API responds with HTTP 400:
A model that exists, but is missing from this key’s allowlist, comes back as HTTP 403. Authentication shows that body. The same request shape works for summarization, extraction, coding help, and other text tasks. Your application decides what context to send.

Call Messages

Messages is for a client that already speaks the Anthropic Messages API. The call is POST /v1/messages, and the key needs the messages:create scope. Those clients already send anthropic-version: 2023-06-01, which is the version OverControl accepts. You always send max_tokens. On lume-3.5 it can be anywhere from 1 to 16,384. The input and max_tokens together need to fit in the 400,000 token context window. The official Python SDK adds /v1/messages to the base URL itself, so you give it https://api.overcontrolgroup.com, without /v1. It also sends your key as x-api-key, and it includes the version header for you.
If that version header is missing, you’ll get HTTP 400 and the message Missing required header 'anthropic-version'. Any other value comes back as HTTP 400 with Unsupported anthropic-version. A successful response has type set to message. When the first content block is text, the reply is in content[0].text.
Messages responses carry X-Request-Id and request-id, set to the same value. On an error, that value is also request_id in the JSON. An unknown model, and a model outside the key’s allowlist, both come back as HTTP 404:
Generate text is how a conversation continues: you send the earlier messages with the next question. Streaming is how a reply arrives while it is still being written.

Next

Models

Compare context windows, output caps, and euro prices.

Pricing

See how input, cached input, and output tokens are billed.

Authentication

Scopes, allowlists, and the bodies a rejected key returns.

API dashboard

Create keys and review usage for the current month.