@tuteliq/sdk 2.3.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +437 -35
- package/dist/cjs/client.js +28 -1
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/constants.js +17 -0
- package/dist/cjs/constants.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +28 -1
- package/dist/client.js.map +1 -1
- package/dist/constants.d.ts +18 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +17 -0
- package/dist/constants.js.map +1 -1
- package/dist/types/detection.d.ts +4 -0
- package/dist/types/detection.d.ts.map +1 -1
- package/dist/types/safety.d.ts +10 -0
- package/dist/types/safety.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
8
|
<strong>Official TypeScript/JavaScript SDK for the Tuteliq API</strong><br>
|
|
9
|
-
AI-powered child safety
|
|
9
|
+
AI-powered child safety, fraud detection, and content moderation for modern applications
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
12
|
<p align="center">
|
|
@@ -29,15 +29,25 @@
|
|
|
29
29
|
|
|
30
30
|
## Overview
|
|
31
31
|
|
|
32
|
-
Tuteliq provides AI-powered content analysis to help protect children in digital environments. This SDK makes it easy to integrate Tuteliq's capabilities into your Node.js, browser, or edge runtime applications.
|
|
32
|
+
Tuteliq provides AI-powered content analysis to help protect children and vulnerable users in digital environments. This SDK makes it easy to integrate Tuteliq's capabilities into your Node.js, browser, or edge runtime applications.
|
|
33
33
|
|
|
34
34
|
### Key Features
|
|
35
35
|
|
|
36
36
|
- **Bullying Detection** — Identify verbal abuse, exclusion, and harassment patterns
|
|
37
37
|
- **Grooming Risk Analysis** — Detect predatory behavior across conversation threads
|
|
38
38
|
- **Unsafe Content Detection** — Flag self-harm, violence, hate speech, and age-inappropriate content
|
|
39
|
+
- **Social Engineering Detection** — Detect pretexting, urgency fabrication, trust exploitation, and authority impersonation
|
|
40
|
+
- **App Fraud Detection** — Identify fake investment platforms, phishing apps, subscription traps, and malicious links
|
|
41
|
+
- **Romance Scam Detection** — Detect love-bombing, financial requests, and identity deception
|
|
42
|
+
- **Mule Recruitment Detection** — Identify money mule recruitment and laundering facilitation
|
|
43
|
+
- **Gambling Harm Detection** — Detect chasing losses, concealment behavior, and gambling-related distress
|
|
44
|
+
- **Coercive Control Detection** — Identify isolation tactics, financial control, monitoring, and threats
|
|
45
|
+
- **Vulnerability Exploitation Detection** — Detect targeting of the elderly, disabled, or emotionally vulnerable
|
|
46
|
+
- **Radicalisation Detection** — Identify extremist rhetoric, us-vs-them framing, and ideological grooming
|
|
47
|
+
- **Multi-Endpoint Analysis** — Run multiple detection types on a single piece of content in one call
|
|
39
48
|
- **Voice Analysis** — Transcribe audio and run safety analysis on the transcript with timestamped segments
|
|
40
49
|
- **Image Analysis** — Visual safety classification with OCR text extraction and text safety analysis
|
|
50
|
+
- **Video Analysis** — Analyze video files for safety concerns via key frame extraction
|
|
41
51
|
- **Emotional State Analysis** — Understand emotional signals and concerning trends
|
|
42
52
|
- **Action Guidance** — Generate age-appropriate response recommendations
|
|
43
53
|
- **Incident Reports** — Create professional summaries for review
|
|
@@ -117,7 +127,9 @@ const tuteliq = new Tuteliq('your-api-key', {
|
|
|
117
127
|
|
|
118
128
|
---
|
|
119
129
|
|
|
120
|
-
###
|
|
130
|
+
### Common Parameters
|
|
131
|
+
|
|
132
|
+
#### Tracking Fields
|
|
121
133
|
|
|
122
134
|
All detection methods accept optional tracking fields for correlation, multi-tenant routing, and custom metadata:
|
|
123
135
|
|
|
@@ -149,6 +161,24 @@ These fields are:
|
|
|
149
161
|
- **Included** in webhook payloads, enabling you to route alerts to the correct customer from a single webhook endpoint
|
|
150
162
|
- **Stored** with the incident in Firestore for audit trail
|
|
151
163
|
|
|
164
|
+
#### Support Threshold
|
|
165
|
+
|
|
166
|
+
All detection methods accept an optional `supportThreshold` parameter that controls when crisis support resources are included in the response:
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
const result = await tuteliq.detectUnsafe({
|
|
170
|
+
content: "I don't want to be here anymore",
|
|
171
|
+
supportThreshold: 'medium' // 'low' | 'medium' | 'high' (default) | 'critical'
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
// When severity meets or exceeds the threshold, result.support will contain:
|
|
175
|
+
// - helpline phone numbers (region-aware)
|
|
176
|
+
// - crisis text lines
|
|
177
|
+
// - relevant web resources
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
> **Note:** `critical` severity always includes support resources regardless of the threshold setting.
|
|
181
|
+
|
|
152
182
|
---
|
|
153
183
|
|
|
154
184
|
### Safety Detection
|
|
@@ -244,6 +274,191 @@ console.log(result.recommended_action) // Combined recommendation
|
|
|
244
274
|
|
|
245
275
|
---
|
|
246
276
|
|
|
277
|
+
### Fraud & Harm Detection
|
|
278
|
+
|
|
279
|
+
All fraud and harm detection methods share the same `DetectionInput` and return a unified `DetectionResult`:
|
|
280
|
+
|
|
281
|
+
```typescript
|
|
282
|
+
import type { DetectionInput, DetectionResult } from '@tuteliq/sdk'
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
**Input:**
|
|
286
|
+
|
|
287
|
+
```typescript
|
|
288
|
+
{
|
|
289
|
+
content: string, // Text content to analyze
|
|
290
|
+
context?: ContextInput, // Optional analysis context
|
|
291
|
+
includeEvidence?: boolean, // Include evidence excerpts
|
|
292
|
+
supportThreshold?: 'low' | 'medium' | 'high' | 'critical', // Crisis support threshold
|
|
293
|
+
external_id?: string, // Tracking ID
|
|
294
|
+
customer_id?: string, // Customer ID
|
|
295
|
+
metadata?: Record<string, unknown>, // Custom metadata
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
**Result:**
|
|
300
|
+
|
|
301
|
+
```typescript
|
|
302
|
+
{
|
|
303
|
+
endpoint: string, // e.g., 'social-engineering'
|
|
304
|
+
detected: boolean, // Whether a threat was detected
|
|
305
|
+
severity: number, // 0.0 - 1.0
|
|
306
|
+
confidence: number, // 0.0 - 1.0
|
|
307
|
+
risk_score: number, // Age-adjusted risk score (0.0 - 1.0)
|
|
308
|
+
level: 'none' | 'low' | 'medium' | 'high' | 'critical',
|
|
309
|
+
categories: DetectionCategory[], // Detected categories with tags and confidence
|
|
310
|
+
evidence?: DetectionEvidence[], // Evidence excerpts (if includeEvidence was true)
|
|
311
|
+
age_calibration?: AgeCalibration, // Age calibration details
|
|
312
|
+
recommended_action: string,
|
|
313
|
+
rationale: string,
|
|
314
|
+
language: string, // Detected language code
|
|
315
|
+
language_status: LanguageStatus, // 'stable' | 'beta'
|
|
316
|
+
credits_used?: number,
|
|
317
|
+
processing_time_ms?: number,
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
#### `detectSocialEngineering(input)`
|
|
322
|
+
|
|
323
|
+
Detects social engineering tactics such as pretexting, urgency fabrication, trust exploitation, and authority impersonation.
|
|
324
|
+
|
|
325
|
+
```typescript
|
|
326
|
+
const result = await tuteliq.detectSocialEngineering({
|
|
327
|
+
content: "Your account will be suspended unless you verify your details immediately",
|
|
328
|
+
includeEvidence: true,
|
|
329
|
+
context: { sender_trust: 'unknown' }
|
|
330
|
+
})
|
|
331
|
+
|
|
332
|
+
console.log(result.detected) // true
|
|
333
|
+
console.log(result.level) // 'high'
|
|
334
|
+
console.log(result.categories) // [{ tag: 'URGENCY_FABRICATION', label: 'Urgency Fabrication', confidence: 0.9 }]
|
|
335
|
+
console.log(result.evidence) // [{ text: 'suspended unless', tactic: 'URGENCY_FABRICATION', weight: 0.9 }]
|
|
336
|
+
console.log(result.rationale) // "Classic urgency-based social engineering..."
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
#### `detectAppFraud(input)`
|
|
340
|
+
|
|
341
|
+
Detects app-based fraud patterns such as fake investment platforms, phishing apps, subscription traps, and malicious download links.
|
|
342
|
+
|
|
343
|
+
```typescript
|
|
344
|
+
const result = await tuteliq.detectAppFraud({
|
|
345
|
+
content: "Download this app to earn $500/day with guaranteed returns!"
|
|
346
|
+
})
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
#### `detectRomanceScam(input)`
|
|
350
|
+
|
|
351
|
+
Detects romance scam patterns such as love-bombing, financial requests, identity deception, and emotional manipulation.
|
|
352
|
+
|
|
353
|
+
```typescript
|
|
354
|
+
const result = await tuteliq.detectRomanceScam({
|
|
355
|
+
content: "I know we just met online but I need help with a medical bill. I'll pay you back, I promise."
|
|
356
|
+
})
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
#### `detectMuleRecruitment(input)`
|
|
360
|
+
|
|
361
|
+
Detects money mule recruitment tactics such as easy-money offers, bank account sharing requests, and laundering facilitation.
|
|
362
|
+
|
|
363
|
+
```typescript
|
|
364
|
+
const result = await tuteliq.detectMuleRecruitment({
|
|
365
|
+
content: "Easy job, just receive money in your bank and forward 90% to this account"
|
|
366
|
+
})
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
#### `detectGamblingHarm(input)`
|
|
370
|
+
|
|
371
|
+
Detects gambling-related harm indicators such as chasing losses, borrowing to gamble, concealment behavior, and emotional distress.
|
|
372
|
+
|
|
373
|
+
```typescript
|
|
374
|
+
const result = await tuteliq.detectGamblingHarm({
|
|
375
|
+
content: "I lost everything again but I know if I just bet one more time I can win it all back"
|
|
376
|
+
})
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
#### `detectCoerciveControl(input)`
|
|
380
|
+
|
|
381
|
+
Detects coercive control patterns such as isolation tactics, financial control, monitoring behavior, threats, and emotional manipulation.
|
|
382
|
+
|
|
383
|
+
```typescript
|
|
384
|
+
const result = await tuteliq.detectCoerciveControl({
|
|
385
|
+
content: "You're not allowed to see your friends anymore. Give me your phone, I need to check your messages."
|
|
386
|
+
})
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
#### `detectVulnerabilityExploitation(input)`
|
|
390
|
+
|
|
391
|
+
Detects exploitation of vulnerable individuals including targeting the elderly, disabled, financially distressed, or emotionally vulnerable. Returns a `cross_endpoint_modifier` (1.0-2.0) when used with `analyseMulti`.
|
|
392
|
+
|
|
393
|
+
```typescript
|
|
394
|
+
const result = await tuteliq.detectVulnerabilityExploitation({
|
|
395
|
+
content: "Since your husband passed, you must be so lonely. I can help manage your finances."
|
|
396
|
+
})
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
#### `detectRadicalisation(input)`
|
|
400
|
+
|
|
401
|
+
Detects radicalisation indicators such as extremist rhetoric, us-vs-them framing, calls to action, conspiracy narratives, and ideological grooming.
|
|
402
|
+
|
|
403
|
+
```typescript
|
|
404
|
+
const result = await tuteliq.detectRadicalisation({
|
|
405
|
+
content: "They are the enemy. Only we understand the truth. It's time to take action."
|
|
406
|
+
})
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
### Multi-Endpoint Analysis
|
|
412
|
+
|
|
413
|
+
#### `analyseMulti(input)`
|
|
414
|
+
|
|
415
|
+
Run multiple detection endpoints on a single piece of content in one API call. When `vulnerability-exploitation` is included, its cross-endpoint modifier automatically adjusts severity scores across all other results.
|
|
416
|
+
|
|
417
|
+
```typescript
|
|
418
|
+
import { Detection } from '@tuteliq/sdk'
|
|
419
|
+
|
|
420
|
+
const result = await tuteliq.analyseMulti({
|
|
421
|
+
content: "Suspicious message content",
|
|
422
|
+
detections: [
|
|
423
|
+
Detection.SOCIAL_ENGINEERING,
|
|
424
|
+
Detection.ROMANCE_SCAM,
|
|
425
|
+
Detection.VULNERABILITY_EXPLOITATION
|
|
426
|
+
],
|
|
427
|
+
includeEvidence: true,
|
|
428
|
+
supportThreshold: 'medium',
|
|
429
|
+
})
|
|
430
|
+
|
|
431
|
+
console.log(result.summary.total_endpoints) // 3
|
|
432
|
+
console.log(result.summary.detected_count) // 2
|
|
433
|
+
console.log(result.summary.highest_risk) // { endpoint: 'romance-scam', risk_score: 0.85 }
|
|
434
|
+
console.log(result.summary.overall_risk_level) // 'high'
|
|
435
|
+
console.log(result.cross_endpoint_modifier) // 1.3 (vulnerability modifier)
|
|
436
|
+
console.log(result.credits_used) // 3
|
|
437
|
+
|
|
438
|
+
// Individual results
|
|
439
|
+
for (const r of result.results) {
|
|
440
|
+
console.log(`${r.endpoint}: detected=${r.detected}, risk=${r.risk_score}, level=${r.level}`)
|
|
441
|
+
}
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
**Available detection endpoints:**
|
|
445
|
+
|
|
446
|
+
| Endpoint ID | Method |
|
|
447
|
+
|-------------|--------|
|
|
448
|
+
| `bullying` | `detectBullying` |
|
|
449
|
+
| `grooming` | `detectGrooming` |
|
|
450
|
+
| `unsafe` | `detectUnsafe` |
|
|
451
|
+
| `social-engineering` | `detectSocialEngineering` |
|
|
452
|
+
| `app-fraud` | `detectAppFraud` |
|
|
453
|
+
| `romance-scam` | `detectRomanceScam` |
|
|
454
|
+
| `mule-recruitment` | `detectMuleRecruitment` |
|
|
455
|
+
| `gambling-harm` | `detectGamblingHarm` |
|
|
456
|
+
| `coercive-control` | `detectCoerciveControl` |
|
|
457
|
+
| `vulnerability-exploitation` | `detectVulnerabilityExploitation` |
|
|
458
|
+
| `radicalisation` | `detectRadicalisation` |
|
|
459
|
+
|
|
460
|
+
---
|
|
461
|
+
|
|
247
462
|
### Media Analysis
|
|
248
463
|
|
|
249
464
|
#### `analyzeVoice(input)`
|
|
@@ -692,6 +907,106 @@ console.log(Object.keys(data.data)) // ['api_keys', 'incidents', ...]
|
|
|
692
907
|
console.log(data.data.incidents.length) // 5
|
|
693
908
|
```
|
|
694
909
|
|
|
910
|
+
#### `recordConsent(input)`
|
|
911
|
+
|
|
912
|
+
Record user consent for data processing (GDPR Article 6).
|
|
913
|
+
|
|
914
|
+
```typescript
|
|
915
|
+
const result = await tuteliq.recordConsent({
|
|
916
|
+
consentType: 'data_processing',
|
|
917
|
+
granted: true,
|
|
918
|
+
})
|
|
919
|
+
```
|
|
920
|
+
|
|
921
|
+
#### `getConsentStatus(consentType)`
|
|
922
|
+
|
|
923
|
+
Get current consent status for a specific consent type.
|
|
924
|
+
|
|
925
|
+
```typescript
|
|
926
|
+
const status = await tuteliq.getConsentStatus('data_processing')
|
|
927
|
+
console.log(status.granted) // true
|
|
928
|
+
console.log(status.granted_at) // '2026-01-15T...'
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
#### `withdrawConsent(consentType)`
|
|
932
|
+
|
|
933
|
+
Withdraw a previously granted consent.
|
|
934
|
+
|
|
935
|
+
```typescript
|
|
936
|
+
await tuteliq.withdrawConsent('data_processing')
|
|
937
|
+
```
|
|
938
|
+
|
|
939
|
+
#### `rectifyData(input)`
|
|
940
|
+
|
|
941
|
+
Correct personal data (Right to Rectification, GDPR Article 16).
|
|
942
|
+
|
|
943
|
+
```typescript
|
|
944
|
+
const result = await tuteliq.rectifyData({
|
|
945
|
+
field: 'email',
|
|
946
|
+
newValue: 'new@example.com',
|
|
947
|
+
})
|
|
948
|
+
```
|
|
949
|
+
|
|
950
|
+
#### `getAuditLogs(options?)`
|
|
951
|
+
|
|
952
|
+
Get audit trail of all data operations.
|
|
953
|
+
|
|
954
|
+
```typescript
|
|
955
|
+
const logs = await tuteliq.getAuditLogs({ limit: 50 })
|
|
956
|
+
logs.entries.forEach(entry => {
|
|
957
|
+
console.log(entry.action, entry.timestamp, entry.details)
|
|
958
|
+
})
|
|
959
|
+
```
|
|
960
|
+
|
|
961
|
+
---
|
|
962
|
+
|
|
963
|
+
### Breach Management
|
|
964
|
+
|
|
965
|
+
#### `logBreach(input)`
|
|
966
|
+
|
|
967
|
+
Log a new data breach. Starts the 72-hour GDPR notification clock.
|
|
968
|
+
|
|
969
|
+
```typescript
|
|
970
|
+
const result = await tuteliq.logBreach({
|
|
971
|
+
title: 'Unauthorized access to user data',
|
|
972
|
+
description: 'API key was exposed in a public repository',
|
|
973
|
+
severity: 'high',
|
|
974
|
+
affected_users: 150,
|
|
975
|
+
})
|
|
976
|
+
|
|
977
|
+
console.log(result.breach_id) // 'breach_001'
|
|
978
|
+
console.log(result.notification_deadline) // ISO timestamp (72 hours from now)
|
|
979
|
+
```
|
|
980
|
+
|
|
981
|
+
#### `listBreaches(options?)`
|
|
982
|
+
|
|
983
|
+
List all data breaches, optionally filtered by status.
|
|
984
|
+
|
|
985
|
+
```typescript
|
|
986
|
+
const { breaches } = await tuteliq.listBreaches({ status: 'open' })
|
|
987
|
+
breaches.forEach(b => console.log(b.title, b.status, b.created_at))
|
|
988
|
+
```
|
|
989
|
+
|
|
990
|
+
#### `getBreach(breachId)`
|
|
991
|
+
|
|
992
|
+
Get details of a specific data breach.
|
|
993
|
+
|
|
994
|
+
```typescript
|
|
995
|
+
const breach = await tuteliq.getBreach('breach_001')
|
|
996
|
+
console.log(breach.title, breach.status, breach.affected_users)
|
|
997
|
+
```
|
|
998
|
+
|
|
999
|
+
#### `updateBreachStatus(breachId, input)`
|
|
1000
|
+
|
|
1001
|
+
Update breach status and notification progress.
|
|
1002
|
+
|
|
1003
|
+
```typescript
|
|
1004
|
+
await tuteliq.updateBreachStatus('breach_001', {
|
|
1005
|
+
status: 'resolved',
|
|
1006
|
+
resolution_notes: 'API key rotated, affected users notified',
|
|
1007
|
+
})
|
|
1008
|
+
```
|
|
1009
|
+
|
|
695
1010
|
---
|
|
696
1011
|
|
|
697
1012
|
## Usage Tracking
|
|
@@ -722,11 +1037,21 @@ Different endpoints consume different amounts of credits based on complexity:
|
|
|
722
1037
|
| `detectBullying()` | 1 | Single text analysis |
|
|
723
1038
|
| `detectUnsafe()` | 1 | Single text analysis |
|
|
724
1039
|
| `detectGrooming()` | 1 per 10 msgs | `ceil(messages / 10)`, min 1 |
|
|
1040
|
+
| `detectSocialEngineering()` | 1 | Single text analysis |
|
|
1041
|
+
| `detectAppFraud()` | 1 | Single text analysis |
|
|
1042
|
+
| `detectRomanceScam()` | 1 | Single text analysis |
|
|
1043
|
+
| `detectMuleRecruitment()` | 1 | Single text analysis |
|
|
1044
|
+
| `detectGamblingHarm()` | 1 | Single text analysis |
|
|
1045
|
+
| `detectCoerciveControl()` | 1 | Single text analysis |
|
|
1046
|
+
| `detectVulnerabilityExploitation()` | 1 | Single text analysis |
|
|
1047
|
+
| `detectRadicalisation()` | 1 | Single text analysis |
|
|
1048
|
+
| `analyseMulti()` | 1 per endpoint | Sum of individual endpoint costs |
|
|
725
1049
|
| `analyzeEmotions()` | 1 per 10 msgs | `ceil(messages / 10)`, min 1 |
|
|
726
1050
|
| `getActionPlan()` | 2 | Longer generation |
|
|
727
1051
|
| `generateReport()` | 3 | Structured output |
|
|
728
1052
|
| `analyzeVoice()` | 5 | Transcription + analysis |
|
|
729
1053
|
| `analyzeImage()` | 3 | Vision + OCR + analysis |
|
|
1054
|
+
| `analyzeVideo()` | 10 | Key frame extraction + analysis |
|
|
730
1055
|
| `createVerificationSession()` (age) | 10 | Charged on completion |
|
|
731
1056
|
| `createVerificationSession()` (identity) | 15 | Charged on completion |
|
|
732
1057
|
|
|
@@ -849,6 +1174,44 @@ try {
|
|
|
849
1174
|
|
|
850
1175
|
---
|
|
851
1176
|
|
|
1177
|
+
## Supported Languages (27)
|
|
1178
|
+
|
|
1179
|
+
Language is auto-detected when not specified. Beta languages have good accuracy but may have edge cases compared to English. All 24 EU official languages + Ukrainian, Norwegian, and Turkish.
|
|
1180
|
+
|
|
1181
|
+
| Language | Code | Status |
|
|
1182
|
+
|----------|------|--------|
|
|
1183
|
+
| English | `en` | Stable |
|
|
1184
|
+
| Spanish | `es` | Beta |
|
|
1185
|
+
| Portuguese | `pt` | Beta |
|
|
1186
|
+
| French | `fr` | Beta |
|
|
1187
|
+
| German | `de` | Beta |
|
|
1188
|
+
| Italian | `it` | Beta |
|
|
1189
|
+
| Dutch | `nl` | Beta |
|
|
1190
|
+
| Polish | `pl` | Beta |
|
|
1191
|
+
| Romanian | `ro` | Beta |
|
|
1192
|
+
| Turkish | `tr` | Beta |
|
|
1193
|
+
| Greek | `el` | Beta |
|
|
1194
|
+
| Czech | `cs` | Beta |
|
|
1195
|
+
| Hungarian | `hu` | Beta |
|
|
1196
|
+
| Bulgarian | `bg` | Beta |
|
|
1197
|
+
| Croatian | `hr` | Beta |
|
|
1198
|
+
| Slovak | `sk` | Beta |
|
|
1199
|
+
| Slovenian | `sl` | Beta |
|
|
1200
|
+
| Lithuanian | `lt` | Beta |
|
|
1201
|
+
| Latvian | `lv` | Beta |
|
|
1202
|
+
| Estonian | `et` | Beta |
|
|
1203
|
+
| Maltese | `mt` | Beta |
|
|
1204
|
+
| Irish | `ga` | Beta |
|
|
1205
|
+
| Swedish | `sv` | Beta |
|
|
1206
|
+
| Norwegian | `no` | Beta |
|
|
1207
|
+
| Danish | `da` | Beta |
|
|
1208
|
+
| Finnish | `fi` | Beta |
|
|
1209
|
+
| Ukrainian | `uk` | Beta |
|
|
1210
|
+
|
|
1211
|
+
Each language includes culture-specific safety guidelines covering local slang, grooming patterns, self-harm coded vocabulary, and filter evasion techniques.
|
|
1212
|
+
|
|
1213
|
+
---
|
|
1214
|
+
|
|
852
1215
|
## TypeScript Support
|
|
853
1216
|
|
|
854
1217
|
Full TypeScript support with comprehensive type definitions:
|
|
@@ -865,6 +1228,17 @@ import type {
|
|
|
865
1228
|
ReportResult,
|
|
866
1229
|
AnalyzeResult,
|
|
867
1230
|
|
|
1231
|
+
// Detection Results (Fraud & Safety Extended)
|
|
1232
|
+
DetectionInput,
|
|
1233
|
+
DetectionResult,
|
|
1234
|
+
DetectionCategory,
|
|
1235
|
+
DetectionEvidence,
|
|
1236
|
+
AgeCalibration,
|
|
1237
|
+
MessageAnalysis,
|
|
1238
|
+
AnalyseMultiInput,
|
|
1239
|
+
AnalyseMultiResult,
|
|
1240
|
+
AnalyseMultiSummary,
|
|
1241
|
+
|
|
868
1242
|
// Media Results
|
|
869
1243
|
VoiceAnalysisResult,
|
|
870
1244
|
ImageAnalysisResult,
|
|
@@ -890,7 +1264,7 @@ import type {
|
|
|
890
1264
|
UsageByToolResult,
|
|
891
1265
|
UsageMonthlyResult,
|
|
892
1266
|
|
|
893
|
-
// Inputs
|
|
1267
|
+
// Safety Inputs
|
|
894
1268
|
DetectBullyingInput,
|
|
895
1269
|
DetectGroomingInput,
|
|
896
1270
|
DetectUnsafeInput,
|
|
@@ -903,6 +1277,19 @@ import type {
|
|
|
903
1277
|
// Account (GDPR)
|
|
904
1278
|
AccountDeletionResult,
|
|
905
1279
|
AccountExportResult,
|
|
1280
|
+
RecordConsentInput,
|
|
1281
|
+
ConsentStatusResult,
|
|
1282
|
+
ConsentActionResult,
|
|
1283
|
+
RectifyDataInput,
|
|
1284
|
+
RectifyDataResult,
|
|
1285
|
+
AuditLogsResult,
|
|
1286
|
+
|
|
1287
|
+
// Breach Management
|
|
1288
|
+
LogBreachInput,
|
|
1289
|
+
LogBreachResult,
|
|
1290
|
+
BreachListResult,
|
|
1291
|
+
BreachResult,
|
|
1292
|
+
UpdateBreachInput,
|
|
906
1293
|
|
|
907
1294
|
// Verification
|
|
908
1295
|
CreateVerificationSessionInput,
|
|
@@ -940,6 +1327,9 @@ import {
|
|
|
940
1327
|
WebhookEventType,
|
|
941
1328
|
IncidentStatus,
|
|
942
1329
|
ErrorCode,
|
|
1330
|
+
Language,
|
|
1331
|
+
LanguageStatus,
|
|
1332
|
+
Detection,
|
|
943
1333
|
VerificationMode,
|
|
944
1334
|
DocumentType,
|
|
945
1335
|
VerificationStatus,
|
|
@@ -956,6 +1346,16 @@ if (result.grooming_risk === GroomingRisk.HIGH) {
|
|
|
956
1346
|
// Handle high grooming risk
|
|
957
1347
|
}
|
|
958
1348
|
|
|
1349
|
+
// Detection endpoint IDs for multi-endpoint analysis
|
|
1350
|
+
const result = await tuteliq.analyseMulti({
|
|
1351
|
+
content: "Message to analyze",
|
|
1352
|
+
detections: [Detection.SOCIAL_ENGINEERING, Detection.ROMANCE_SCAM],
|
|
1353
|
+
})
|
|
1354
|
+
|
|
1355
|
+
// Language codes
|
|
1356
|
+
console.log(Language.EN) // 'en'
|
|
1357
|
+
console.log(Language.PT) // 'pt'
|
|
1358
|
+
|
|
959
1359
|
// Verification mode
|
|
960
1360
|
const session = await tuteliq.createVerificationSession({
|
|
961
1361
|
mode: VerificationMode.AGE,
|
|
@@ -1099,34 +1499,7 @@ The SDK works in browsers that support the Fetch API:
|
|
|
1099
1499
|
|
|
1100
1500
|
---
|
|
1101
1501
|
|
|
1102
|
-
##
|
|
1103
|
-
|
|
1104
|
-
We welcome contributions! Please see our [Contributing Guide](https://github.com/Tuteliq/node/blob/main/CONTRIBUTING.md) for details.
|
|
1105
|
-
|
|
1106
|
-
```bash
|
|
1107
|
-
# Clone the repo
|
|
1108
|
-
git clone https://github.com/Tuteliq/node.git
|
|
1109
|
-
cd node
|
|
1110
|
-
|
|
1111
|
-
# Install dependencies
|
|
1112
|
-
npm install
|
|
1113
|
-
|
|
1114
|
-
# Run tests
|
|
1115
|
-
npm test
|
|
1116
|
-
|
|
1117
|
-
# Build
|
|
1118
|
-
npm run build
|
|
1119
|
-
```
|
|
1120
|
-
|
|
1121
|
-
---
|
|
1122
|
-
|
|
1123
|
-
## API Documentation
|
|
1124
|
-
|
|
1125
|
-
- **Base URL**: `https://api.tuteliq.ai`
|
|
1126
|
-
- **Swagger UI**: [docs.tuteliq.ai](https://docs.tuteliq.ai)
|
|
1127
|
-
- **OpenAPI JSON**: [docs.tuteliq.ai/json](https://docs.tuteliq.ai/json)
|
|
1128
|
-
|
|
1129
|
-
### Rate Limits
|
|
1502
|
+
## Rate Limits & Pricing
|
|
1130
1503
|
|
|
1131
1504
|
Rate limits depend on your subscription tier:
|
|
1132
1505
|
|
|
@@ -1169,6 +1542,35 @@ PII redaction is **enabled by default** on the Tuteliq API. It automatically str
|
|
|
1169
1542
|
|
|
1170
1543
|
---
|
|
1171
1544
|
|
|
1545
|
+
## API Documentation
|
|
1546
|
+
|
|
1547
|
+
- **Base URL**: `https://api.tuteliq.ai`
|
|
1548
|
+
- **Swagger UI**: [docs.tuteliq.ai](https://docs.tuteliq.ai)
|
|
1549
|
+
- **OpenAPI JSON**: [docs.tuteliq.ai/json](https://docs.tuteliq.ai/json)
|
|
1550
|
+
|
|
1551
|
+
---
|
|
1552
|
+
|
|
1553
|
+
## Contributing
|
|
1554
|
+
|
|
1555
|
+
We welcome contributions! Please see our [Contributing Guide](https://github.com/Tuteliq/node/blob/main/CONTRIBUTING.md) for details.
|
|
1556
|
+
|
|
1557
|
+
```bash
|
|
1558
|
+
# Clone the repo
|
|
1559
|
+
git clone https://github.com/Tuteliq/node.git
|
|
1560
|
+
cd node
|
|
1561
|
+
|
|
1562
|
+
# Install dependencies
|
|
1563
|
+
npm install
|
|
1564
|
+
|
|
1565
|
+
# Run tests
|
|
1566
|
+
npm test
|
|
1567
|
+
|
|
1568
|
+
# Build
|
|
1569
|
+
npm run build
|
|
1570
|
+
```
|
|
1571
|
+
|
|
1572
|
+
---
|
|
1573
|
+
|
|
1172
1574
|
## Support
|
|
1173
1575
|
|
|
1174
1576
|
- **Documentation**: [docs.tuteliq.ai](https://docs.tuteliq.ai)
|
|
@@ -1193,10 +1595,10 @@ Tuteliq offers a **free certification program** for anyone who wants to deepen t
|
|
|
1193
1595
|
| Track | Who it's for | Duration |
|
|
1194
1596
|
|-------|-------------|----------|
|
|
1195
1597
|
| **Parents & Caregivers** | Parents, guardians, grandparents, teachers, coaches | ~90 min |
|
|
1196
|
-
| **Young People (10
|
|
1598
|
+
| **Young People (10-16)** | Young people who want to learn to spot manipulation | ~60 min |
|
|
1197
1599
|
| **Companies & Platforms** | Product managers, trust & safety teams, CTOs, compliance officers | ~120 min |
|
|
1198
1600
|
|
|
1199
|
-
**Start here
|
|
1601
|
+
**Start here:** [tuteliq.ai/certify](https://tuteliq.ai/certify)
|
|
1200
1602
|
|
|
1201
1603
|
- 100% Free — no login required
|
|
1202
1604
|
- Verifiable certificate on completion
|
|
@@ -1210,7 +1612,7 @@ Before you decide to contribute or sponsor, read these numbers. They are not pro
|
|
|
1210
1612
|
|
|
1211
1613
|
- **302 million** children are victims of online sexual exploitation and abuse every year. That is **10 children every second**. *(Childlight / University of Edinburgh, 2024)*
|
|
1212
1614
|
- **1 in 8** children globally have been victims of non-consensual sexual imagery in the past year. *(Childlight, 2024)*
|
|
1213
|
-
- **370 million** girls and women alive today experienced rape or sexual assault in childhood. An estimated **240
|
|
1615
|
+
- **370 million** girls and women alive today experienced rape or sexual assault in childhood. An estimated **240-310 million** boys and men experienced the same. *(UNICEF, 2024)*
|
|
1214
1616
|
- **29.2 million** incidents of suspected child sexual exploitation were reported to NCMEC's CyberTipline in 2024 alone — containing **62.9 million files** (images, videos). *(NCMEC, 2025)*
|
|
1215
1617
|
- **546,000** reports of online enticement (adults grooming children) in 2024 — a **192% increase** from the year before. *(NCMEC, 2025)*
|
|
1216
1618
|
- **1,325% increase** in AI-generated child sexual abuse material reports between 2023 and 2024. The technology that should protect children is being weaponized against them. *(NCMEC, 2025)*
|