Give each piece of work its own key, set its limits, and know who pays. The project's owner pays for every request.
API keys
An API key, made in Operate → API keys, is how code calls VIABLE.
- A service key belongs to the project and keeps working when people leave. Only the owner makes one. Use it for apps, courses and chat pages.
- A personal key belongs to the member who made it. It stops if they are paused, leave or become a viewer.
Choose Create key (editors see Create personal key), set its Scopes, Limits and Model access, and keep the secret on your server. Before someone leaves, the owner can choose Make service key on their key.
- Scopes: courses and chat pages need Run agents (
agents:execute). - Limits: Requests per minute, Daily tokens and Monthly cost (USD), all optional.
- Model access: with Selected models only, allow every model the key's agents use.
Pausing a key can be undone; revoking can't.
A course's or chat page's key
- A course: its Settings → The AI → The AI key: who pays for the course's AI. AI messages per learner per day can cap each learner.
- A chat page: the agent's Chat page → Key & limits → Runs on.
Use a service key, one per course or chat page, so Usage shows what each costs.
Warning
A whole class shares the course's key. A low daily token limit can stop the AI for all 30 learners mid-lesson.
Provider keys and key pools
Under Account → Billing → Provider keys, add your own keys for OpenAI, Google Gemini, UF NaviGator or another OpenAI-compatible endpoint. Requests then bill your provider, not VIABLE credits, with no code changes. Keys for one provider form a key pool: when one runs out or is rejected, the next takes over. A lab can pool its grant keys.
Credit and who pays
Account → Billing → Credits shows one balance. Every project you own draws from it, whichever member's key made the request.
| Request | Paid by |
|---|---|
| A catalog model whose provider has a pool set to Every … model request | That pool |
| A catalog model with no such pool | The owner's VIABLE credits |
A model called as @name/<model> |
That pool |
| A pool with no key available | An error, or credits if the pool chose Use VIABLE credits |
The project's Overview shows the result under How this project is billed.
Costs are estimated from listed model prices; an agent run costs the sum of its model calls. When credit runs out, requests fail with 429 account_credit_exceeded, but provider-key requests keep working.
- Request logs and usage: see what each key spent.
- Members and roles: decide who can make keys.
