Agent Wranglers

Recommended

Handle appeals and send decisions to the EU database

If you run an online platform and are not a micro or small enterprise, let users appeal moderation decisions for at least six months. Send every statement of reasons to the Commission's database.

Applies when

The project it has users in the EU.

How to do it

Article 20 sets the complaint system. Appeals are electronic and free, and the six months start when the user hears of the decision. Qualified staff supervise every appeal decision, never automated means alone. Reverse a decision without undue delay when the appeal shows it was wrong. Tell users about certified out-of-court dispute bodies, as Article 21 asks. Article 24(5) makes you submit each statement of reasons to the DSA Transparency Database without personal data. Its API accepts a batch of statements in one call. Article 25 bans interfaces that deceive or manipulate users. Article 26 asks for ad labels that name the advertiser and the payer. It bans ads profiled on special categories of data, and Article 28 bans profiled ads to known minors. When a model screens content, let a person decide what matters.

Examples

Using these examples: they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

JavaScript example

const SUBMISSION_DEADLINE_HOURS = 24;
const HOUR_MS = 3_600_000;

export const unsubmittedStatements = (statements, now = Date.now()) => statements.filter(statement =>
  !statement.databaseId && now - Date.parse(statement.issuedAt) > SUBMISSION_DEADLINE_HOURS * HOUR_MS);

Python example

from datetime import datetime, timedelta, timezone

SUBMISSION_DEADLINE = timedelta(hours=24)

def unsubmitted_statements(statements: list[dict], now: datetime | None = None) -> list[dict]:
    now = now or datetime.now(timezone.utc)
    return [s for s in statements
            if not s.get("database_id") and now - datetime.fromisoformat(s["issued_at"]) > SUBMISSION_DEADLINE]

How to check

A test files an appeal 180 days after a decision, and it is accepted. Every closed appeal names a staff reviewer. A daily job fails when a statement of reasons older than 24 hours has no database submission ID.

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/compliance/online-platforms/platform-complaints">Agent Wranglers compliance playbook</a>. In code you write, add a comment next to it with the same link.