Implement Convex runtime features: HTTP actions, file storage, search (full text + vector), scheduling (crons + scheduled functions), and RAG patterns...
httpAction, register in convex/http.ts via httpRouter (default export REQUIRED).http.route({
path: "/api/echo", // Exact path
method: "POST",
handler: httpAction(async (ctx, req) => {
const body = await req.bytes();
return new Response(body, { status: 200 });
}),
});
https://<deployment>.convex.site.storageId; URLs expire after 1 hour.ctx.storage.store(blob) then mutation. Uploads via HTTP actions are limited to 20MB.ctx.storage.getUrl(storageId) in queries/mutations; returns signed URL or null.ctx.db.system.get("_storage", id) or query("_storage"); storage.getMetadata() is deprecated.ctx.scheduler.runAfter/runAt; cron jobs in convex/crons.ts using cronJobs().crons.interval or crons.cron. You MUST NOT use deprecated helpers like crons.hourly, crons.daily, or crons.weekly.internal object from _generated/api to reference it, even if defined in the same file.convex/http.ts default export.Request manually as they do not support validators.const messages = await ctx.db.query("messages")
.withSearchIndex("search_body", (q) =>
q.search("body", "hello hi").eq("channel", "#general")
).take(10);