Nudity Detection

Models / Text / Weapon Detection

Weapon Detection in Text


Weapon Detection is an optional capability that is made available as part of Sightengine's Text Moderation APIs. This capability is useful to detect if user-generated texts (comments, messages, posts, reviews, usernames, etc.) contain words related to weapons.

Other categories are also available through the Text Moderation API, for instance Extremism Detection, Drug Detection and Medical Drug Detection.

If you have images or videos, you might also want to use the Weapon Detection API for Visual content, to detect firearms and threatening knives in user photos and videos.

Detected Weapons

Detected text items are common names referring to weapons but also proper names like brands selling weapons or weapon models.

Here are a few examples of the names of weapons that are detected:

Type of wordsExamples

common nouns

handgun, rifle, carabin...


AK-47, HK33, PT 1911...


Imbel, Colt, Kalashnikov...

Detection strength and language support

The API is a lot stronger than simple word-based filters. It catches not only exact weapon-related terms but also all kinds of variations (millions of them) that might be used to evade filtering while smartly ignoring false positives.

Here are a few examples of the types of obfuscations that will be caught (not exhaustive):




c_ o - -l*t

Obfuscation and Special characters


Spelling mistakes and phonetic variations


Leet speak


Smart embeddings

usemyrifle but not trifle

Language support

The Weapon category can be activated for all languages supported by the Text Moderation API. For most languages, detection will focus on international names of weapons that are known worldwide, and additional language-specific words and expressions are added for English.

How to use this

The Weapon Category can be activated as part of Standard Text Moderation and Username Moderation. To activate this category, you need to add an extra request parameter named categories. This parameter is a comma-separated list of categories you want to activate. For weapon detection, its value would be weapon

Code example

Let's say you want to detect references to weapons in the following text item:

bringing my ka|@Sɧᾑikø\/

Simply send a POST request containing the UTF-8 formatted text along with the comma separated list of categories you want to detect and the ISO 639-1 language code (such as en for english). Here is an example:

curl -X POST '' \
  -F 'text=bringing my ka|@Sɧᾑikø\/' \
  -F 'lang=en' \
  -F 'categories=weapon' \
  -F 'mode=rules' \
  -F 'api_user={api_user}' \
  -F 'api_secret={api_secret}'

# this example uses requests
import requests
import json

data = {
  'text': 'bringing my ka|@Sɧᾑikø\/',
  'mode': 'rules',
  'lang': 'en',
  'categories': 'weapon',
  'api_user': '{api_user}',
  'api_secret': '{api_secret}'
r ='', data=data)

output = json.loads(r.text)

$params = array(
  'text' => 'bringing my ka|@Sɧᾑikø\/',
  'lang' => 'en',
  'categories' => 'weapon',
  'mode' => 'rules',
  'api_user' => '{api_user}',
  'api_secret' => '{api_secret}',

// this example uses cURL
$ch = curl_init('');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$response = curl_exec($ch);

$output = json_decode($response, true);

// this example uses axios and form-data
const axios = require('axios');
const FormData = require('form-data');

data = new FormData();
data.append('text', 'bringing my ka|@Sɧᾑikø\/');
data.append('lang', 'en');
data.append('categories', 'weapon');
data.append('mode', 'rules');
data.append('api_user', '{api_user}');
data.append('api_secret', '{api_secret}');

  url: '',
  data: data,
  headers: data.getHeaders()
.then(function (response) {
  // on success: handle response
.catch(function (error) {
  // handle error
  if (error.response) console.log(;
  else console.log(error.message);

See request parameter description

textstringUTF-8 encoded text to moderate
modestringcomma-separated list of modes. Modes are rules for the rule-based model or ml for ML models
categoriesstringcomma-separated list of categories to check. Possible values: profanity, personal, link, drug, weapon, violence, self-harm, medical, extremism, spam, content-trade, money-transaction (optional)
langstringcomma-separated list of target languages
opt_countriesstringcomma-separated list of target countries for phone number detection (optional)
liststringid of a custom list to be used for rule-based moderation (optional)
api_userstringyour API user id
api_secretstringyour API secret

The JSON response contains a description of profanities with positions within the text string.

    "status": "success",
    "request": {
        "id": "req_c2mc7oJALbqQ1zbOeCnyo",
        "timestamp": 1655368825.090044,
        "operations": 1
    "profanity": {
        "matches": []
    "personal": {
        "matches": []
    "link": {
        "matches": []
    "weapon": {
        "matches": [
                "type": "weapon",
                "match": "kalashnikov",
                "start": 0,
                "end": 11

Any other needs?

See our full list of Text models for details on other filters and checks you can run on your text content. You might also want to check our Image & Video models to moderate images and videos. This includes moderation of text in images/videos.

Was this page helpful?