Install any skill in seconds. Free to start, no credit card required.
Get Started Free →waynesutton/convex-http-actions
External API integration and webhook handling including HTTP endpoint routing, request/response handling, authentication, CORS configuration, and webhook signature validation
Passed 18 of 22 test cases with the skill, and 15 of 22 without it.
3 fixed15 passed either way4 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
This benchmark measured an earlier version of the skill.
A newer attempt on gemini-3.6-flash on 10/3/2026 did not produce a publishable comparison (not comparable). The snapshot above is the previously measured run.
One of 3 test cases the skill fixed. Same model, same prompt, with and without the skill.
I want to accept Stripe webhooks in my Convex backend to update subscription statuses. How should I structure the HTTP route handler and the signature verification logic?
| Checked | Without skill | With skill |
|---|---|---|
| Includes use node directive at top of action file | Missed | Passed |
The instructions your model reads when the skill loads.
Defines public HTTP endpoints served from the deployment's .convex.site domain. The one rule: an httpAction handler treats every byte of the request as untrusted, verifies it, then calls internal.* functions with ctx.runQuery or ctx.runMutation. It never reads or writes ctx.db directly.
useQuery| Caller | Use |
|---|---|
Your own React or Next.js app using convex/react | query and mutation. Skip HTTP actions. |
| External service sending webhooks | httpAction |
| Client that cannot use the Convex SDK | httpAction |
| Scheduled or internal work | internalMutation or internalAction |
HTTP actions get no argument validators and no automatic auth. They run in the default Convex runtime, so Web APIs (fetch, crypto.subtle, Response, ReadableStream) work without "use node". Request and response bodies are capped at 20MB.
The router must live at convex/http.ts and be the default export. A router in any other file is ignored.
// convex/http.ts
import { httpRouter } from "convex/server";
import { httpAction } from "./_generated/server";
import { internal } from "./_generated/api";
const http = httpRouter();
http.route({
path: "/api/items",
method: "POST",
handler: httpAction(async (ctx, request) => {
let body: { name?: unknown };
try {
test cases passed, vs 15 / 22 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.