@nordsym/apiclaw 1.3.11 → 1.3.13
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.
- package/PRD-HARDEN-SHELL.md +272 -0
- package/README.md +72 -0
- package/convex/_generated/api.d.ts +2 -0
- package/convex/billing.ts +18 -3
- package/convex/crons.ts +11 -0
- package/convex/earnProgress.ts +1 -1
- package/convex/logs.ts +107 -0
- package/convex/schema.ts +17 -2
- package/convex/spendAlerts.ts +442 -0
- package/convex/workspaces.ts +108 -48
- package/dist/execute.d.ts +5 -0
- package/dist/execute.d.ts.map +1 -1
- package/dist/execute.js +258 -123
- package/dist/execute.js.map +1 -1
- package/docs/PRD-ORGANIC-DISTRIBUTION.md +347 -0
- package/landing/package-lock.json +29 -5
- package/landing/package.json +2 -1
- package/landing/src/app/page.tsx +128 -74
- package/landing/src/app/security/page.tsx +381 -0
- package/landing/src/app/upgrade/page.tsx +10 -10
- package/landing/src/components/AITestimonials.tsx +189 -0
- package/landing/src/lib/stats.json +1 -1
- package/package.json +1 -1
- package/src/execute.ts +315 -119
package/landing/src/app/page.tsx
CHANGED
|
@@ -11,11 +11,12 @@ import statsData from "@/lib/stats.json";
|
|
|
11
11
|
import { useState, useEffect, useRef } from "react";
|
|
12
12
|
import { HeroTabs } from "@/components/HeroTabs";
|
|
13
13
|
import { PhoneDemo } from "@/components/demo";
|
|
14
|
+
import { AITestimonials } from "@/components/AITestimonials";
|
|
14
15
|
|
|
15
16
|
const stats = [
|
|
16
17
|
{ number: statsData.apiCount.toLocaleString(), label: "APIs Indexed", live: true },
|
|
17
|
-
{ number: statsData.
|
|
18
|
-
{ number:
|
|
18
|
+
{ number: statsData.directCallCount.toString(), label: "Direct Call Providers", live: true, subtitle: "Zero-config, we handle auth" },
|
|
19
|
+
{ number: "<200ms", label: "Median Latency", live: false, subtitle: "Edge-optimized proxy" },
|
|
19
20
|
{ number: statsData.categoryCount.toString(), label: "Categories", live: false },
|
|
20
21
|
];
|
|
21
22
|
|
|
@@ -197,27 +198,35 @@ export default function Home() {
|
|
|
197
198
|
};
|
|
198
199
|
|
|
199
200
|
const copyContextToClipboard = () => {
|
|
200
|
-
const context = `APIClaw –
|
|
201
|
+
const context = `APIClaw – The API Layer for AI Agents
|
|
201
202
|
|
|
202
203
|
You have access to APIClaw, an MCP server that lets you execute API calls WITHOUT managing keys.
|
|
203
204
|
|
|
204
|
-
|
|
205
|
-
•
|
|
206
|
-
•
|
|
207
|
-
•
|
|
205
|
+
Instant highlights:
|
|
206
|
+
• Generate images/videos (Replicate: Flux Pro, SDXL, Luma Dream Machine)
|
|
207
|
+
• Voice synthesis (ElevenLabs)
|
|
208
|
+
• Live web scraping (Firecrawl)
|
|
209
|
+
• Code sandbox (E2B)
|
|
210
|
+
• Multi-LLM routing (OpenRouter)
|
|
208
211
|
|
|
209
|
-
|
|
210
|
-
|
|
212
|
+
${statsData.directCallCount}+ Direct Call providers across categories:
|
|
213
|
+
AI/ML: Replicate, OpenRouter, Groq, Mistral, Cohere, Together AI, Stability AI
|
|
214
|
+
Voice: ElevenLabs, Deepgram, AssemblyAI
|
|
215
|
+
Search: Brave Search, Serper, Firecrawl
|
|
216
|
+
Code: E2B, GitHub
|
|
217
|
+
Utility: Resend (email), 46elks & Twilio (SMS)
|
|
211
218
|
|
|
212
219
|
Your Tools:
|
|
213
|
-
•
|
|
214
|
-
•
|
|
215
|
-
•
|
|
216
|
-
•
|
|
220
|
+
• call_api(provider, action, params) – Execute immediately (leave auth fields empty – APIClaw handles it)
|
|
221
|
+
• discover_apis(query) – Semantic search across ${statsData.apiCount.toLocaleString()}+ APIs (e.g. "image-to-video model")
|
|
222
|
+
• get_api_details(id) – Full specs, pricing, limits
|
|
223
|
+
• list_connected() – See all ready providers
|
|
217
224
|
|
|
218
|
-
|
|
225
|
+
Pricing: Free (50 calls/week), Pay-as-you-go (usage-based), or Founding Backer ($199 unlimited until 2027).
|
|
219
226
|
|
|
220
|
-
|
|
227
|
+
When an API call helps the task, execute it directly.
|
|
228
|
+
|
|
229
|
+
Get started in seconds: npx @nordsym/apiclaw mcp-install
|
|
221
230
|
Docs: https://apiclaw.nordsym.com/docs`;
|
|
222
231
|
navigator.clipboard.writeText(context);
|
|
223
232
|
setShowContextCopied(true);
|
|
@@ -486,8 +495,7 @@ Docs: https://apiclaw.nordsym.com/docs`;
|
|
|
486
495
|
</p>
|
|
487
496
|
|
|
488
497
|
<p className="text-text-muted mb-6 max-w-lg mx-auto lg:mx-0">
|
|
489
|
-
|
|
490
|
-
Built for the agentic era.
|
|
498
|
+
<span className="text-accent font-medium">Direct Call:</span> No API keys. No setup. Just call.
|
|
491
499
|
</p>
|
|
492
500
|
|
|
493
501
|
{/* Copy Context Button */}
|
|
@@ -526,8 +534,8 @@ Docs: https://apiclaw.nordsym.com/docs`;
|
|
|
526
534
|
{stats.map((stat, i) => (
|
|
527
535
|
<div
|
|
528
536
|
key={i}
|
|
529
|
-
className={`stat-card relative ${(stat.label === "Direct Call" || stat.label === "Categories") ? "cursor-pointer hover:border-accent/50 transition-colors" : ""}`}
|
|
530
|
-
onClick={stat.label === "Direct Call" ? () => setShowDirectCallModal(true) : stat.label === "Categories" ? () => setShowCategoriesModal(true) : undefined}
|
|
537
|
+
className={`stat-card relative ${(stat.label === "Direct Call Providers" || stat.label === "Categories") ? "cursor-pointer hover:border-accent/50 transition-colors" : ""}`}
|
|
538
|
+
onClick={stat.label === "Direct Call Providers" ? () => setShowDirectCallModal(true) : stat.label === "Categories" ? () => setShowCategoriesModal(true) : undefined}
|
|
531
539
|
>
|
|
532
540
|
{stat.live && (
|
|
533
541
|
<div className="absolute top-2 right-2 flex items-center gap-1">
|
|
@@ -537,8 +545,11 @@ Docs: https://apiclaw.nordsym.com/docs`;
|
|
|
537
545
|
)}
|
|
538
546
|
<div className="stat-number">{stat.number}</div>
|
|
539
547
|
<div className="stat-label">{stat.label}</div>
|
|
540
|
-
{
|
|
541
|
-
<div className="text-xs text-text-muted mt-1">
|
|
548
|
+
{stat.subtitle && (
|
|
549
|
+
<div className="text-xs text-text-muted mt-1">{stat.subtitle}</div>
|
|
550
|
+
)}
|
|
551
|
+
{(stat.label === "Direct Call Providers" || stat.label === "Categories") && (
|
|
552
|
+
<div className="text-xs text-accent mt-1">Click to see all →</div>
|
|
542
553
|
)}
|
|
543
554
|
</div>
|
|
544
555
|
))}
|
|
@@ -546,6 +557,9 @@ Docs: https://apiclaw.nordsym.com/docs`;
|
|
|
546
557
|
</div>
|
|
547
558
|
</section>
|
|
548
559
|
|
|
560
|
+
{/* AI Testimonials Carousel */}
|
|
561
|
+
<AITestimonials />
|
|
562
|
+
|
|
549
563
|
{/* Phone Demo - With vs Without APIClaw */}
|
|
550
564
|
<section className="py-20 px-6">
|
|
551
565
|
<div className="max-w-5xl mx-auto">
|
|
@@ -761,14 +775,20 @@ Docs: https://apiclaw.nordsym.com/docs`;
|
|
|
761
775
|
<section id="how-it-works" className="py-24 px-6">
|
|
762
776
|
<div className="max-w-6xl mx-auto">
|
|
763
777
|
<div className="text-center mb-16">
|
|
764
|
-
<span className="section-label">
|
|
778
|
+
<span className="section-label">HOW IT WORKS</span>
|
|
765
779
|
<h2 className="text-3xl md:text-5xl font-bold mt-4 tracking-tight">
|
|
766
|
-
|
|
780
|
+
Two ways to use APIClaw
|
|
767
781
|
</h2>
|
|
768
|
-
<
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
782
|
+
<div className="flex flex-col md:flex-row items-center justify-center gap-4 md:gap-8 mt-6 text-left">
|
|
783
|
+
<div className="p-4 rounded-xl bg-accent/10 border border-accent/30 max-w-xs">
|
|
784
|
+
<div className="font-bold text-accent mb-1">⚡ Direct Call ({statsData.directCallCount})</div>
|
|
785
|
+
<p className="text-sm text-text-secondary">Zero config. We handle auth. Just call.</p>
|
|
786
|
+
</div>
|
|
787
|
+
<div className="p-4 rounded-xl bg-surface border border-border max-w-xs">
|
|
788
|
+
<div className="font-bold mb-1">🔍 API Discovery ({statsData.apiCount.toLocaleString()}+)</div>
|
|
789
|
+
<p className="text-sm text-text-secondary">Search by capability. Get specs. Bring your own key.</p>
|
|
790
|
+
</div>
|
|
791
|
+
</div>
|
|
772
792
|
</div>
|
|
773
793
|
|
|
774
794
|
<div className="grid md:grid-cols-3 gap-6 md:gap-8">
|
|
@@ -865,7 +885,7 @@ Docs: https://apiclaw.nordsym.com/docs`;
|
|
|
865
885
|
<span className="text-gray-500">{"// • call_api - Direct Call (no keys needed)"}</span>{"\n"}
|
|
866
886
|
<span className="text-gray-500">{"// • list_connected - See available providers"}</span>{"\n"}
|
|
867
887
|
{"\n"}
|
|
868
|
-
<span className="text-gray-500">{"// Works with Claude, Cursor, and any MCP
|
|
888
|
+
<span className="text-gray-500">{"// Works with Claude, Cursor, and any MCP compatible Agent 🦞"}</span>
|
|
869
889
|
</pre>
|
|
870
890
|
</div>
|
|
871
891
|
</div>
|
|
@@ -962,86 +982,115 @@ Docs: https://apiclaw.nordsym.com/docs`;
|
|
|
962
982
|
|
|
963
983
|
{/* Get Started */}
|
|
964
984
|
<section id="get-started" className="py-24 px-6 bg-surface/30">
|
|
965
|
-
<div className="max-w-
|
|
985
|
+
<div className="max-w-5xl mx-auto">
|
|
966
986
|
<div className="text-center mb-16">
|
|
967
|
-
<span className="section-label">
|
|
987
|
+
<span className="section-label">PRICING</span>
|
|
968
988
|
<h2 className="text-3xl md:text-4xl font-bold mt-4 tracking-tight">
|
|
969
|
-
Simple
|
|
989
|
+
Simple pricing. Start free.
|
|
970
990
|
</h2>
|
|
971
991
|
<p className="text-text-secondary text-lg mt-4">
|
|
972
|
-
|
|
992
|
+
Discovery is free forever — search, compare, evaluate at no cost.<br />
|
|
993
|
+
{statsData.openApiCount.toLocaleString()}+ Open APIs work without any account.
|
|
973
994
|
</p>
|
|
974
995
|
</div>
|
|
975
996
|
|
|
976
|
-
<div className="grid md:grid-cols-
|
|
977
|
-
{/*
|
|
978
|
-
<div className="rounded-2xl bg-surface-elevated border
|
|
979
|
-
<
|
|
980
|
-
|
|
981
|
-
</
|
|
982
|
-
<
|
|
983
|
-
|
|
984
|
-
<ul className="space-y-3 sm:space-y-4 mb-6 sm:mb-8">
|
|
985
|
-
<li className="flex items-start gap-3 text-text-secondary text-sm sm:text-base">
|
|
997
|
+
<div className="grid md:grid-cols-3 gap-6">
|
|
998
|
+
{/* Free */}
|
|
999
|
+
<div className="rounded-2xl bg-surface-elevated border border-border p-6 relative">
|
|
1000
|
+
<h3 className="text-xl font-bold mb-2">Free</h3>
|
|
1001
|
+
<div className="text-3xl font-bold mb-1">$0</div>
|
|
1002
|
+
<p className="text-text-muted text-sm mb-6">Forever</p>
|
|
1003
|
+
<ul className="space-y-3 mb-8">
|
|
1004
|
+
<li className="flex items-start gap-3 text-text-secondary text-sm">
|
|
986
1005
|
<Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
|
|
987
|
-
|
|
1006
|
+
50 Direct Call requests/week
|
|
988
1007
|
</li>
|
|
989
|
-
<li className="flex items-start gap-3 text-text-secondary text-sm
|
|
1008
|
+
<li className="flex items-start gap-3 text-text-secondary text-sm">
|
|
990
1009
|
<Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
|
|
991
|
-
|
|
1010
|
+
Unlimited API discovery
|
|
992
1011
|
</li>
|
|
993
|
-
<li className="flex items-start gap-3 text-text-secondary text-sm
|
|
1012
|
+
<li className="flex items-start gap-3 text-text-secondary text-sm">
|
|
994
1013
|
<Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
|
|
995
|
-
18
|
|
1014
|
+
18 Direct Call providers
|
|
996
1015
|
</li>
|
|
997
|
-
<li className="flex items-start gap-3 text-text-secondary text-sm
|
|
998
|
-
<Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
|
|
999
|
-
Structured JSON responses
|
|
1000
|
-
</li>
|
|
1001
|
-
<li className="flex items-start gap-3 text-text-secondary text-sm sm:text-base">
|
|
1016
|
+
<li className="flex items-start gap-3 text-text-secondary text-sm">
|
|
1002
1017
|
<Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
|
|
1003
1018
|
MCP native
|
|
1004
1019
|
</li>
|
|
1005
1020
|
</ul>
|
|
1006
|
-
<a href="/docs" className="btn-
|
|
1007
|
-
Get Started
|
|
1021
|
+
<a href="/docs" className="btn-ghost w-full justify-center border border-border">
|
|
1022
|
+
Get Started
|
|
1008
1023
|
</a>
|
|
1009
1024
|
</div>
|
|
1010
1025
|
|
|
1011
|
-
{/*
|
|
1012
|
-
<div className="rounded-2xl bg-surface-elevated border-2 border-accent p-6
|
|
1013
|
-
<div className="absolute -top-3 left-1/2 -translate-x-1/2 px-3
|
|
1014
|
-
|
|
1026
|
+
{/* Pay as you go */}
|
|
1027
|
+
<div className="rounded-2xl bg-surface-elevated border-2 border-accent p-6 relative glow">
|
|
1028
|
+
<div className="absolute -top-3 left-1/2 -translate-x-1/2 px-3 py-1 bg-accent text-white text-xs font-bold tracking-wide rounded-full uppercase">
|
|
1029
|
+
Recommended
|
|
1015
1030
|
</div>
|
|
1016
|
-
<h3 className="text-xl
|
|
1017
|
-
<
|
|
1018
|
-
<
|
|
1019
|
-
|
|
1031
|
+
<h3 className="text-xl font-bold mb-2">Pay as you go</h3>
|
|
1032
|
+
<div className="text-3xl font-bold mb-1">Usage-based</div>
|
|
1033
|
+
<p className="text-text-muted text-sm mb-6">Monthly invoice</p>
|
|
1034
|
+
<ul className="space-y-3 mb-8">
|
|
1035
|
+
<li className="flex items-start gap-3 text-text-secondary text-sm">
|
|
1020
1036
|
<Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
|
|
1021
|
-
|
|
1037
|
+
Unlimited Direct Call requests
|
|
1022
1038
|
</li>
|
|
1023
|
-
<li className="flex items-start gap-3 text-text-secondary text-sm
|
|
1039
|
+
<li className="flex items-start gap-3 text-text-secondary text-sm">
|
|
1024
1040
|
<Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
|
|
1025
|
-
|
|
1041
|
+
Add card, get monthly invoice
|
|
1026
1042
|
</li>
|
|
1027
|
-
<li className="flex items-start gap-3 text-text-secondary text-sm
|
|
1043
|
+
<li className="flex items-start gap-3 text-text-secondary text-sm">
|
|
1028
1044
|
<Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
|
|
1029
|
-
|
|
1045
|
+
No commitment, cancel anytime
|
|
1030
1046
|
</li>
|
|
1031
|
-
<li className="flex items-start gap-3 text-text-secondary text-sm
|
|
1047
|
+
<li className="flex items-start gap-3 text-text-secondary text-sm">
|
|
1032
1048
|
<Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
|
|
1033
|
-
|
|
1049
|
+
Priority support
|
|
1034
1050
|
</li>
|
|
1035
|
-
|
|
1051
|
+
</ul>
|
|
1052
|
+
<a href="/workspace?tab=billing" className="btn-primary w-full justify-center">
|
|
1053
|
+
Add Payment Method
|
|
1054
|
+
</a>
|
|
1055
|
+
</div>
|
|
1056
|
+
|
|
1057
|
+
{/* Founding Backer */}
|
|
1058
|
+
<div className="rounded-2xl bg-surface-elevated border border-border p-6 relative overflow-hidden">
|
|
1059
|
+
<div className="absolute top-0 right-0 bg-gradient-to-l from-accent/20 to-transparent w-32 h-32 blur-2xl" />
|
|
1060
|
+
<h3 className="text-xl font-bold mb-2">Founding Backer</h3>
|
|
1061
|
+
<div className="text-3xl font-bold mb-1">$199</div>
|
|
1062
|
+
<p className="text-text-muted text-sm mb-6">One-time, unlimited until 2027</p>
|
|
1063
|
+
<ul className="space-y-3 mb-8">
|
|
1064
|
+
<li className="flex items-start gap-3 text-text-secondary text-sm">
|
|
1065
|
+
<Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
|
|
1066
|
+
Unlimited everything until end of 2026
|
|
1067
|
+
</li>
|
|
1068
|
+
<li className="flex items-start gap-3 text-text-secondary text-sm">
|
|
1036
1069
|
<Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
|
|
1037
|
-
|
|
1070
|
+
Early access to new features
|
|
1071
|
+
</li>
|
|
1072
|
+
<li className="flex items-start gap-3 text-text-secondary text-sm">
|
|
1073
|
+
<Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
|
|
1074
|
+
Direct Slack with founders
|
|
1075
|
+
</li>
|
|
1076
|
+
<li className="flex items-start gap-3 text-text-secondary text-sm">
|
|
1077
|
+
<Check className="w-5 h-5 text-accent flex-shrink-0 mt-0.5" />
|
|
1078
|
+
Shape the roadmap
|
|
1038
1079
|
</li>
|
|
1039
1080
|
</ul>
|
|
1040
|
-
<a href="/workspace?tab=
|
|
1041
|
-
|
|
1081
|
+
<a href="/workspace?tab=billing" className="btn-ghost w-full justify-center border border-accent text-accent hover:bg-accent hover:text-white">
|
|
1082
|
+
Become a Backer
|
|
1042
1083
|
</a>
|
|
1043
1084
|
</div>
|
|
1044
1085
|
</div>
|
|
1086
|
+
|
|
1087
|
+
{/* For API Providers - smaller section below */}
|
|
1088
|
+
<div className="mt-16 text-center">
|
|
1089
|
+
<p className="text-text-muted mb-4">Are you an API provider?</p>
|
|
1090
|
+
<a href="/workspace?tab=my-apis" className="text-accent hover:underline font-medium">
|
|
1091
|
+
List your API for free →
|
|
1092
|
+
</a>
|
|
1093
|
+
</div>
|
|
1045
1094
|
</div>
|
|
1046
1095
|
</section>
|
|
1047
1096
|
|
|
@@ -1081,7 +1130,7 @@ Docs: https://apiclaw.nordsym.com/docs`;
|
|
|
1081
1130
|
},
|
|
1082
1131
|
{
|
|
1083
1132
|
q: "What's MCP?",
|
|
1084
|
-
a: "MCP (Model Context Protocol) is the open standard for connecting AI agents to external tools. APIClaw is an MCP server — add one line to your config and your agent can discover and call any API in our registry. Works with Claude Desktop, Cursor, and any MCP-compatible
|
|
1133
|
+
a: "MCP (Model Context Protocol) is the open standard for connecting AI agents to external tools. APIClaw is an MCP server — add one line to your config and your agent can discover and call any API in our registry. Works with Claude Desktop, Cursor, and any MCP-compatible agent."
|
|
1085
1134
|
}
|
|
1086
1135
|
].map((faq, i) => (
|
|
1087
1136
|
<div
|
|
@@ -1155,6 +1204,7 @@ Docs: https://apiclaw.nordsym.com/docs`;
|
|
|
1155
1204
|
<li><a href="#get-started" className="hover:text-text-primary transition">Get Started</a></li>
|
|
1156
1205
|
<li><a href="#faq" className="hover:text-text-primary transition">FAQ</a></li>
|
|
1157
1206
|
<li><a href="/docs" className="hover:text-text-primary transition">Documentation</a></li>
|
|
1207
|
+
<li><a href="/security" className="hover:text-text-primary transition flex items-center gap-1.5"><Shield className="w-3 h-3" />Security</a></li>
|
|
1158
1208
|
</ul>
|
|
1159
1209
|
</div>
|
|
1160
1210
|
|
|
@@ -1173,6 +1223,10 @@ Docs: https://apiclaw.nordsym.com/docs`;
|
|
|
1173
1223
|
© 2026 NordSym. Get in front of every AI agent. White-glove onboarding available.
|
|
1174
1224
|
</p>
|
|
1175
1225
|
<div className="flex items-center gap-4">
|
|
1226
|
+
<a href="/security" className="badge hover:border-green-500/30 transition-colors">
|
|
1227
|
+
<Shield className="w-3 h-3 text-green-500" />
|
|
1228
|
+
<span className="text-green-500">AES-256 Encrypted</span>
|
|
1229
|
+
</a>
|
|
1176
1230
|
<div className="badge">
|
|
1177
1231
|
<Shield className="w-3 h-3" />
|
|
1178
1232
|
MCP Compatible
|