A collective list of free APIs
This report presents the forensic synthetic code analysis of public-apis/public-apis, a Python project with 449,911 GitHub stars. SynthScan v2.0 examined 3,637 lines of code across 16 source files, recording 42 pattern matches distributed across 6 syntactic categories. The overall adjusted score of 12.0 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 42 distinct pattern matches across 6 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/validate/links.py | 95 | def has_cloudflare_protection(resp: Response) -> bool: | CODE |
| LOW | scripts/validate/links.py | 201 | def check_if_list_of_links_are_working(list_of_links: List[str]) -> List[str]: | CODE |
| LOW | scripts/validate/links.py | 212 | def start_duplicate_links_checker(links: List[str]) -> None: | CODE |
| LOW | scripts/validate/links.py | 229 | def start_links_working_checker(links: List[str]) -> None: | CODE |
| LOW | scripts/tests/test_validate_format.py | 19 | def test_error_message_return_and_return_type(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 42 | def test_if_get_categories_content_return_correct_data_of_categories(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 71 | def test_if_check_alphabetical_order_return_correct_msg_error(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 120 | def test_check_title_with_correct_title(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 129 | def test_check_title_with_markdown_syntax_incorrect(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 142 | def test_check_title_with_api_at_the_end_of_the_title(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 155 | def test_check_description_with_correct_description(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 164 | def test_check_description_with_first_char_is_not_capitalized(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 178 | def test_check_description_with_punctuation_in_the_end(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 197 | def test_check_description_that_exceeds_the_character_limit(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 212 | def test_check_auth_with_valid_auth(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 223 | def test_check_auth_without_backtick(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 238 | def test_check_auth_with_invalid_auth(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 271 | def test_check_https_with_valid_https(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 279 | def test_check_https_with_invalid_https(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 294 | def test_check_cors_with_valid_cors(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 302 | def test_check_cors_with_invalid_cors(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 317 | def test_check_entry_with_correct_segments(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 326 | def test_check_entry_with_incorrect_segments(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 347 | def test_check_file_format_with_correct_format(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 374 | def test_check_file_format_with_category_header_not_added_to_index(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 394 | def test_check_file_format_with_category_without_min_entries(self): | CODE |
| LOW | scripts/tests/test_validate_format.py | 424 | def test_check_file_format_entry_without_all_necessary_columns(self): | CODE |
| LOW | scripts/tests/test_validate_links.py | 74 | def test_find_link_in_text_with_invalid_argument(self): | STRING |
| LOW | scripts/tests/test_validate_links.py | 80 | def test_if_check_duplicate_links_has_the_correct_return(self): | STRING |
| LOW | scripts/tests/test_validate_links.py | 99 | def test_if_fake_user_agent_has_a_str_as_return(self): | STRING |
| LOW | scripts/tests/test_validate_links.py | 147 | def test_has_cloudflare_protection_when_there_is_no_protection(self): | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 580 | | [Hipsum](https://hipsum.co) | Hipster-themed lorem ipsum generator for placeholder text | No | Yes | Unknown | | CODE |
| LOW | README.md | 1784 | | [Bacon Ipsum](https://baconipsum.com/json-api/) | A Meatier Lorem Ipsum Generator | No | Yes | Unknown | | CODE |
| LOW | README.md | 1794 | | [Loripsum](http://loripsum.net/) | The "lorem ipsum" generator that doesn't suck | No | No | Unknown | | CODE |
| LOW | scripts/tests/test_validate_links.py | 42 | self.text_without_cloudflare_flags = 'Lorem Ipsum' | CODE |
| LOW | scripts/tests/test_validate_links.py | 53 | lorem ipsum https://www.example.com?param1=1¶m2=2#anchor | CODE |
| LOW | scripts/tests/test_validate_links.py | 54 | https://www.example.com?param1=1¶m2=2#anchor lorem ipsum | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | README.md | 759 | | [Anycrap](https://anycrap.shop/developers) | 35,000+ absurdist AI-generated product concepts with names, descriptions, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 1311 | | [Not Human Search](https://nothumansearch.ai/openapi.yaml) | AI tool discovery with agentic scoring for 8,600+ tools a | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/validate/__init__.py | 3 | CODE | |
| LOW | scripts/validate/__init__.py | 4 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/validate/format.py | 192 | CODE |