@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,441 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ APIClaw Night Expansion - Auto-fetch and add new APIs
4
+ Sources: apis.guru, Awesome APIs lists, OpenAPI directories
5
+ """
6
+
7
+ import json
8
+ import re
9
+ import urllib.request
10
+ import urllib.error
11
+ from datetime import datetime
12
+ from pathlib import Path
13
+
14
+ REGISTRY_PATH = Path(__file__).parent.parent / "src" / "registry" / "apis.json"
15
+
16
+ def generate_id(name: str) -> str:
17
+ """Generate clean ID from name"""
18
+ clean = re.sub(r'[^a-z0-9]+', '-', name.lower()).strip('-')
19
+ return clean[:50]
20
+
21
+ def fetch_json(url: str, timeout: int = 30) -> dict:
22
+ """Fetch JSON from URL"""
23
+ try:
24
+ req = urllib.request.Request(url, headers={'User-Agent': 'APIClaw/1.0'})
25
+ with urllib.request.urlopen(req, timeout=timeout) as resp:
26
+ return json.loads(resp.read().decode())
27
+ except Exception as e:
28
+ print(f" Error fetching {url}: {e}")
29
+ return None
30
+
31
+ def load_registry() -> dict:
32
+ """Load existing registry"""
33
+ with open(REGISTRY_PATH, 'r') as f:
34
+ return json.load(f)
35
+
36
+ def save_registry(registry: dict):
37
+ """Save registry"""
38
+ with open(REGISTRY_PATH, 'w') as f:
39
+ json.dump(registry, f, indent=2)
40
+
41
+ def get_existing_ids(registry: dict) -> set:
42
+ """Get set of existing API IDs"""
43
+ return {api['id'] for api in registry['apis']}
44
+
45
+ def parse_apis_guru(data: dict) -> list:
46
+ """Parse apis.guru format into our registry format"""
47
+ apis = []
48
+
49
+ for provider, info in data.items():
50
+ try:
51
+ preferred = info.get('preferred', '')
52
+ versions = info.get('versions', {})
53
+
54
+ if not versions:
55
+ continue
56
+
57
+ version_info = versions.get(preferred, list(versions.values())[0])
58
+ api_info = version_info.get('info', {})
59
+
60
+ name = api_info.get('title', provider)
61
+ description = api_info.get('description', '')[:500] if api_info.get('description') else f"API for {name}"
62
+
63
+ # Extract category from x-apisguru-categories
64
+ categories = api_info.get('x-apisguru-categories', [])
65
+ category = categories[0].capitalize() if categories else 'API Services'
66
+
67
+ # Clean category names
68
+ category_map = {
69
+ 'financial': 'Finance',
70
+ 'cloud': 'Cloud Services',
71
+ 'machine_learning': 'Machine Learning',
72
+ 'ecommerce': 'E-Commerce',
73
+ 'iot': 'IoT',
74
+ 'payment': 'Payments',
75
+ 'security': 'Security',
76
+ 'social': 'Social Media',
77
+ 'marketing': 'Marketing',
78
+ 'analytics': 'Analytics',
79
+ 'media': 'Media',
80
+ 'messaging': 'Communication',
81
+ 'location': 'Geocoding',
82
+ 'storage': 'Cloud Storage',
83
+ 'developer_tools': 'Development',
84
+ 'telecom': 'Communication',
85
+ 'text': 'Text Analysis',
86
+ 'energy': 'Utilities',
87
+ 'enterprise': 'Business',
88
+ 'backend': 'Backend Services',
89
+ 'open_data': 'Open Data',
90
+ 'search': 'Search',
91
+ 'entertainment': 'Entertainment',
92
+ 'email': 'Email',
93
+ 'hosting': 'Hosting',
94
+ 'collaboration': 'Collaboration',
95
+ 'support': 'Customer Support',
96
+ 'transport': 'Transportation'
97
+ }
98
+ category = category_map.get(category.lower(), category)
99
+
100
+ # Get contact/link info
101
+ contact = api_info.get('contact', {})
102
+ link = contact.get('url', '')
103
+ if not link:
104
+ link = f"https://{provider}"
105
+
106
+ # Determine auth type
107
+ auth = 'apiKey' # Most OpenAPI specs use API keys
108
+
109
+ api_id = generate_id(name)
110
+
111
+ apis.append({
112
+ "id": api_id,
113
+ "name": name,
114
+ "description": description[:300],
115
+ "category": category,
116
+ "auth": auth,
117
+ "https": True,
118
+ "cors": "unknown",
119
+ "link": link,
120
+ "pricing": "unknown",
121
+ "keywords": categories[:5] if categories else [],
122
+ "source": "apis.guru"
123
+ })
124
+ except Exception as e:
125
+ print(f" Error parsing {provider}: {e}")
126
+ continue
127
+
128
+ return apis
129
+
130
+ def add_awesome_apis_batch() -> list:
131
+ """Add curated APIs from Awesome APIs and other sources"""
132
+ apis = [
133
+ # DevOps & CI/CD
134
+ {"name": "Jenkins API", "description": "Jenkins automation server REST API", "category": "Development", "link": "https://www.jenkins.io/doc/book/using/remote-access-api/", "auth": "apiKey"},
135
+ {"name": "Terraform Cloud API", "description": "HashiCorp Terraform Cloud REST API", "category": "Development", "link": "https://developer.hashicorp.com/terraform/cloud-docs/api-docs", "auth": "apiKey"},
136
+ {"name": "Ansible Tower API", "description": "Red Hat Ansible Automation Platform API", "category": "Development", "link": "https://docs.ansible.com/ansible-tower/latest/html/towerapi/", "auth": "apiKey"},
137
+ {"name": "Pulumi API", "description": "Infrastructure as Code platform API", "category": "Development", "link": "https://www.pulumi.com/docs/reference/service-rest-api/", "auth": "apiKey"},
138
+
139
+ # Database & Data
140
+ {"name": "MongoDB Atlas API", "description": "Cloud database service management API", "category": "Databases", "link": "https://www.mongodb.com/docs/atlas/api/", "auth": "apiKey"},
141
+ {"name": "Redis Cloud API", "description": "Redis Enterprise Cloud API", "category": "Databases", "link": "https://docs.redis.com/latest/rc/api/", "auth": "apiKey"},
142
+ {"name": "Elastic Cloud API", "description": "Elasticsearch Service API", "category": "Databases", "link": "https://www.elastic.co/guide/en/cloud/current/ec-restful-api.html", "auth": "apiKey"},
143
+ {"name": "Fauna API", "description": "Serverless database API", "category": "Databases", "link": "https://docs.fauna.com/fauna/current/reference/http/", "auth": "apiKey"},
144
+ {"name": "PlanetScale API", "description": "MySQL-compatible serverless database", "category": "Databases", "link": "https://docs.planetscale.com/docs/concepts/planetscale-api-overview", "auth": "apiKey"},
145
+ {"name": "Neon API", "description": "Serverless Postgres API", "category": "Databases", "link": "https://neon.tech/docs/introduction/about", "auth": "apiKey"},
146
+ {"name": "Turso API", "description": "Edge SQLite database API", "category": "Databases", "link": "https://docs.turso.tech/reference/client-access", "auth": "apiKey"},
147
+
148
+ # E-commerce
149
+ {"name": "Shopify Storefront API", "description": "Build custom shopping experiences", "category": "E-Commerce", "link": "https://shopify.dev/docs/api/storefront", "auth": "OAuth"},
150
+ {"name": "WooCommerce API", "description": "WordPress e-commerce REST API", "category": "E-Commerce", "link": "https://woocommerce.github.io/woocommerce-rest-api-docs/", "auth": "apiKey"},
151
+ {"name": "BigCommerce API", "description": "E-commerce platform API", "category": "E-Commerce", "link": "https://developer.bigcommerce.com/docs/rest-catalog", "auth": "apiKey"},
152
+ {"name": "Magento API", "description": "Adobe Commerce REST API", "category": "E-Commerce", "link": "https://devdocs.magento.com/guides/v2.4/rest/bk-rest.html", "auth": "OAuth"},
153
+ {"name": "Saleor API", "description": "Open-source e-commerce GraphQL API", "category": "E-Commerce", "link": "https://docs.saleor.io/docs/developer/api-conventions", "auth": "apiKey"},
154
+
155
+ # Marketing & Analytics
156
+ {"name": "HubSpot API", "description": "CRM and marketing automation API", "category": "Marketing", "link": "https://developers.hubspot.com/docs/api/overview", "auth": "OAuth"},
157
+ {"name": "Mailchimp API", "description": "Email marketing platform API", "category": "Marketing", "link": "https://mailchimp.com/developer/marketing/api/", "auth": "apiKey"},
158
+ {"name": "Mixpanel API", "description": "Product analytics API", "category": "Analytics", "link": "https://developer.mixpanel.com/reference/overview", "auth": "apiKey"},
159
+ {"name": "Amplitude API", "description": "Product analytics platform API", "category": "Analytics", "link": "https://www.docs.developers.amplitude.com/", "auth": "apiKey"},
160
+ {"name": "Segment API", "description": "Customer data platform API", "category": "Analytics", "link": "https://segment.com/docs/connections/sources/catalog/libraries/server/http-api/", "auth": "apiKey"},
161
+ {"name": "Plausible API", "description": "Privacy-friendly analytics API", "category": "Analytics", "link": "https://plausible.io/docs/stats-api", "auth": "apiKey"},
162
+ {"name": "PostHog API", "description": "Open-source product analytics API", "category": "Analytics", "link": "https://posthog.com/docs/api", "auth": "apiKey"},
163
+
164
+ # Communication & Messaging
165
+ {"name": "Twilio API", "description": "Cloud communications platform", "category": "Communication", "link": "https://www.twilio.com/docs/usage/api", "auth": "apiKey"},
166
+ {"name": "SendGrid API", "description": "Email delivery service API", "category": "Email", "link": "https://docs.sendgrid.com/api-reference/how-to-use-the-sendgrid-v3-api/authentication", "auth": "apiKey"},
167
+ {"name": "Vonage API", "description": "Communication APIs (formerly Nexmo)", "category": "Communication", "link": "https://developer.vonage.com/en/api", "auth": "apiKey"},
168
+ {"name": "Pusher API", "description": "Real-time messaging API", "category": "Communication", "link": "https://pusher.com/docs/channels/library_auth_reference/rest-api/", "auth": "apiKey"},
169
+ {"name": "Ably API", "description": "Real-time messaging infrastructure", "category": "Communication", "link": "https://ably.com/docs/api", "auth": "apiKey"},
170
+ {"name": "Stream API", "description": "Activity feeds and chat API", "category": "Communication", "link": "https://getstream.io/docs/rest/", "auth": "apiKey"},
171
+ {"name": "Intercom API", "description": "Customer messaging platform API", "category": "Customer Support", "link": "https://developers.intercom.com/intercom-api-reference/reference", "auth": "apiKey"},
172
+ {"name": "Zendesk API", "description": "Customer service platform API", "category": "Customer Support", "link": "https://developer.zendesk.com/api-reference/", "auth": "apiKey"},
173
+ {"name": "Freshdesk API", "description": "Customer support software API", "category": "Customer Support", "link": "https://developers.freshdesk.com/api/", "auth": "apiKey"},
174
+
175
+ # AI & Machine Learning
176
+ {"name": "OpenAI API", "description": "GPT models and AI services", "category": "Machine Learning", "link": "https://platform.openai.com/docs/api-reference", "auth": "apiKey"},
177
+ {"name": "Anthropic API", "description": "Claude AI assistant API", "category": "Machine Learning", "link": "https://docs.anthropic.com/claude/reference/getting-started-with-the-api", "auth": "apiKey"},
178
+ {"name": "Cohere API", "description": "Enterprise AI platform API", "category": "Machine Learning", "link": "https://docs.cohere.com/reference/about", "auth": "apiKey"},
179
+ {"name": "Replicate API", "description": "Run ML models in the cloud", "category": "Machine Learning", "link": "https://replicate.com/docs/reference/http", "auth": "apiKey"},
180
+ {"name": "Hugging Face API", "description": "ML model inference API", "category": "Machine Learning", "link": "https://huggingface.co/docs/api-inference/index", "auth": "apiKey"},
181
+ {"name": "Stability AI API", "description": "Image generation API", "category": "Machine Learning", "link": "https://platform.stability.ai/docs/api-reference", "auth": "apiKey"},
182
+ {"name": "ElevenLabs API", "description": "AI voice synthesis API", "category": "Machine Learning", "link": "https://docs.elevenlabs.io/api-reference/text-to-speech", "auth": "apiKey"},
183
+ {"name": "AssemblyAI API", "description": "Speech-to-text AI API", "category": "Machine Learning", "link": "https://www.assemblyai.com/docs/", "auth": "apiKey"},
184
+ {"name": "Deepgram API", "description": "Speech recognition API", "category": "Machine Learning", "link": "https://developers.deepgram.com/docs/", "auth": "apiKey"},
185
+ {"name": "Perplexity API", "description": "AI search and research API", "category": "Machine Learning", "link": "https://docs.perplexity.ai/", "auth": "apiKey"},
186
+
187
+ # Cloud Platforms
188
+ {"name": "Vercel API", "description": "Frontend deployment platform API", "category": "Cloud Services", "link": "https://vercel.com/docs/rest-api", "auth": "apiKey"},
189
+ {"name": "Netlify API", "description": "Web deployment platform API", "category": "Cloud Services", "link": "https://docs.netlify.com/api/get-started/", "auth": "apiKey"},
190
+ {"name": "Railway API", "description": "Infrastructure deployment platform", "category": "Cloud Services", "link": "https://docs.railway.app/reference/public-api", "auth": "apiKey"},
191
+ {"name": "Render API", "description": "Cloud application platform API", "category": "Cloud Services", "link": "https://api-docs.render.com/reference/introduction", "auth": "apiKey"},
192
+ {"name": "Fly.io API", "description": "Distributed application platform", "category": "Cloud Services", "link": "https://fly.io/docs/reference/machines/", "auth": "apiKey"},
193
+ {"name": "Cloudflare API", "description": "CDN and security services API", "category": "Cloud Services", "link": "https://developers.cloudflare.com/api/", "auth": "apiKey"},
194
+ {"name": "DigitalOcean API", "description": "Cloud infrastructure API", "category": "Cloud Services", "link": "https://docs.digitalocean.com/reference/api/", "auth": "apiKey"},
195
+ {"name": "Linode API", "description": "Cloud computing services API", "category": "Cloud Services", "link": "https://www.linode.com/docs/api/", "auth": "apiKey"},
196
+ {"name": "Vultr API", "description": "Cloud compute API", "category": "Cloud Services", "link": "https://www.vultr.com/api/", "auth": "apiKey"},
197
+ {"name": "Hetzner Cloud API", "description": "European cloud platform API", "category": "Cloud Services", "link": "https://docs.hetzner.cloud/", "auth": "apiKey"},
198
+
199
+ # Payments
200
+ {"name": "Stripe API", "description": "Payment processing platform", "category": "Payments", "link": "https://stripe.com/docs/api", "auth": "apiKey"},
201
+ {"name": "Square API", "description": "Payment and commerce platform", "category": "Payments", "link": "https://developer.squareup.com/reference/square", "auth": "OAuth"},
202
+ {"name": "Braintree API", "description": "PayPal payment gateway API", "category": "Payments", "link": "https://developer.paypal.com/braintree/docs/start/overview", "auth": "apiKey"},
203
+ {"name": "Adyen API", "description": "Global payments platform API", "category": "Payments", "link": "https://docs.adyen.com/api-explorer/", "auth": "apiKey"},
204
+ {"name": "Paddle API", "description": "SaaS billing platform API", "category": "Payments", "link": "https://developer.paddle.com/api-reference/about-paddle-api/", "auth": "apiKey"},
205
+ {"name": "Lemon Squeezy API", "description": "Digital product payments API", "category": "Payments", "link": "https://docs.lemonsqueezy.com/api", "auth": "apiKey"},
206
+ {"name": "Wise API", "description": "International payments API", "category": "Payments", "link": "https://docs.wise.com/api-docs/", "auth": "apiKey"},
207
+ {"name": "Plaid API", "description": "Financial data connectivity", "category": "Finance", "link": "https://plaid.com/docs/api/", "auth": "apiKey"},
208
+ {"name": "Dwolla API", "description": "ACH payment platform API", "category": "Payments", "link": "https://developers.dwolla.com/docs", "auth": "apiKey"},
209
+
210
+ # Crypto & Web3
211
+ {"name": "Alchemy API", "description": "Web3 development platform", "category": "Blockchain", "link": "https://docs.alchemy.com/reference/api-overview", "auth": "apiKey"},
212
+ {"name": "Infura API", "description": "Ethereum node API", "category": "Blockchain", "link": "https://docs.infura.io/infura/", "auth": "apiKey"},
213
+ {"name": "Moralis API", "description": "Web3 data API", "category": "Blockchain", "link": "https://docs.moralis.io/web3-data-api/", "auth": "apiKey"},
214
+ {"name": "QuickNode API", "description": "Blockchain infrastructure API", "category": "Blockchain", "link": "https://www.quicknode.com/docs/welcome", "auth": "apiKey"},
215
+ {"name": "CoinGecko API", "description": "Cryptocurrency data API", "category": "Cryptocurrency", "link": "https://www.coingecko.com/en/api/documentation", "auth": "None"},
216
+ {"name": "CoinMarketCap API", "description": "Crypto market data API", "category": "Cryptocurrency", "link": "https://coinmarketcap.com/api/documentation/v1/", "auth": "apiKey"},
217
+ {"name": "Binance API", "description": "Cryptocurrency exchange API", "category": "Cryptocurrency", "link": "https://binance-docs.github.io/apidocs/", "auth": "apiKey"},
218
+ {"name": "Coinbase API", "description": "Cryptocurrency platform API", "category": "Cryptocurrency", "link": "https://docs.cdp.coinbase.com/", "auth": "apiKey"},
219
+ {"name": "Kraken API", "description": "Crypto exchange API", "category": "Cryptocurrency", "link": "https://docs.kraken.com/rest/", "auth": "apiKey"},
220
+
221
+ # Media & Content
222
+ {"name": "Cloudinary API", "description": "Media management platform", "category": "Media", "link": "https://cloudinary.com/documentation/image_transformations", "auth": "apiKey"},
223
+ {"name": "Imgix API", "description": "Real-time image processing", "category": "Media", "link": "https://docs.imgix.com/apis/rendering", "auth": "apiKey"},
224
+ {"name": "Mux API", "description": "Video infrastructure API", "category": "Media", "link": "https://docs.mux.com/api-reference", "auth": "apiKey"},
225
+ {"name": "Bunny.net API", "description": "CDN and storage API", "category": "Media", "link": "https://docs.bunny.net/reference/bunnynet-api-overview", "auth": "apiKey"},
226
+ {"name": "Uploadcare API", "description": "File handling API", "category": "Media", "link": "https://uploadcare.com/docs/start/", "auth": "apiKey"},
227
+
228
+ # Authentication
229
+ {"name": "Auth0 API", "description": "Identity platform API", "category": "Security", "link": "https://auth0.com/docs/api", "auth": "apiKey"},
230
+ {"name": "Clerk API", "description": "User authentication API", "category": "Security", "link": "https://clerk.com/docs/reference/backend-api", "auth": "apiKey"},
231
+ {"name": "Supabase Auth API", "description": "Authentication service API", "category": "Security", "link": "https://supabase.com/docs/reference/javascript/auth-api", "auth": "apiKey"},
232
+ {"name": "Firebase Auth API", "description": "Google authentication API", "category": "Security", "link": "https://firebase.google.com/docs/reference/rest/auth", "auth": "apiKey"},
233
+ {"name": "WorkOS API", "description": "Enterprise auth API", "category": "Security", "link": "https://workos.com/docs/reference", "auth": "apiKey"},
234
+ {"name": "Stytch API", "description": "Passwordless auth API", "category": "Security", "link": "https://stytch.com/docs/api", "auth": "apiKey"},
235
+
236
+ # Productivity
237
+ {"name": "Notion API", "description": "Workspace and notes API", "category": "Productivity", "link": "https://developers.notion.com/reference/intro", "auth": "apiKey"},
238
+ {"name": "Airtable API", "description": "Database/spreadsheet API", "category": "Productivity", "link": "https://airtable.com/developers/web/api/introduction", "auth": "apiKey"},
239
+ {"name": "Linear API", "description": "Issue tracking API", "category": "Productivity", "link": "https://developers.linear.app/docs/graphql/working-with-the-graphql-api", "auth": "apiKey"},
240
+ {"name": "Todoist API", "description": "Task management API", "category": "Productivity", "link": "https://developer.todoist.com/rest/v2/", "auth": "apiKey"},
241
+ {"name": "ClickUp API", "description": "Project management API", "category": "Productivity", "link": "https://clickup.com/api", "auth": "apiKey"},
242
+ {"name": "Monday.com API", "description": "Work management platform API", "category": "Productivity", "link": "https://developer.monday.com/api-reference/docs", "auth": "apiKey"},
243
+ {"name": "Asana API", "description": "Project management API", "category": "Productivity", "link": "https://developers.asana.com/docs/asana", "auth": "apiKey"},
244
+
245
+ # Social & Content Platforms
246
+ {"name": "Discord API", "description": "Chat platform API", "category": "Social Media", "link": "https://discord.com/developers/docs/intro", "auth": "apiKey"},
247
+ {"name": "Slack API", "description": "Workspace messaging API", "category": "Social Media", "link": "https://api.slack.com/", "auth": "OAuth"},
248
+ {"name": "Twitter/X API", "description": "Social media platform API", "category": "Social Media", "link": "https://developer.twitter.com/en/docs", "auth": "OAuth"},
249
+ {"name": "Meta Graph API", "description": "Facebook/Instagram API", "category": "Social Media", "link": "https://developers.facebook.com/docs/graph-api/", "auth": "OAuth"},
250
+ {"name": "TikTok API", "description": "Short video platform API", "category": "Social Media", "link": "https://developers.tiktok.com/doc/overview", "auth": "OAuth"},
251
+ {"name": "Reddit API", "description": "Social news platform API", "category": "Social Media", "link": "https://www.reddit.com/dev/api/", "auth": "OAuth"},
252
+ {"name": "Mastodon API", "description": "Decentralized social API", "category": "Social Media", "link": "https://docs.joinmastodon.org/api/", "auth": "OAuth"},
253
+ {"name": "Bluesky API", "description": "Decentralized social protocol", "category": "Social Media", "link": "https://docs.bsky.app/docs/api/", "auth": "apiKey"},
254
+
255
+ # Geographic & Location
256
+ {"name": "Mapbox API", "description": "Maps and location services", "category": "Geocoding", "link": "https://docs.mapbox.com/api/overview/", "auth": "apiKey"},
257
+ {"name": "HERE API", "description": "Location platform services", "category": "Geocoding", "link": "https://developer.here.com/documentation", "auth": "apiKey"},
258
+ {"name": "Geocod.io API", "description": "US/Canada geocoding API", "category": "Geocoding", "link": "https://www.geocod.io/docs/", "auth": "apiKey"},
259
+ {"name": "OpenCage API", "description": "Forward/reverse geocoding", "category": "Geocoding", "link": "https://opencagedata.com/api", "auth": "apiKey"},
260
+ {"name": "IPinfo API", "description": "IP geolocation API", "category": "Geocoding", "link": "https://ipinfo.io/developers", "auth": "apiKey"},
261
+ {"name": "MaxMind GeoIP API", "description": "IP intelligence API", "category": "Geocoding", "link": "https://dev.maxmind.com/geoip/", "auth": "apiKey"},
262
+
263
+ # Health & Fitness
264
+ {"name": "Apple HealthKit API", "description": "Health data API for iOS", "category": "Health", "link": "https://developer.apple.com/documentation/healthkit", "auth": "OAuth"},
265
+ {"name": "Google Fit API", "description": "Fitness tracking API", "category": "Health", "link": "https://developers.google.com/fit/rest/", "auth": "OAuth"},
266
+ {"name": "Withings API", "description": "Health device data API", "category": "Health", "link": "https://developer.withings.com/api-reference", "auth": "OAuth"},
267
+ {"name": "Peloton API", "description": "Connected fitness API", "category": "Health", "link": "https://github.com/philosowaffle/peloton-to-garmin", "auth": "apiKey"},
268
+
269
+ # Food & Recipes
270
+ {"name": "Edamam API", "description": "Nutrition and recipe API", "category": "Food & Drink", "link": "https://developer.edamam.com/", "auth": "apiKey"},
271
+ {"name": "Spoonacular API", "description": "Food and recipe data API", "category": "Food & Drink", "link": "https://spoonacular.com/food-api/docs", "auth": "apiKey"},
272
+ {"name": "Yummly API", "description": "Recipe search API", "category": "Food & Drink", "link": "https://developer.yummly.com/", "auth": "apiKey"},
273
+
274
+ # News & Media
275
+ {"name": "NewsAPI", "description": "News aggregation API", "category": "News", "link": "https://newsapi.org/docs", "auth": "apiKey"},
276
+ {"name": "Guardian API", "description": "The Guardian news API", "category": "News", "link": "https://open-platform.theguardian.com/documentation/", "auth": "apiKey"},
277
+ {"name": "NY Times API", "description": "New York Times content", "category": "News", "link": "https://developer.nytimes.com/apis", "auth": "apiKey"},
278
+ {"name": "GNews API", "description": "Google News aggregator", "category": "News", "link": "https://gnews.io/docs/v4", "auth": "apiKey"},
279
+ {"name": "Currents API", "description": "World news API", "category": "News", "link": "https://currentsapi.services/en/docs/", "auth": "apiKey"},
280
+
281
+ # More AI/ML Services
282
+ {"name": "Whisper API", "description": "OpenAI speech recognition", "category": "Machine Learning", "link": "https://platform.openai.com/docs/guides/speech-to-text", "auth": "apiKey"},
283
+ {"name": "DALL-E API", "description": "OpenAI image generation", "category": "Machine Learning", "link": "https://platform.openai.com/docs/guides/images", "auth": "apiKey"},
284
+ {"name": "Midjourney API", "description": "AI image generation", "category": "Machine Learning", "link": "https://docs.midjourney.com/", "auth": "apiKey"},
285
+ {"name": "RunPod API", "description": "GPU cloud for AI", "category": "Machine Learning", "link": "https://docs.runpod.io/reference/overview", "auth": "apiKey"},
286
+ {"name": "Modal API", "description": "Serverless GPU/ML platform", "category": "Machine Learning", "link": "https://modal.com/docs/reference", "auth": "apiKey"},
287
+ {"name": "Together AI API", "description": "Open-source LLM hosting", "category": "Machine Learning", "link": "https://docs.together.ai/reference/inference", "auth": "apiKey"},
288
+ {"name": "Groq API", "description": "Fast LLM inference API", "category": "Machine Learning", "link": "https://console.groq.com/docs/quickstart", "auth": "apiKey"},
289
+ {"name": "Mistral API", "description": "Open-weight LLM API", "category": "Machine Learning", "link": "https://docs.mistral.ai/api/", "auth": "apiKey"},
290
+
291
+ # Government & Public Data
292
+ {"name": "Data.gov API", "description": "US Government open data", "category": "Government", "link": "https://api.data.gov/docs/", "auth": "apiKey"},
293
+ {"name": "UK Parliament API", "description": "UK legislative data", "category": "Government", "link": "https://developer.parliament.uk/", "auth": "None"},
294
+ {"name": "OpenFDA API", "description": "FDA public data API", "category": "Health", "link": "https://open.fda.gov/apis/", "auth": "None"},
295
+ {"name": "SEC EDGAR API", "description": "US financial filings", "category": "Finance", "link": "https://www.sec.gov/search-filings/edgar-application-programming-interfaces", "auth": "None"},
296
+ {"name": "FCC API", "description": "Federal Communications data", "category": "Government", "link": "https://www.fcc.gov/developers", "auth": "None"},
297
+ {"name": "Census Bureau API", "description": "US demographic data", "category": "Government", "link": "https://www.census.gov/data/developers/data-sets.html", "auth": "apiKey"},
298
+
299
+ # Finance & Trading
300
+ {"name": "Alpha Vantage API", "description": "Stock market data API", "category": "Finance", "link": "https://www.alphavantage.co/documentation/", "auth": "apiKey"},
301
+ {"name": "Polygon.io API", "description": "Financial market data", "category": "Finance", "link": "https://polygon.io/docs/", "auth": "apiKey"},
302
+ {"name": "IEX Cloud API", "description": "Financial data platform", "category": "Finance", "link": "https://iexcloud.io/docs/", "auth": "apiKey"},
303
+ {"name": "Yahoo Finance API", "description": "Stock quotes and data", "category": "Finance", "link": "https://www.yahoofinanceapi.com/", "auth": "apiKey"},
304
+ {"name": "Finnhub API", "description": "Real-time stock API", "category": "Finance", "link": "https://finnhub.io/docs/api", "auth": "apiKey"},
305
+ {"name": "Twelve Data API", "description": "Financial data API", "category": "Finance", "link": "https://twelvedata.com/docs", "auth": "apiKey"},
306
+ {"name": "Tradier API", "description": "Brokerage trading API", "category": "Finance", "link": "https://documentation.tradier.com/", "auth": "apiKey"},
307
+ {"name": "Interactive Brokers API", "description": "Trading platform API", "category": "Finance", "link": "https://interactivebrokers.github.io/cpwebapi/", "auth": "apiKey"},
308
+
309
+ # More Services
310
+ {"name": "Calendly API", "description": "Scheduling automation API", "category": "Productivity", "link": "https://developer.calendly.com/api-docs/", "auth": "apiKey"},
311
+ {"name": "Cal.com API", "description": "Open-source scheduling API", "category": "Productivity", "link": "https://cal.com/docs/enterprise-features/api", "auth": "apiKey"},
312
+ {"name": "Typeform API", "description": "Form builder API", "category": "Productivity", "link": "https://developer.typeform.com/", "auth": "apiKey"},
313
+ {"name": "Tally API", "description": "Form creation API", "category": "Productivity", "link": "https://tally.so/help/webhooks", "auth": "apiKey"},
314
+ {"name": "Jotform API", "description": "Online forms API", "category": "Productivity", "link": "https://api.jotform.com/docs/", "auth": "apiKey"},
315
+ {"name": "DocuSign API", "description": "E-signature platform API", "category": "Business", "link": "https://developers.docusign.com/docs/esign-rest-api/", "auth": "OAuth"},
316
+ {"name": "PandaDoc API", "description": "Document automation API", "category": "Business", "link": "https://developers.pandadoc.com/reference/about-pandadoc-api", "auth": "apiKey"},
317
+ {"name": "HelloSign API", "description": "E-signature API (Dropbox)", "category": "Business", "link": "https://developers.hellosign.com/", "auth": "apiKey"},
318
+ {"name": "Loom API", "description": "Video messaging API", "category": "Media", "link": "https://dev.loom.com/docs/", "auth": "apiKey"},
319
+ {"name": "Descript API", "description": "Audio/video editing API", "category": "Media", "link": "https://api.descript.com/", "auth": "apiKey"},
320
+
321
+ # Gaming & Entertainment
322
+ {"name": "RAWG API", "description": "Video game database API", "category": "Games", "link": "https://rawg.io/apidocs", "auth": "apiKey"},
323
+ {"name": "IGDB API", "description": "Internet Game Database API", "category": "Games", "link": "https://api-docs.igdb.com/", "auth": "apiKey"},
324
+ {"name": "Giant Bomb API", "description": "Video game wiki API", "category": "Games", "link": "https://www.giantbomb.com/api/", "auth": "apiKey"},
325
+ {"name": "Chess.com API", "description": "Chess platform API", "category": "Games", "link": "https://www.chess.com/news/view/published-data-api", "auth": "None"},
326
+ {"name": "Lichess API", "description": "Open-source chess API", "category": "Games", "link": "https://lichess.org/api", "auth": "apiKey"},
327
+ {"name": "Pokemon TCG API", "description": "Pokemon card game data", "category": "Games", "link": "https://pokemontcg.io/", "auth": "None"},
328
+ {"name": "Magic: The Gathering API", "description": "MTG card database", "category": "Games", "link": "https://docs.magicthegathering.io/", "auth": "None"},
329
+
330
+ # Email Services
331
+ {"name": "Resend API", "description": "Email for developers", "category": "Email", "link": "https://resend.com/docs/api-reference/introduction", "auth": "apiKey"},
332
+ {"name": "Postmark API", "description": "Transactional email API", "category": "Email", "link": "https://postmarkapp.com/developer", "auth": "apiKey"},
333
+ {"name": "Mailgun API", "description": "Email delivery API", "category": "Email", "link": "https://documentation.mailgun.com/en/latest/api_reference.html", "auth": "apiKey"},
334
+ {"name": "Amazon SES API", "description": "AWS email service", "category": "Email", "link": "https://docs.aws.amazon.com/ses/latest/APIReference/Welcome.html", "auth": "apiKey"},
335
+ {"name": "SparkPost API", "description": "Email delivery platform", "category": "Email", "link": "https://developers.sparkpost.com/api/", "auth": "apiKey"},
336
+ {"name": "Loops API", "description": "Email for SaaS", "category": "Email", "link": "https://loops.so/docs/api-reference/overview", "auth": "apiKey"},
337
+
338
+ # Testing & QA
339
+ {"name": "BrowserStack API", "description": "Cross-browser testing API", "category": "Development", "link": "https://www.browserstack.com/docs/automate/api-reference/selenium/introduction", "auth": "apiKey"},
340
+ {"name": "Sauce Labs API", "description": "Testing platform API", "category": "Development", "link": "https://docs.saucelabs.com/dev/api/", "auth": "apiKey"},
341
+ {"name": "LambdaTest API", "description": "Browser testing API", "category": "Development", "link": "https://www.lambdatest.com/support/api-doc/", "auth": "apiKey"},
342
+ {"name": "Checkly API", "description": "Monitoring and testing API", "category": "Development", "link": "https://www.checklyhq.com/docs/cli/", "auth": "apiKey"},
343
+
344
+ # Search
345
+ {"name": "Algolia API", "description": "Search-as-a-service API", "category": "Search", "link": "https://www.algolia.com/doc/api-reference/api-methods/", "auth": "apiKey"},
346
+ {"name": "Elasticsearch API", "description": "Search engine API", "category": "Search", "link": "https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html", "auth": "apiKey"},
347
+ {"name": "Typesense API", "description": "Open-source search API", "category": "Search", "link": "https://typesense.org/docs/0.25.1/api/", "auth": "apiKey"},
348
+ {"name": "Meilisearch API", "description": "Open-source search engine", "category": "Search", "link": "https://www.meilisearch.com/docs/reference/api/overview", "auth": "apiKey"},
349
+ {"name": "Pinecone API", "description": "Vector database API", "category": "Search", "link": "https://docs.pinecone.io/reference/api/introduction", "auth": "apiKey"},
350
+ {"name": "Weaviate API", "description": "Vector search engine", "category": "Search", "link": "https://weaviate.io/developers/weaviate/api", "auth": "apiKey"},
351
+ {"name": "Qdrant API", "description": "Vector similarity search", "category": "Search", "link": "https://qdrant.tech/documentation/", "auth": "apiKey"},
352
+
353
+ # Swedish/Nordic APIs
354
+ {"name": "Swish API", "description": "Swedish mobile payments", "category": "Payments", "link": "https://developer.swish.nu/", "auth": "apiKey"},
355
+ {"name": "BankID API", "description": "Swedish electronic ID", "category": "Security", "link": "https://www.bankid.com/utvecklare/rp-info", "auth": "apiKey"},
356
+ {"name": "Klarna API", "description": "Buy now pay later API", "category": "Payments", "link": "https://docs.klarna.com/", "auth": "apiKey"},
357
+ {"name": "Trafiklab API", "description": "Swedish transit data", "category": "Transportation", "link": "https://www.trafiklab.se/api", "auth": "apiKey"},
358
+ {"name": "SMHI API", "description": "Swedish weather data", "category": "Weather", "link": "https://opendata.smhi.se/apidocs/", "auth": "None"},
359
+ {"name": "SCB API", "description": "Swedish statistics", "category": "Government", "link": "https://www.scb.se/vara-tjanster/oppna-data/api-for-statistikdatabasen/", "auth": "None"},
360
+ {"name": "Postnord API", "description": "Nordic postal services", "category": "Transportation", "link": "https://developer.postnord.com/", "auth": "apiKey"},
361
+ {"name": "Vipps API", "description": "Norwegian mobile payments", "category": "Payments", "link": "https://developer.vippsmobilepay.com/", "auth": "apiKey"},
362
+ ]
363
+
364
+ formatted = []
365
+ for api in apis:
366
+ formatted.append({
367
+ "id": generate_id(api["name"]),
368
+ "name": api["name"],
369
+ "description": api["description"],
370
+ "category": api.get("category", "API Services"),
371
+ "auth": api.get("auth", "apiKey"),
372
+ "https": True,
373
+ "cors": "unknown",
374
+ "link": api["link"],
375
+ "pricing": "unknown",
376
+ "keywords": [],
377
+ "source": "curated"
378
+ })
379
+
380
+ return formatted
381
+
382
+
383
+ def main():
384
+ print(f"šŸ¦ž APIClaw Night Expansion - {datetime.now().strftime('%Y-%m-%d %H:%M')}")
385
+ print("=" * 60)
386
+
387
+ # Load existing registry
388
+ registry = load_registry()
389
+ existing_ids = get_existing_ids(registry)
390
+ initial_count = len(registry['apis'])
391
+ print(f"šŸ“Š Current registry: {initial_count} APIs")
392
+
393
+ added_count = 0
394
+
395
+ # 1. Fetch from apis.guru
396
+ print("\nšŸ“„ Fetching from apis.guru...")
397
+ apis_guru_data = fetch_json("https://api.apis.guru/v2/list.json")
398
+ if apis_guru_data:
399
+ apis_guru_apis = parse_apis_guru(apis_guru_data)
400
+ print(f" Found {len(apis_guru_apis)} APIs from apis.guru")
401
+
402
+ for api in apis_guru_apis:
403
+ if api['id'] not in existing_ids:
404
+ registry['apis'].append(api)
405
+ existing_ids.add(api['id'])
406
+ added_count += 1
407
+
408
+ print(f" Added {added_count} new APIs from apis.guru")
409
+
410
+ # 2. Add curated APIs
411
+ print("\nšŸ“„ Adding curated APIs from Awesome APIs lists...")
412
+ curated_apis = add_awesome_apis_batch()
413
+ curated_added = 0
414
+ for api in curated_apis:
415
+ if api['id'] not in existing_ids:
416
+ registry['apis'].append(api)
417
+ existing_ids.add(api['id'])
418
+ curated_added += 1
419
+
420
+ added_count += curated_added
421
+ print(f" Added {curated_added} new curated APIs")
422
+
423
+ # Update registry metadata
424
+ registry['count'] = len(registry['apis'])
425
+ registry['lastUpdated'] = datetime.now().strftime('%Y-%m-%d')
426
+
427
+ # Save
428
+ save_registry(registry)
429
+
430
+ print("\n" + "=" * 60)
431
+ print(f"āœ… Expansion complete!")
432
+ print(f" Before: {initial_count}")
433
+ print(f" Added: {added_count}")
434
+ print(f" Total: {registry['count']}")
435
+
436
+ return added_count
437
+
438
+
439
+ if __name__ == "__main__":
440
+ added = main()
441
+ print(f"\nšŸŽÆ Result: +{added} APIs added this run")