---
title: "OpenAI Folds omni-moderation-latest Into Generation Calls, Cutting App Complexity"
subtitle: "OpenAI folds content safety signals directly into Responses and Completions, removing the need for a separate moderation call before or after generation."
url: "https://alphasignal.ai/news/openai-folds-omni-moderation-latest-into-generation-calls-cutting-app-complexity"
author: "AlphaSignal Newsroom"
author_url: "https://alphasignal.ai/editorial-team"
company: "OpenAI Developers"
company_url: "https://alphasignal.ai/company/openaidevs"
published: "2026-06-04T19:36:39.000Z"
updated: "2026-06-04T23:05:50.480Z"
type: "News"
topics:
  - "Api"
  - "Security"
subtopics:
  - "Content Moderation"
upvotes: 345
read_time: "5 min"
source_url: "https://developers.openai.com/api/docs/guides/moderation"
comments: 0
---

# OpenAI Folds omni-moderation-latest Into Generation Calls, Cutting App Complexity

> OpenAI folds content safety signals directly into Responses and Completions, removing the need for a separate moderation call before or after generation.

OpenAI is collapsing two API calls into one. Moderation scores can now ride along inside the same request you use for generation through the [Responses API and Completions API](https://developers.openai.com/api/docs/guides/moderation), so applications can decide whether to log, route, review, or block content without making a second round trip to the `/v1/moderations` endpoint.

If you have ever built a production chatbot, you know the dance: send the user message to moderation, wait, then send it to the model, then maybe send the model output back to moderation again. That extra hop adds latency and code complexity. Folding the signal into the generation response removes a step from a flow that nearly every customer-facing LLM app already had to build.

## What actually changed

The moderation classifier itself is not new. What is new is where the output shows up. The same category flags and confidence scores produced by [omni-moderation-latest](https://developers.openai.com/api/docs/models/omni-moderation-latest) are now returned alongside generated content, instead of requiring a dedicated call.

For reference, the moderation response shape includes three useful fields you can branch on in code:

- `flagged`: a boolean telling you whether the model classified the content as potentially harmful
- `categories`: per-category booleans across harassment, hate, illicit, self-harm, sexual, and violence (plus subcategories like `violence/graphic` and `sexual/minors`)
- `category_scores`: floating-point values between 0 and 1 representing the model's confidence level for each category

That score field is the interesting one, because the scores are calibrated, meaning the confidence score is a more realistic reflection of the chances that the content is actually violating a policy, which lets you set your own filtering thresholds with more confidence.

## Why inline beats a separate endpoint

The official tweet frames the workflow plainly: return moderation signals in the same request flow as generation, then decide how your app uses them. That maps cleanly to four patterns most teams already implement by hand:

1. **Logging**: stash scores next to the conversation for later audit and threshold tuning.
2. **Routing**: send borderline content to a stricter model or a different system prompt.
3. **Review**: queue items above a soft threshold for human moderators instead of blocking.
4. **Blocking**: hard-stop responses that cross a hard threshold and return a placeholder.

Thresholds matter here because they are domain dependent. In practice, the thresholds for what constitutes a risk can vary significantly by domain: high-stakes applications such as legal, healthcare, or real-time moderation may treat values as low as 0.1 as actionable, while general content systems may wait until a score crosses 0.7. Having the numbers inline makes it cheaper to log everything and then calibrate on your own traffic later.

## The model underneath

The signals are produced by the omni-moderation family, which OpenAI describes as its most capable moderation model, accepting images as input as well, and free to use. It covers thirteen categories, and OpenAI reports a 42% improvement on multilingual test sets compared to previous versions, which is the main reason most teams have already moved off the legacy text-moderation model.

One caveat worth remembering: image inputs do not cover every category. Categories marked as Text only do not support image inputs. If you send only images without accompanying text to omni-moderation-latest, it will return a score of 0 for these unsupported categories. Image files are capped at 20 MB.

## What it does not solve

Bundling scores into the response is convenient, but it does not change the underlying classifier's blind spots. The cookbook team has long pointed out that custom moderation provides a tailored approach to content filtering, allowing for precise adherence to specific community standards or topics, making it an ideal choice for niche platforms or specialized content, though unlike the general categories covered by the moderation API, it offers a higher degree of control and requires more effort to set up and maintain. If you run a creative writing platform, a clinical app, or a marketplace with bespoke policies, you will still need a custom layer on top.

Two other operational notes are worth pinning down before you wire this into production. First, OpenAI plans to continuously upgrade the moderation endpoint's underlying model, so custom policies that rely on category\_scores may need recalibration over time. Second, moderation is a signal, not a workflow. As the eesel team puts it bluntly, the OpenAI Moderation API is excellent for identifying harmful content but primarily flags issues without providing workflow logic, so for a complete moderation system that automates responses or escalations, it typically needs to be integrated with additional custom-built solutions.

## Who should care

If your app already calls `/v1/moderations` twice per turn, this is a free latency and code cleanup. If it does not, this is a nudge to start logging the scores anyway. The scores are free, they come back in the response you were already going to make, and they give you a calibrated signal you can threshold against later when you have real traffic data to work with.

## Sources

- [X post by @openaidevs](https://x.com/openaidevs/status/2062619558440267801)
- [Moderation | OpenAI API](https://developers.openai.com/api/docs/guides/moderation)
- [omni-moderation Model | OpenAI API](https://developers.openai.com/api/docs/models/omni-moderation-latest)
- [Create moderation | OpenAI API Reference](https://developers.openai.com/api/reference/resources/moderations/methods/create)
- [How to use the moderation API](https://developers.openai.com/cookbook/examples/how_to_use_moderation)
- [A complete guide to the OpenAI Moderation API](https://www.eesel.ai/blog/openai-moderation-api)
