{"openapi":"3.1.0","info":{"title":"DSA Trusted Flaggers API","description":"Machine-readable mirror of the EU Trusted Flaggers register (DSA Article 22(5)). Not a source of truth — see X-Source-URL.","version":"0.0.1"},"paths":{"/v1/health":{"get":{"summary":"Health","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Health V1 Health Get"}}}}}}},"/v1/version":{"get":{"summary":"Version","operationId":"version_v1_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Version V1 Version Get"}}}}}}},"/v1/trusted-flaggers":{"get":{"tags":["trusted-flaggers"],"summary":"List Trusted Flaggers","operationId":"list_trusted_flaggers_v1_trusted_flaggers_get","parameters":[{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"ISO alpha-2, repeatable. Filters by country_code.","title":"Country"},"description":"ISO alpha-2, repeatable. Filters by country_code."},{"name":"area","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/AreaEnum"}},{"type":"null"}],"description":"Normalized area enum, repeatable. Any-match against areas.","title":"Area"},"description":"Normalized area enum, repeatable. Any-match against areas."},{"name":"dsc_country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO alpha-2 of the designating DSC.","title":"Dsc Country"},"description":"ISO alpha-2 of the designating DSC."},{"name":"status","in":"query","required":false,"schema":{"enum":["active","suspended","revoked","removed","all"],"type":"string","description":"Default 'active'. Pass 'all' to include suspended/revoked/removed.","default":"active","title":"Status"},"description":"Default 'active'. Pass 'all' to include suspended/revoked/removed."},{"name":"designated_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"ISO date, inclusive.","title":"Designated After"},"description":"ISO date, inclusive."},{"name":"designated_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"ISO date, inclusive.","title":"Designated Before"},"description":"ISO date, inclusive."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Substring match on name + address_raw.","title":"Q"},"description":"Substring match on name + address_raw."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response List Trusted Flaggers V1 Trusted Flaggers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/trusted-flaggers/lookup":{"get":{"tags":["trusted-flaggers"],"summary":"Lookup Trusted Flagger","operationId":"lookup_trusted_flagger_v1_trusted_flaggers_lookup_get","parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact email address.","title":"Email"},"description":"Exact email address."},{"name":"domain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Email domain, e.g. bar.org.","title":"Domain"},"description":"Email domain, e.g. bar.org."},{"name":"website","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Website URL; we match by host against email_domain.","title":"Website"},"description":"Website URL; we match by host against email_domain."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Lookup Trusted Flagger V1 Trusted Flaggers Lookup Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/trusted-flaggers/{tf_id}":{"get":{"tags":["trusted-flaggers"],"summary":"Get Trusted Flagger","operationId":"get_trusted_flagger_v1_trusted_flaggers__tf_id__get","parameters":[{"name":"tf_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tf Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Trusted Flagger V1 Trusted Flaggers  Tf Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/trusted-flaggers/{tf_id}/history":{"get":{"tags":["trusted-flaggers"],"summary":"Get Trusted Flagger History","operationId":"get_trusted_flagger_history_v1_trusted_flaggers__tf_id__history_get","parameters":[{"name":"tf_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tf Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Trusted Flagger History V1 Trusted Flaggers  Tf Id  History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/changes":{"get":{"tags":["changes"],"summary":"List Changes","operationId":"list_changes_v1_changes_get","parameters":[{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"ISO timestamp. Defaults to 30 days ago.","title":"Since"},"description":"ISO timestamp. Defaults to 30 days ago."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response List Changes V1 Changes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/stats":{"get":{"tags":["stats"],"summary":"Get Stats","description":"Aggregate counts of *active* TFs by country / area / DSC.\n\nComputed on each request. Redis caching is a separate commit.","operationId":"get_stats_v1_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Stats V1 Stats Get"}}}}}}},"/v1/badge/flaggers":{"get":{"tags":["badge"],"summary":"Badge Flaggers","description":"Count of active trusted flaggers, as a shields endpoint badge.","operationId":"badge_flaggers_v1_badge_flaggers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Badge Flaggers V1 Badge Flaggers Get"}}}}}}},"/v1/badge/freshness":{"get":{"tags":["badge"],"summary":"Badge Freshness","description":"How long ago the register was last synced, as a shields endpoint badge.","operationId":"badge_freshness_v1_badge_freshness_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Badge Freshness V1 Badge Freshness Get"}}}}}}},"/v1/waitlist":{"post":{"tags":["waitlist"],"summary":"Join Waitlist","operationId":"join_waitlist_v1_waitlist_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaitlistIn"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Join Waitlist V1 Waitlist Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AreaEnum":{"type":"string","enum":["ip_infringement","illegal_speech","terrorist_content","csam","protection_of_minors","cyber_violence","gender_based_violence","scams_fraud","illegal_products","consumer_protection","disinformation","data_privacy","public_security","violence","self_harm","animal_welfare","civil_discourse","other"],"title":"AreaEnum"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WaitlistIn":{"properties":{"email":{"type":"string","title":"Email"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"}},"type":"object","required":["email"],"title":"WaitlistIn"}}}}