Get job status
Retrieve the current status of a moderation job. Jobs are scoped to your client account.
https://api.omnifence.ai/api/v1/job/{id}Requires the job:read scope. Requests without this scope receive a 403 FORBIDDEN response. See
authentication.
The response names the API key that submitted the job in api_key_id, with that key's current name
in api_key_name. Both are null for a job sent from the dashboard, and for any job created before
key attribution shipped. api_key_name is resolved when you read the job, so a key you deleted
resolves to null while api_key_id still identifies it.
A completed text or audio job can carry the optional scores and custom_scores objects: an informational
risk score from 0 to 1 per built-in category (keyed by
its ID without the default_ prefix, for example violence) and per custom category (keyed by
slug). They never change the decision, which
is is_prohibited. They are absent on an image or video job, on a pending or failed job, and on a
completed job that produced no score. A single category key can be missing, so do not require any key.
Request#
Headers#
| Name | Type | Required | Description |
|---|---|---|---|
Authorization |
string | Yes | Your API key as a Bearer token: Bearer YOUR_API_KEY. |
Path parameters#
| Name | Type | Required | Description |
|---|---|---|---|
id |
string (uuid) | Yes |
Responses#
200 OK#
| Field | Type | Always present | Description |
|---|---|---|---|
is_prohibited |
null or boolean | No | True when the content was rejected, false when it passed, null while the job is still pending. |
reason |
string | No | Why the content was rejected. Names the specific policy or custom category that tripped. Present only on a reject. |
nsfw |
boolean | No | Informational label: whether an image/video contains nudity or sexual content. Decoupled from is_prohibited, so NSFW content is not rejected on its own. Present only when the NSFW classifier ran. |
scores |
object | No | Informational risk score per built-in policy category, from 0 (clearly does not match) to 1 (clearly matches), keyed by the category id (for example violence; the same category is default_violence in enabled_categories). The scores do not decide the job: is_prohibited is the decision, and a score can be high on content that passed. Child-safety categories are never scored. Returned for text and audio jobs; image and video jobs do not currently return scores. Present only on a completed job that produced scores; a category without a score is omitted. |
custom_scores |
object | No | The same informational risk scores for your custom categories, keyed by custom category slug. Present only when at least one custom category was scored. |
output_image_url |
string | No | Output image URL for a non-moderation generate job (presigned HTTPS when stored internally). Present only on those jobs once they complete. |
error_code |
string | No | Set when the job failed before reaching a moderation decision. |
job_id |
string (uuid) | Yes | |
batch_id |
string (uuid) | No | The batch this job belongs to. Present only on an item of a POST /moderate/text/batch submit. |
batch_key |
null or string | No | Your key for this item in its batch. Present only with batch_id. |
type |
string | Yes | One of pre, post, chat, text, image, video, audio, generate. |
status |
string | Yes | One of queued, processing, completed, failed. |
api_key_id |
null or string | Yes | Id of the API key the job was submitted with. Null for jobs submitted from a dashboard session, and for jobs created before key attribution shipped. |
api_key_name |
null or string | Yes | Display name of that API key, resolved at read time. Null when the key was never named or has since been deleted. api_key_id still identifies it. |
created_at |
string (date-time) | Yes | |
completed_at |
null or string (date-time) | Yes |
{
"is_prohibited": false,
"reason": "string",
"nsfw": false,
"scores": {},
"custom_scores": {},
"output_image_url": "string",
"error_code": "string",
"job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"batch_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"batch_key": "string",
"type": "pre",
"status": "queued",
"api_key_id": "string",
"api_key_name": "string",
"created_at": "2026-05-19T12:00:00.000Z",
"completed_at": "2026-05-19T12:00:00.000Z"
}