Console
Inference keys
Inference keys authenticate calls to the LLM API. They are created per project and carry their own rate and spend limits.
Creating a key
Under Inference API → Keys, choose a project and create a key. The full secret is shown once at creation — copy it immediately into your secret manager. Afterwards only a masked prefix is visible. The same screen shows the base URL to call, https://llm.upgreat.ai/v1, with a link to the LLM quickstart.
curl -X POST https://api.upgreat.ai/v1/projects/{projectId}/inference/keys \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"name": "production-backend",
"rpm": 600,
"tpm": 200000,
"token_limit": 5000000,
"token_limit_period": "month",
"allowed_models": ["qwen3.8-27b", "bge-m3"]
}'Scoping a key
Each key can be constrained so a leak or a runaway job is contained:
rpm— maximum requests per minute.tpm— maximum tokens per minute.token_limitwithtoken_limit_period— a hard token budget per minute, hour, day, week or month.allowed_models— restrict the key to specific model IDs. Omit to allow every model the project can access.expires_at— an optional expiry timestamp, after which the key stops working.
Organization limits
Your organization can also have a list of models and limits of its own, set by UPGREAT for your plan. They apply on top of each key's settings, across all keys together: a key can narrow them down, never go beyond them. Contact us to change them.One key per workload
Give each service or environment its own key. You get clean per-key usage attribution and can revoke one workload without disrupting the others.Editing a key
A key's name, model allowlist, limits and expiry can be changed after creation, in the Console (the pencil on an active key) or with PATCH /v1/inference/keys/{keyId}. Changes reach the LLM API within seconds — no redeploy, and the secret in your service stays the same.
curl -X PATCH https://api.upgreat.ai/v1/inference/keys/{keyId} \
-H "Authorization: Bearer <access-token>" \
-H "Content-Type: application/json" \
-d '{
"rpm": 120,
"token_limit": 1000000,
"token_limit_period": "day",
"allowed_models": ["qwen3.8-27b"],
"expires_at": null
}'- Send only the fields you want to change; anything you omit is left as it is.
- Send
nullforrpm,tpm,token_limitorexpires_atto clear it (unlimited, or no expiry). allowed_models: []re-grants every model the project can access today. A model that was retired after you allowlisted it stays on the key until you remove it.expires_atmust be in the future. Only active keys can be edited; revoked keys are read-only.
The secret itself never changes
Editing never rotates or re-displays the secret — it was shown once at creation and is stored only as a hash. If you have lost it, mint a new key and revoke this one.Using a key
Send the key to the LLM API as a bearer token. See the LLM quickstart for full examples.
curl https://llm.upgreat.ai/v1/chat/completions \
-H "Authorization: Bearer <inference-key>" \
-H "Content-Type: application/json" \
-d '{ "model": "qwen3.8-27b", "messages": [{"role": "user", "content": "Hi"}] }'Rotating and revoking
To rotate, create a new key, deploy it, then revoke the old one with DELETE /v1/inference/keys/{keyId}. Revocation is immediate. A revoked key can be archived to hide it from the default list, and unarchived later if you need its history back.
Revoke leaked keys at once
If a key is exposed, revoke it immediately in the Console and issue a replacement. Inspect a key's recent activity under its usage view, or withGET /v1/inference/keys/{keyId}/usage.