Webpage Moderation

Submit a webpage for moderation to detect policy, safety, and compliance risks across its text, images, audio, and video content. You can submit a URL to crawl, raw page text, or raw HTML source. The service extracts every component, moderates each one, and returns a consolidated verdict.

Requirements

ItemSpecification
EncodingUTF-8
MethodPOST
Recommended timeout15s

Request

Request URL

ClusterRequest URL
USA (Virginia)http://api-article-fjny.fengkongcloud.com/webpage/v4
Singaporehttp://api-article-xjp.fengkongcloud.com/webpage/v4

Request body is JSON in the HTTP body. The body must not exceed 3.5 MB.

Request Parameters

ParameterTypeRequiredDescription
accessKeystringYesAPI authentication key. The default accessKey is sent in your onboarding email.
appIdstringYesApplication identifier, such as web for your web application or app for your mobile app. The default appId is sent in your onboarding email. Contact DeepCleer if you need a new appId.
eventIdstringYesEvent identifier used to distinguish moderation scenarios in your application. The default eventId is sent in your onboarding email. Contact DeepCleer if you need a new eventId.
imgTypestringYesImage detection types for images on the page. Multiple values can be joined with underscores — for example, POLITY_QRCODE_ADVERT. NONE cannot be combined with any other value. See Image Detection Types.
txtTypestringYesText detection types for text extracted from the page. Multiple values can be joined with underscores — for example, TEXTRISK_FRAUD. Combined types are unioned. NONE cannot be combined with any other value. See Text Detection Types.
audioTypestringNoAudio detection types for audio on the page. Multiple values can be joined with underscores — for example, POLITY_EROTIC_MOAN_ADVERT (recommended). NONE cannot be combined with any other value. See Audio Detection Types.
videoImgTypestringNoDetection types for video frames sampled from page video. Multiple values can be joined with underscores. NONE cannot be combined with any other value. See Image Detection Types.
videoAudioTypestringNoDetection types for the audio track of page video. Multiple values can be joined with underscores. NONE cannot be combined with any other value. See Audio Detection Types.
callbackstringNoCallback HTTP/HTTPS URL. When provided, DeepCleer posts the full moderation result to this endpoint as soon as it becomes available.
articleDoubleJumpConfigjson_objectNoSecond-hop crawl configuration. See articleDoubleJumpConfig Object.
articleScreenShotConfigjson_objectNoScreenshot moderation configuration. See articleScreenShotConfig Object.
articleDynamicConfigjson_objectNoDynamic-page (rendered) moderation configuration. See articleDynamicConfig Object.
datajson_objectYesRequest data content. Max 1 MB. See data Object.

Image Detection Types

Applies to imgType and videoImgType.

ValueDescription
NONEDo not moderate images
POLITYPolitical content
EROTICPornographic and sexually suggestive content
VIOLENTViolence, terrorism, and prohibited content
QRCODEQR code recognition
ADVERTAdvertising recognition
IMGTEXTRISKRisky text inside images. Required if you need to moderate text rendered within an image.
BOCRMinority-language OCR and automatic language detection. Singapore cluster only.

Text Detection Types

Applies to txtType.

ValueDescription
NONEDo not moderate text
POLITYPolitical content
VIOLENTViolence and terrorism
BANProhibited content
EROTICPornographic content
DIRTYProfanity and abusive language
ADVERTAdvertising
PRIVACYPersonally identifiable information
ADLAWAdvertising law violations
MEANINGLESSMeaningless or junk text
FRAUDOnline fraud and scams
UNPOACHHigh-value user poaching attempts
TEXTMINORContent involving minors
TEXTRISKBundled general-risk check. Covers POLITY, VIOLENT, BAN, EROTIC, DIRTY, ADVERT, PRIVACY, ADLAW, and MEANINGLESS. When combined with any of these individual categories, the result is their union — so TEXTRISK_POLITY behaves the same as TEXTRISK alone.

Audio Detection Types

Applies to audioType and videoAudioType.

ValueDescription
NONEDo not moderate audio
AUDIOPOLITICALVoiceprint recognition of top political figures
POLITYPolitical content
EROTICPornographic content
ADVERTAdvertising
ADLAWAdvertising law violations
BANProhibited content
VIOLENTViolence and terrorism
ANTHENNational anthem recognition
MOANMoaning / erotic breathing
DIRTYProfanity and abusive language
BANEDAUDIOProhibited songs
COPYRIGHTSONGSCopyrighted songs

data Object

Provide exactly one of url, text, or contents.

ParameterTypeRequiredDescription
urlstringNoDownloadable URL of the webpage to moderate. The URL's Content-Type header must be text/html. Content size up to 500 MB. Text length defaults to a 500,000-character limit; images default to a 500-image limit. Provide exactly one of url, text, or contents.
textstringNoPlain text of the page to moderate. Up to 500,000 characters. Provide exactly one of url, text, or contents.
contentsstringNoRaw HTML source of the page to moderate. Text length defaults to a 500,000-character limit; images default to a 500-image limit. Provide exactly one of url, text, or contents.
langstringYesLanguage of the page text. Pass en by default. For international traffic when the language is unknown, pass auto to enable automatic language detection. See Supported Languages.
acceptLangstringYesLanguage for returned labels. Set en by default.
returnAllImgintNoImage return level. 0: return only images whose risk level is not PASS. 1: return images of all risk levels. Default 0.
returnAllTextintNoText return level. 0: return only text whose risk level is not PASS. 1: return text of all risk levels. Default 0.
returnAllVideoImgintNoVideo-frame return level. 0: return only frames whose risk level is not PASS. 1: return all frames. Default 0.
returnAllVideoAudiointNoVideo-audio return level. 0: return only segments whose risk level is not PASS. 1: return all segments. Default 0.
returnAllVideointNoVideo return level. 0: return only videos whose risk level is not PASS. 1: return all videos. Default 0.
returnAllAudiointNoAudio-segment return level. 0: return only segments whose risk level is not PASS. 1: return all segments. Default 0.
tokenIdstringYesStable identifier for the end user, typically your internal user UID (an encrypted UID is fine). Used for behavioral-risk signals such as spam and repeat-offender detection. Alphanumeric with underscores and hyphens, up to 64 characters. Use a unique data ID if no user UID exists.
receiveTokenIdstringNotokenId of the message recipient in a one-to-one scenario. Alphanumeric with underscores and hyphens, up to 64 characters.
levelintNoUser tier, used to apply different interception policies per tier. 0: lowest (e.g., newly registered or fully inactive). 1: low (low activity or low level). 2: medium. 3: high (high activity or high level). 4: highest (e.g., paying or VIP users).
genderstringNoUser gender. male or female.
nicknamestringNoThe end user's display name, moderated for risky content.
ipstringNoPublic IP address of the user who submitted the page. Accepts IPv4 or IPv6.
deviceIdstringNoDevice-fingerprint identifier issued by DeepCleer.
dataIdstringNoClient-side identifier attached to the moderation call. DeepCleer echoes it back with the result, letting you correlate your source record with the moderation verdict.
extrajson_objectNoAuxiliary parameters. See extra Object.

extra Object

ParameterTypeRequiredDescription
roomstringNoLive-room or chat-room ID. Strongly recommended when eventId is groupChat; without it, context-aware moderation cannot be applied.
passThroughjsonNoArbitrary pass-through data. The value is echoed back verbatim in the response, unchanged.

articleDoubleJumpConfig Object

ParameterTypeRequiredDescription
isOpenboolNoWhether to enable second-hop crawling. Default off.

articleScreenShotConfig Object

ParameterTypeRequiredDescription
isOpenboolNoWhether to enable screenshot moderation. Default off.
widthintNoScreenshot width. Default 1080.
heightintNoScreenshot height. Default 6480.
timeoutSecondintNoScreenshot timeout, in seconds. Default 30.
userAgentstringNoBrowser User-Agent. Default Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36.

articleDynamicConfig Object

ParameterTypeRequiredDescription
isOpenboolNoWhether to enable dynamic-page (rendered) moderation. Default off.
userAgentstringNoBrowser User-Agent. Default Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36.
cookiestringNoCookie used when rendering the dynamic page. Default empty.

Supported Languages

ValueLanguage
enEnglish
zhChinese
arArabic
hiHindi
esSpanish
frFrench
ruRussian
ptPortuguese
idIndonesian
deGerman
jaJapanese
trTurkish
viVietnamese
itItalian
thThai
tlFilipino
koKorean
msMalay
autoAutomatic detection

Response

Synchronous Response

The call returns the following base response immediately. When a callback URL is provided in the request, the full result is delivered asynchronously to that callback (see Callback Response).

ParameterTypeRequiredDescription
codeintYesResponse code. See Response Codes.
messagestringYesResponse message corresponding to the code.
requestIdstringYesUnique identifier for this request. We strongly recommend logging it on your side for investigation and tuning.

Callback Response

When a callback URL is provided, the full result is posted to it asynchronously.

ℹ️

Parameters other than code, message, and requestId are only guaranteed to be returned when code is 1100.

ParameterTypeRequiredDescription
codeintYesResponse code. See Response Codes.
messagestringYesResponse message corresponding to the code.
requestIdstringYesUnique identifier for this request. We strongly recommend logging it on your side for investigation and tuning.
riskLevelstringYesOverall disposition recommendation. PASS — clean; allow it. REVIEW — suspicious; route to human review. REJECT — violates policy; block it.
textDetailsjson_arrayYesRisk detail for text on the page. See textDetails Array.
imgDetailsjson_arrayYesRisk detail for images on the page. See imgDetails Array.
audioDetailsjson_arrayYesRisk detail for audio on the page. See audioDetails Array.
videoDetailsjson_arrayYesRisk detail for video on the page. See videoDetails Array.
auxInfojson_objectYesAuxiliary information. See auxInfo Object.
resultTypeintYesCurrent result stage. 0: machine moderation. 1: human moderation.
finalResultintYesWhether this is the final result. 1: final (can be used directly for downstream processing; default when only machine moderation is enabled). 0: intermediate (human review will follow).

Response Codes

CodeMessage
1100Success
1901QPS limit exceeded
1902Invalid parameters
1903Service failure
1905Character count exceeded
9100Insufficient balance
9101Unauthorized operation

textDetails Array

Each element describes one moderated text segment from the page.

ParameterTypeRequiredDescription
codeintYesResponse code for this segment. See Response Codes.
messagestringYesResponse message corresponding to the code.
requestIdstringYesUnique identifier for this request.
riskLevelstringYesDisposition recommendation. PASS, REVIEW, or REJECT.
riskLabel1stringYesLevel-1 risk label. Returns normal when riskLevel is PASS.
riskLabel2stringYesLevel-2 risk label. Empty when riskLevel is PASS.
riskLabel3stringYesLevel-3 risk label. Empty when riskLevel is PASS.
riskDescriptionstringYesHuman-readable summary of the detected risk. Returns Normal when riskLevel is PASS.
riskDetailjson_objectYesRisk detail. See riskDetail Object.
tokenLabelsjson_objectYesAccount risk profile label information.
tokenLabels.UGC_account_riskjson_objectNoUGC content risk.
tokenLabels.UGC_account_risk.sexy_risk_tokenidfloatNoPornographic account risk score (0–1).
auxInfojson_objectYesAuxiliary information. See textDetails.auxInfo Object.
allLabelsjson_arrayYesAll matched risk labels and details. See allLabels Array.
businessLabelsjson_arrayYesAll matched business labels and details. See businessLabels Array.
tokenProfileLabelsjson_arrayNoAccount attribute labels. Returned only when tokenId is provided and the label service is enabled. See Token Labels.
tokenRiskLabelsjson_arrayNoAccount risk labels. Returned only when tokenId is provided and the label service is enabled. See Token Labels.
langResultjson_objectNoLanguage information. See langResult Object.

riskDetail Object

Used by textDetails.riskDetail and by every nested riskDetail of the same shape (for example, allLabels[].riskDetail).

ParameterTypeRequiredDescription
matchedListsjson_arrayNoCustom keyword lists that were triggered. Each entry names a list configured in the DeepCleer console and enumerates the matched terms. Returned only when a configured keyword appears.
matchedLists[].namestringNoName of the triggered list, as configured in the DeepCleer console.
matchedLists[].wordsjson_arrayNoMatched terms from this list.
matchedLists[].words[].wordstringNoThe matched term, as it appeared on the list.
matchedLists[].words[].positionint_arrayNoCharacter offsets of the match in the input text.
riskSegmentsjson_arrayNoContiguous high-risk spans of the input. Returned when political, terrorism, prohibited, or advertising-law content is detected.
riskSegments[].segmentstringNoThe high-risk span, extracted verbatim from the input.
riskSegments[].positionint_arrayNoCharacter offsets of the span in the input text.

textDetails.auxInfo Object

ParameterTypeRequiredDescription
filteredTextstringNoText with risky segments replaced by asterisks (*).
passThroughjson_objectNoPass-through field. Same value as data.extra.passThrough in the request.
contactResultjson_arrayNoContact information detection results, including WeChat, QQ, and phone numbers.
contactResult[].contactTypeintNoContact type. 0: phone number. 1: QQ number. 2: WeChat ID.
contactResult[].contactStringstringNoDetected contact information string.
contextTextstringNoReturned when context recognition is enabled.
unauthorizedTypestringNoModeration types that are not enabled. Contact DeepCleer to enable them.

allLabels Array

Each element describes one matched risk label. Used wherever an allLabels array appears in the response.

ParameterTypeRequiredDescription
riskLevelstringYesRisk level: REVIEW or REJECT.
riskLabel1stringYesLevel-1 risk label. Required when allLabels is not empty.
riskLabel2stringYesLevel-2 risk label. Required when allLabels is not empty.
riskLabel3stringYesLevel-3 risk label. Required when allLabels is not empty.
riskDescriptionstringYesRisk description. Required when allLabels is not empty. For reference only; do not build logic on this value.
probabilityfloatYesConfidence score (0–1). Higher values indicate greater confidence. Required when allLabels is not empty.
riskDetailjson_objectYesMapped risk detail, same structure as riskDetail Object. Required when allLabels is not empty.

businessLabels Array

Each element describes one matched business label.

ParameterTypeRequiredDescription
businessLabel1stringYesLevel-1 business label.
businessLabel2stringYesLevel-2 business label.
businessLabel3stringYesLevel-3 business label.
businessDescriptionstringYesBusiness label description.
probabilityfloatYesConfidence score (0–1).
businessDetailjson_objectYesBusiness detail information.

imgDetails Array

Each element describes one moderated image from the page.

ParameterTypeRequiredDescription
requestIdstringYesUnique identifier for this request.
messagestringYesResponse message corresponding to the code.
codeintYesResponse code. 1100 Success, 1901 QPS limit exceeded, 1902 Invalid parameters, 1903 Service failure, 1911 Image download failed.
riskLevelstringYesDisposition recommendation. PASS, REVIEW, or REJECT.
riskLabel1stringYesLevel-1 risk label. Returns normal when riskLevel is PASS.
riskLabel2stringYesLevel-2 risk label. Empty when riskLevel is PASS.
riskLabel3stringYesLevel-3 risk label. Empty when riskLevel is PASS.
riskDescriptionstringYesHuman-readable summary. Returns Normal when riskLevel is PASS.
resultTypeintYesCurrent result stage. 0: machine moderation. 1: human moderation.
finalResultintYesWhether this is the final result. 0: intermediate. 1: final.
auxInfojson_objectYesAuxiliary information. See imgDetails.auxInfo Object.
allLabelsjson_arrayYesAll matched risk labels. Each element has the same structure as allLabels Array, but its riskDetail follows Image riskDetail Object.
businessLabelsjson_arrayNoAll matched business labels. See Image businessLabels Array.
riskDetailjson_objectYesRisk detail. See Image riskDetail Object.
disposaljson_objectNoMapped disposition result. Returned only when a custom label/disposition mapping is configured. See disposal Object.
tokenLabelsjson_objectYesAccount risk profile label information. Returned only when tokenId is provided and the feature is enabled. See imgDetails.tokenLabels Object.
tokenProfileLabelsjson_arrayNoAccount attribute labels. Returned only when tokenId is provided and the label service is enabled. See Token Labels.
tokenRiskLabelsjson_arrayNoAccount risk labels. Returned only when tokenId is provided and the label service is enabled. See Token Labels.

Image riskDetail Object

Used by imgDetails.riskDetail, imgDetails.allLabels[].riskDetail, and disposal.riskDetail (identical structure throughout).

ParameterTypeRequiredDescription
riskSourceintYesRisk source. 1000: no risk. 1001: text risk. 1002: visual image risk.
face_numintNoNumber of faces detected.
person_numintNoNumber of human figures detected.
facesjson_arrayNoRecognized public figures and their positions. Up to 10 entries (highest probability kept if more than 10).
faces[].face_ratiofloatNoFace area ratio (0–1). Higher means a larger face.
faces[].idstringNoPerson ID. The same position across labels shares the same ID; a person appearing n times gets n IDs.
faces[].namestringNoRecognized public-figure name.
faces[].probabilityfloatNoConfidence score (0–1).
faces[].locationint_arrayNoBounding box [x1, y1, x2, y2]: top-left (x1, y1) and bottom-right (x2, y2).
objectsjson_arrayNoDetected logos / objects and their positions.
objects[].idstringNoObject/logo ID. The same position across labels shares the same ID.
objects[].namestringNoObject name.
objects[].probabilityfloatNoConfidence score (0–1).
objects[].qrContentstringNoQR code content. Returned only when a QR-code label is matched.
objects[].locationint_arrayNoBounding box [x1, y1, x2, y2].
ocrTextjson_objectNoOCR text recognized in the image. Present when imgType includes IMGTEXTRISK or ADVERT.
ocrText.textstringNoText recognized in the image.
ocrText.matchedListsjson_arrayNoTriggered custom keyword lists. Returned only when a configured keyword appears.
ocrText.matchedLists[].namestringNoName of the triggered list.
ocrText.matchedLists[].wordsjson_arrayNoMatched terms from this list.
ocrText.matchedLists[].words[].wordstringNoThe matched term.
ocrText.matchedLists[].words[].positionint_arrayNoCharacter offsets of the match.
ocrText.riskSegmentsjson_arrayNoHigh-risk spans in the OCR text.
ocrText.riskSegments[].segmentstringNoThe high-risk span.
ocrText.riskSegments[].positionint_arrayNoCharacter offsets of the span (zero-indexed).
personsjson_arrayNoHuman figures and their positions. Up to 10 entries.
persons[].idstringNoPerson ID. The same person across labels shares the same ID; a person appearing n times gets n IDs.
persons[].person_ratiofloatNoHuman-figure area ratio (0–1).
persons[].probabilityfloatNoConfidence score (0–1).
persons[].locationint_arrayNoBounding box of the human figure.

imgDetails.auxInfo Object

ParameterTypeRequiredDescription
segmentsintYesNumber of segments actually processed.
typeVersionjson_objectYesModel version per detection type. Format X.Y where X is the major version (overall model iteration) and Y is the minor version (routine iteration). Keys: ADVERT, EROTIC, IMGTEXTRISK, POLITY, QRCODE, VIOLENT.
errorCodeintNoError code. 2001: invalid JSON. 2002: invalid parameter field. 2003: image download failed. 2004: image too large (>10 MB). 2005: invalid image format. 2006: invalid detection type.
frameTimeintNoFrame timestamp (13-digit millisecond Unix timestamp). Returned when the streamInfo feature is used.
qrContentstringNoQR code content recognized in the image.
streamIdstringNoStream identifier. Returned when stream-related parameters are passed.
passThroughjson_objectNoPass-through field. Same value as data.extra.passThrough in the request.

Image businessLabels Array

ParameterTypeRequiredDescription
businessDescriptionstringYesBusiness label description, formatted as "Level1:Level2:Level3".
businessLabel1stringYesLevel-1 business label.
businessLabel2stringYesLevel-2 business label.
businessLabel3stringYesLevel-3 business label.
probabilityfloatYesConfidence score (0–1).
confidenceLevelintNoConfidence tier (0–2). Higher means greater confidence.
businessDetailjson_objectNoBusiness detail. Same structure as Image riskDetail Object, including faces, objects, persons, plus face_compare_num (face count from imgCompareBase when FACECOMPARE is used).

disposal Object

Returned only when a custom label/disposition mapping is configured.

ParameterTypeRequiredDescription
riskDescriptionstringYesMapped risk description. Normal when riskLevel is PASS.
riskLabel1stringYesMapped level-1 risk label. normal when no custom label is mapped and the mapped riskLevel is PASS.
riskLabel2stringYesMapped level-2 risk label. Empty when no custom label is mapped and the mapped riskLevel is PASS.
riskLabel3stringYesMapped level-3 risk label. Empty when no custom label is mapped and the mapped riskLevel is PASS.
riskLevelstringYesMapped disposition recommendation. Returns the default recommendation when no custom rule matched.
riskDetailjson_objectYesMapped risk detail, same structure as Image riskDetail Object.

imgDetails.tokenLabels Object

ParameterTypeRequiredDescription
UGC_account_riskjson_objectNoUGC content risk.
UGC_account_risk.b_advertise_risk_tokenidintNoAdvertising risk. 0: none detected. 1: advertising risk present.
UGC_account_risk.b_advertise_risk_tokenid_last_tsintNoAdvertising risk timestamp.
UGC_account_risk.b_politics_risk_tokenidintNoPolitical risk. 0: none detected. 1: political risk present.
UGC_account_risk.b_politics_risk_tokenid_last_tsintNoPolitical risk timestamp.
UGC_account_risk.b_sexy_risk_tokenidintNoPornographic risk. 0: none detected. 1: pornographic risk present.
UGC_account_risk.b_sexy_risk_tokenid_last_tsintNoPornographic risk timestamp.
machine_account_riskjson_objectNoBot-control risk.
machine_account_risk.b_machine_control_tokenidintNoBot account. 0: not bot-controlled. 1: bot-controlled.
machine_account_risk.b_machine_control_tokenid_last_tsintNoBot account timestamp.
machine_account_risk.b_offer_wall_tokenidintNoOfferwall account. 0: not an offerwall account. 1: offerwall.
machine_account_risk.b_offer_wall_tokenid_last_tsintNoOfferwall account timestamp.
scene_account_riskjson_objectNoScene-specific account risk (only available in special scenarios such as airlines).
scene_account_risk.i_tout_risk_tokenidintNoAirline seat-blocking account. 0: no. 1: yes.
scene_account_risk.i_tout_risk_tokenid_last_tsintNoAirline seat-blocking timestamp.

audioDetails Array

Each element describes one moderated audio item from the page.

ParameterTypeRequiredDescription
requestIdstringYesUnique identifier for this request.
codeintYesResponse code. 1100 Success, 1101 Processing, 1901 QPS limit exceeded, 1902 Invalid parameters, 1903 Service failure, 1904 Download failed, 1905 Decode failed, 9100 Insufficient balance. Fields other than message/requestId are present only when code is 1100.
messagestringYesResponse message corresponding to the code.
riskLevelstringYesDisposition recommendation. PASS, REVIEW, or REJECT.
audioTextstringYesFull audio transcription.
audioTimeintYesTotal audio duration, in seconds.
audioDetailjson_arrayYesAudio segment details. See audioDetail Array.

audioDetail Array

ParameterTypeRequiredDescription
requestIdstringYesUnique identifier for this audio segment.
audioStarttimefloatYesSegment start time relative to the audio start, in seconds.
audioEndtimefloatYesSegment end time relative to the audio start, in seconds.
audioUrlstringYesSegment URL (MP3).
riskLevelstringYesDisposition recommendation. PASS, REVIEW, or REJECT.
businessLabelsjson_arrayNoMatched business labels. Same structure as businessLabels Array, plus confidenceLevel (0–2).
allLabelsjson_arrayNoMatched risk labels. Same structure as allLabels Array; riskDetail follows Audio riskDetail Object.
riskLabel1stringYesLevel-1 risk label. normal when riskLevel is PASS.
riskLabel2stringYesLevel-2 risk label. Empty when riskLevel is PASS.
riskLabel3stringYesLevel-3 risk label. Empty when riskLevel is PASS.
riskDescriptionstringYesHuman-readable summary. Normal when riskLevel is PASS.
riskDetailjson_objectNoRisk detail. See Audio riskDetail Object.

Audio riskDetail Object

Used by audioDetail.riskDetail and audioDetail.allLabels[].riskDetail.

ParameterTypeRequiredDescription
riskSourceintYesRisk source. 1000: no risk. 1001: text risk. 1003: audio speech risk.
audioTextstringNoAudio transcription result.
matchedListsjson_arrayNoTriggered custom keyword lists. Returned only when a configured keyword appears.
matchedLists[].namestringNoName of the triggered list.
matchedLists[].wordsjson_arrayNoMatched terms from this list.
matchedLists[].words[].wordstringNoThe matched term.
matchedLists[].words[].positionint_arrayNoCharacter offsets of the match.
riskSegmentsjson_arrayNoHigh-risk spans.
riskSegments[].segmentstringNoThe high-risk span.
riskSegments[].positionint_arrayNoCharacter offsets of the span.

videoDetails Array

Each element describes one moderated video from the page.

ParameterTypeRequiredDescription
codeintYesResponse code. 1100 Success, 1901 QPS limit exceeded, 1902 Invalid parameters, 1903 Service failure, 1905 Character count exceeded.
messagestringYesResponse message corresponding to the code.
requestIdstringYesUnique identifier for this request.
riskLevelstringYesDisposition recommendation. PASS, REVIEW, or REJECT.
frameDetailjson_arrayNoFrame risk detail. Returned when there is a risky frame or returnAllVideoImg=1. See frameDetail Array.
audioDetailjson_arrayNoVideo-audio segment detail. Returned when there is a risky segment or returnAllVideoAudio=1. See videoDetails.audioDetail Array.
auxInfojson_objectNoAuxiliary information. Present when code is 1100. See videoDetails.auxInfo Object.
tokenProfileLabelsjson_arrayNoAccount attribute labels. Returned only when the feature is enabled. See Token Labels.
tokenRiskLabelsjson_arrayNoAccount risk labels. Returned only when the feature is enabled. See Token Labels.

frameDetail Array

ParameterTypeRequiredDescription
requestIdstringYesUnique identifier for this request.
imgUrlstringYesSampled frame image URL.
riskDescriptionstringYesRisk description. Normal when riskLevel is PASS. Formatted "Level1:Level2:Level3"; for custom-list matches returns "Custom list matched".
riskLabel1stringYesLevel-1 risk label. normal when riskLevel is PASS.
riskLabel2stringYesLevel-2 risk label. Empty when riskLevel is PASS.
riskLabel3stringYesLevel-3 risk label. Empty when riskLevel is PASS.
riskLevelstringYesDisposition recommendation. PASS, REVIEW, or REJECT.
allLabelsjson_arrayYesMatched risk labels. Same structure as allLabels Array; riskDetail follows Image riskDetail Object.
auxInfojson_objectYesAuxiliary information. See below.
auxInfo.similarityfloatYesSimilarity (0–1) between this frame and the previous frame. The first frame is compared against a pure-black image.
auxInfo.qrContentstringNoQR code content recognized in the frame.
riskDetailjson_objectYesRisk detail. Same structure as Image riskDetail Object.
imgTextstringNoOCR text of the frame. Returned only when ADVERT or IMGTEXTRISK is passed.
timefloatNoFrame time within the video file, in seconds.
businessLabelsjson_arrayNoMatched business labels. Same structure as Image businessLabels Array.

videoDetails.audioDetail Array

ParameterTypeRequiredDescription
requestIdstringYesUnique identifier for this request.
audioUrlstringYesAudio segment URL.
riskDescriptionstringYesRisk description. Normal when riskLevel is PASS. Formatted "Level1:Level2:Level3"; for custom-list matches returns "Custom list matched".
riskLabel1stringYesLevel-1 risk label. normal when riskLevel is PASS.
riskLabel2stringYesLevel-2 risk label. Empty when riskLevel is PASS.
riskLabel3stringYesLevel-3 risk label. Empty when riskLevel is PASS.
riskLevelstringYesDisposition recommendation. PASS, REVIEW, or REJECT.
allLabelsjson_arrayYesMatched risk labels. Same structure as allLabels Array; riskDetail follows Audio riskDetail Object.
audioEndtimefloatNoSegment end time relative to the audio start, in seconds.
audioStarttimefloatNoSegment start time relative to the audio start, in seconds.
audioTextstringNoRecognized text of this segment.
businessLabelsjson_arrayNoMatched business labels. Same structure as businessLabels Array, plus confidenceLevel (0–2).
riskDetailjson_objectNoRisk detail. Same structure as Audio riskDetail Object.

videoDetails.auxInfo Object

ParameterTypeRequiredDescription
audioDurationfloatYesAudio duration of the video in this request, in seconds (billing-aligned). If there is no audio track, this is 0.
frameCountintYesNumber of sampled frames returned. Risk count when returnAllImg=0; full count when returnAllImg=1.
videoDurationfloatYesVideo duration, in seconds.

auxInfo Object

Top-level auxiliary information for the whole page.

ParameterTypeRequiredDescription
textNumintYesNumber of characters in this request (billing-aligned). Includes Chinese characters, letters, punctuation, and spaces.
imgNumintYesNumber of images in this request (billing-aligned). Animated images are sampled into 3 frames; long images are split.
audioNumintYesNumber of audio items in this request (billing-aligned).
videoNumintYesNumber of videos in this request (billing-aligned).
passThroughjson_objectNoPass-through field. Same value as data.extra.passThrough in the request.

Token Labels

Both tokenProfileLabels and tokenRiskLabels share the same structure.

ParameterTypeRequiredDescription
label1stringNoLevel-1 label.
label2stringNoLevel-2 label.
label3stringNoLevel-3 label.
descriptionstringNoLabel description.
timestampintNoLabel timestamp. 13-digit Unix timestamp in milliseconds.

langResult Object

ParameterTypeRequiredDescription
detectedLangstringNoLanguage detection result. Returned when lang is set to auto. Value is a standard language code (e.g., en, ar).
translatedTextstringNoTranslation result. Returned when translationTargetLang is provided.

Examples

Request Example

{
  "accessKey": "YOUR_ACCESS_KEY",
  "appId": "default",
  "eventId": "webpage",
  "imgType": "POLITY_EROTIC_ADVERT",
  "txtType": "TEXTRISK",
  "audioType": "POLITY_EROTIC_ADVERT",
  "videoImgType": "POLITY_EROTIC_ADVERT",
  "videoAudioType": "POLITY_EROTIC_ADVERT",
  "callback": "http://www.example.com/callback",
  "articleDoubleJumpConfig": {
    "isOpen": true
  },
  "articleScreenShotConfig": {
    "isOpen": true,
    "width": 1080,
    "height": 6480,
    "timeoutSecond": 30,
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
  },
  "articleDynamicConfig": {
    "isOpen": true,
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
    "cookie": ""
  },
  "data": {
    "url": "https://www.example.com/page",
    "tokenId": "user_123456",
    "lang": "en",
    "acceptLang": "en",
    "returnAllImg": 0,
    "returnAllText": 0,
    "returnAllVideoImg": 0,
    "returnAllVideoAudio": 0,
    "returnAllVideo": 0,
    "returnAllAudio": 0,
    "level": 2,
    "gender": "male",
    "nickname": "test_user",
    "ip": "123.171.34.3",
    "deviceId": "device_fingerprint_123",
    "dataId": "data_unique_id_001",
    "extra": {
      "room": "room_001",
      "passThrough": {
        "customField": "customValue"
      }
    }
  }
}

Synchronous Response Example

{
  "code": 1100,
  "message": "success",
  "requestId": "xxx"
}

Callback Response Example

{
  "code": 1100,
  "message": "success",
  "requestId": "xxx",
  "riskLevel": "REVIEW",
  "textDetails": [
    {
      "allLabels": [
        {
          "probability": 1,
          "riskDescription": "Politics:Politics:Politics",
          "riskDetail": {
            "matchedLists": [
              {
                "name": "test_list",
                "words": [
                  {
                    "position": [10, 11],
                    "word": "58"
                  }
                ]
              }
            ]
          },
          "riskLabel1": "politics",
          "riskLabel2": "politics",
          "riskLabel3": "politics",
          "riskLevel": "REVIEW"
        }
      ],
      "requestId": "xxx_1",
      "riskDescription": "Politics:Politics:Politics",
      "riskDetail": {
        "matchedLists": [
          {
            "name": "test_list",
            "words": [
              {
                "position": [10, 11, 12],
                "word": "585"
              }
            ]
          }
        ]
      },
      "riskLabel1": "politics",
      "riskLabel2": "politics",
      "riskLabel3": "politics"
    }
  ],
  "imgDetails": [],
  "auxInfo": {
    "imgNum": 4,
    "textNum": 317
  }
}

Result Query API

Use the result query API to actively poll for the final verdict by requestId — for asynchronous queues, callback delivery, or segmented audio/video callbacks. The business fields match the Callback Response.

Request URL

ClusterRequest URL
USA (Virginia)http://api-article-fjny.fengkongcloud.com/query_webpage/v4
Singaporehttp://api-article-xjp.fengkongcloud.com/query_webpage/v4

Request body is JSON in the HTTP body. The body must not exceed 1 MB.

Request Parameters

ParameterTypeRequiredDescription
accessKeystringYesAPI authentication key, same as the moderation API. Provided by DeepCleer.
requestIdsstring_arrayYesList of detection requestId values returned by the webpage moderation API's synchronous response. Up to 20 per call; each up to 128 characters; duplicates are de-duplicated.

Response Parameters

ParameterTypeRequiredDescription
codeintYesResponse code. 1100: success. 1902: the whole request is invalid. 1101 and 1903 do not appear here — they only appear in machineResult.code.
messagestringYesResponse message corresponding to the code.
requestIdstringYesIdentifier of this query request.
contentsjson_arrayYesQuery results, in the same order as the requested requestIds. See below.

contents Array

ParameterTypeRequiredDescription
requestIdstringYesThe detection requestId this entry corresponds to.
machineResultjson_objectYesMachine moderation result. Per-entry code (independent of the top-level code): 1100 final success (business fields as in Callback Response); 1101 no history or still processing (message "Request is processing"); 1902 history data cannot be parsed as valid JSON; 1903 result written as a degraded record because the data was too long (message "Service failure", includes detail).
humanResultjson_objectNoHuman moderation result. Returned when human review occurred.
mergeResultjson_objectNoMerged result. Shows the strategy-merged result first, e.g., riskLevel.

Examples

Request Example

{
  "accessKey": "YOUR_ACCESS_KEY",
  "requestIds": ["xxx_detection_request_id"]
}

Response Example — Processing (machineResult.code is 1101)

{
  "code": 1100,
  "message": "Normal",
  "requestId": "query_req_001",
  "contents": [
    {
      "requestId": "xxx_detection_request_id",
      "machineResult": {
        "code": 1101,
        "message": "Request is processing",
        "requestId": "xxx_detection_request_id"
      },
      "mergeResult": {
        "riskLevel": "xxx"
      }
    }
  ]
}

Response Example — Final Success (machineResult.code is 1100)

{
  "code": 1100,
  "message": "Normal",
  "requestId": "query_req_001",
  "contents": [
    {
      "requestId": "xxx_detection_request_id",
      "machineResult": {
        "code": 1100,
        "message": "Success",
        "requestId": "xxx_detection_request_id",
        "riskLevel": "xxx",
        "textDetails": [],
        "imgDetails": [],
        "audioDetails": [],
        "videoDetails": [],
        "auxInfo": {},
        "resultType": 0,
        "finalResult": 1
      },
      "mergeResult": {
        "riskLevel": "xxx"
      }
    }
  ]
}