Restrict AI Models, Not Just Their Providers

Insulin's AI Model Policy admits providers, and every model a listed provider's connection offers comes with it. To restrict AI models one by one, enforce the rule at the provider: OpenAI projects can, and the Anthropic docs we reviewed show no equivalent for API keys.

Sophia Faria
Sophia Faria
Oct 14, 2026

To restrict AI models is to limit which individual models may serve your prompts, not just which vendors. Insulin’s AI Model Policy enforces the vendor half on every run; the model half has to be enforced at the provider, where OpenAI projects offer a control and the Anthropic documentation reviewed here describes none for API keys.


A security review that approves models rather than vendors ends with a list like Acme’s: two OpenAI models for the support agents, one Claude model for drafting, nothing else. The next question is the practical one: how do we keep every other model out?

In Insulin, the answer comes in two layers. Insulin decides which providers may serve your organization, and holds that on every run. Which of a provider’s models may run is a rule only the provider can hold, on the key you connect, and not every provider offers one. This post maps where each layer stops, and what to do where neither reaches.

Can Insulin restrict AI models, or only providers?

Only providers. The AI Model Policy is the organization setting that decides which AI providers may serve your organization. It sits under Settings → Organization → AI Model Policy, only an org ADMIN can change it, and its Allowed AI integrations list is an allow-list: “AI features may use only the integrations listed here.” An integration missing from a non-empty list fails closed, so no turn reaches an unlisted provider, not even on failover.

Each row admits everything its connection offers, and none narrows to a model:

  • A model provider row, such as OpenAI or Anthropic, admits the models that connection makes available.
  • An open-source model aggregator row, such as OpenRouter or Together AI, admits a catalog that can run to hundreds of models.
  • A Cloudflare Workers AI or DigitalOcean GradientAI row admits that provider’s fixed set of five chat models.
  • The hosted-model (DeepInfra) row admits the Fours-hosted pool. In the AI Model Policy reference’s words, the entry “pins no particular model — it admits the pool, and nothing more.”

Which rows to add, and what the hosted row and the platform-key switch change, is covered in how Insulin’s AI model allowlist decides which vendors see your prompts.

Who picks the model inside an allowed provider?

Several people, plus failover, and no list of models checks any of them. A model-level rule has to cover each place a model is chosen:

  • An agent’s Default model, set by whoever can edit the agent: its Owner, or an ADMIN or EDITOR on it. An org-wide share as EDITOR hands that choice to the whole organization.
  • The built-in Insulin assistant’s model, which each person picks in its model settings, the pencil in the conversation header, from the Fours-hosted models and their own providers’ models.
  • Failover. Each agent “fails over automatically”: if a model call fails, the turn retries on your next connected provider, and the reply names the model that took over.
  • Features with no model picker of their own, which use the organization default: the policy’s top row.

Why Insulin has no per-conversation picker at all is covered in who picks the model, and what happens when it fails.

Where can a model-level rule be enforced?

At the provider, on the credential Insulin uses, and only where the provider offers a control. Insulin enforces which providers serve a run. OpenAI projects can enforce which model IDs a key may call. In the Anthropic documentation reviewed for this post, no workspace or API-key control limits which Claude models a key can call.

ControlWhat it restrictsLimits individual models?Set byWhere it stops
Insulin AI Model PolicyWhich providers AI features may use, failover included; on a non-empty list, an unlisted provider fails closedNo. A row admits every model its connection offersAn org ADMINIt names providers, not models, and not whose key a request runs on
OpenAI project model permissionsWhich model IDs one project may call: allow_list permits only those listed, deny_list blocks those listed and permits the restYesAn OpenAI admin, with an Admin API keyAny request sent with a different credential, a member’s own connection included
Anthropic workspacesEach workspace’s members and API keys, its monthly spend, and its rate limits per modelNo. The reviewed pages describe no model allow-listAn Anthropic organization adminInference hooks list model allowlists as a use, but serve Claude Enterprise conversations, not API access
OpenRouter guardrails, one aggregator’s controlA model allowlist and a provider allowlist, per member or per API keyYesAn OpenRouter organization adminIt “enforces nothing until it is assigned”: to a member, a key or the workspace default
The hosted-model (DeepInfra) rowWhether the Fours-hosted pool may serve at allNo. It “pins no particular model”An org ADMINWhich hosted model serves a given turn

Where a provider offers no model control, its row is all or nothing. List it and accept every model its connection offers, or leave it off. Keep the hosted-model (DeepInfra) row only if every hosted model is on your approved list. As documented on October 14, 2026, those are DeepSeek V4 Pro as the pool’s quality tier and DeepSeek V4 Flash, GLM 5.3 Flash and Gemma 4 31B as its light tier, all from one supplier; which models serve Insulin chat and knowledge bases explains the roster. Keep an aggregator only if its own control, such as OpenRouter’s guardrails, narrows the key you connect.

How do you restrict OpenAI models for Insulin?

Restrict the OpenAI project whose API key you connect. OpenAI project model permissions are a per-project list of model IDs with a mode: allow_list permits only the listed models, and deny_list blocks them while permitting the rest. OpenAI documents setting them through its Admin API or its Terraform provider, both with an Admin API key.

  1. Give Insulin its own OpenAI project. A project is OpenAI’s “workspace for keys, files, and resources,” and the permission covers one project, so a dedicated project keeps Insulin’s list apart from your other workloads.
  2. Choose allow_list, and list the IDs your review approved. A deny list permits any available model nobody thought to list, including ones added later; an allow list refuses them until someone approves them. Each ID “must be visible to the organization,” fine-tuned snapshots included, and removing the Terraform resource “deletes the project’s model-permission configuration.”
  3. Leave room for the rest of Insulin’s work on that key. The list applies to every model the project’s key calls, so if your knowledge bases embed with OpenAI, approve text-embedding-3-small or text-embedding-3-large as well.
  4. Connect a key from that project as the organization’s OpenAI integration under Settings → Integrations, which takes an API key and an optional Organization ID. To swap a key that’s already connected, the docs have you delete the integration and create a new one. Don’t take the card’s Connected as proof the key works: for an API-key integration, the connection check confirms the key is stored, not that OpenAI still accepts it. Step 5’s test is what proves it.
  5. Point each organization agent’s Default model at an approved ID, then test a refusal. Neither OpenAI guide says what a refused request returns, so call a model outside the list with the project’s key and look. In Insulin, a failed call retries on your next connected provider, so a refusal can still end in another listed provider’s answer, with a note naming the model that took over. If that provider’s models aren’t approved either, take its row off the list.

Can you restrict which Claude models Insulin uses?

Only all or nothing. In Insulin, Anthropic is one row: list it, and every Claude model its connection offers is admitted. The Anthropic documentation reviewed for this post describes nothing that narrows that for an API key:

  • Workspaces hold members, API keys and limits. Spend limits cap monthly spending, and rate limits, set with Edit next to a model, cap requests and tokens per minute. Both limit volume; neither is described as a list of allowed models.
  • The Admin API manages “members, workspaces, invites, and API keys.” A key carries its principal, its scope and its expiry, and nothing on the page ties it to particular models.
  • Inference hooks list “model allowlists” among their uses, but they serve Claude Enterprise organizations, and “Platform organizations (API access through the Claude Platform) are out of scope.” An Anthropic API key, which is what Insulin’s organization connection to Anthropic takes, is API access.

So for Claude, a model-level rule is one people keep. Set approved Default models on organization agents, grant EDITOR by name rather than org-wide, and review usage by model. If the rule has to hold whatever people do, the setting that holds it is leaving Anthropic off the list.

Do provider-side restrictions cover members’ own keys?

No. A model restriction holds only for the credential it was set on. The built-in Insulin assistant and Personal agents “add the providers you have connected under Settings → Integrations (bring-your-own-key). They never reach the organization’s keys.” A member’s own Anthropic API key, or their own Claude Code or Codex sign-in, is a different credential from any key you restricted.

The AI Model Policy still applies to those turns, because AI features may use only the integrations on the list, but it names providers, not whose key a request runs on. If the model rule must cover personal connections, write it into your AI policy as a rule people keep, and check it in usage.

How do you check which models actually ran?

Group the Usage panel on Settings → Billing by Model, then by Provider. The usage breakdown answers “Which model was used” and “Which provider served it,” and own-key usage appears too, attributed to the provider whose key was used. A model there that your review never approved points to the layer that let it through: a provider row, a provider’s own control, or a member’s own connection.

Two caveats: the breakdown is re-aggregated every couple of hours, and a reply streamed from Cloudflare Workers AI, DigitalOcean GradientAI or Together AI on your own key may be missing from it.

Frequently asked questions

Can Insulin’s AI Model Policy restrict individual models?

No. The AI Model Policy lists providers, and AI features may use only the integrations on it. Each row admits every model its connection offers, so a rule naming specific models has to be enforced at the provider, where the provider offers a control.

How do we limit which OpenAI models Insulin can use?

Restrict the OpenAI project whose API key you connect. OpenAI’s project model permissions set an allowlist or a denylist of model IDs for one project, through its Admin API or its Terraform provider. Connect a key from that project as your organization’s OpenAI integration, then test it.

Can Anthropic restrict which Claude models an API key can call?

Not in the Anthropic documentation we reviewed. Workspaces cover members, API keys, spend limits and per-model rate limits, with no model allow-list. Inference hooks can enforce one, but they serve Claude Enterprise conversations, and API access through the Claude Platform is out of scope.

Do provider-side model restrictions cover members’ own keys?

No. A restriction holds only for the credential it was set on. Insulin’s built-in assistant and Personal agents use each member’s own connections, never the organization’s keys, so your project’s list doesn’t reach them. The AI Model Policy, which works by provider, still does.

Does the hosted-model (DeepInfra) row pin a hosted model?

No. The row admits the whole Fours-hosted pool and pins no particular model. On a non-empty list, keep it only if every hosted model is approved; leave it off and the hosted models stop being offered.

How can we check which models actually ran?

Open the Usage panel on Settings → Billing and group the period by Model, then by Provider. The breakdown is re-aggregated every couple of hours, and a streamed reply from Cloudflare Workers AI, DigitalOcean GradientAI or Together AI on your own key may be missing.

Takeaways

  • Insulin’s AI Model Policy restricts providers, not models. A listed row admits every model its connection offers, and an unlisted provider fails closed, on failover too.
  • Enforce a model list where the provider offers one. OpenAI project model permissions can allow-list model IDs for the project whose key you connect; test a refusal before you rely on it.
  • Without a provider control, a row is all or nothing. The Anthropic documentation reviewed here describes no model allow-list for API keys, so a Claude-model rule is a review step, or a reason to leave the row off.
  • A provider control stops at its credential. Members’ own connections sit outside it, so check usage by model to see what actually ran.

A model-level rule ends up applied agent by agent, in each Default model and in who holds EDITOR. To see how an Insulin agent gets its model, its connections and its audience, start with AI agents for business workflows.

Sources

Primary sources for the platform rules cited above. Last verified October 14, 2026. Providers change their products, prices and terms without notice — check the source before relying on a detail.

  • Insulin Getting Started — Fours Doc — AI Model Policy: Settings → Organization → AI Model Policy decides which AI providers may serve the organization; AI features may use only the integrations on the Allowed AI integrations list; the top entry is the organization default for any feature with no model picker of its own; an empty list means no restriction; an integration missing from a non-empty list fails closed; the hosted-model (DeepInfra) entry pins no particular model and admits the pool; Settings: only an org ADMIN changes Organization tabs
  • Insulin Agents — Fours Doc — Creating a Custom Agent: the Default model chosen from the models connected providers make available, open-source model aggregators serving large catalogs, Cloudflare Workers AI and DigitalOcean GradientAI offering a fixed set of five chat models each; Sharing Agents: EDITOR edits the default model; Org-Wide Sharing grants EDITOR or USER to everyone; Model Selection: a failed model call retries on the next connected provider, and the built-in assistant and Personal agents add each member's own providers and never reach the organization's keys; Where you set the model: the pencil panel for the built-in assistant, which runs that model first and then fails over; the reply naming the model that took over
  • Insulin What Is Metered — Fours Doc — The Fours-hosted pool running on one supplier and the hosted models it names, read for their names and tiers only: DeepSeek V4 Pro as the quality tier, and DeepSeek V4 Flash, GLM 5.3 Flash and Gemma 4 31B as the light tier; BYOK usage attributed to the provider whose key was used, with a streamed reply from Cloudflare Workers AI, DigitalOcean GradientAI or Together AI possibly missing from the breakdown
  • Insulin Reading Your Usage — Fours Doc — The Usage panel on Settings → Billing grouping a period by Model (which model was used) and by Provider (which provider served it), and the breakdown re-aggregated every couple of hours
  • Insulin Knowledge Bases — Fours Doc — Choosing an embedding model: own-provider embedding models added for each connected provider, OpenAI's being text-embedding-3-small and text-embedding-3-large
  • Integrations — Fours Doc — Connection health: each time Settings → Integrations opens, Fours re-checks the stored credential against the provider, except for integrations connected with an API key, where the check confirms the key is stored but not that the provider still accepts it
  • Integrations OpenAI — Fours Doc — The org-level OpenAI connection uses an OpenAI API key, with an optional Organization ID; editing the API key is not supported, so changing it means deleting the integration and creating a new one; the user-level connection uses Codex
  • Integrations Anthropic — Fours Doc — The org-level Anthropic connection uses an Anthropic API key; at the user level, a personal API key or a Claude Code connection tied to the member's own Anthropic account
  • Model, tool, and data controls with Terraform | OpenAI API — Restrict model access: openai_project_model_permissions applies an allowlist or a list of denied models to one project, allow_list permitting only the models in model_ids and deny_list permitting available models except those; each model ID must be visible to the organization, fine-tuned snapshots included; removing the resource deletes the project's model-permission configuration; the setup uses an Admin API key
  • Admin APIs | OpenAI API — Restrict model access for projects: project model permissions set through the Admin API, allow_list allowing only the listed models and deny_list blocking them while allowing other available models
  • Manage permissions in the OpenAI platform — Key concepts: a project is a workspace for keys, files and resources, and project roles grant access within only that project
  • Workspaces - Claude Platform Docs — Read for a model allow-list and found none: a workspace holds members, service accounts, API keys and resource limits; an API key can be scoped to one workspace; spend limits cap monthly spending, and rate limits, set with Edit next to a model, cap requests and tokens per minute
  • Admin API - Claude Platform Docs — Read for a model allow-list and found none: the Admin API manages the organization's members, workspaces, invites and API keys, and each API key carries its principal, scope and expiry
  • Inference hooks - Claude Platform Docs — Each governed prompt sent to the organization's AI security server for an allow or deny verdict, with model allowlists among the listed uses; available to Claude Enterprise organizations, with Platform organizations (API access through the Claude Platform) out of scope

Browse every post on the Insulin Blog

Stay Updated

New posts, product updates and marketplace strategy are shared on LinkedIn as they publish.

Follow Fours on LinkedIn