@nordsym/apiclaw 1.1.2 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/EARN-CREDITS-SPEC.md +197 -0
  2. package/README.md +11 -7
  3. package/STATUS.md +16 -15
  4. package/VISION.md +123 -0
  5. package/dist/credentials.d.ts.map +1 -1
  6. package/dist/credentials.js +11 -0
  7. package/dist/credentials.js.map +1 -1
  8. package/dist/execute.d.ts.map +1 -1
  9. package/dist/execute.js +75 -0
  10. package/dist/execute.js.map +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/proxy.d.ts.map +1 -1
  13. package/dist/proxy.js +1 -1
  14. package/dist/proxy.js.map +1 -1
  15. package/dist/registry/apis.json +93516 -7139
  16. package/dist/registry/apis_expanded.json +3123 -3
  17. package/landing/public/book/index.html +339 -0
  18. package/landing/src/app/docs/page.tsx +142 -115
  19. package/landing/src/app/earn/page.tsx +305 -0
  20. package/landing/src/app/page.tsx +16 -11
  21. package/landing/src/lib/apis.json +1 -116054
  22. package/landing/src/lib/stats.json +5 -5
  23. package/package.json +4 -1
  24. package/scripts/add-public-apis.py +625 -0
  25. package/scripts/apisguru-data.json +158837 -0
  26. package/scripts/bonus-batch.py +250 -0
  27. package/scripts/bulk-add-apisguru.js +122 -0
  28. package/scripts/expand-2026-batch.py +335 -0
  29. package/scripts/expand-from-github.py +460 -0
  30. package/scripts/expand-n4ze3m.py +198 -0
  31. package/scripts/expand-niche-batch.py +269 -0
  32. package/scripts/expand-nordic-niche.py +189 -0
  33. package/scripts/expand-tonnyL.py +343 -0
  34. package/scripts/final-batch.py +315 -0
  35. package/scripts/final-push-06.py +242 -0
  36. package/scripts/mega-expansion.py +495 -0
  37. package/scripts/mega-final-06.py +512 -0
  38. package/scripts/more-apis.py +353 -0
  39. package/scripts/night-batch-05.py +546 -0
  40. package/scripts/night-batch-05b.py +427 -0
  41. package/scripts/night-expansion-02-23-batch2.py +284 -0
  42. package/scripts/night-expansion-02-23.py +383 -0
  43. package/scripts/night-expansion-03-batch2.py +336 -0
  44. package/scripts/night-expansion-03-batch3.py +392 -0
  45. package/scripts/night-expansion-03.py +573 -0
  46. package/scripts/night-expansion-04-23.py +461 -0
  47. package/scripts/night-expansion-05-23-batch2.py +431 -0
  48. package/scripts/night-expansion-05-23-batch3.py +366 -0
  49. package/scripts/night-expansion-05-23-final.py +349 -0
  50. package/scripts/night-expansion-05-23.py +540 -0
  51. package/scripts/night-expansion-06-23-batch2.py +261 -0
  52. package/scripts/night-expansion-06-23-batch3.py +213 -0
  53. package/scripts/night-expansion-06-23-batch4.py +261 -0
  54. package/scripts/night-expansion-06-23.py +309 -0
  55. package/scripts/night-expansion-06.py +325 -0
  56. package/scripts/night-expansion.py +441 -0
  57. package/scripts/night-final-batch-04-23.py +547 -0
  58. package/scripts/night-mega-batch-04-23.py +874 -0
  59. package/scripts/super-final-06.py +341 -0
  60. package/src/credentials.ts +12 -0
  61. package/src/execute.ts +93 -0
  62. package/src/index.ts +1 -1
  63. package/src/proxy.ts +1 -1
  64. package/src/registry/apis.json +93516 -7139
  65. package/src/registry/apis_expanded.json +3123 -3
@@ -0,0 +1,349 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ APIClaw Night Expansion - 05:00 Feb 23, 2026 - Final Batch
4
+ Niche and specialized APIs
5
+ """
6
+
7
+ import json
8
+ import re
9
+ from pathlib import Path
10
+ from datetime import datetime
11
+
12
+ REGISTRY_PATH = Path(__file__).parent.parent / "src" / "registry" / "apis.json"
13
+
14
+ def generate_id(name: str) -> str:
15
+ clean = re.sub(r'[^a-z0-9]+', '-', name.lower()).strip('-')
16
+ return clean[:50]
17
+
18
+ def load_registry() -> dict:
19
+ with open(REGISTRY_PATH, 'r') as f:
20
+ return json.load(f)
21
+
22
+ def save_registry(registry: dict):
23
+ with open(REGISTRY_PATH, 'w') as f:
24
+ json.dump(registry, f, indent=2)
25
+
26
+ def get_existing_ids(registry: dict) -> set:
27
+ return {api['id'] for api in registry['apis']}
28
+
29
+ NEW_APIS = [
30
+ # Event & Ticketing (30)
31
+ {"name": "Eventbrite", "desc": "Event management", "category": "Events", "url": "https://eventbrite.com"},
32
+ {"name": "Ticketmaster", "desc": "Ticket sales", "category": "Events", "url": "https://ticketmaster.com"},
33
+ {"name": "StubHub", "desc": "Ticket resale", "category": "Events", "url": "https://stubhub.com"},
34
+ {"name": "SeatGeek", "desc": "Ticket search", "category": "Events", "url": "https://seatgeek.com"},
35
+ {"name": "Vivid Seats", "desc": "Ticket marketplace", "category": "Events", "url": "https://vividseats.com"},
36
+ {"name": "Dice", "desc": "Music events", "category": "Events", "url": "https://dice.fm"},
37
+ {"name": "Resident Advisor", "desc": "Electronic music", "category": "Events", "url": "https://ra.co"},
38
+ {"name": "Bandsintown", "desc": "Concert discovery", "category": "Events", "url": "https://bandsintown.com"},
39
+ {"name": "Songkick", "desc": "Concert tracking", "category": "Events", "url": "https://songkick.com"},
40
+ {"name": "Meetup", "desc": "Community events", "category": "Events", "url": "https://meetup.com"},
41
+ {"name": "Luma", "desc": "Event hosting", "category": "Events", "url": "https://lu.ma"},
42
+ {"name": "Partiful", "desc": "Party invites", "category": "Events", "url": "https://partiful.com"},
43
+ {"name": "Splash", "desc": "Event marketing", "category": "Events", "url": "https://splashthat.com"},
44
+ {"name": "Hopin", "desc": "Virtual events", "category": "Events", "url": "https://hopin.com"},
45
+ {"name": "Airmeet", "desc": "Virtual events", "category": "Events", "url": "https://airmeet.com"},
46
+ {"name": "Run The World", "desc": "Virtual events", "category": "Events", "url": "https://runtheworld.today"},
47
+ {"name": "Swapcard", "desc": "Event platform", "category": "Events", "url": "https://swapcard.com"},
48
+ {"name": "Bizzabo", "desc": "Event software", "category": "Events", "url": "https://bizzabo.com"},
49
+ {"name": "Cvent", "desc": "Event management", "category": "Events", "url": "https://cvent.com"},
50
+ {"name": "Whova", "desc": "Event management", "category": "Events", "url": "https://whova.com"},
51
+ {"name": "Accelevents", "desc": "Virtual events", "category": "Events", "url": "https://accelevents.com"},
52
+ {"name": "vFairs", "desc": "Virtual events", "category": "Events", "url": "https://vfairs.com"},
53
+ {"name": "BigMarker", "desc": "Webinar platform", "category": "Events", "url": "https://bigmarker.com"},
54
+ {"name": "Livestorm", "desc": "Video engagement", "category": "Events", "url": "https://livestorm.co"},
55
+ {"name": "Demio", "desc": "Webinar platform", "category": "Events", "url": "https://demio.com"},
56
+ {"name": "WebinarJam", "desc": "Webinar software", "category": "Events", "url": "https://webinarjam.com"},
57
+ {"name": "EverWebinar", "desc": "Automated webinars", "category": "Events", "url": "https://everwebinar.com"},
58
+ {"name": "GoTo Webinar", "desc": "Webinar platform", "category": "Events", "url": "https://goto.com/webinar"},
59
+ {"name": "Zoom Events", "desc": "Event platform", "category": "Events", "url": "https://zoom.us/events"},
60
+ {"name": "Microsoft Teams Live", "desc": "Live events", "category": "Events", "url": "https://teams.microsoft.com"},
61
+
62
+ # Food & Restaurant (30)
63
+ {"name": "DoorDash", "desc": "Food delivery", "category": "Food", "url": "https://doordash.com"},
64
+ {"name": "Uber Eats", "desc": "Food delivery", "category": "Food", "url": "https://ubereats.com"},
65
+ {"name": "Grubhub", "desc": "Food delivery", "category": "Food", "url": "https://grubhub.com"},
66
+ {"name": "Postmates", "desc": "On-demand delivery", "category": "Food", "url": "https://postmates.com"},
67
+ {"name": "Caviar", "desc": "Restaurant delivery", "category": "Food", "url": "https://trycaviar.com"},
68
+ {"name": "Instacart", "desc": "Grocery delivery", "category": "Food", "url": "https://instacart.com"},
69
+ {"name": "Shipt", "desc": "Same-day delivery", "category": "Food", "url": "https://shipt.com"},
70
+ {"name": "Gopuff", "desc": "Instant delivery", "category": "Food", "url": "https://gopuff.com"},
71
+ {"name": "Getir", "desc": "Quick delivery", "category": "Food", "url": "https://getir.com"},
72
+ {"name": "Gorillas", "desc": "Grocery delivery", "category": "Food", "url": "https://gorillas.io"},
73
+ {"name": "Flink", "desc": "Grocery delivery", "category": "Food", "url": "https://goflink.com"},
74
+ {"name": "OpenTable", "desc": "Restaurant reservations", "category": "Food", "url": "https://opentable.com"},
75
+ {"name": "Resy", "desc": "Restaurant reservations", "category": "Food", "url": "https://resy.com"},
76
+ {"name": "Yelp Reservations", "desc": "Restaurant booking", "category": "Food", "url": "https://yelp.com"},
77
+ {"name": "Toast", "desc": "Restaurant POS", "category": "Food", "url": "https://toasttab.com"},
78
+ {"name": "Square for Restaurants", "desc": "Restaurant POS", "category": "Food", "url": "https://squareup.com/restaurants"},
79
+ {"name": "Clover", "desc": "POS system", "category": "Food", "url": "https://clover.com"},
80
+ {"name": "Lightspeed Restaurant", "desc": "Restaurant POS", "category": "Food", "url": "https://lightspeedhq.com"},
81
+ {"name": "TouchBistro", "desc": "Restaurant POS", "category": "Food", "url": "https://touchbistro.com"},
82
+ {"name": "Upserve", "desc": "Restaurant analytics", "category": "Food", "url": "https://upserve.com"},
83
+ {"name": "7shifts", "desc": "Restaurant scheduling", "category": "Food", "url": "https://7shifts.com"},
84
+ {"name": "Homebase", "desc": "Staff scheduling", "category": "Food", "url": "https://joinhomebase.com"},
85
+ {"name": "MarketMan", "desc": "Inventory management", "category": "Food", "url": "https://marketman.com"},
86
+ {"name": "BlueCart", "desc": "Restaurant ordering", "category": "Food", "url": "https://bluecart.com"},
87
+ {"name": "ChowNow", "desc": "Online ordering", "category": "Food", "url": "https://chownow.com"},
88
+ {"name": "Olo", "desc": "Digital ordering", "category": "Food", "url": "https://olo.com"},
89
+ {"name": "Lunchbox", "desc": "Restaurant tech", "category": "Food", "url": "https://lunchbox.io"},
90
+ {"name": "BentoBox", "desc": "Restaurant websites", "category": "Food", "url": "https://getbento.com"},
91
+ {"name": "Popmenu", "desc": "Restaurant tech", "category": "Food", "url": "https://popmenu.com"},
92
+ {"name": "Owner.com", "desc": "Restaurant marketing", "category": "Food", "url": "https://owner.com"},
93
+
94
+ # Science & Research (30)
95
+ {"name": "Crossref", "desc": "Scholarly metadata", "category": "Science", "url": "https://crossref.org"},
96
+ {"name": "Semantic Scholar", "desc": "AI research", "category": "Science", "url": "https://semanticscholar.org"},
97
+ {"name": "arXiv", "desc": "Preprint server", "category": "Science", "url": "https://arxiv.org"},
98
+ {"name": "bioRxiv", "desc": "Biology preprints", "category": "Science", "url": "https://biorxiv.org"},
99
+ {"name": "medRxiv", "desc": "Medical preprints", "category": "Science", "url": "https://medrxiv.org"},
100
+ {"name": "ORCID", "desc": "Researcher IDs", "category": "Science", "url": "https://orcid.org"},
101
+ {"name": "Altmetric", "desc": "Research metrics", "category": "Science", "url": "https://altmetric.com"},
102
+ {"name": "Dimensions", "desc": "Research database", "category": "Science", "url": "https://dimensions.ai"},
103
+ {"name": "Scopus", "desc": "Citation database", "category": "Science", "url": "https://scopus.com"},
104
+ {"name": "Web of Science", "desc": "Research platform", "category": "Science", "url": "https://webofscience.com"},
105
+ {"name": "Google Scholar", "desc": "Academic search", "category": "Science", "url": "https://scholar.google.com"},
106
+ {"name": "ResearchGate", "desc": "Research network", "category": "Science", "url": "https://researchgate.net"},
107
+ {"name": "Academia.edu", "desc": "Academic network", "category": "Science", "url": "https://academia.edu"},
108
+ {"name": "Zotero", "desc": "Reference manager", "category": "Science", "url": "https://zotero.org"},
109
+ {"name": "Mendeley", "desc": "Reference manager", "category": "Science", "url": "https://mendeley.com"},
110
+ {"name": "Papers", "desc": "Reference manager", "category": "Science", "url": "https://papersapp.com"},
111
+ {"name": "EndNote", "desc": "Reference manager", "category": "Science", "url": "https://endnote.com"},
112
+ {"name": "Overleaf", "desc": "LaTeX editor", "category": "Science", "url": "https://overleaf.com"},
113
+ {"name": "Authorea", "desc": "Scientific writing", "category": "Science", "url": "https://authorea.com"},
114
+ {"name": "Protocols.io", "desc": "Research protocols", "category": "Science", "url": "https://protocols.io"},
115
+ {"name": "Benchling", "desc": "Life science R&D", "category": "Science", "url": "https://benchling.com"},
116
+ {"name": "Dotmatics", "desc": "Scientific software", "category": "Science", "url": "https://dotmatics.com"},
117
+ {"name": "LabArchives", "desc": "Electronic lab notebook", "category": "Science", "url": "https://labarchives.com"},
118
+ {"name": "SciNote", "desc": "Lab notebook", "category": "Science", "url": "https://scinote.net"},
119
+ {"name": "NCBI", "desc": "Biotech databases", "category": "Science", "url": "https://ncbi.nlm.nih.gov"},
120
+ {"name": "UniProt", "desc": "Protein database", "category": "Science", "url": "https://uniprot.org"},
121
+ {"name": "RCSB PDB", "desc": "Protein structures", "category": "Science", "url": "https://rcsb.org"},
122
+ {"name": "ChEMBL", "desc": "Drug discovery", "category": "Science", "url": "https://ebi.ac.uk/chembl"},
123
+ {"name": "PubChem", "desc": "Chemistry database", "category": "Science", "url": "https://pubchem.ncbi.nlm.nih.gov"},
124
+ {"name": "ChemSpider", "desc": "Chemical database", "category": "Science", "url": "https://chemspider.com"},
125
+
126
+ # Language & Translation (20)
127
+ {"name": "DeepL", "desc": "AI translation", "category": "Language", "url": "https://deepl.com"},
128
+ {"name": "Google Translate", "desc": "Translation service", "category": "Language", "url": "https://translate.google.com"},
129
+ {"name": "Microsoft Translator", "desc": "Translation API", "category": "Language", "url": "https://translator.microsoft.com"},
130
+ {"name": "Amazon Translate", "desc": "Neural translation", "category": "Language", "url": "https://aws.amazon.com/translate"},
131
+ {"name": "ModernMT", "desc": "Adaptive translation", "category": "Language", "url": "https://modernmt.com"},
132
+ {"name": "Unbabel", "desc": "Translation platform", "category": "Language", "url": "https://unbabel.com"},
133
+ {"name": "Smartling", "desc": "Translation management", "category": "Language", "url": "https://smartling.com"},
134
+ {"name": "Phrase", "desc": "Localization platform", "category": "Language", "url": "https://phrase.com"},
135
+ {"name": "Lokalise", "desc": "Localization", "category": "Language", "url": "https://lokalise.com"},
136
+ {"name": "Crowdin", "desc": "Localization platform", "category": "Language", "url": "https://crowdin.com"},
137
+ {"name": "Transifex", "desc": "Localization", "category": "Language", "url": "https://transifex.com"},
138
+ {"name": "POEditor", "desc": "Localization", "category": "Language", "url": "https://poeditor.com"},
139
+ {"name": "Weglot", "desc": "Website translation", "category": "Language", "url": "https://weglot.com"},
140
+ {"name": "Bablic", "desc": "Website localization", "category": "Language", "url": "https://bablic.com"},
141
+ {"name": "LanguageTool", "desc": "Grammar checker", "category": "Language", "url": "https://languagetool.org"},
142
+ {"name": "Grammarly", "desc": "Writing assistant", "category": "Language", "url": "https://grammarly.com"},
143
+ {"name": "ProWritingAid", "desc": "Writing assistant", "category": "Language", "url": "https://prowritingaid.com"},
144
+ {"name": "Hemingway", "desc": "Writing editor", "category": "Language", "url": "https://hemingwayapp.com"},
145
+ {"name": "Linguee", "desc": "Translation dictionary", "category": "Language", "url": "https://linguee.com"},
146
+ {"name": "Reverso", "desc": "Translation tools", "category": "Language", "url": "https://reverso.net"},
147
+
148
+ # Automotive (30)
149
+ {"name": "Carfax", "desc": "Vehicle history", "category": "Automotive", "url": "https://carfax.com"},
150
+ {"name": "AutoCheck", "desc": "Vehicle reports", "category": "Automotive", "url": "https://autocheck.com"},
151
+ {"name": "Kelley Blue Book", "desc": "Car values", "category": "Automotive", "url": "https://kbb.com"},
152
+ {"name": "Edmunds", "desc": "Car research", "category": "Automotive", "url": "https://edmunds.com"},
153
+ {"name": "TrueCar", "desc": "Car pricing", "category": "Automotive", "url": "https://truecar.com"},
154
+ {"name": "Cars.com", "desc": "Car marketplace", "category": "Automotive", "url": "https://cars.com"},
155
+ {"name": "AutoTrader", "desc": "Car marketplace", "category": "Automotive", "url": "https://autotrader.com"},
156
+ {"name": "CarGurus", "desc": "Car shopping", "category": "Automotive", "url": "https://cargurus.com"},
157
+ {"name": "Vroom", "desc": "Online car buying", "category": "Automotive", "url": "https://vroom.com"},
158
+ {"name": "Carvana", "desc": "Online car buying", "category": "Automotive", "url": "https://carvana.com"},
159
+ {"name": "Shift", "desc": "Used car marketplace", "category": "Automotive", "url": "https://shift.com"},
160
+ {"name": "Turo", "desc": "Car sharing", "category": "Automotive", "url": "https://turo.com"},
161
+ {"name": "Getaround", "desc": "Car sharing", "category": "Automotive", "url": "https://getaround.com"},
162
+ {"name": "Zipcar", "desc": "Car sharing", "category": "Automotive", "url": "https://zipcar.com"},
163
+ {"name": "Tesla", "desc": "Electric vehicles", "category": "Automotive", "url": "https://tesla.com"},
164
+ {"name": "ChargePoint", "desc": "EV charging", "category": "Automotive", "url": "https://chargepoint.com"},
165
+ {"name": "EVgo", "desc": "EV charging", "category": "Automotive", "url": "https://evgo.com"},
166
+ {"name": "Electrify America", "desc": "EV charging", "category": "Automotive", "url": "https://electrifyamerica.com"},
167
+ {"name": "PlugShare", "desc": "EV charging map", "category": "Automotive", "url": "https://plugshare.com"},
168
+ {"name": "Open Charge Map", "desc": "EV charging data", "category": "Automotive", "url": "https://openchargemap.org"},
169
+ {"name": "Smartcar", "desc": "Connected car API", "category": "Automotive", "url": "https://smartcar.com"},
170
+ {"name": "Bluelink", "desc": "Hyundai connected", "category": "Automotive", "url": "https://bluelinkservice.com"},
171
+ {"name": "FordPass", "desc": "Ford connected", "category": "Automotive", "url": "https://fordpass.com"},
172
+ {"name": "OnStar", "desc": "GM connected", "category": "Automotive", "url": "https://onstar.com"},
173
+ {"name": "BMW Connected", "desc": "BMW connected", "category": "Automotive", "url": "https://bmw.com"},
174
+ {"name": "Mercedes me", "desc": "Mercedes connected", "category": "Automotive", "url": "https://mercedes-benz.com"},
175
+ {"name": "Audi Connect", "desc": "Audi connected", "category": "Automotive", "url": "https://audi.com"},
176
+ {"name": "Geotab", "desc": "Fleet telematics", "category": "Automotive", "url": "https://geotab.com"},
177
+ {"name": "Samsara", "desc": "Fleet management", "category": "Automotive", "url": "https://samsara.com"},
178
+ {"name": "Verizon Connect", "desc": "Fleet tracking", "category": "Automotive", "url": "https://verizonconnect.com"},
179
+
180
+ # More Developer Tools (30)
181
+ {"name": "Vercel", "desc": "Frontend cloud", "category": "DevTools", "url": "https://vercel.com"},
182
+ {"name": "Cloudflare Workers", "desc": "Edge computing", "category": "DevTools", "url": "https://workers.cloudflare.com"},
183
+ {"name": "AWS Lambda", "desc": "Serverless compute", "category": "DevTools", "url": "https://aws.amazon.com/lambda"},
184
+ {"name": "Azure Functions", "desc": "Serverless compute", "category": "DevTools", "url": "https://azure.microsoft.com/functions"},
185
+ {"name": "Google Cloud Functions", "desc": "Serverless compute", "category": "DevTools", "url": "https://cloud.google.com/functions"},
186
+ {"name": "Docker Hub", "desc": "Container registry", "category": "DevTools", "url": "https://hub.docker.com"},
187
+ {"name": "GitHub Container", "desc": "Container registry", "category": "DevTools", "url": "https://ghcr.io"},
188
+ {"name": "Kubernetes", "desc": "Container orchestration", "category": "DevTools", "url": "https://kubernetes.io"},
189
+ {"name": "Helm", "desc": "Kubernetes package manager", "category": "DevTools", "url": "https://helm.sh"},
190
+ {"name": "ArgoCD", "desc": "GitOps for K8s", "category": "DevTools", "url": "https://argoproj.github.io/argo-cd"},
191
+ {"name": "Flux", "desc": "GitOps toolkit", "category": "DevTools", "url": "https://fluxcd.io"},
192
+ {"name": "Terraform", "desc": "Infrastructure as code", "category": "DevTools", "url": "https://terraform.io"},
193
+ {"name": "Pulumi", "desc": "Infrastructure as code", "category": "DevTools", "url": "https://pulumi.com"},
194
+ {"name": "Ansible", "desc": "Automation platform", "category": "DevTools", "url": "https://ansible.com"},
195
+ {"name": "Chef", "desc": "Configuration management", "category": "DevTools", "url": "https://chef.io"},
196
+ {"name": "Puppet", "desc": "Infrastructure automation", "category": "DevTools", "url": "https://puppet.com"},
197
+ {"name": "Salt", "desc": "Infrastructure automation", "category": "DevTools", "url": "https://saltstack.com"},
198
+ {"name": "Jenkins", "desc": "CI/CD server", "category": "DevTools", "url": "https://jenkins.io"},
199
+ {"name": "GitHub Actions", "desc": "CI/CD workflows", "category": "DevTools", "url": "https://github.com/features/actions"},
200
+ {"name": "GitLab CI", "desc": "CI/CD platform", "category": "DevTools", "url": "https://gitlab.com/ci"},
201
+ {"name": "CircleCI", "desc": "CI/CD platform", "category": "DevTools", "url": "https://circleci.com"},
202
+ {"name": "Travis CI", "desc": "CI/CD service", "category": "DevTools", "url": "https://travis-ci.com"},
203
+ {"name": "Buildkite", "desc": "CI/CD platform", "category": "DevTools", "url": "https://buildkite.com"},
204
+ {"name": "Semaphore", "desc": "CI/CD platform", "category": "DevTools", "url": "https://semaphoreci.com"},
205
+ {"name": "Drone", "desc": "Container-native CI", "category": "DevTools", "url": "https://drone.io"},
206
+ {"name": "CodeFresh", "desc": "GitOps CI/CD", "category": "DevTools", "url": "https://codefresh.io"},
207
+ {"name": "Octopus Deploy", "desc": "Deployment automation", "category": "DevTools", "url": "https://octopus.com"},
208
+ {"name": "Spinnaker", "desc": "Multi-cloud CD", "category": "DevTools", "url": "https://spinnaker.io"},
209
+ {"name": "Harness", "desc": "Software delivery", "category": "DevTools", "url": "https://harness.io"},
210
+ {"name": "LaunchDarkly", "desc": "Feature flags", "category": "DevTools", "url": "https://launchdarkly.com"},
211
+
212
+ # More unique APIs (30)
213
+ {"name": "Abstract API", "desc": "Web APIs", "category": "Utility", "url": "https://abstractapi.com"},
214
+ {"name": "IPinfo", "desc": "IP geolocation", "category": "Utility", "url": "https://ipinfo.io"},
215
+ {"name": "IPstack", "desc": "IP geolocation", "category": "Utility", "url": "https://ipstack.com"},
216
+ {"name": "IPdata", "desc": "IP geolocation", "category": "Utility", "url": "https://ipdata.co"},
217
+ {"name": "DB-IP", "desc": "IP geolocation", "category": "Utility", "url": "https://db-ip.com"},
218
+ {"name": "MaxMind", "desc": "IP intelligence", "category": "Utility", "url": "https://maxmind.com"},
219
+ {"name": "Numverify", "desc": "Phone validation", "category": "Utility", "url": "https://numverify.com"},
220
+ {"name": "Abstract Phone", "desc": "Phone validation", "category": "Utility", "url": "https://abstractapi.com/phone"},
221
+ {"name": "Mailboxlayer", "desc": "Email validation", "category": "Utility", "url": "https://mailboxlayer.com"},
222
+ {"name": "ZeroBounce", "desc": "Email validation", "category": "Utility", "url": "https://zerobounce.net"},
223
+ {"name": "Kickbox", "desc": "Email verification", "category": "Utility", "url": "https://kickbox.com"},
224
+ {"name": "NeverBounce", "desc": "Email verification", "category": "Utility", "url": "https://neverbounce.com"},
225
+ {"name": "Currencylayer", "desc": "Exchange rates", "category": "Utility", "url": "https://currencylayer.com"},
226
+ {"name": "Fixer", "desc": "Exchange rates", "category": "Utility", "url": "https://fixer.io"},
227
+ {"name": "Open Exchange Rates", "desc": "Currency data", "category": "Utility", "url": "https://openexchangerates.org"},
228
+ {"name": "ExchangeRate-API", "desc": "Exchange rates", "category": "Utility", "url": "https://exchangerate-api.com"},
229
+ {"name": "Screenshotapi", "desc": "Screenshot API", "category": "Utility", "url": "https://screenshotapi.net"},
230
+ {"name": "URL2PNG", "desc": "Screenshot API", "category": "Utility", "url": "https://url2png.com"},
231
+ {"name": "ApiFlash", "desc": "Screenshot API", "category": "Utility", "url": "https://apiflash.com"},
232
+ {"name": "Browshot", "desc": "Screenshot API", "category": "Utility", "url": "https://browshot.com"},
233
+ {"name": "PDFShift", "desc": "HTML to PDF", "category": "Utility", "url": "https://pdfshift.io"},
234
+ {"name": "DocRaptor", "desc": "HTML to PDF", "category": "Utility", "url": "https://docraptor.com"},
235
+ {"name": "HTML2PDF", "desc": "PDF generation", "category": "Utility", "url": "https://html2pdf.app"},
236
+ {"name": "Prince", "desc": "HTML to PDF", "category": "Utility", "url": "https://princexml.com"},
237
+ {"name": "Cloudmersive", "desc": "Document APIs", "category": "Utility", "url": "https://cloudmersive.com"},
238
+ {"name": "Aspose", "desc": "Document APIs", "category": "Utility", "url": "https://aspose.cloud"},
239
+ {"name": "PDF.co", "desc": "PDF APIs", "category": "Utility", "url": "https://pdf.co"},
240
+ {"name": "Anvil", "desc": "PDF automation", "category": "Utility", "url": "https://useanvil.com"},
241
+ {"name": "Docparser", "desc": "Document extraction", "category": "Utility", "url": "https://docparser.com"},
242
+ {"name": "Veryfi", "desc": "Receipt OCR", "category": "Utility", "url": "https://veryfi.com"},
243
+
244
+ # Fun & Random (30)
245
+ {"name": "Cat Facts", "desc": "Random cat facts", "category": "Fun", "url": "https://catfact.ninja"},
246
+ {"name": "Dog API", "desc": "Random dog images", "category": "Fun", "url": "https://dog.ceo"},
247
+ {"name": "RandomFox", "desc": "Random fox images", "category": "Fun", "url": "https://randomfox.ca"},
248
+ {"name": "PlaceKitten", "desc": "Placeholder kittens", "category": "Fun", "url": "https://placekitten.com"},
249
+ {"name": "PlaceDog", "desc": "Placeholder dogs", "category": "Fun", "url": "https://placedog.net"},
250
+ {"name": "Lorem Picsum", "desc": "Random images", "category": "Fun", "url": "https://picsum.photos"},
251
+ {"name": "Placeholder", "desc": "Placeholder images", "category": "Fun", "url": "https://placeholder.com"},
252
+ {"name": "DiceBear", "desc": "Avatar generation", "category": "Fun", "url": "https://dicebear.com"},
253
+ {"name": "Robohash", "desc": "Robot avatars", "category": "Fun", "url": "https://robohash.org"},
254
+ {"name": "UI Avatars", "desc": "Initial avatars", "category": "Fun", "url": "https://ui-avatars.com"},
255
+ {"name": "Adorable Avatars", "desc": "Cute avatars", "category": "Fun", "url": "https://api.adorable.io"},
256
+ {"name": "Faker API", "desc": "Fake data", "category": "Fun", "url": "https://fakerapi.it"},
257
+ {"name": "Random User", "desc": "Random user data", "category": "Fun", "url": "https://randomuser.me"},
258
+ {"name": "JSONPlaceholder", "desc": "Fake REST API", "category": "Fun", "url": "https://jsonplaceholder.typicode.com"},
259
+ {"name": "ReqRes", "desc": "Fake API", "category": "Fun", "url": "https://reqres.in"},
260
+ {"name": "DummyJSON", "desc": "Fake REST API", "category": "Fun", "url": "https://dummyjson.com"},
261
+ {"name": "Bored API", "desc": "Activity suggestions", "category": "Fun", "url": "https://boredapi.com"},
262
+ {"name": "Advice Slip", "desc": "Random advice", "category": "Fun", "url": "https://adviceslip.com"},
263
+ {"name": "Zen Quotes", "desc": "Inspirational quotes", "category": "Fun", "url": "https://zenquotes.io"},
264
+ {"name": "Quotable", "desc": "Random quotes", "category": "Fun", "url": "https://quotable.io"},
265
+ {"name": "Affirmations", "desc": "Daily affirmations", "category": "Fun", "url": "https://affirmations.dev"},
266
+ {"name": "Kanye REST", "desc": "Kanye quotes", "category": "Fun", "url": "https://kanye.rest"},
267
+ {"name": "Chuck Norris", "desc": "Chuck Norris jokes", "category": "Fun", "url": "https://api.chucknorris.io"},
268
+ {"name": "Dad Jokes", "desc": "Dad jokes API", "category": "Fun", "url": "https://icanhazdadjoke.com"},
269
+ {"name": "JokeAPI", "desc": "Programming jokes", "category": "Fun", "url": "https://jokeapi.dev"},
270
+ {"name": "Official Joke", "desc": "Random jokes", "category": "Fun", "url": "https://official-joke-api.appspot.com"},
271
+ {"name": "Techy", "desc": "Tech-themed words", "category": "Fun", "url": "https://techy-api.vercel.app"},
272
+ {"name": "Evil Insult", "desc": "Insult generator", "category": "Fun", "url": "https://evilinsult.com"},
273
+ {"name": "Complimentr", "desc": "Compliments API", "category": "Fun", "url": "https://complimentr.com"},
274
+ {"name": "Numbers API", "desc": "Number facts", "category": "Fun", "url": "https://numbersapi.com"},
275
+
276
+ # More AI/ML specialized (30)
277
+ {"name": "Hugging Face", "desc": "AI model hub", "category": "AI", "url": "https://huggingface.co"},
278
+ {"name": "Roboflow", "desc": "Computer vision", "category": "AI", "url": "https://roboflow.com"},
279
+ {"name": "Labelbox", "desc": "Data labeling", "category": "AI", "url": "https://labelbox.com"},
280
+ {"name": "Scale AI", "desc": "Data annotation", "category": "AI", "url": "https://scale.com"},
281
+ {"name": "Snorkel AI", "desc": "Data-centric AI", "category": "AI", "url": "https://snorkel.ai"},
282
+ {"name": "Weights & Biases", "desc": "ML experiment tracking", "category": "AI", "url": "https://wandb.ai"},
283
+ {"name": "MLflow", "desc": "ML lifecycle", "category": "AI", "url": "https://mlflow.org"},
284
+ {"name": "Neptune", "desc": "ML metadata store", "category": "AI", "url": "https://neptune.ai"},
285
+ {"name": "Comet ML", "desc": "ML experiment platform", "category": "AI", "url": "https://comet.com"},
286
+ {"name": "DVC", "desc": "Data version control", "category": "AI", "url": "https://dvc.org"},
287
+ {"name": "ClearML", "desc": "MLOps platform", "category": "AI", "url": "https://clear.ml"},
288
+ {"name": "SageMaker", "desc": "AWS ML platform", "category": "AI", "url": "https://aws.amazon.com/sagemaker"},
289
+ {"name": "Vertex AI", "desc": "Google ML platform", "category": "AI", "url": "https://cloud.google.com/vertex-ai"},
290
+ {"name": "Azure ML", "desc": "Microsoft ML platform", "category": "AI", "url": "https://azure.microsoft.com/ml"},
291
+ {"name": "Databricks", "desc": "Unified analytics", "category": "AI", "url": "https://databricks.com"},
292
+ {"name": "Snowflake ML", "desc": "Data cloud ML", "category": "AI", "url": "https://snowflake.com"},
293
+ {"name": "Pinecone", "desc": "Vector database", "category": "AI", "url": "https://pinecone.io"},
294
+ {"name": "Weaviate", "desc": "Vector search", "category": "AI", "url": "https://weaviate.io"},
295
+ {"name": "Qdrant", "desc": "Vector database", "category": "AI", "url": "https://qdrant.tech"},
296
+ {"name": "Milvus", "desc": "Vector database", "category": "AI", "url": "https://milvus.io"},
297
+ {"name": "Chroma", "desc": "Vector database", "category": "AI", "url": "https://trychroma.com"},
298
+ {"name": "LanceDB", "desc": "Vector database", "category": "AI", "url": "https://lancedb.com"},
299
+ {"name": "Vectara", "desc": "Semantic search", "category": "AI", "url": "https://vectara.com"},
300
+ {"name": "LangChain", "desc": "LLM framework", "category": "AI", "url": "https://langchain.com"},
301
+ {"name": "LlamaIndex", "desc": "LLM data framework", "category": "AI", "url": "https://llamaindex.ai"},
302
+ {"name": "Haystack", "desc": "LLM framework", "category": "AI", "url": "https://haystack.deepset.ai"},
303
+ {"name": "Guardrails", "desc": "LLM output validation", "category": "AI", "url": "https://guardrailsai.com"},
304
+ {"name": "Guidance", "desc": "LLM programming", "category": "AI", "url": "https://github.com/guidance-ai/guidance"},
305
+ {"name": "LMQL", "desc": "LLM query language", "category": "AI", "url": "https://lmql.ai"},
306
+ {"name": "Marvin", "desc": "AI engineering", "category": "AI", "url": "https://askmarvin.ai"},
307
+ ]
308
+
309
+ def main():
310
+ print("šŸ¦ž APIClaw Night Expansion - Final Batch")
311
+ print("=" * 50)
312
+
313
+ registry = load_registry()
314
+ existing_ids = get_existing_ids(registry)
315
+
316
+ print(f"Current APIs: {len(registry['apis'])}")
317
+
318
+ added = 0
319
+ for api in NEW_APIS:
320
+ api_id = generate_id(api['name'])
321
+
322
+ if api_id in existing_ids:
323
+ continue
324
+
325
+ new_api = {
326
+ "id": api_id,
327
+ "name": api['name'],
328
+ "description": api['desc'],
329
+ "category": api['category'],
330
+ "authType": "apiKey",
331
+ "baseUrl": api['url'],
332
+ "docsUrl": api['url'],
333
+ "addedAt": datetime.now().isoformat()
334
+ }
335
+
336
+ registry['apis'].append(new_api)
337
+ existing_ids.add(api_id)
338
+ added += 1
339
+
340
+ save_registry(registry)
341
+
342
+ print(f"Added: +{added} APIs")
343
+ print(f"Total: {len(registry['apis'])}")
344
+ print(f"\nāœ… Session complete!")
345
+
346
+ return added
347
+
348
+ if __name__ == "__main__":
349
+ main()