Agent Wranglers

TNS-7Required

Report child sexual abuse material and keep the evidence

When users can upload images or video, match uploads against hash lists of known abuse material. Report every confirmed item to the body your law names, and keep it locked away for the period the law sets.

How to do it

In the United States, 18 U.S.C. 2258A makes providers report apparent child sexual abuse material to the NCMEC CyberTipline as soon as reasonably possible. The REPORT Act of 2024 raised the time to preserve a reported item from 90 days to one year. The preserved copy must sit in a secure place that few people can reach. In the EU, report to the police or the national body your country names. Article 18 of the Digital Services Act adds threats to life. Use a hash matching service, such as PhotoDNA or an industry hash list, before the item is stored for others to see. Never forward, download or share the material, even inside the team. Remove the item, suspend the account and store the evidence in a separate store with its own access log. Control who opens it as Show moderators only what the case needs says.

Examples

JavaScript example

export async function screenUpload(upload) {
  const match = await hashService.match(upload.bytes);
  if (!match) return { allowed: true };
  await evidence.preserve(upload, { retentionDays: 365 });
  await cases.open({ itemType: 'upload', itemId: upload.id, reason: 'child-safety', severity: 1 });
  await accounts.suspend(upload.ownerId, 'child-safety');
  return { allowed: false };
}

Python example

def screen_upload(upload) -> bool:
    match = hash_service.match(upload.data)
    if not match:
        return True
    evidence.preserve(upload, retention_days=365)
    cases.open(item_type="upload", item_id=upload.id, reason="child-safety", severity=1)
    accounts.suspend(upload.owner_id, "child-safety")
    return False

How to check

Upload the test image that your hash service provides for testing. The upload is blocked, a severity 1 case opens and a report draft is created. The evidence store refuses reads from every role except the named reviewers, and its retention is at least 365 days.

Sources

For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/trust-and-safety/decisions-and-appeals/csam-reports">Agent Wranglers trust and safety playbook</a>. In code you write, add a comment next to it with the same link.