How to use
The conversation first. Your API and tools through the same door. All the leading AI models, one key, your rules, your proof.
The conversation first.
Your team talks. When the question is ready, you invite a model. The API and your tools go through the same door.
Why
Every model, one key
Reach the popular models from OpenAI, Anthropic, and more with a single key. No juggling separate accounts or bills.
Your rules on every request
Each request follows your rules: which models are allowed, what may be sent, which tools the model may ask for, and a scan for sensitive data before anything leaves.
Your data stays in Canada
is hosted in Canada and keeps a signed record of every call, so you always have the proof you need for Loi 25.
How works
Point any AI tool at instead of the model provider. From there, every request takes the same four steps.
- 01
Your tool asks
Cursor, Claude Code, VS Code, or your own app can talk to if they already talk to OpenAI or Claude.
- 02
checks it
applies your rules on models, tools, and sensitive data, then allows or blocks the request.
- 03
The model answers
sends the approved request to the model provider on your own contract and streams the answer straight back.
- 04
It's logged for you
Every call is written to a signed record you can export at any time.
Control what an agent is allowed to do
In Policies, open a profile, then Advanced — Agent controls. You decide what the AI model may ask for. If a tool is switched off, answers with an explanation. No provider is called.
Tools and MCP
Turn on or off the tools the model may ask for. You can also limit which tool names and MCP servers are allowed.
Code, computer, terminal, files
Four actions the AI model can launch. Web search and image generation are set higher on the same page.
What tonia does not see
A tool your editor runs on your machine never reaches . Neither does an MCP server the editor contacts directly.
Your tools follow the same rules.
Compatible through OpenAI or Anthropic endpoints. These are not native integrations.
- Cursor
- Claude Code (desktop and CLI)
- Codex (desktop and CLI)
- VS Code (Copilot)
- Hermes / OpenClaw
- n8n
Get started
From sign in to your first answer. You will set most of this up once.
- 1
Sign in
Open the portal and sign in with the method linked to your account. No password is ever sent to .
- 2
Approve sensitive changes
When you save an sensitive changes, the button shows progress while the portal asks for your passkey or a fresh account re-authentication. If re-auth sends you away and back, the portal restores the form and finishes the save.
- 3
Use your own key or Managed
Bring your own provider key when you want calls to run on your direct OpenAI, Anthropic, or other model account. Choose Managed when you want to handle the provider access for you.
- 4
Set your guardrails
Turn on sensitive data detection for social insurance, health card, and credit card numbers. Then save a profile for each key. The profile decides models, sensitive data, and tools under Advanced — Agent controls.
- 5
Create your key
Open API key in the sidebar and create one. You'll see the full key once, so copy it somewhere safe.
- 6
Connect your tool
Add your key, the address, and the exact model id to your editor or app. Pick your tool below for the exact settings.
- 7
Watch and keep the proof
Follow your requests and spending under Usage, and export your signed records anytime from the Audit log.
What you can do in the portal
Once you're signed in, everything lives in the left sidebar. Here's what each area is for.
Dashboard
Your workspace at a glance: plan, seats, active keys, and recent activity.
Usage
Requests, tokens, and spend over time, broken down by key and model. With your own keys, prompt-cache read/write breakdown appears when the provider reports it; in managed mode, token totals stay intentionally opaque.
API key
Create, rotate, and switch off the keys your tools use. Each key is shown once and stored safely.
Your provider keys
Connect your own OpenAI, Anthropic, and other accounts so calls run on your direct contract.
Sensitive data
Decide what counts as sensitive and whether blocks it or just warns. Test it before you save.
Profiles
Reusable rule sets you attach to keys. They decide allowed models, limits, sensitive data, and tools under Advanced — Agent controls.
Members
Invite teammates, give each a role, and remove access when someone leaves. Available on team plans.
Billing
Your plan, seats, and invoices. Upgrade or change your plan here.
Audit log
A signed record of every call and admin action. Workspace admins can filter by user, type, and date; developers see their own member audit.
Settings
Your workspace name, defaults, and security options.
Security
Set up the passkey that approves sensitive actions. No password and no recovery phrase.
Choose the right model for each task
The best model depends on the work. Start with the task, then compare speed, quality, and cost.
- 1
Email, summaries, and everyday work
Choose a fast, economical model. It is usually enough for drafting, rewriting, sorting, or summarizing.
- 2
Complex analysis and decisions
Choose a reasoning model to compare options, follow long instructions, or solve a problem in several steps.
- 3
Code and automation
Choose a coding model when the task requires understanding a repository, changing several files, or using tools.
- 4
Documents, images, and data
Choose a multimodal model to read an image, document, or table. Check supported formats on the model page.
Conversation history and privacy requests
By default, tonia does not keep conversation history. A workspace admin can turn it on in settings, and the change is recorded in the audit log.
- 1
The default stays history-free
The audit log keeps a signed hash of every call. It does not show prompts or responses.
- 2
Viewing is logged
If retention is on, a workspace admin opens the audit journal and chooses View request or View response. Every view is written to the audit log before content is shown.
- 3
Export a copy
A member opens Settings, then My data, and chooses Export my data. They do not delete their own account. An authorized manager removes the member.
The conversation
Open tonia in the browser or in the app. The first time, tonia writes to you and shows you around. You can delete that conversation like any other.
- 1
The menu
On the left: Channels, Rooms, and Messages. New channel creates a channel. New, under Rooms, opens a room with the AI. New message writes to one person.
- 2
Write
The field at the bottom sends. The draft stays if you switch rooms. You attach a file, reply, or add a reaction.
- 3
Invite a model
Type @ and a name from the menu, such as @claude, @gpt, or @gemini. Two names in one message get two answers side by side. @image creates an image. @transcribe reads an attached audio file. @local answers in the app, on your computer.
- 4
Confirm or refuse
A question is confirmed or dismissed. A command, a tool, or a write is approved or refused before it runs.
- 5
Files
Files opens the tree, except on tonia.ca in the browser. The shared folder is read-only. To create or change a file, open the app.
- 6
Settings
Profile, notifications, AI router, policies, language, and My data. Export my data is there. Live talks to the model in the app only.
Connect your tools
You only need one key. The same key works for OpenAI compatible tools and Claude tools. Add the address, your key, and the exact model id, then pick your tool for the exact settings.
The address
https://pass.tonia.ca:8443
This is the only address your tools point at. automatically sends each request to the right model provider.
Replace tonia_sk_… in each snippet with the key you created. Every key is one secret that starts with tonia_sk_ and runs about 50 characters. It is shown once, so keep it safe.
You must also enter the exact model id, for example xai/grok-4.3. Find it under each model name on the models page.
Cursor
OpenAI compatibleFour steps in Cursor: Settings → Models.
- 1
Open Models
In Cursor, open Settings, then Models. This is where you add models and point them at .

- 2
Add a model
In “Add or search model”, type the exact model id (for example
xai/grok-4.3), then click Add.- Model id
xai/grok-4.3

- Model id
- 3
Paste the key and address
Paste your
tonia_sk_…key. Turn on “Override OpenAI Base URL”, then paste the address that ends with/v1.- API key
tonia_sk_… - Address
https://pass.tonia.ca:8443/v1

- API key
- 4
Add more models
Repeat for each model you need. Exact ids are on the models page.
Good to know: Cursor uses an OpenAI compatible connection, so connect a provider key for OpenAI under Your provider keys (or use a Managed plan). For Gemini, use gemini/models/… (not gemini/…). The exact id is on the models page.
If a tool won't connect
- A certificate warning or a security warning.
- Use the public address shown above. It has a trusted certificate.
- It says a provider key is missing.
- Connect that provider under Your provider keys, or switch to a Managed plan.
- The wrong kind of model answers.
- Use the address that matches your tool: the one ending in /v1 for OpenAI compatible tools, or the plain address for Claude tools.
- A 404 error, or the address seems to double /v1.
- Use the public address shown above, with /v1 only once and no trailing slash.
- The model list in the tool is empty.
- Type the exact model id. You can find it on the models page.
- The connection fails after you fill in Organization ID.
- Leave Organization ID blank for .
- The tool asks for an Azure deployment name.
- Choose OpenAI compatible mode (not Azure OpenAI) and use the /v1 address above.
- In Zapier, the ChatGPT or OpenRouter app has no address field.
- That is expected — those apps cannot point at . Use Webhooks → Custom Request to the full /v1/chat/completions URL.
- In Make, the native OpenAI module will not take a custom address.
- Use HTTP → Make a request to the full /v1/chat/completions URL, or an Agents “Other Providers (Compatible with OpenAI)” connection.
- Claude Desktop shows “found 0 models”, only lists Claude models, or says a model “doesn't look like an Anthropic model”.
- This is a Claude Desktop app limitation, not a problem — its model picker only accepts Claude-named models, even when your key can reach more. Use the Claude Code CLI, Cursor, or another tool in this list for the rest of your roster.
- In Copilot Chat you pick your model, but the answer comes from a GitHub model (for example Raptor Mini).
- Open your Custom Endpoints and give each entry a unique name (not two blocks both called “tonia”). Reload the window (Developer: Reload Window), start a new chat, then pick your model again.
Image size
To generate an image, send 1k, 2k, or 4k — or OpenAI size. sends the right field to each provider. Do not put the provider’s field in your code.
Gemini images use /v1/interactions, not /v1/images.
On Image 2 and Image 1.5, 2k and 4k become 1536x1024. On Image 2.5 (Flare and Sunburst), 2k becomes 2048x2048 and 4k becomes 3840x2160. Image 2.5 also accepts xhigh and max. Image 2.5 is billed by token, not per image.
| Provider | You send | sends | Avoid |
|---|---|---|---|
| OpenAI | 1k, 2k, or 4k | 1024x1024 · Image 2: 1536x1024 · 2.5: 2048x2048 / 3840x2160 | 4096x4096 |
| xAI | 1k or 2k | resolution 1k or 2k | size and quality |
| Meta | width × height or auto | the same format | 1k, 2k, 4k |
| Alibaba | 1k, 2k, or 4k | width*height or 1K, 2K, 4K | 2k and 4k on the turbo model |
| Gemini | 1k, 2k, or 4k | image_size 1K, 2K, or 4K | /v1/images |
Speech and transcription
To make a model speak, send input and voice. To transcribe a file, send the file. sends the right field to each provider. Do not put the provider’s field in your code.
Gemini models use /v1/interactions, not /v1/audio. Spoken chat uses the same chat messages, with audio parts.
| Provider | You send | sends | Avoid |
|---|---|---|---|
| OpenAI | input and voice or a file | the same fields | — |
| Mistral | input and voice | voice_id | alloy as a Mistral voice |
| Alibaba | input and voice or a file | text + voice, or the file as an address | /v1/audio in compatible mode |
| Gemini | /v1/interactions | the Interactions body | /v1/audio |
| Meta | a file | the same file | /v1/audio/speech and /v1/audio/translations |
| Fish Audio | input and voice, optional input_references, or a file | the same fields | the bare id s2.1-pro and /v1/tts |
Embeddings
To turn text into a vector, send the model and the text to /v1/embeddings. This is not chat.
The tonia chat app does not offer these models. Use your API key.
| Provider | You send | sends | Avoid |
|---|---|---|---|
| OpenAI | model and input | the same fields | /v1/chat/completions |
| Cohere | model and input | texts at the lab | /v2/embed |
Rerank
To order documents you already have, send a query and the list to /v1/rerank.
A rerank search is not a web search.
| Provider | You send | sends | Avoid |
|---|---|---|---|
| Cohere | model, query, and documents | the same contract, a different lab path | /v2/rerank as the client address |
System One
For a typed decision, send a state and questions to /v1/systemone. The reply is not free prose. Use client.request("POST", "/v1/systemone", …).
Send {model, state, questions}. state is the text or record to judge (string, object, or array). Question ids are code: they are not sent to the model.
| Type | You send | You get back |
|---|---|---|
noul | A yes/no question. criteria.true and criteria.false are optional. | noul: probability that the answer is yes. Near 1 is a strong yes. Near 0 is no. Near 0.5 is uncertain. A noul has no confidence. |
choice | One option from the set you name in criteria. | choice, probabilities, confidence. |
score | An ordered scale in criteria (at least two levels). | score (can land between levels), legend, probabilities, confidence. |
confidence exists only on Choice and Score. It is a number from 0 to 1 computed from probabilities. The answer tells you what. confidence tells you whether to act.
Point the TypeSafe SDK at the origin only. models.list() through tonia is unsupported. One call counts against the 10,000 your API keys quota. A cheap call may show $0.00 CAD; the CSV keeps micros. jev-latest is a moving alias: the response model carries the versioned id.
Need a hand?
Check the live status of anytime from the Status page, or reach your contact. Everything you do here is recorded for you and stays in Canada.