@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 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)`
@@ -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
- ## Contributing
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 (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 |
1197
1599
  | **Companies & Platforms** | Product managers, trust & safety teams, CTOs, compliance officers | ~120 min |
1198
1600
 
1199
- **Start here →** [tuteliq.ai/certify](https://tuteliq.ai/certify)
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 **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)*
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)*