@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,213 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ APIClaw Night Expansion - Batch 3 - Regional & Specialized APIs
4
+ February 23, 2026 06:00
5
+ """
6
+
7
+ import json
8
+ import os
9
+ from datetime import datetime
10
+
11
+ REGISTRY_PATH = os.path.expanduser("~/Projects/apiclaw/src/registry/apis.json")
12
+
13
+ def load_registry():
14
+ with open(REGISTRY_PATH, 'r') as f:
15
+ return json.load(f)
16
+
17
+ def save_registry(data):
18
+ data['lastUpdated'] = datetime.utcnow().isoformat()
19
+ data['count'] = len(data['apis'])
20
+ with open(REGISTRY_PATH, 'w') as f:
21
+ json.dump(data, f, indent=2)
22
+
23
+ def generate_id(name):
24
+ return name.lower().replace(' ', '-').replace('.', '-').replace('/', '-').replace('(', '').replace(')', '').replace('ö', 'o').replace('ä', 'a').replace('å', 'a').replace('ü', 'u').replace('ñ', 'n')[:50]
25
+
26
+ def add_apis(registry, new_apis):
27
+ existing_ids = {api['id'] for api in registry['apis']}
28
+ added = 0
29
+ for api in new_apis:
30
+ api_id = generate_id(api['name'])
31
+ if api_id not in existing_ids:
32
+ api['id'] = api_id
33
+ registry['apis'].append(api)
34
+ existing_ids.add(api_id)
35
+ added += 1
36
+ return added
37
+
38
+ # =========================================
39
+ # EUROPEAN GOVERNMENT & REGIONAL APIs
40
+ # =========================================
41
+
42
+ NORDIC_GOVERNMENT = [
43
+ {"name": "Skatteverket API", "description": "Swedish Tax Agency services", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.skatteverket.se/omoss/apierochoppnadata.4.5c281c7015abecc2e2010000.html", "pricing": "free"},
44
+ {"name": "Bolagsverket API", "description": "Swedish Companies Registration Office", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://bolagsverket.se/", "pricing": "paid"},
45
+ {"name": "Lantmäteriet API", "description": "Swedish mapping and property data", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.lantmateriet.se/sv/geodata/", "pricing": "freemium"},
46
+ {"name": "SMHI API", "description": "Swedish weather and climate data", "category": "Weather", "auth": "None", "https": True, "cors": "yes", "link": "https://opendata.smhi.se/", "pricing": "free"},
47
+ {"name": "SCB API", "description": "Statistics Sweden open data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://www.scb.se/vara-tjanster/oppna-data/api-for-statistikdatabasen/", "pricing": "free"},
48
+ {"name": "Trafikverket API", "description": "Swedish transport administration", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://api.trafikinfo.trafikverket.se/", "pricing": "free"},
49
+ {"name": "Riksbanken API", "description": "Swedish central bank data", "category": "Finance", "auth": "None", "https": True, "cors": "yes", "link": "https://www.riksbank.se/", "pricing": "free"},
50
+ {"name": "Krisinformation API", "description": "Swedish crisis information", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://www.krisinformation.se/", "pricing": "free"},
51
+ {"name": "Norwegian Tax API", "description": "Norwegian Tax Administration", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://skatteetaten.github.io/api-dokumentasjon/", "pricing": "free"},
52
+ {"name": "Brønnøysundregistrene API", "description": "Norwegian business registry", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.brreg.no/produkter-og-tjenester/apne-data/", "pricing": "free"},
53
+ {"name": "Yr API", "description": "Norwegian weather service", "category": "Weather", "auth": "None", "https": True, "cors": "yes", "link": "https://developer.yr.no/", "pricing": "free"},
54
+ {"name": "Entur API", "description": "Norwegian public transport", "category": "Transport", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://developer.entur.org/", "pricing": "free"},
55
+ {"name": "Finnish Tax API", "description": "Finnish Tax Administration", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.vero.fi/", "pricing": "free"},
56
+ {"name": "PRH API", "description": "Finnish Patent and Registration Office", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.prh.fi/", "pricing": "free"},
57
+ {"name": "FMI API", "description": "Finnish Meteorological Institute", "category": "Weather", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://en.ilmatieteenlaitos.fi/open-data", "pricing": "free"},
58
+ {"name": "HSL API", "description": "Helsinki Region Transport", "category": "Transport", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://digitransit.fi/en/developers/", "pricing": "free"},
59
+ {"name": "Danish CVR API", "description": "Danish Central Business Register", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://datacvr.virk.dk/", "pricing": "free"},
60
+ {"name": "DMI API", "description": "Danish Meteorological Institute", "category": "Weather", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://opendatadocs.dmi.govcloud.dk/", "pricing": "free"},
61
+ {"name": "Rejseplanen API", "description": "Danish public transport", "category": "Transport", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://help.rejseplanen.dk/hc/da/categories/201728005-Rejseplanen-Labs", "pricing": "free"},
62
+ {"name": "Iceland Revenue API", "description": "Icelandic Revenue and Customs", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.rsk.is/", "pricing": "free"},
63
+ ]
64
+
65
+ EU_GOVERNMENT = [
66
+ {"name": "EU Open Data Portal API", "description": "EU institutions open data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.europa.eu/en/publications/dataeuropa-academy", "pricing": "free"},
67
+ {"name": "Eurostat API", "description": "European statistics", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://ec.europa.eu/eurostat/web/main/data/web-services", "pricing": "free"},
68
+ {"name": "ECB API", "description": "European Central Bank data", "category": "Finance", "auth": "None", "https": True, "cors": "yes", "link": "https://data.ecb.europa.eu/", "pricing": "free"},
69
+ {"name": "UK Companies House API", "description": "UK company information", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://developer.companieshouse.gov.uk/", "pricing": "free"},
70
+ {"name": "UK Land Registry API", "description": "UK property data", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://landregistry.data.gov.uk/", "pricing": "free"},
71
+ {"name": "UK Met Office API", "description": "UK weather data", "category": "Weather", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.metoffice.gov.uk/services/data", "pricing": "freemium"},
72
+ {"name": "Transport for London API", "description": "London public transport", "category": "Transport", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://api.tfl.gov.uk/", "pricing": "free"},
73
+ {"name": "German Bundesanzeiger API", "description": "German Federal Gazette", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.bundesanzeiger.de/", "pricing": "paid"},
74
+ {"name": "DWD API", "description": "German Weather Service", "category": "Weather", "auth": "None", "https": True, "cors": "yes", "link": "https://www.dwd.de/DE/leistungen/opendata/opendata.html", "pricing": "free"},
75
+ {"name": "DB API", "description": "Deutsche Bahn transport", "category": "Transport", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://developers.deutschebahn.com/", "pricing": "free"},
76
+ {"name": "French INSEE API", "description": "French national statistics", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://api.insee.fr/", "pricing": "free"},
77
+ {"name": "French SIRENE API", "description": "French business registry", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://api.insee.fr/catalogue/site/themes/wso2/subthemes/insee/pages/item-info.jag?name=Sirene&version=V3&provider=insee", "pricing": "free"},
78
+ {"name": "Météo-France API", "description": "French weather service", "category": "Weather", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://donneespubliques.meteofrance.fr/", "pricing": "freemium"},
79
+ {"name": "SNCF API", "description": "French railways", "category": "Transport", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.digital.sncf.com/startup/api", "pricing": "free"},
80
+ {"name": "Spanish AEAT API", "description": "Spanish Tax Agency", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.agenciatributaria.es/", "pricing": "free"},
81
+ {"name": "Spanish INE API", "description": "Spanish National Statistics", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://www.ine.es/dyngs/DataLab/en/manual.html?cid=66", "pricing": "free"},
82
+ {"name": "AEMET API", "description": "Spanish weather agency", "category": "Weather", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://opendata.aemet.es/", "pricing": "free"},
83
+ {"name": "Italian ISTAT API", "description": "Italian National Statistics", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://www.istat.it/en/information-and-services/developers", "pricing": "free"},
84
+ {"name": "Dutch CBS API", "description": "Statistics Netherlands", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://www.cbs.nl/en-gb/our-services/open-data", "pricing": "free"},
85
+ {"name": "NS API", "description": "Dutch Railways", "category": "Transport", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.ns.nl/en/travel-information/ns-api", "pricing": "freemium"},
86
+ ]
87
+
88
+ ASIAN_APIS = [
89
+ {"name": "Japan e-Stat API", "description": "Japanese government statistics", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.e-stat.go.jp/en/api/", "pricing": "free"},
90
+ {"name": "JMA API", "description": "Japan Meteorological Agency", "category": "Weather", "auth": "None", "https": True, "cors": "yes", "link": "https://www.jma.go.jp/", "pricing": "free"},
91
+ {"name": "JR API", "description": "Japan Railways data", "category": "Transport", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://developer-tokai.jr-central.co.jp/", "pricing": "free"},
92
+ {"name": "Korea Open Data API", "description": "Korean government open data", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.data.go.kr/", "pricing": "free"},
93
+ {"name": "KMA API", "description": "Korea Meteorological Administration", "category": "Weather", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://data.kma.go.kr/", "pricing": "free"},
94
+ {"name": "Singapore Data API", "description": "Singapore government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov.sg/", "pricing": "free"},
95
+ {"name": "Singapore OneMap API", "description": "Singapore mapping services", "category": "Geolocation", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.onemap.gov.sg/apidocs/", "pricing": "free"},
96
+ {"name": "LTA DataMall API", "description": "Singapore transport data", "category": "Transport", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://datamall.lta.gov.sg/", "pricing": "free"},
97
+ {"name": "Hong Kong Data API", "description": "Hong Kong government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov.hk/", "pricing": "free"},
98
+ {"name": "India Data API", "description": "Indian government open data", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://data.gov.in/", "pricing": "free"},
99
+ {"name": "IMD API", "description": "India Meteorological Department", "category": "Weather", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://mausam.imd.gov.in/", "pricing": "free"},
100
+ {"name": "Indian Railways API", "description": "Indian Railways data", "category": "Transport", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://railwayapi.site/", "pricing": "freemium"},
101
+ {"name": "Taiwan Open Data API", "description": "Taiwan government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov.tw/", "pricing": "free"},
102
+ {"name": "CWA API", "description": "Taiwan weather service", "category": "Weather", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://opendata.cwb.gov.tw/", "pricing": "free"},
103
+ {"name": "Thailand Open Data API", "description": "Thai government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.go.th/", "pricing": "free"},
104
+ {"name": "Malaysia Open Data API", "description": "Malaysian government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov.my/", "pricing": "free"},
105
+ {"name": "Indonesia Open Data API", "description": "Indonesian government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.go.id/", "pricing": "free"},
106
+ {"name": "Philippines Open Data API", "description": "Philippine government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov.ph/", "pricing": "free"},
107
+ {"name": "Vietnam Open Data API", "description": "Vietnamese government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov.vn/", "pricing": "free"},
108
+ {"name": "Bangladesh Open Data API", "description": "Bangladesh government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov.bd/", "pricing": "free"},
109
+ ]
110
+
111
+ AMERICAS_APIS = [
112
+ {"name": "USA Census API", "description": "US Census Bureau data", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.census.gov/data/developers.html", "pricing": "free"},
113
+ {"name": "Data.gov API", "description": "US government open data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov/", "pricing": "free"},
114
+ {"name": "NOAA API", "description": "US weather and climate data", "category": "Weather", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.weather.gov/documentation/services-web-api", "pricing": "free"},
115
+ {"name": "NWS API", "description": "National Weather Service", "category": "Weather", "auth": "None", "https": True, "cors": "yes", "link": "https://www.weather.gov/documentation/services-web-api", "pricing": "free"},
116
+ {"name": "FDA API", "description": "US Food and Drug Administration", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://open.fda.gov/apis/", "pricing": "free"},
117
+ {"name": "SEC EDGAR API", "description": "US SEC company filings", "category": "Finance", "auth": "None", "https": True, "cors": "yes", "link": "https://www.sec.gov/edgar/searchedgar/companysearch.html", "pricing": "free"},
118
+ {"name": "NASA API", "description": "NASA open data", "category": "Science", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://api.nasa.gov/", "pricing": "free"},
119
+ {"name": "USGS API", "description": "US Geological Survey data", "category": "Science", "auth": "None", "https": True, "cors": "yes", "link": "https://www.usgs.gov/products/data-and-tools/apis", "pricing": "free"},
120
+ {"name": "Canada Open Data API", "description": "Canadian government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://open.canada.ca/", "pricing": "free"},
121
+ {"name": "Environment Canada API", "description": "Canadian weather service", "category": "Weather", "auth": "None", "https": True, "cors": "yes", "link": "https://dd.weather.gc.ca/", "pricing": "free"},
122
+ {"name": "Mexico Open Data API", "description": "Mexican government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://datos.gob.mx/", "pricing": "free"},
123
+ {"name": "Brazil Open Data API", "description": "Brazilian government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://dados.gov.br/", "pricing": "free"},
124
+ {"name": "INMET API", "description": "Brazilian weather service", "category": "Weather", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://portal.inmet.gov.br/", "pricing": "free"},
125
+ {"name": "Argentina Open Data API", "description": "Argentine government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://datos.gob.ar/", "pricing": "free"},
126
+ {"name": "SMN Argentina API", "description": "Argentine weather service", "category": "Weather", "auth": "None", "https": True, "cors": "yes", "link": "https://www.smn.gob.ar/", "pricing": "free"},
127
+ {"name": "Chile Open Data API", "description": "Chilean government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://datos.gob.cl/", "pricing": "free"},
128
+ {"name": "Colombia Open Data API", "description": "Colombian government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://www.datos.gov.co/", "pricing": "free"},
129
+ {"name": "Peru Open Data API", "description": "Peruvian government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://www.datosabiertos.gob.pe/", "pricing": "free"},
130
+ {"name": "Ecuador Open Data API", "description": "Ecuadorian government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://datosabiertos.gob.ec/", "pricing": "free"},
131
+ {"name": "Uruguay Open Data API", "description": "Uruguayan government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://catalogodatos.gub.uy/", "pricing": "free"},
132
+ ]
133
+
134
+ OCEANIA_AFRICA_APIS = [
135
+ {"name": "Australia Data API", "description": "Australian government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov.au/", "pricing": "free"},
136
+ {"name": "BOM API", "description": "Australian weather service", "category": "Weather", "auth": "None", "https": True, "cors": "yes", "link": "http://www.bom.gov.au/catalogue/data-feeds.shtml", "pricing": "free"},
137
+ {"name": "ASIC API", "description": "Australian Securities and Investments", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://asic.gov.au/", "pricing": "free"},
138
+ {"name": "NZ Open Data API", "description": "New Zealand government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.govt.nz/", "pricing": "free"},
139
+ {"name": "MetService API", "description": "New Zealand weather", "category": "Weather", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.metservice.com/", "pricing": "freemium"},
140
+ {"name": "Companies Register NZ API", "description": "NZ company registry", "category": "Government", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://companies-register.companiesoffice.govt.nz/", "pricing": "free"},
141
+ {"name": "South Africa Data API", "description": "South African government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov.za/", "pricing": "free"},
142
+ {"name": "SAWS API", "description": "South African weather service", "category": "Weather", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.weathersa.co.za/", "pricing": "paid"},
143
+ {"name": "Kenya Open Data API", "description": "Kenyan government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://opendata.go.ke/", "pricing": "free"},
144
+ {"name": "Nigeria Open Data API", "description": "Nigerian government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://nigerianstat.gov.ng/", "pricing": "free"},
145
+ {"name": "Ghana Open Data API", "description": "Ghanaian government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov.gh/", "pricing": "free"},
146
+ {"name": "Egypt Open Data API", "description": "Egyptian government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov.eg/", "pricing": "free"},
147
+ {"name": "Morocco Open Data API", "description": "Moroccan government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov.ma/", "pricing": "free"},
148
+ {"name": "Tunisia Open Data API", "description": "Tunisian government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov.tn/", "pricing": "free"},
149
+ {"name": "Rwanda Open Data API", "description": "Rwandan government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://statistics.gov.rw/", "pricing": "free"},
150
+ {"name": "Tanzania Open Data API", "description": "Tanzanian government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "http://opendata.go.tz/", "pricing": "free"},
151
+ {"name": "Uganda Open Data API", "description": "Ugandan government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.ug/", "pricing": "free"},
152
+ {"name": "Ethiopia Open Data API", "description": "Ethiopian government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gov.et/", "pricing": "free"},
153
+ {"name": "Senegal Open Data API", "description": "Senegalese government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gouv.sn/", "pricing": "free"},
154
+ {"name": "Ivory Coast Data API", "description": "Côte d'Ivoire government data", "category": "Government", "auth": "None", "https": True, "cors": "yes", "link": "https://data.gouv.ci/", "pricing": "free"},
155
+ ]
156
+
157
+ DEVELOPER_TOOLS = [
158
+ {"name": "Vercel API", "description": "Frontend cloud platform", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://vercel.com/docs/rest-api", "pricing": "freemium"},
159
+ {"name": "Netlify API", "description": "Web development platform", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://docs.netlify.com/api/", "pricing": "freemium"},
160
+ {"name": "Railway API", "description": "Infrastructure platform for developers", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://docs.railway.app/reference/public-api", "pricing": "freemium"},
161
+ {"name": "Render API", "description": "Unified cloud for web apps", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://api-docs.render.com/", "pricing": "freemium"},
162
+ {"name": "Fly.io API", "description": "App deployment platform", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://fly.io/docs/machines/api/", "pricing": "freemium"},
163
+ {"name": "Deno Deploy API", "description": "Edge serverless platform", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://deno.com/deploy/docs", "pricing": "freemium"},
164
+ {"name": "Supabase API", "description": "Open source Firebase alternative", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://supabase.com/docs/reference", "pricing": "freemium"},
165
+ {"name": "PlanetScale API", "description": "Serverless MySQL platform", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://planetscale.com/docs/reference/api-overview", "pricing": "freemium"},
166
+ {"name": "Neon API", "description": "Serverless Postgres", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://neon.tech/docs/reference/api-reference", "pricing": "freemium"},
167
+ {"name": "Upstash API", "description": "Serverless data platform", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://docs.upstash.com/", "pricing": "freemium"},
168
+ {"name": "Turso API", "description": "SQLite for the edge", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://docs.turso.tech/", "pricing": "freemium"},
169
+ {"name": "Xata API", "description": "Serverless database platform", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://xata.io/docs/api-reference/", "pricing": "freemium"},
170
+ {"name": "Fauna API", "description": "Distributed document-relational database", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://docs.fauna.com/fauna/current/reference/http/", "pricing": "freemium"},
171
+ {"name": "CockroachDB API", "description": "Distributed SQL database", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.cockroachlabs.com/docs/api/", "pricing": "freemium"},
172
+ {"name": "Prisma Data Platform API", "description": "Database tools for developers", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.prisma.io/docs/data-platform", "pricing": "freemium"},
173
+ {"name": "Cloudflare Workers API", "description": "Edge serverless platform", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://developers.cloudflare.com/workers/", "pricing": "freemium"},
174
+ {"name": "Fastly API", "description": "Edge cloud platform", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://developer.fastly.com/reference/api/", "pricing": "paid"},
175
+ {"name": "Bunny CDN API", "description": "Global content delivery", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://docs.bunny.net/reference/bunnynet-api-overview", "pricing": "paid"},
176
+ {"name": "KeyCDN API", "description": "Content delivery network", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://www.keycdn.com/api", "pricing": "paid"},
177
+ {"name": "StackPath API", "description": "Edge services platform", "category": "Developer Tools", "auth": "apiKey", "https": True, "cors": "yes", "link": "https://stackpath.dev/reference", "pricing": "paid"},
178
+ ]
179
+
180
+ def main():
181
+ print("🦞 APIClaw Night Expansion - Batch 3 (Regional & Specialized)")
182
+ print("=" * 50)
183
+
184
+ registry = load_registry()
185
+ initial_count = len(registry['apis'])
186
+ print(f"Starting with {initial_count} APIs")
187
+
188
+ all_batches = [
189
+ ("Nordic Government", NORDIC_GOVERNMENT),
190
+ ("EU Government", EU_GOVERNMENT),
191
+ ("Asian APIs", ASIAN_APIS),
192
+ ("Americas APIs", AMERICAS_APIS),
193
+ ("Oceania & Africa", OCEANIA_AFRICA_APIS),
194
+ ("Developer Tools", DEVELOPER_TOOLS),
195
+ ]
196
+
197
+ total_added = 0
198
+ for name, batch in all_batches:
199
+ added = add_apis(registry, batch)
200
+ total_added += added
201
+ print(f" {name}: +{added} APIs")
202
+
203
+ save_registry(registry)
204
+ final_count = len(registry['apis'])
205
+
206
+ print("=" * 50)
207
+ print(f"✅ Added {total_added} new APIs")
208
+ print(f"📊 Total: {initial_count} → {final_count}")
209
+
210
+ return total_added
211
+
212
+ if __name__ == "__main__":
213
+ main()