@tuteliq/sdk 2.3.0 → 2.3.2

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 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 analysis for modern applications
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
- ### Tracking Fields
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)`
@@ -440,37 +655,30 @@ const session = await tuteliq.createVerificationSession({
440
655
 
441
656
  #### `getVerificationSession(sessionId)`
442
657
 
443
- Polls the status of a verification session. When `status` is `completed`, the result is available in `age_result` or `identity_result`.
658
+ Polls the status of a verification session. When `status` is `completed`, the result is available in the `result` field.
444
659
 
445
660
  ```typescript
446
661
  import { VerificationSessionStatus } from '@tuteliq/sdk'
447
662
 
448
- const result = await tuteliq.getVerificationSession('abc123...')
449
-
450
- console.log(result.status) // VerificationSessionStatus.COMPLETED
451
- console.log(result.mode) // VerificationMode.AGE
452
-
453
- if (result.status === VerificationSessionStatus.COMPLETED) {
454
- // Age verification result
455
- if (result.age_result) {
456
- console.log(result.age_result.is_minor) // false
457
- console.log(result.age_result.age_bracket) // '18-25'
458
- console.log(result.age_result.face_match) // { matched: true, distance: 0.3, confidence: 0.95 }
459
- console.log(result.age_result.liveness) // { valid: true }
460
- console.log(result.age_result.failure_reasons) // []
461
- console.log(result.age_result.credits_used) // 10
462
- }
463
-
464
- // Identity verification result
465
- if (result.identity_result) {
466
- console.log(result.identity_result.full_name) // 'John Doe'
467
- console.log(result.identity_result.date_of_birth) // '1990-01-15'
468
- console.log(result.identity_result.document_type) // 'passport'
469
- console.log(result.identity_result.country_code) // 'US'
470
- console.log(result.identity_result.face_match) // { matched: true, distance: 0.2, confidence: 0.98 }
471
- console.log(result.identity_result.liveness) // { valid: true }
472
- console.log(result.identity_result.credits_used) // 15
473
- }
663
+ const session = await tuteliq.getVerificationSession('abc123...')
664
+
665
+ console.log(session.status) // VerificationSessionStatus.COMPLETED
666
+ console.log(session.mode) // VerificationMode.AGE
667
+
668
+ if (session.status === VerificationSessionStatus.COMPLETED && session.result) {
669
+ // Age verification result (when mode is AGE)
670
+ console.log(session.result.is_minor) // false
671
+ console.log(session.result.age_bracket) // '18-25'
672
+ console.log(session.result.face_match) // { matched: true, distance: 0.3, confidence: 0.95 }
673
+ console.log(session.result.liveness) // { valid: true }
674
+ console.log(session.result.failure_reasons) // []
675
+ console.log(session.result.credits_used) // 10
676
+
677
+ // Identity verification result (when mode is IDENTITY) also includes:
678
+ // session.result.full_name // 'John Doe'
679
+ // session.result.date_of_birth // '1990-01-15'
680
+ // session.result.document_type // 'passport'
681
+ // session.result.country_code // 'US'
474
682
  }
475
683
  ```
476
684
 
@@ -535,15 +743,15 @@ const session = await tuteliq.createVerificationSession({
535
743
 
536
744
  // Poll until complete
537
745
  const poll = setInterval(async () => {
538
- const result = await tuteliq.getVerificationSession(session.session_id)
746
+ const status = await tuteliq.getVerificationSession(session.session_id)
539
747
 
540
- if (result.status === VerificationSessionStatus.COMPLETED) {
748
+ if (status.status === VerificationSessionStatus.COMPLETED) {
541
749
  clearInterval(poll)
542
- console.log('Verified! Is minor:', result.age_result?.is_minor)
750
+ console.log('Verified! Is minor:', status.result?.is_minor)
543
751
  }
544
752
 
545
- if (result.status === VerificationSessionStatus.FAILED ||
546
- result.status === VerificationSessionStatus.EXPIRED) {
753
+ if (status.status === VerificationSessionStatus.FAILED ||
754
+ status.status === VerificationSessionStatus.EXPIRED) {
547
755
  clearInterval(poll)
548
756
  console.log('Verification failed or expired')
549
757
  }
@@ -699,6 +907,106 @@ console.log(Object.keys(data.data)) // ['api_keys', 'incidents', ...]
699
907
  console.log(data.data.incidents.length) // 5
700
908
  ```
701
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
+
702
1010
  ---
703
1011
 
704
1012
  ## Usage Tracking
@@ -729,11 +1037,21 @@ Different endpoints consume different amounts of credits based on complexity:
729
1037
  | `detectBullying()` | 1 | Single text analysis |
730
1038
  | `detectUnsafe()` | 1 | Single text analysis |
731
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 |
732
1049
  | `analyzeEmotions()` | 1 per 10 msgs | `ceil(messages / 10)`, min 1 |
733
1050
  | `getActionPlan()` | 2 | Longer generation |
734
1051
  | `generateReport()` | 3 | Structured output |
735
1052
  | `analyzeVoice()` | 5 | Transcription + analysis |
736
1053
  | `analyzeImage()` | 3 | Vision + OCR + analysis |
1054
+ | `analyzeVideo()` | 10 | Key frame extraction + analysis |
737
1055
  | `createVerificationSession()` (age) | 10 | Charged on completion |
738
1056
  | `createVerificationSession()` (identity) | 15 | Charged on completion |
739
1057
 
@@ -856,6 +1174,44 @@ try {
856
1174
 
857
1175
  ---
858
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
+
859
1215
  ## TypeScript Support
860
1216
 
861
1217
  Full TypeScript support with comprehensive type definitions:
@@ -872,6 +1228,17 @@ import type {
872
1228
  ReportResult,
873
1229
  AnalyzeResult,
874
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
+
875
1242
  // Media Results
876
1243
  VoiceAnalysisResult,
877
1244
  ImageAnalysisResult,
@@ -897,7 +1264,7 @@ import type {
897
1264
  UsageByToolResult,
898
1265
  UsageMonthlyResult,
899
1266
 
900
- // Inputs
1267
+ // Safety Inputs
901
1268
  DetectBullyingInput,
902
1269
  DetectGroomingInput,
903
1270
  DetectUnsafeInput,
@@ -910,6 +1277,19 @@ import type {
910
1277
  // Account (GDPR)
911
1278
  AccountDeletionResult,
912
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,
913
1293
 
914
1294
  // Verification
915
1295
  CreateVerificationSessionInput,
@@ -947,6 +1327,9 @@ import {
947
1327
  WebhookEventType,
948
1328
  IncidentStatus,
949
1329
  ErrorCode,
1330
+ Language,
1331
+ LanguageStatus,
1332
+ Detection,
950
1333
  VerificationMode,
951
1334
  DocumentType,
952
1335
  VerificationStatus,
@@ -963,6 +1346,16 @@ if (result.grooming_risk === GroomingRisk.HIGH) {
963
1346
  // Handle high grooming risk
964
1347
  }
965
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
+
966
1359
  // Verification mode
967
1360
  const session = await tuteliq.createVerificationSession({
968
1361
  mode: VerificationMode.AGE,
@@ -1106,34 +1499,7 @@ The SDK works in browsers that support the Fetch API:
1106
1499
 
1107
1500
  ---
1108
1501
 
1109
- ## Contributing
1110
-
1111
- We welcome contributions! Please see our [Contributing Guide](https://github.com/Tuteliq/node/blob/main/CONTRIBUTING.md) for details.
1112
-
1113
- ```bash
1114
- # Clone the repo
1115
- git clone https://github.com/Tuteliq/node.git
1116
- cd node
1117
-
1118
- # Install dependencies
1119
- npm install
1120
-
1121
- # Run tests
1122
- npm test
1123
-
1124
- # Build
1125
- npm run build
1126
- ```
1127
-
1128
- ---
1129
-
1130
- ## API Documentation
1131
-
1132
- - **Base URL**: `https://api.tuteliq.ai`
1133
- - **Swagger UI**: [docs.tuteliq.ai](https://docs.tuteliq.ai)
1134
- - **OpenAPI JSON**: [docs.tuteliq.ai/json](https://docs.tuteliq.ai/json)
1135
-
1136
- ### Rate Limits
1502
+ ## Rate Limits & Pricing
1137
1503
 
1138
1504
  Rate limits depend on your subscription tier:
1139
1505
 
@@ -1176,6 +1542,35 @@ PII redaction is **enabled by default** on the Tuteliq API. It automatically str
1176
1542
 
1177
1543
  ---
1178
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
+
1179
1574
  ## Support
1180
1575
 
1181
1576
  - **Documentation**: [docs.tuteliq.ai](https://docs.tuteliq.ai)
@@ -1200,10 +1595,10 @@ Tuteliq offers a **free certification program** for anyone who wants to deepen t
1200
1595
  | Track | Who it's for | Duration |
1201
1596
  |-------|-------------|----------|
1202
1597
  | **Parents & Caregivers** | Parents, guardians, grandparents, teachers, coaches | ~90 min |
1203
- | **Young People (1016)** | Young people who want to learn to spot manipulation | ~60 min |
1598
+ | **Young People (10-16)** | Young people who want to learn to spot manipulation | ~60 min |
1204
1599
  | **Companies & Platforms** | Product managers, trust & safety teams, CTOs, compliance officers | ~120 min |
1205
1600
 
1206
- **Start here →** [tuteliq.ai/certify](https://tuteliq.ai/certify)
1601
+ **Start here:** [tuteliq.ai/certify](https://tuteliq.ai/certify)
1207
1602
 
1208
1603
  - 100% Free — no login required
1209
1604
  - Verifiable certificate on completion
@@ -1217,7 +1612,7 @@ Before you decide to contribute or sponsor, read these numbers. They are not pro
1217
1612
 
1218
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)*
1219
1614
  - **1 in 8** children globally have been victims of non-consensual sexual imagery in the past year. *(Childlight, 2024)*
1220
- - **370 million** girls and women alive today experienced rape or sexual assault in childhood. An estimated **240310 million** boys and men experienced the same. *(UNICEF, 2024)*
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)*
1221
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)*
1222
1617
  - **546,000** reports of online enticement (adults grooming children) in 2024 — a **192% increase** from the year before. *(NCMEC, 2025)*
1223
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)*