DSA Compliance
The Digital Services Act (DSA) establishes content moderation requirements for platforms operating in the EU. Vettly provides infrastructure to meet key DSA obligations.
Key Requirements
Article 17: Statement of Reasons
When content is restricted, platforms must provide:
- The restriction applied (removal, suspension, demotion, etc.)
- Relevant facts and circumstances
- The legal or policy basis
- Clear and user-friendly explanation
- Information about redress options
How Vettly Helps
typescript
const decision = await vettly.check({
content: post.body,
context: { userId: user.id }
})
if (decision.action !== 'allow') {
// Generate DSA-compliant statement of reasons
const statement = await vettly.generateStatementOfReasons({
decisionId: decision.id,
language: 'en' // Localized
})
// Returns:
{
restriction: 'Content removal',
factualBasis: 'Content scored 0.67 for harassment category',
legalBasis: 'Platform Terms of Service, Section 4.2',
explanation: 'Your content was removed because it violated our community guidelines against harassment.',
redress: {
internalAppeal: 'https://platform.com/appeal',
outOfCourtSettlement: 'https://platform.com/dispute-resolution',
judicialRedress: 'You may also seek redress through the courts.'
}
}
}Article 20: Internal Complaint-Handling
Platforms must provide:
- Easy and accessible complaint mechanism
- Free of charge
- Timely handling (reasonable timeframes)
- Human review (not solely automated)
How Vettly Helps
Vettly's appeals workflow meets these requirements:
typescript
// Easy complaint mechanism
const appeal = await vettly.createAppeal({
decisionId: decision.id,
userId: user.id,
reason: 'User explanation'
})
// Track handling time
const metrics = await vettly.getAppealMetrics({
from: '2024-01-01',
to: '2024-01-31'
})
console.log(`Average resolution time: ${metrics.averageResolutionTime}`)
// Human review tracking
const appeal = await vettly.getAppeal(appealId)
console.log(`Reviewed by: ${appeal.resolution.reviewerId}`)Article 24: Transparency Reporting
Platforms must publish annual reports including:
- Number of content moderation orders received
- Measures taken against illegal content
- Complaint handling statistics
- Automated decision-making information
How Vettly Helps
typescript
const report = await vettly.generateDSATransparencyReport({
period: '2024',
includeMethodology: true
})
// Returns structured data for your annual report:
{
period: '2024',
contentModeration: {
totalDecisions: 5000000,
byAction: {
removed: 50000,
demoted: 25000,
labeled: 100000
},
byCategory: {
illegalContent: 12000,
termsViolation: 88000
}
},
complaints: {
received: 4500,
resolved: 4350,
upheld: 3900,
overturned: 450,
averageResolutionTime: '18 hours'
},
automatedDecisions: {
percentage: 98.5,
humanReviewedPercentage: 15,
appealedPercentage: 0.09
},
methodology: {
aiProviders: ['OpenAI', 'Perspective'],
humanReviewProcess: 'All appeals and flagged content reviewed by trained moderators',
qualityAssurance: 'Monthly audits of decision accuracy'
}
}Implementation Checklist
Statement of Reasons
- [ ] Configure statement templates for each action type
- [ ] Set up localization for EU languages
- [ ] Include redress information in all statements
- [ ] Test delivery to users
typescript
await vettly.configureStatementOfReasons({
templates: {
removal: {
en: 'Your content was removed because...',
de: 'Ihr Inhalt wurde entfernt, weil...',
fr: 'Votre contenu a été supprimé car...'
}
},
redress: {
internalAppeal: 'https://platform.com/appeal',
outOfCourtSettlement: 'https://platform.com/dispute',
judicialRedress: 'standard' // Uses template text
}
})Complaint Handling
- [ ] Enable appeals workflow
- [ ] Set up reviewer accounts
- [ ] Configure notification templates
- [ ] Track resolution times
typescript
await vettly.configureAppeals({
enabled: true,
notifyOnReceived: true,
notifyOnResolved: true,
targetResolutionTime: '48h',
escalateAfter: '72h'
})Transparency Reporting
- [ ] Schedule automated report generation
- [ ] Set up data export pipeline
- [ ] Configure retention for report data
typescript
await vettly.configureTransparencyReporting({
schedule: 'annual',
retentionPeriod: '5 years',
exportFormat: 'json',
destination: {
type: 's3',
bucket: 'compliance-reports'
}
})Audit Preparation
When EU authorities request information:
typescript
// Generate authority-ready export
const export = await vettly.generateRegulatoryExport({
authority: 'Digital Services Coordinator',
period: '2024-Q1',
scope: 'full', // or 'summary'
format: 'pdf',
includeSamples: true,
sampleSize: 1000
})Best Practices
- Be proactive - Generate reports before they're requested
- Document everything - Every decision, every appeal, every policy change
- Localize properly - Statements in user's language
- Track metrics - Resolution times, overturn rates, appeal volumes
- Train reviewers - Document your human review process
Next Steps
- Appeals Workflow - Set up complaint handling
- Audit Trails - Configure data retention
- Evidence Preservation - GDPR-compliant storage
