TCXC AI

Free
Free for anyone. No authentication required.

No HTTP Digest, no API key and no TCXC account. Send the request as shown and you get a result back. These endpoints are free to use and build on.

The Open Text Shield (OTS) family of SMS classifiers. Two models answer two questions about the same message: the Threat Classifier asks whether a text is safe, the Category Classifier asks what kind of text it is. The hosted endpoints below are free for anyone to call, and both models can also run on your own servers.

Request bodies are JSON. More on the Open Text Shield page.

Base URLhttps://ots.telecomsxchange.com
AuthenticationNone required · free

Threat Classifier (OTS-TC)

Asks one question: is this text safe? Every message comes back as ham, spam or phishing with a probability. The model is multilingual BERT (mBERT) and runs on GPU.

The host below is free to call with no authentication. To run it on your own servers, use the Docker image or the source on GitHub; the same paths are served on port 8002. A self-hosted instance also exposes GET /metrics (Prometheus), POST /feedback/ for reporting a wrong verdict, an audit log under /audit and a TM Forum TMF922 job interface under /tmf-api/aiInferenceJob.

#Check Message Safety

POSThttps://ots.telecomsxchange.com/predict/
No auth · Free

Classifies one message as ham, spam or phishing. Text is normalised before classification, so full-width, look-alike and leetspeak disguises (Paypal, paypa1) are classified as the text they imitate.

probability is the model's confidence in the returned label, from 0 to 1. processing_time is the server-side time in seconds.

Body fields

application/json
NameTypeDescription
textrequiredstring

The message to classify, 1 to 512 characters.

Example Your account has been suspended. Verify now at http://secure-login-check.xyz

modelrequiredstring

Model to run. Use ots-mbert.

Example ots-mbert

curl -X POST "https://ots.telecomsxchange.com/predict/" \
  -H "Content-Type: application/json" \
  -d '{"text":"Your account has been suspended. Verify now at http://secure-login-check.xyz","model":"ots-mbert"}'
Threat Classifier verdictOTS_mBERT 2.9
phishingTries to steal credentials or money
Probability99.97%
Server time148 ms
Rendered from the example response.

#Threat Classifier Health

GEThttps://ots.telecomsxchange.com/health
No auth · Free

Service status, API version and the loaded model version. Use it as a load balancer health check.

No parameters and no authentication. Just call it.

curl "https://ots.telecomsxchange.com/health"
200
{
  "status": "healthy",
  "api_version": "2.11.0",
  "version": "2.11.0",
  "model": {
    "name": "OTS_mBERT",
    "version": "2.9",
    "architecture": "bert-base-multilingual-cased"
  },
  "models_loaded": {
    "mbert_multilingual": true
  },
  "timestamp": "2026-10-15T20:22:02.957002+00:00"
}

Category Classifier (OTS-CC)

Asks a different question: what category of text is it? Every message comes back as verification, marketing or transactional, with a confidence and a score for each category. The model is mmBERT-small, exported to int8 ONNX, and runs on CPU in about 4 ms per message (Apple M4 Pro benchmark; the shared demo host is slower, typically 15 to 20 ms).

The free hosted endpoint is served under /cc and needs no authentication. A self-hosted instance (Docker image and Terraform for AWS on GitHub) serves the same paths at the site root, port 8080. When it is started with TRIDENT_API_KEY set, the classify endpoints require an X-API-Key header with that value.

#Classify Message Category

POSThttps://ots.telecomsxchange.com/cc/v1/classify
No auth · Free

Sorts one message into a category.

LabelCovers
verificationOne-time codes, 2FA and login codes, verification links, "confirm it's you" prompts
marketingPromotions, sales, loyalty pushes, launches, re-engagement, referral offers
transactionalOrder, delivery, payment, booking, balance, reminder and account-event notifications

scores holds all three probabilities (they sum to 1), confidence is the score of the returned label and ms is the model time on the server in milliseconds.

Body fields

application/json
NameTypeDescription
textrequiredstring

The message to classify, 1 to 2,000 characters.

Example Your Uber code is 4821. Never share this code.

curl -X POST "https://ots.telecomsxchange.com/cc/v1/classify" \
  -H "Content-Type: application/json" \
  -d '{"text":"Your Uber code is 4821. Never share this code."}'
Category Classifier result16.82 ms
verification96.6% confidence
verification
96.6%
marketing
1.6%
transactional
1.8%
Rendered from the example response.

#Classify Message Category (Batch)

POSThttps://ots.telecomsxchange.com/cc/v1/classify/batch
No auth · Free

Classifies up to 256 messages in one request. results is in the same order as texts; per-message ms is null and the top-level ms is the model time for the whole batch.

Body fields

application/json
NameTypeDescription
textsrequiredarray

Messages to classify, up to 256, each 1 to 2,000 characters.

Example ["50% off everything this weekend", "Your parcel has been delivered"]

curl -X POST "https://ots.telecomsxchange.com/cc/v1/classify/batch" \
  -H "Content-Type: application/json" \
  -d '{"texts":["50% off everything this weekend","Your parcel has been delivered"]}'
Batch result2 messages · 19.15 ms
#CategoryConfidence
1marketing93.8%
2transactional97.2%

Results come back in the same order as the texts you sent.

Rendered from the example response.

#List Categories

GEThttps://ots.telecomsxchange.com/cc/v1/labels
No auth · Free

The three labels the model returns and the definition of each.

No parameters and no authentication. Just call it.

curl "https://ots.telecomsxchange.com/cc/v1/labels"
200
{
  "labels": [
    "verification",
    "marketing",
    "transactional"
  ],
  "definitions": {
    "verification": "One-time codes, 2FA/login codes, verification links, 'confirm it's you' prompts.",
    "marketing": "Promotions, offers, sales, loyalty pushes, product launches, re-engagement, surveys-for-rewards.",
    "transactional": "Order, delivery, payment, booking, balance, reminder and account-event notifications triggered by something the user did or holds."
  }
}

#Category Classifier Health

GEThttps://ots.telecomsxchange.com/cc/health
No auth · Free

Service status, API and model versions, supported languages and labels, and whether an API key is required.

No parameters and no authentication. Just call it.

curl "https://ots.telecomsxchange.com/cc/health"
200
{
  "status": "ok",
  "service": "ots-cc",
  "name": "Open Text Shield Category Classifier",
  "version": "0.2.2",
  "model_name": "OTS Category Classifier",
  "model_version": "v8",
  "model_base": "mmBERT small",
  "languages": [
    "en",
    "es",
    "id",
    "… 6 more items"
  ],
  "model": "model_int8.onnx",
  "base": "jhu-clsp/mmBERT-small",
  "labels": [
    "verification",
    "marketing",
    "transactional"
  ],
  "api_key_required": false,
  "uptime_s": 221088.3
}
Shortened for readability. The live response returns the full list.