←Back to Insights
Insights•

On-Premises vs Cloud Content Moderation: A Decision Guide

C
CautionLabs Team
Core Contributor
server rack
Photo by kewl · CC BY 2.0 · Source

Content moderation is one of those build-versus-buy decisions that looks settled until someone asks where the text actually goes. If you are weighing on-premises vs cloud content moderation, the useful question is not which option is better — it is which set of constraints you can live with. CautionLabs ships the same moderation capability two ways: a hosted REST API, and a model you run on your own infrastructure.

This guide is for the CTO or platform engineer who has to justify that choice internally, in writing, to people who will ask about data residency, GPU spend, procurement and failure modes.

Two ways to run the same moderation

CautionLabs offers one moderation capability, delivered as two deployment models.

  • Cloud API. A hosted REST endpoint at https://api.cautionlabs.com. You send a POST /moderation request authenticated with a Cloud API key from the dashboard using bearer auth, and you get JSON back.
  • On-premises. A model you run inside your own infrastructure as a container. The first model is Argus 1 (model id argus_1). You call POST /moderate on your own network.

Both return true/false flags across twelve categories — toxic, profanity, hate, harassment, self_harm, adult, violence, drugs, weapons, pii, spam and minor — plus an overall flagged boolean that is true when any category is flagged.

There are no scores, no probabilities and no thresholds to tune. That one fact shapes everything below. Whichever deployment you pick, you are building your own policy layer on top of booleans. There is also no batch endpoint, no webhooks and no documented rate limits.

So the question is not which deployment is "better." It is which one fits your data handling rules, your network topology, your GPU situation and your operations budget.

The decision criteria that actually matter

Five questions decide this in practice. Answer them before you compare anything else.

Data residency and network isolation

Where is the text processed, and does anything leave your network?

With the hosted API, text is sent to https://api.cautionlabs.com over HTTPS. The cloud terms state that your text is not stored. For many teams that is sufficient.

With the container, the model makes no outbound requests and has no telemetry, and air-gapped installs are supported. If your requirement is "no text leaves the VPC" or "no network egress at all," that is the property that matters. Workloads like moderating LLM and chatbot output often force this question early, because both user input and model output can carry regulated data.

Operational burden and GPU availability

Who runs the model at 3 a.m.?

The hosted API removes the question: no GPUs to provision, no image to upgrade, no capacity to plan.

The on-premises container needs GPU infrastructure you own or rent. The On-Premises Guide covers requirements and deploying on RunPod and other GPU clouds, using the private key as the registry password. That path is documented and workable — but it is a deployment you operate.

Cost shape: per-request vs one-time

The two options bill differently, and the shape matters more than the headline number.

  • Cloud: usage-based at $0.40 USD per 1,000 requests. A request covers up to 3,000 characters. Texts of up to 10,000 characters are checked in 3,000-character pieces, one request each.
  • On-premises: a one-time payment of $299 USD per model, with unlimited installs and requests and upgrades to that model included.

One scales with volume. The other is a fixed licence plus whatever the GPU costs you. Neither is automatically cheaper — see the arithmetic below.

Scale, latency and upgrade path

The hosted API absorbs traffic variation for you. There is no documented rate limit to design against and no rate-limit headers to read, so treat capacity as something to validate against your own traffic rather than a published ceiling you can plan to.

On-premises gives you a fixed capacity you choose, and the licence includes upgrades to that model, so new versions are part of the purchase rather than a separate line item.

Key and license management

Two credentials, two purposes, one trap.

  • Cloud API keys come from the dashboard and authenticate POST /moderation.
  • Private keys are created in the dashboard and used as the password when you log in to the CautionLabs registry to download a model image.

The documented trap: a private (on-premises) key does not work with the cloud API. If your environments mix them up, the failure surfaces as a wrong_key_type error — details are in the production debugging reference for the wrong_key_type error.

When the hosted cloud API is the right fit

The hosted API is the right call when text may leave your network for processing and you want moderation running without owning GPU infrastructure. Teams commonly use it to add moderation in an afternoon instead of a sprint. The Cloud API reference documents the full request and response schema, error codes and billing.

Shell
curl https://api.cautionlabs.com/moderation \
  -H "Authorization: Bearer $CAUTIONLABS_CLOUD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "the text you want to check"}'

The response is the twelve booleans plus the overall flag:

JSON
{
  "categories": {
    "toxic": false,
    "profanity": false,
    "hate": false,
    "harassment": false,
    "self_harm": false,
    "adult": false,
    "violence": false,
    "drugs": false,
    "weapons": false,
    "pii": false,
    "spam": false,
    "minor": false
  },
  "flagged": false
}

Cloud is a good fit when:

  • You want moderation in production quickly.
  • Your terms allow bearer-authenticated HTTPS calls to a vendor endpoint, and the documented "text is not stored" handling satisfies your reviewers.
  • Request volume varies and you would rather pay per 1,000 requests than commit to hardware.
  • You do not want to own or operate GPU capacity.

Cloud-side readers evaluating implementation can compare against a concrete Node.js integration tutorial, and the playground runs text through the API in the browser if you want to see the flags before writing any code.

When on-premises is the right fit

Four documented steps:

  1. Buy a model. The first is Argus 1, model id argus_1.
  2. Create a private key in the dashboard.
  3. Log in to the CautionLabs registry with that key as the password (docker login registery.cautionlabs.com), then run the image. The registry checks the license on every download.
  4. Call POST /moderate with {"text": "..."} on your own network.
Shell
curl http://localhost:8000/moderate \
  -H "Content-Type: application/json" \
  -d '{"text": "the text you want to check"}'

You get the same twelve categories and the same overall flagged boolean.

On-premises is a good fit when:

  • Text cannot leave your network, or the environment is air-gapped. No outbound requests and no telemetry are exactly what make air-gapped installs possible.
  • You already run GPU infrastructure, or you are willing to rent it on RunPod and other GPU clouds with the private key as the registry password.
  • You prefer a one-time $299 USD per-model payment with unlimited installs and requests and upgrades to that model included.
  • You accept the operational work of running a container — the on-premises content moderation Docker deployment guide walks through the registry login, image run and local request.

Comparing the cost shape, not just the price

The comparison teams get wrong is treating $0.40 per 1,000 requests and $299 as the same kind of number. They are not.

On the hosted side, cost is a function of request count, and request count is a function of text length. A request covers up to 3,000 characters, and texts of up to 10,000 characters are checked in 3,000-character pieces, one request each. A 10,000-character document is therefore four requests, not one. Chat messages and comments usually sit inside a single piece; long-form documents do not. If your workload is document-heavy, model request volume on characters rather than on "documents."

On the on-premises side, $299 USD is one-time per model, with unlimited installs and requests and upgrades to that model included. The recurring cost is the GPU you run it on — a cost you can price today and that does not move with request count. Current figures for both options are on the pricing page.

Where is the crossover? The documentation does not state a break-even point, and it depends on your infrastructure costs, so run the arithmetic with your own numbers. Two questions do most of the work:

  • How many requests per month do you expect, counting the extra pieces that long texts generate?
  • What would the GPU you need cost per month, all in, and who operates it?

If volume is small or unpredictable, per-request pricing is easy to justify because it has no fixed floor. If volume is large, predictable and long-running, a one-time licence plus owned or rented GPU can be simpler to defend in a budget cycle.

Key types, licensing and the mistakes teams make

Three things to settle before launch:

  • A private (on-premises) key does not work with the cloud API. Keep the two credential types in separate secret stores and name them so nobody has to guess.
  • The registry checks the license on every download. Image pulls are licensed operations rather than anonymous fetches, so account for that in your build and CI pipelines.
  • The on-premises license does not permit distributing the software or its API keys. That constrains how you repackage the image into your own artifacts and how you share environments.

These are boring details until they are launch blockers. A little naming discipline upstream avoids a confusing auth failure later.

What both options deliberately do not do

Whichever model you choose, you are designing around the same boundaries. These are constraints to plan for, not features to configure:

  • No scores, probabilities or confidence values. The response is booleans plus an overall flag. Severity ranking, escalation tiers and human-review routing are your policy layer.
  • No thresholds to tune. There is no setting that makes moderation stricter or looser, and both deployment models behave the same way in this respect.
  • No batch endpoint. One request carries one text. Queues, fan-out and concurrency are yours to build.
  • No webhooks. There is no callback. You poll or you process synchronously.
  • No documented rate limits or rate-limit headers. There is no published ceiling and no header telling you how close you are to one, so do not design retry and backoff around either.

None of this changes between deployment models. Surfacing it in an architecture review is cheaper than discovering it in production.

FAQ

Can I start on the cloud API and move on-premises later?

Both deployment models return the same twelve boolean flags and the same overall flagged value, so the policy layer you write against one response shape applies to the other. The integration surface differs — bearer-authenticated POST /moderation against https://api.cautionlabs.com versus POST /moderate on a host you run — so budget for repointing and revalidating your client.

Does the on-premises container need internet access?

No. The model container makes no outbound requests and has no telemetry, and air-gapped installs are supported. Registry login and image download are the steps that need network access; the running model does not.

Do I need a GPU?

The container runs on GPU infrastructure, and the On-Premises Guide covers requirements plus deployment on RunPod and other GPU clouds, where the private key is used as the registry password. If you do not have GPU capacity and do not want to rent it, the hosted API avoids the question entirely.

Which key goes where?

Cloud API keys from the dashboard authenticate the hosted POST /moderation endpoint. Private keys are created in the dashboard and used as the password for the CautionLabs registry when downloading an on-premises model. One documented rule to remember: a private (on-premises) key does not work with the cloud API.

Making the call

Write down the answers to the five criteria — data residency, operational burden, cost shape, scale and upgrade path, key and licence management — and the deployment choice usually makes itself. If text cannot leave your network, on-premises with Argus 1 is the option that satisfies the requirement. If it can, the hosted API removes GPU and operational work from your roadmap.

Try both paths before you commit. Run text through the playground to see the twelve boolean flags and the overall flagged value, then review the on-premises guide and pricing to decide whether the hosted API or a self-hosted Argus 1 model fits your constraints.

Want more insights?

Stay updated with the latest in moderation and platform safety.

Back to Overview