The website admin portal

All 28 administration pages: licences and pricing, the AI models chat actually runs on, every organization and user, knowledge hosting, backups and analytics.

Who can get in

Website admin only Sign in at /admin/login. Access comes from a row in the platform's WebsiteAdmins table with an Active status — nothing else grants it. An organization admin, a reseller or a plain user cannot reach these pages, and every page under /admin refuses a circuit that lacks the website-admin role.

The sidebar is grouped as License Control, Management, Analytics, Tenant Admin, Organization and Help. This page follows the same order, with the URL of each page so you can link to it directly. A condensed operator's version, kept next to the pages themselves, is at Admin Help inside the portal.

Dashboard /admin

Admin dashboard with stat cards, recent sessions and the subscription summary
The first page after sign-in: platform health at a glance.

Read-only. Live SignalR client connections, active sessions, totals for users, teams, organizations and active subscriptions, plus this month's tokens and estimated cost. Below that, the eight most recently updated sessions, a subscription count per plan, and a highlighted banner when new enterprise inquiries are waiting.

Two figures are worth reading carefully. Connected Clients counts add-ins attached right now, so it drops to zero out of hours — that is not an outage. Cost This Month sums the estimated cost of every usage record, including turns that ran on customers' own keys; the split between what you actually pay for and what they pay for is on Usage.

License Control

Licenses /admin/licenses

Licenses page listing subscriptions with plan, seats, status and the edit dialog
Every subscription on the platform, filterable by plan and searchable by account.

The subscription record behind every account, team and organization. Filter by plan (Trial, Pro, Team, Org Dedicated, Suspended) or search by name. Each row shows the plan, seat maximum, status and either the days left on a trial or the period end. Suspend and Activate flip the status straight from the row.

+ New License and Edit open the same dialog:

Saving is immediate and is enforced on the next chat turn. Reducing Max Seats below the number of seats already handed out does not revoke anyone — it only stops new assignments, so tidy up on Org Members as well.

Trial Settings /admin/trial-config

Trial settings page with global defaults and the per-trial extension table
Global trial defaults, then a row per active trial with an extend control.

Global defaults — default trial length in days, default trial token limit (0 = unlimited), the maximum number of days a single extension may grant, and the contact address used for notifications. These apply to new registrations only; existing trials keep the end date they already have, which is exactly what you want when you shorten a trial for future signups.

Extend individual trials lists active trials with the fewest days left first. Enter a number of days and press Extend; the new end date is recomputed from the account's creation date plus its base trial length plus every extension granted so far, so repeated extensions accumulate rather than restart the clock.

Pricing /admin/pricing-admin

What the public /pricing page shows. One row per plan: display name and description, monthly fee (0 renders as “Contact us”), included tokens (0 renders as “Unlimited”), the overage price per million tokens, the seats included, and a Show on public pricing page flag for staging a plan before announcing it.

This page is marketing copy, not enforcement. Editing a price here changes nothing about what an existing customer is allowed to do — limits live on their subscription in Licenses, and token cost accounting lives in Token Cost Rates.

Enterprise Inquiries /admin/contacts

Enterprise inquiries list with the detail dialog open
Contact Sales submissions, with a status you move through the funnel.

Submissions from the public Contact Sales form: company, contact details, which CAD systems they use, estimated user count and their message. View opens the full message and lets you move the status through New → In Progress → Converted or Closed. New inquiries are what the dashboard banner counts, so keeping the status current keeps the dashboard honest.

Resellers /admin/resellers

Partners who own customer companies. A company with no reseller is direct, platform-owned business.

What a reseller can then do for themselves is described in Reseller Portal.

License Orders /admin/orders

The approval queue for reseller requests: New company, Increase seats, Decrease seats. The filter opens on Pending. Approve is what applies the change — it creates or updates the subscription's seat count and keeps the dedicated server key records in step — and Reject closes the order without effect. Both record who acted.

If an approval fails, the reason is shown in red at the top and the order stays pending; the usual cause is a target company that no longer exists.

Teams /admin/teams

Teams list with member counts, plan and monthly tokens
Every team, its admin, membership and monthly token consumption.

Teams are the lighter alternative to organizations. + New Team asks for a name, a URL-safe slug and the email of an existing user, who becomes the team admin and its first member. The slug must be unique and both name and slug are required. View lists the members and their roles. The team-facing version of this data is described in Team Portal.

AI models and what they cost

Four pages hold AI keys and only their combination makes sense. Read this section before changing any of them.

AI Providers /admin/providers — the one chat actually uses

AI provider configurations table with the add/edit dialog
The chat registry: provider, model, key and tuning per agent role.

Each row is a chat configuration. Config Name selects the agent role it applies to — default, main_agent, worker_agent or verifier. Organization scopes the row to one company, or leave it blank for a Server Default every company can fall back to.

The provider name decides the wire protocol; the model name never does.

Other fields: API Key (encrypted at rest; on an existing row a blank box keeps the stored key and the masked current value is shown), Temperature, Max Tokens, Context Window (0 = unset), per-model input and output cost per million tokens (0 = fall back to the published table), and Mark as default for this scope.

Saving makes it live on the next chat turn — there is no restart or sync step. A provider name the chat client does not recognise is rejected at save time rather than on a customer's first message.

Resolution order for every chat turn: the user's own key (My AI Key) → the tenant BYOK config → the organization-specific row here → the Server Default row. If none exists, chat is blocked with a “no provider configured” error.

Token Cost Rates /admin/cost-rates

Token cost rates table with per-provider, per-model input and output prices
Published price per million tokens, per provider and model. Edit a value and save that row.

The published price per one million tokens for each provider and model, in USD. These drive the cost shown in usage statistics and on invoices. Add a rate with the provider, model, input and output prices and a source note; edit any value in the table and press Save on that row. Untick Active to retire a rate without deleting its history.

A turn is priced by the model it used. A model missing from this table falls back to a flat server default, which is how a very cheap model once recorded a cost roughly eight times its real price. To audit a suspicious figure, compute the implied rate from a usage record — cost × 1,000,000 ÷ input tokens — and compare it with the provider's published price. Providers change prices without notice, so re-check against the source when a number looks wrong.

Provider Credentials /admin/platform-providers

Provider credentials vault with per-provider status, masked key and rotate buttons
A key vault with test and rotate — not the chat configuration.

A vault for the platform owner's provider keys, with Add Key, Rotate, Remove and a Test button in the dialog. Keys are stored encrypted at rest and only ever shown masked.

Chat does not read this page. Today only the RAG Knowledge Service entry is used at runtime; the LLM keys here are kept for rotation. A key stored only on this page does nothing for chat — to make a model available, create a config on AI Providers.

Below the table, Default Rate Limits (Platform Key) sets tokens per minute, requests per minute and a daily token cap, applied per tenant whenever they consume the platform-supplied key.

AI Provider (tenant) /admin/tenant-ai-provider

A single tenant's own AI arrangement. The page needs a team-scoped sign-in; without one it reports that no tenant is in scope rather than guessing.

Remember the precedence: a user's personal key on My AI Key beats whatever is configured here.

Tenants and people

Organizations /admin/orgs

Organizations list with the add form above it
Create a company and see its slug, dedicated flag and member count.

Add Organization takes a name, a slug and a Dedicated flag for customers running their own server. Both name and slug are required. Creating a company also creates its messaging-channel settings row, so all channels start enabled and the customer only has to enter credentials.

Org Members /admin/org-members

Pick a company, then manage its people. This is where seats actually get handed out.

Messaging Channels /admin/channels

Per-tenant messaging channel credentials for Telegram, Teams and WhatsApp
The same panels the customer sees, with an organization picker at the top.

Per-tenant Telegram, Microsoft Teams and WhatsApp credentials, entered on behalf of a customer. Select the organization, then fill the panels: a Telegram bot token from BotFather; an Entra application ID, directory ID and client secret for Teams, together with an Azure Bot whose messaging endpoint points at this server; a Twilio account SID, WhatsApp number and auth token, with Twilio's inbound webhook pointed here. The last panel controls whether users may self-connect from the add-in and tray Agent.

Secrets are encrypted at rest and a blank box keeps the stored value. Saving is immediate except for a new Telegram bot token, which the messaging service picks up when it next restarts. Customers can do all of this themselves in the org portal — the full walkthrough is Channels & Messaging.

Connections /admin/connections

Per-tenant connections to external systems, again with an organization picker. Same template gallery as the customer's page — Dynamics 365 Business Central, SAP S/4HANA Cloud, ERPNext, Salesforce, HubSpot, Microsoft 365 mail, SendGrid, Postmark and generic REST — plus one field the customer's page does not have:

Worked configurations with the exact JSON for each provider are on Connections (ERP & Email).

Users /admin/users

Users list with organization, role, active flag and last login
Every registered account, with its first organization membership and last sign-in.

A read-only roster: display name, email, the organization of their first membership, that membership's role, whether the account is active, and the last login. Use it to confirm an address is registered before adding it anywhere else — several forms across the portal accept only existing accounts. Memberships and roles are changed on Org Members, not here.

Website Admins /admin/admins

Who can see this portal at all. Grant Website Admin Access takes the email of an existing user; an unknown address, or one that is already an admin, is refused with a message. Revoke marks the grant inactive and Restore brings it back, so history is preserved rather than deleted.

Revoking your own access is possible and locks you out at the next sign-in. Keep at least two active website admins.

Knowledge, backups and infrastructure

RAG Settings /admin/rag

RAG settings with the platform default endpoint, key and the per-organization override table
The platform's default knowledge service, plus a read-only view of every org override.

The platform default RAG server — endpoint and API key — used by every organization that has not configured its own. A badge shows whether the key is configured; a blank box keeps the stored key. Test connection reports the server's embedding model, vector dimensions and version, and is worth pressing before saving.

Organization Overrides below is read-only: which companies point at their own server, the endpoint, whether a key is stored and when it changed. Customers manage this themselves on their RAG Provider page — see Organization Portal.

Backup /admin/backup

OneDrive backup settings, the backup list and recent runs
Scheduled encrypted backups to OneDrive for Business, with restore staging.

Daily encrypted backups of the server's databases, uploaded files and data-protection keys to a OneDrive for Business folder, through a dedicated Entra application with the Files.ReadWrite.All application permission.

Test connection verifies the Graph credentials, Backup now runs one immediately, and Refresh list shows what is in OneDrive with size and date. Stage restore requires the passphrase typed into the box next to the refresh button.

Keep the archive passphrase in your password manager. A restore requires re-entering it, and nobody can recover it for you — without it the archives are unusable.

Recent runs lists each attempt with its status, file name, size and any error.

Hermes Settings /admin/hermes-settings

Legacy. Hermes was an earlier agent-runtime container. Chat no longer runs through it — every conversation goes through the server's own agent runtime. The page is still in the admin navigation and still edits that container's environment file (saving writes the file; Restart Hermes container applies it), but on a normal deployment there is nothing here you need. Ignore it unless you are specifically maintaining a Hermes container.

Server Settings /admin/settings

Server settings table showing database provider, JWT configuration and environment
Read-only configuration as the running server sees it.

A read-only view of the running configuration: database provider, JWT issuer, audience and a masked signing key, the default AI provider and model from configuration, and the environment name. Nothing here can be edited from the browser — these values come from the server's configuration files and environment. Use it to confirm which environment you are actually looking at before making a change somewhere else.

Analytics and shared content

Usage /admin/usage

Usage overview with the four summary tiles and the per-organization table
This month's tokens, split by who is paying for them.

Four tiles for the current month: total tokens, cost on our key, BYOK tokens and the request count. The distinction matters commercially:

The table repeats the split per organization with input tokens, output tokens, requests, the amount billed to you and the tokens run on the customer's own key.

Sessions /admin/sessions

Active SignalR connections above the database sessions table
Live add-in connections on top, stored sessions below.

Active Connections (SignalR) is the live picture: one row per attached CAD add-in with its connection identifier, user, organization and CAD system, and when it connected. An empty table simply means nobody has CoPilot open. This is the first place to look when a customer reports that chat “does not reach the CAD system”.

Database Sessions is the stored history, filterable by active state, showing the user, CAD system, title, whether the session was remote, and when it was last updated.

Skills /admin/skills

Shared skills list with the add form
Named instructions users can invoke by name in chat.

Shared skills — reusable named instructions. Add one with a name, a category, a scope and the instruction body. Scope Common makes it available to everyone on the platform; Organization limits it to a company. Deleting is immediate and there is no confirmation step, so check the name first. What a skill is and how users invoke one is covered in Skills.

Macros /admin/macros

Shared macros list with the add form
Recorded action sequences shared across the platform or one company.

Shared macros, with a name, description, a target CAD system (or Universal for all of them) and the same Common or Organization scope. The version number increments as a macro is updated. Recording and running macros is covered in Macros.

Also reachable from this portal

The sidebar links across into pages documented elsewhere: AI Provider under Tenant Admin (above), and Chat History, Knowledge, My Memory and RAG Provider under Organization. Those are the organization portal's own pages — see Organization Portal. A website admin opening them falls back to their own membership scope, so for company-wide work use the admin pages instead.

Setting up a new company — the short path

Common mistakes

See also