{"result":{"depiction_url":null,"edges":{"in_module":{"objects":[{"created":"2026-11-12T13:55:20Z","object_id":{"id":3192,"is_a":["text","documentation","reference","module"],"name":"doc_module_mod_traffic_guard","title":"mod_traffic_guard","uri":"https:\/\/zotonic.com\/id\/3192"},"seq":1}],"predicate":{"id":333,"is_a":["meta","predicate"],"name":"in_module","title":{"_type":"trans","tr":{"en":"In module"}},"uri":"https:\/\/zotonic.com\/id\/in_module"}},"subject":{"objects":[{"created":"2026-11-12T13:55:20Z","object_id":{"id":2555,"is_a":["categorization","keyword","keyword_information_type"],"name":"zotonic_topic_reference","title":"Reference","uri":"https:\/\/zotonic.com\/id\/2555"},"seq":1},{"created":"2026-11-12T13:55:20Z","object_id":{"id":2603,"is_a":["categorization","keyword","keyword_domain"],"name":"zotonic_topic_configuration","title":"Configuration","uri":"https:\/\/zotonic.com\/id\/2603"},"seq":2},{"created":"2026-11-12T13:55:20Z","object_id":{"id":2625,"is_a":["categorization","keyword","keyword_architecture"],"name":"zotonic_topic_model","title":"Model","uri":"https:\/\/zotonic.com\/id\/2625"},"seq":3},{"created":"2026-11-12T13:55:20Z","object_id":{"id":2685,"is_a":["categorization","keyword","keyword_quality"],"name":"zotonic_topic_security","title":"Security","uri":"https:\/\/zotonic.com\/id\/2685"},"seq":4}],"predicate":{"id":308,"is_a":["meta","predicate"],"name":"subject","title":{"_type":"trans","tr":{"en":"Keyword"}},"uri":"http:\/\/purl.org\/dc\/elements\/1.1\/subject"}}},"export_revision":13,"id":3195,"is_a":["text","documentation","reference","model"],"links":[{"rel":"self","target":"https:\/\/zotonic.com\/.zotonic\/websub\/topic\/3195"},{"rel":"hub","target":"https:\/\/zotonic.com\/.zotonic\/websub"}],"medium":null,"medium_url":null,"name":"doc_model_model_traffic_guard","page_url":{"en":"https:\/\/zotonic.com\/docs\/3195\/traffic_guard","x-default":"https:\/\/zotonic.com\/docs\/3195\/traffic_guard"},"preview_url":null,"resource":{"version":3,"pivot_location_lat":null,"title":"traffic_guard","is_authoritative":true,"body":"<p>Administrator-only traffic guard rules and current rate-limited IPs.<\/p>\n<p>GET <code>lists<\/code> returns database and global entries with IP, kind, note, expiry (Unix\nseconds, zero means forever), and source. GET <code>throttled<\/code> returns node-local active\nrate-limit decisions, including observe-mode decisions, without visited URLs.\nPOST <code>entry<\/code> accepts <code>kind<\/code> (allow\/block), <code>ips<\/code> (whitespace\/comma separated), <code>note<\/code>\nand <code>validity<\/code> (hour\/day\/week\/month\/forever or YYYY-MM-DDTHH:MM in UTC). Re-adding\nan IP of the same kind updates its note and expiry. POST <code>block<\/code> accepts <code>ip<\/code> and\n<code>validity<\/code>, and generates a note from current throttling evidence. DELETE <code>entry\/id<\/code>\nremoves a database entry. All mutations reject read-only credentials.<\/p>\n<p>At most 256 database entries per kind are allowed. Notes are required, at most\n1000 characters. Global <code>traffic_guard_allow<\/code> and <code>traffic_guard_block<\/code> lists in\nzotonic.config are merged on every configuration load and cannot be edited here.\nAllow takes precedence. Expired rules stop matching immediately and are deleted\nby hourly maintenance. No migration from the former JSON setting is performed.<\/p>","slug":"traffic_guard","is_protected":false,"visible_for":0,"tz":"UTC","language":["en"],"doc_source_hash":"212480d61b598570cbb1ca695b93d7e0a6a84d44aad2a47b2a7ced3cc0b67f11","is_featured":false,"content_group_id":{"id":2551,"is_a":["meta","content_group"],"name":"content_group_imported_docs","title":"Imported documentation","uri":"https:\/\/zotonic.com\/id\/content_group_imported_docs"},"category_id":{"id":322,"is_a":["meta","category"],"name":"model","title":"Models","uri":"https:\/\/test.zotonic.com\/id\/322"},"doc_source_path":"apps\/zotonic_mod_traffic_guard\/src\/models\/m_traffic_guard.erl","publication_start":"2026-11-12T13:55:20Z","github_url":"https:\/\/github.com\/zotonic\/zotonic\/blob\/master\/apps\/zotonic_mod_traffic_guard\/src\/models\/m_traffic_guard.erl","pivot_location_lng":null,"doc_source_kind":"model","name":"doc_model_model_traffic_guard","is_unfindable":false,"is_published":true,"pivot_geocode":null,"created":"2026-11-12T13:55:20Z","uri":null,"doc_status":"current","is_dependent":false,"erlang_app":"zotonic_mod_traffic_guard","publication_end":"9999-06-01T00:00:00Z","modifier_id":{"id":1,"is_a":["person"],"name":"administrator","title":"Site Administrator","uri":"https:\/\/zotonic.com\/id\/1"},"privacy":0,"doc_source_commit":"ae7768c74c4641c51de9824d192702d7f5526239\n","erlang_module":"m_traffic_guard","creator_id":{"id":1,"is_a":["person"],"name":"administrator","title":"Site Administrator","uri":"https:\/\/zotonic.com\/id\/1"},"modified":"2026-11-12T14:44:43Z","title_slug":"traffic_guard"},"uri":"https:\/\/zotonic.com\/id\/3195","uri_template":"https:\/\/zotonic.com\/id\/:id","version":13,"websub":{"hub":"https:\/\/zotonic.com\/.zotonic\/websub","topic":"https:\/\/zotonic.com\/.zotonic\/websub\/topic\/3195"}},"status":"ok"}