Webpage Moderation

Submit webpages for content moderation to detect text, image, and video risks within web pages.

Submit webpages for content moderation to detect regulatory risks in text, images, and videos within web pages.

Synchronous API

Request URL

ClusterURL
Beijinghttp://api-article-bj.fengkongcloud.com/v1/saas/anti_fraud/article
Virginiahttp://api-article-fjny.fengkongcloud.com/v1/saas/anti_fraud/article
Singaporehttp://api-article-xjp.fengkongcloud.com/v1/saas/anti_fraud/article

Requirements

ItemSpecification
EncodingUTF-8
MethodPOST
Recommended timeout15s
Body formatJSON (max 3.5 MB)

Request Parameters

Placed in the HTTP Body in JSON format.

ParameterTypeRequiredDescription
accessKeystringYesAPI authentication key, provided by ISHUMEI.
typestringNoPlatform business type. See Business Types.
imgTypestringNoImage detection types within the webpage. See Image Detection Types. If not provided, defaults to political, pornographic, and advertising detection. Note: POLITICS is equivalent to PERSON (political face detection) + VIOLENCE (terrorism detection).
txtTypestringNoText detection types within the webpage. See Text Detection Types. If not provided, defaults to standard risk detection.
videoImgTypestringNoDetection types for video frame captures within the webpage. Required when moderating videos. See Video Image Detection Types.
videoAudioTypestringNoDetection types for audio within videos on the webpage. See Video Audio Detection Types. Video audio-only moderation is not supported.
appIdstringNoApplication identifier. Used to distinguish different applications within the same company. The value should be agreed upon with ISHUMEI.
callbackstringNoCallback HTTP URL. When non-empty, the service sends moderation results to this URL. Required when fileFormat is provided.
callbackParamjson_objectNoPass-through field. When callback is provided, this field is returned along with the moderation result in the callback request.
articleDoubleJumpConfigjson_objectNoDouble-jump webpage moderation configuration. See articleDoubleJumpConfig.
articleScreenShotConfigjson_objectNoWebpage screenshot moderation configuration. See articleScreenShotConfig.
datajson_objectYesRequest data content. Max 1 MB. See data Object.

Business Types

ValueDescription
ZHIBOLive streaming
ECOME-commerce
GAMEGaming
NEWSNews
FORUMForum
SOCIALSocial media
NOVELNovel / Fiction

Image Detection Types

Combine multiple types with underscores (e.g., POLITICS_PORN_AD).

ValueDescription
POLITICSPolitical content detection (equivalent to PERSON + VIOLENCE)
PORNPornographic content detection
ADAdvertising detection
LOGOWatermark / logo detection
BEHAVIORInappropriate scene detection (smoking, drinking, gambling, drug use, condoms, meaningless frames)
OCROCR text recognition in images
VIOLENCEViolence & terrorism detection
NONEDo not detect images

Text Detection Types

Combine multiple types with underscores (e.g., TEXTRISK_FRAUD). Combined types take the union of detection capabilities.

ValueDescription
POLITYPolitical content detection
VIOLENTViolence & terrorism detection
BANProhibited content detection
EROTICPornographic content detection
DIRTYAbusive language detection
ADVERTAdvertising detection
PRIVACYPrivacy information detection
ADLAWAdvertising law violation detection
MEANINGLESSMeaningless content detection
FRAUDOnline fraud detection
UNPOACHHigh-value user anti-poaching detection
TEXTMINORMinor-related content detection
TEXTRISKStandard risk detection (includes: political, terrorism, prohibited, pornographic, abusive, advertising, privacy, advertising law, meaningless)

Video Image Detection Types

Combine multiple types with underscores (e.g., POLITICS_PORN_AD). Required when moderating video content.

ValueDescription
POLITICSPolitical content detection (actually detects political figures and terrorism)
PERSONPolitical figure detection
VIOLENCEViolence & terrorism detection
PORNPornographic & sexually suggestive content detection
ADAdvertising detection
QRQR code detection
OCRImage text violation detection
BEHAVIORInappropriate scene detection (smoking, drinking, gambling, drug use, condoms, meaningless frames)

Video Audio Detection Types

Combine multiple types with underscores (e.g., POLITICS_PORN_MOAN).

ValueDescription
POLITICSPolitical content detection
PORNPornographic content detection
ADAdvertising detection
MOANMoaning detection
ABUSEAbusive language detection
ANTHENNational anthem detection
AUDIOPOLITICALAudio political content detection
NONEDo not detect audio

articleDoubleJumpConfig Object

ParameterTypeRequiredDescription
isOpenboolNoWhether to enable double-jump webpage moderation. Default: disabled.

articleScreenShotConfig Object

ParameterTypeRequiredDescription
isOpenboolNoWhether to enable webpage screenshot moderation. Default: disabled.
widthintNoScreenshot width. Default: 1080.
heightintNoScreenshot height. Default: 6480.

data Object

ParameterTypeRequiredDescription
urlstringNoWebpage URL to be moderated. The URL must be downloadable and its content-type header must be text/html. Max content size: 500 MB. Text length limit: 500,000 characters. Image limit: 500 images. Video limit: 50 segments. Either url or text is required.
textstringNoWebpage text content to be moderated. Plain text content moderation. Text length limit: 500,000 characters. Either url or text is required.
tokenIdstringYesUnique client user account identifier for user behavior analysis. For webpage detection scenarios, pass the webpage URL.
channelstringNoBusiness scenario. Configured via channel table.
returnHtmlboolNoWhether to return HTML with highlighted risk content for human review. Default: false.
nicknamestringNoUser nickname. Strongly recommended — malicious users on most platforms spread spam, political violations, and traffic-diversion content through nicknames.
ipstringNoClient IP address for IP-based user behavior analysis and comparison against the ISHUMEI IP blocklist.
detectFrequencyfloatNoFrame capture interval for videos within the webpage (0.5–60 seconds). Default: 5 seconds.
passThroughjson_objectNoPass-through parameter, returned as-is in the response.

Response

Synchronous Response Parameters

ParameterTypeRequiredDescription
codeintYesResponse code. See Response Codes.
messagestringYesResponse message corresponding to the code.
requestIdstringYesUnique request identifier. Strongly recommended to save for troubleshooting and optimization.
scoreintNoRisk score. Present when code is 1100. Range: 0–1000. Higher scores indicate greater risk.
riskLevelstringNoDisposition recommendation. PASS: normal (allow), REVIEW: suspicious (manual review), REJECT: violation (block).
detailjson_objectNoRisk details. See detail Object.
statusintYesService timeout indicator. 0: normal. 501: timeout.
auxInfojson_objectYesAuxiliary information. See auxInfo Object.
callbackParamjson_objectNoPass-through field returned as-is.
resultTypeint32YesResult type. 0: machine moderation. 1: human moderation.
finalResultint32YesWhether this is the final moderation result. 0: not final (machine result; human review pending). 1: final result (can be used directly). Defaults to 1 if only machine moderation is configured.

Response Codes

CodeMessage
1100Success
1901QPS limit exceeded
1902Invalid parameters
1903Service failure
9101Unauthorized operation

Callback Mode

If callback is specified in the request parameters, the system automatically pushes machine moderation results to the specified URL. The callback response structure is the same as the synchronous response. When the HTTP status code 200 is returned, the push is considered successful; otherwise, the system retries up to 8 times.

Callback Response Codes

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

detail Object

ParameterTypeRequiredDescription
modelstringYesRule identifier.
descriptionstringYesRisk reason description for the policy rule.
descriptionV2stringNoNew version risk reason description. Only returned for new policies during the transition period.
riskSummaryjson_objectNoRisk summary with counts of each risk type. Returned only when type is NOVEL. See riskSummary.
riskDetailjson_arrayNoRisk details for each content segment. Returned only when type is NOVEL. When returnHtml is true, only REJECT and REVIEW segments are returned. When false, all segments are returned. See riskDetail Array.
riskHtmlstringNoHTML with risk content highlighted, embeddable in display pages. Returned only when type is NOVEL and returnHtml is true.
hitsjson_arrayNoWebpage hit information. Generally empty — hit details are in riskDetail.
passThroughjson_objectNoPass-through parameter returned as-is.
doubleJumpDetailsjson_arrayNoReturned when double-jump webpage moderation is enabled. See doubleJumpDetails.

doubleJumpDetails Array

Each element represents a double-jump URL and its risk details:

ParameterTypeRequiredDescription
urlstringYesDouble-jump URL link.
modelstringYesRule identifier.
descriptionstringYesRisk reason description for the policy rule.
descriptionV2stringNoNew version risk reason description. Only returned for new policies during the transition period.
riskSummaryjson_objectNoRisk summary. Returned only when type is NOVEL. See riskSummary.
riskDetailjson_arrayNoRisk details for each content segment. See riskDetail Array.
riskHtmlstringNoHTML with risk content highlighted.
hitsjson_arrayNoHit information. Generally empty.
passThroughjson_objectNoPass-through parameter returned as-is.

riskSummary Object

Each key is a risk type code, and the value is the occurrence count.

Risk TypeDescription
0Normal
100Political content
200Pornographic content
210Abusive language
250Moaning
300Advertising
400Spam / flooding
500Meaningless content
600Prohibited content
700Blocklist
710Allowlist
800High-risk account
900Custom

riskDetail Array

Each element represents a content segment with risk details:

ParameterTypeRequiredDescription
typestringYesContent segment type. text: text, img: image, video: video.
contentstringYesContent of the segment. Text content for text type; image URL for img type.
videoImgDetailjson_arrayNoVideo frame capture details. Returned when type is video and video frame moderation is active. See videoImgDetail.
videoAudioDetailjson_arrayNoVideo audio details. Returned when type is video and audio moderation is active. See videoAudioDetail.
beginPositionintNoStart position of the segment in the input (0-indexed). Not returned when type is img.
endPositionintNoEnd position of the segment in the input (0-indexed). Not returned when type is img.
descriptionstringYesRisk description. Contains all matched sensitive words from the corresponding list.
riskLevelstringYesDisposition recommendation. PASS, REVIEW, or REJECT.
riskTypeintYes (text/img)Risk type identifier. Required for text and image types; optional for video type. See Text Risk Types and Image Risk Types.
riskTypeDecstringNoDescription corresponding to riskType.
modelstringNoRule identifier for the matched policy rule.
matchedListstringNoName of the sensitive word list that was hit. Only present when a sensitive word is matched.
matchedItemstringNoThe specific sensitive word that was matched.
matchedFieldstringNoIndicates what was matched. text: text hit. nickname: nickname hit.
matchedDetailjson_arrayNoMatched list details. See matchedDetail.
indexintYesIndex of the current segment (does not distinguish between text and images).
keywordsPositionstringNoPosition of the matched sensitive word within this segment.
textstringNoOCR content from an image segment. Returned when OCR content is recognized.

Text Risk Types

CodeDescription
0Normal
100Political content
200Pornographic content
210Abusive language
300Advertising
400Spam / flooding
500Meaningless content
600Prohibited content
700Blocklist
710Allowlist
800High-risk account
900Custom

Image Risk Types

CodeDescription
0Normal
100Political content
200Pornographic content
210Sexually suggestive
300Advertising
310QR code
320Watermark
400Violence & terrorism
500Violation
510Inappropriate scene
520Minor
700Blocklist
710Allowlist
800High-risk account
900Custom

videoImgDetail Array

Each element represents a video frame capture:

ParameterTypeRequiredDescription
timefloatYesPosition of the frame in the video (in seconds, relative to the video file).
riskLevelstringYesDisposition recommendation. PASS, REVIEW, or REJECT.
imgTextstringNoOCR text content of the frame. Returned when detection types include OCR.
riskTypeintYesFrame image risk type. See Video Frame Risk Types.
matchedListstringNoName of the sensitive word list that was hit.
matchedItemstringNoThe specific sensitive word that was matched.
riskSourceintYesRisk source: 1000 (no risk), 1001 (text risk), 1002 (visual image risk).

Video Frame Risk Types

CodeDescription
0Normal
100Political content
200Pornographic content
210Sexually suggestive
300Advertising
310QR code
320Watermark
400Violence & terrorism
500Violation
510Inappropriate scene
700Blocklist
710Allowlist
800High-risk account
900Custom

videoAudioDetail Array

Each element represents a video audio segment:

ParameterTypeRequiredDescription
audio_starttimefloatNoAudio segment start time.
audio_endtimefloatNoAudio segment end time.
riskLevelstringYesDisposition recommendation. PASS, REVIEW, or REJECT.
audioTextstringNoSpeech-to-text content of the audio segment.
riskTypeintYesAudio risk type. See Video Audio Risk Types.
audio_matchedItemstringNoMatched sensitive word in the audio. Only present when a sensitive word is matched.
riskSourceintYesRisk source: 1000 (no risk), 1001 (text risk), 1003 (voice risk).

Video Audio Risk Types

CodeDescription
0Normal
100Political content / national anthem
110Violence & terrorism
200Pornographic content
210Abusive language
250Moaning
260Top leader voiceprint
300Advertising
400Spam / flooding
500Meaningless content
600Prohibited content
700Other
720Blocked account
730Blocked IP
800High-risk account
900Custom

matchedDetail Array

ParameterTypeRequiredDescription
listIdstringYesList identifier.
matchedFiledstring_arrayNoIndicates whether text or nickname hit the sensitive word. text: text hit. nickname: nickname hit.
namestringYesName of the sensitive word list that was hit.
organizationstringNoCompany identifier of the matched list. GLOBAL indicates a global list.
wordsstring_arrayNoAll matched sensitive words from the corresponding list.
wordPositionsjson_arrayNoAll matched sensitive words with positions. See wordPositions.

wordPositions

ParameterTypeRequiredDescription
wordstringNoThe matched sensitive word.
positionstringNoPosition of the sensitive word.

auxInfo Object

ParameterTypeRequiredDescription
textNumintYesNumber of characters in the current request (matches billing count). Includes Chinese characters, English letters, punctuation, and spaces.
imgNumintYesNumber of images in the current request (matches billing count). Animated images are split into 3 frames; long images are segmented.
videoNumintYesNumber of videos in the current request. Legacy compatibility field — not recommended for use.
billingImgNumintYesNumber of video frame captures in the current request (matches billing count).
billingAudioDurationintYesAudio duration (in seconds) within videos in the current request (matches billing count). If the audio track duration differs from the video duration, billing is based on the actual audio track duration.

Examples

Synchronous Mode

Request Example:

{
  "accessKey": "YOUR_ACCESS_KEY",
  "type": "NOVEL",
  "appId": "your_app_id",
  "data": {
    "tokenId": "user_token_id",
    "url": "https://example.com/page",
    "returnHtml": true
  }
}

Response Example:

{
  "code": 1100,
  "message": "Success",
  "requestId": "918123911b23cf4077119dd58c8edf91",
  "score": 700,
  "riskLevel": "REJECT",
  "detail": {
    "description": "Image violation",
    "hits": [],
    "model": "M04301",
    "riskDetail": [
      {
        "beginPosition": 1235,
        "content": "Sample text containing contact information...",
        "description": "Contains contact information",
        "endPosition": 1264,
        "index": 287,
        "model": "",
        "riskLevel": "REJECT",
        "riskType": 300,
        "type": "text"
      },
      {
        "content": "http://example.com/image.png",
        "description": "QR code",
        "index": 281,
        "model": "",
        "riskLevel": "REJECT",
        "riskType": 300,
        "type": "image"
      }
    ],
    "riskHtml": "...",
    "riskSummary": {
      "300": 5
    }
  },
  "status": 0,
  "auxInfo": {
    "textNum": "100",
    "imgNum": "10"
  }
}

Callback Mode

Request Example:

{
  "accessKey": "YOUR_ACCESS_KEY",
  "type": "NOVEL",
  "appId": "your_app_id",
  "callback": "http://www.example.com/callback",
  "callbackParam": {
    "callbackId": "Id123"
  },
  "data": {
    "tokenId": "user_token_id",
    "url": "https://example.com/page",
    "returnHtml": true
  }
}

Initial Response:

{
  "code": 1100,
  "message": "Success",
  "requestId": "xxxxxxxxxxxxxxxxxx",
  "score": 0,
  "riskLevel": "PASS",
  "detail": {
    "description": "Normal",
    "model": "M1000",
    "riskType": 0
  },
  "status": 0
}

Callback Result:

{
  "code": 1100,
  "message": "Success",
  "requestId": "xxxxxxxxxxxxxxxxxx",
  "score": 700,
  "riskLevel": "REJECT",
  "callbackParam": {
    "callbackId": "Id123"
  },
  "detail": {
    "description": "Image violation",
    "hits": [],
    "model": "M04301",
    "riskDetail": [
      {
        "beginPosition": 1235,
        "content": "Sample text containing contact information...",
        "description": "Contains contact information",
        "endPosition": 1264,
        "index": 287,
        "model": "",
        "riskLevel": "REJECT",
        "riskType": 300,
        "type": "text"
      },
      {
        "content": "http://example.com/image.png",
        "description": "QR code",
        "index": 281,
        "model": "",
        "riskLevel": "REJECT",
        "riskType": 300,
        "type": "image"
      }
    ],
    "riskHtml": "...",
    "riskSummary": {
      "300": 5
    }
  },
  "status": 0,
  "auxInfo": {
    "textNum": "100",
    "imgNum": "10"
  }
}

Async API

Submit webpages for asynchronous moderation. Use the Result Query API to retrieve results.

Request URL

ClusterURLSupported Products
Beijinghttp://api-article-bj.fengkongcloud.com/v1/saas/anti_fraud/article_asyncWebpage Moderation

Requirements

ItemSpecification
EncodingUTF-8
MethodPOST
Recommended timeout5s
Body formatJSON (max 3.5 MB)

Request Parameters

Placed in the HTTP Body in JSON format.

ParameterTypeRequiredDescription
accessKeystringYesAPI authentication key, provided by ISHUMEI.
typestringNoPlatform business type. See Business Types.
imgTypestringNoImage detection types within the webpage. See Image Detection Types.
txtTypestringNoText detection types within the webpage. See Text Detection Types. If not provided, defaults to standard risk detection.
appIdstringNoApplication identifier. The value should be agreed upon with ISHUMEI.
articleScreenShotConfigjson_objectNoWebpage screenshot moderation configuration. See articleScreenShotConfig.
articleDoubleJumpConfigjson_objectNoDouble-jump webpage moderation configuration. See articleDoubleJumpConfig.
datajson_objectYesRequest data content. Max 1 MB. Same structure as the synchronous API data Object.

Response Parameters

ParameterTypeRequiredDescription
codeintYesResponse code. See Callback Response Codes.
messagestringYesResponse message corresponding to the code.
requestIdstringYesUnique request identifier. Strongly recommended to save.

Examples

Request Example

{
  "accessKey": "YOUR_ACCESS_KEY",
  "type": "NOVEL",
  "txtType": "",
  "imgType": "",
  "appId": "your_app_id",
  "data": {
    "channel": "",
    "contents": "<div>Sample webpage content with embedded images<img src=\"http://example.com/image.jpg\" alt=\"Image\"></div>",
    "returnHtml": true,
    "itemId": "CHAPTER_CONTENT_0",
    "tokenId": "49930319"
  }
}

Response Example

{
  "code": 1100,
  "message": "Success",
  "requestId": "tye7ert12asdfasdf31236444442333312"
}

Result Query API

Query both machine moderation and human moderation results.

Request URL

ClusterURLSupported Products
Beijinghttp://api-article-bj.fengkongcloud.com/v1/saas/anti_fraud/article/queryWebpage Moderation

Requirements

ItemSpecification
EncodingUTF-8
MethodPOST
Recommended timeout1s

Request Parameters

Placed in the HTTP Body in JSON format.

ParameterTypeRequiredDescription
accessKeystringYesAPI authentication key, provided by ISHUMEI.
requestIdsarrayYesArray of requestId strings returned by ISHUMEI. Maximum of 10 items.

Response Parameters

ParameterTypeRequiredDescription
codeintYesResponse code.
messagestringYesResponse message.
requestIdstringNoUnique request identifier. Returned when code is not 1100.
contentsjson_arrayNoQuery results. Returned when code is 1100. See contents Array.

contents Array

Each element represents a query result:

ParameterTypeRequiredDescription
requestIdstringYesMachine moderation request identifier.
humanResultjson_objectNoHuman moderation result. Only present after human review is completed.
machineResultjson_objectNoMachine moderation result. Only present after machine moderation is completed. Uses the same structure as the Synchronous Response Parameters.
mergeResultjson_objectNoMerged human and machine moderation result. Returns human result if available; otherwise returns machine result. If neither exists, this field is not present.

humanResult / mergeResult Structure

ParameterTypeRequiredDescription
riskLevelstringYesDisposition recommendation. REJECT: delete. PASS: publish.

Examples

Request Example

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

Response Example

{
  "code": 1100,
  "message": "Success",
  "contents": [
    {
      "requestId": "tye7ert12asdfasdf31236633346662333312",
      "machineResult": {
        "code": 1100,
        "detail": {
          "description": "Text violation",
          "hits": [
            {
              "description": "Advertising: Advertising: Advertising",
              "descriptionV2": "Advertising: Advertising: Advertising",
              "model": "MA000007020001001",
              "riskLevel": "REJECT",
              "riskType": 300,
              "score": 650,
              "type": "text"
            }
          ],
          "model": "M03101",
          "riskDetail": [
            {
              "beginPosition": 0,
              "content": "Sample text with detected risk content...",
              "description": "Advertising: Advertising: Advertising",
              "endPosition": 36,
              "index": 0,
              "keywordsPosition": "8",
              "matchedDetail": [
                {
                  "listId": "9da189a5bf1919d242d745f19ea3e5d7",
                  "matchedFiled": ["text"],
                  "name": "Original text list",
                  "organization": "12312312",
                  "wordPositions": [
                    {
                      "position": "8",
                      "word": "keyword"
                    }
                  ],
                  "words": ["keyword"]
                },
                {
                  "listId": "d75d056d88702cbf6198e2aa82eb0fdc",
                  "matchedFiled": ["text"],
                  "name": "Political: State institution: Military",
                  "organization": "GLOBAL",
                  "wordPositions": [
                    {
                      "position": "13,14,15",
                      "word": "sensitive_term"
                    }
                  ],
                  "words": ["sensitive_term"]
                }
              ],
              "matchedItem": "keyword",
              "matchedList": "Original text list",
              "model": "MA000007020001001",
              "riskLevel": "REJECT",
              "riskType": 300,
              "type": "text"
            }
          ],
          "riskHtml": "...",
          "riskSummary": {
            "300": 1
          }
        },
        "message": "Success",
        "requestId": "tye7ert12asdfasdf31236633346662333312",
        "riskLevel": "REJECT",
        "score": 700,
        "auxInfo": {
          "textNum": "100",
          "imgNum": "10"
        }
      },
      "mergeResult": {
        "riskLevel": "REJECT"
      }
    }
  ]
}