Legal Discovery
When litigation requires complete decision history, Vettly provides the infrastructure to respond to subpoenas, support litigation holds, and generate court-ready evidence packages.
Why This Matters
Content moderation decisions increasingly become the subject of litigation:
- Users suing for wrongful account suspension
- Platforms defending against negligence claims
- Regulatory investigations into moderation practices
- Employment disputes involving workplace communication platforms
Without proper infrastructure, responding to discovery requests becomes:
- Expensive - Manual reconstruction of decision history
- Incomplete - Missing policy versions, context, or timestamps
- Risky - Inability to prove what was decided and why
Litigation Hold
Setting a Hold
When litigation is anticipated or filed:
typescript
const hold = await vettly.createLegalHold({
name: 'Smith v. Platform Inc. - Case #2024-CV-12345',
counsel: '[email protected]',
scope: {
// Specific user(s) involved
userIds: ['user_123', 'user_456'],
// Date range of relevant content
dateRange: {
from: '2023-06-01',
to: '2024-03-31'
},
// All actions or specific ones
actions: ['flag', 'block'],
// All categories or specific ones
categories: ['harassment', 'hate_speech']
},
// When the hold expires (can be 'indefinite')
expiry: '2027-12-31',
// Reason for the hold
reason: 'Litigation hold per outside counsel directive dated 2024-04-01',
// Override normal retention policies
overrideRetention: true
})
// hold.id = "lh_abc123"Managing Holds
typescript
// List active holds
const holds = await vettly.listLegalHolds({
status: 'active'
})
// Extend a hold
await vettly.extendLegalHold({
holdId: 'lh_abc123',
newExpiry: '2028-12-31',
reason: 'Case extended, updated per counsel directive'
})
// Release a hold
await vettly.releaseLegalHold({
holdId: 'lh_abc123',
reason: 'Case settled, hold released per counsel directive',
authorizedBy: '[email protected]'
})Discovery Requests
Responding to Subpoenas
When you receive a subpoena for moderation records:
typescript
// Generate discovery response
const response = await vettly.generateDiscoveryResponse({
requestId: 'Subpoena-2024-04-15',
scope: {
userIds: ['user_123'],
dateRange: {
from: '2023-01-01',
to: '2024-03-31'
}
},
format: 'pdf',
include: [
'decisions',
'policies',
'appeals',
'context',
'providerResponses'
],
certification: {
certifyAccuracy: true,
certifyCompleteness: true,
certifier: '[email protected]'
}
})Interrogatory Support
For answering interrogatories about moderation practices:
typescript
// Get policy history with all versions
const policyHistory = await vettly.getPolicyHistory('community-safe', {
includeFullText: true,
includeChangelog: true
})
// Get decision statistics for time period
const stats = await vettly.getDecisionStats({
from: '2023-01-01',
to: '2024-03-31',
breakdown: ['month', 'category', 'action']
})
// Get methodology documentation
const methodology = await vettly.getMethodologyDocumentation({
period: '2023-01-01 to 2024-03-31',
includeProviderDetails: true,
includeTrainingData: false // Usually work product protected
})Evidence Authentication
Chain of Custody
Document the complete history of each decision:
typescript
const chain = await vettly.getChainOfCustody('dec_abc123')
// Returns:
{
decisionId: 'dec_abc123',
events: [
{
event: 'content_received',
timestamp: '2024-01-15T10:00:00Z',
details: { source: 'api', endpoint: '/v1/check' }
},
{
event: 'decision_made',
timestamp: '2024-01-15T10:00:00.450Z',
details: {
policyVersion: 'v2.3.1',
action: 'block',
automated: true
}
},
{
event: 'content_preserved',
timestamp: '2024-01-15T10:00:01Z',
details: {
location: 's3://evidence/dec_abc123',
encrypted: true,
hash: 'sha256:...'
}
},
{
event: 'user_notified',
timestamp: '2024-01-15T10:00:02Z',
details: { channel: 'email', template: 'content-blocked' }
},
{
event: 'appeal_received',
timestamp: '2024-01-20T14:30:00Z',
details: { appealId: 'app_xyz789' }
},
// ... complete history
]
}Content Verification
Prove content hasn't been altered:
typescript
const verification = await vettly.generateVerificationCertificate({
decisionId: 'dec_abc123',
format: 'pdf',
include: [
'contentHash',
'hashAlgorithm',
'preservationTimestamp',
'storageLocation',
'encryptionDetails'
]
})Expert Witness Support
Methodology Documentation
Generate documentation for expert testimony:
typescript
const expertDoc = await vettly.generateExpertDocumentation({
period: '2023-01-01 to 2024-03-31',
include: [
'systemArchitecture',
'aiProviderDetails',
'policyEnforcement',
'humanReviewProcess',
'qualityAssurance',
'accuracyMetrics',
'appealProcess'
]
})Decision Reconstruction
Explain exactly how a decision was made:
typescript
const reconstruction = await vettly.reconstructDecision({
decisionId: 'dec_abc123',
verbosity: 'expert', // Detailed technical explanation
include: [
'inputProcessing',
'policyEvaluation',
'providerCalls',
'thresholdApplication',
'actionDetermination'
]
})
// Returns step-by-step breakdown of decision logicReports for Counsel
Litigation Summary
typescript
const summary = await vettly.generateLitigationSummary({
case: 'Smith v. Platform Inc.',
scope: {
userIds: ['user_123'],
dateRange: { from: '2023-01-01', to: '2024-03-31' }
},
include: [
'decisionCount',
'decisionBreakdown',
'appealHistory',
'policyVersions',
'keyEvents'
],
format: 'pdf'
})Privileged Analysis
Generate analysis for attorney eyes only:
typescript
const analysis = await vettly.generatePrivilegedAnalysis({
case: 'Smith v. Platform Inc.',
scope: { /* ... */ },
questions: [
'Were policies consistently applied?',
'Were any decisions anomalous?',
'Were appeals handled properly?'
],
markAsPrivileged: true, // Add privilege markings
counsel: '[email protected]'
})Audit Trail for Discovery
Every discovery-related action is logged:
typescript
const discoveryAudit = await vettly.getDiscoveryAudit({
case: 'Smith v. Platform Inc.'
})
// Returns:
[
{ action: 'legal_hold_created', timestamp: '...', user: '...', scope: '...' },
{ action: 'discovery_response_generated', timestamp: '...', user: '...' },
{ action: 'evidence_exported', timestamp: '...', user: '...', records: 150 },
{ action: 'verification_certificate_generated', timestamp: '...', user: '...' }
]Next Steps
- Evidence Preservation - Configure preservation settings
- Audit Trails - Understand what's tracked
- Decision Records - Anatomy of a decision
