Extract content from any URL. Returns structured data with title, text, and metadata.
HTTPParsingAI-callable
Analyze images using AI vision. Returns detailed descriptions, detected objects, and extracted text.
Vision AIMultimodalAI-callable
Evaluate mathematical expressions safely. Supports basic arithmetic and common functions.
MathUtilityAI-callable
Send transactional emails via your preferred provider. Supports templates and attachments.
EmailNotificationsAI-callable
Search the web and return structured results. Perfect for research and fact-checking.
SearchResearchAI-callable
Execute read-only SQL queries against your database. Returns structured results.
SQLDatabaseAI-callable
Schedule tasks for future execution. Supports one-time and recurring schedules.
CronTasksAI-callable
Fetch and summarize GitHub issues using the GitHub API. Pass an owner, repo, and issue number to get a structured summary.
GitHub API integrationIssue metadata extractionStructured JSON response
import { defineHandler } from '@fold-run/runtime'
export default defineHandler(async (fold) => {
const url = new URL(fold.request.url);
const owner = url.searchParams.get("owner");
const repo = url.searchParams.get("repo");
const issue = url.searchParams.get("issue");
if (!owner || !repo || !issue) {
return fold.json({
usage: "?owner=octocat&repo=Hello-World&issue=1",
description: "Fetch and summarize a GitHub issue",
});
}
const res = await fetch(
`https://api.github.com/repos/${owner}/${repo}/issues/${issue}`,
{ headers: { "User-Agent": "fold-tool" } }
);
if (!res.ok) {
return fold.json({ error: "Issue not found" }, 404);
}
const data = await res.json() as any;
return fold.json({
title: data.title,
state: data.state,
author: data.user?.login,
labels: data.labels?.map((l: any) => l.name),
body: data.body?.substring(0, 500),
comments: data.comments,
created: data.created_at,
updated: data.updated_at,
});
});
Look up payment intents and charges by ID. Returns payment status, amount, currency, and metadata.
Payment API integrationPayment status lookupSecure secret handling
import { defineHandler } from '@fold-run/runtime'
export default defineHandler(async (fold) => {
const url = new URL(fold.request.url);
const paymentId = url.searchParams.get("payment_id");
if (!paymentId) {
return fold.json({
usage: "?payment_id=pi_xxx",
description: "Look up a payment by ID",
});
}
const apiKey = fold.secret("STRIPE_SECRET_KEY");
const endpoint = paymentId.startsWith("ch_")
? "charges" : "payment_intents";
const res = await fetch(
`https://api.stripe.com/v1/${endpoint}/${paymentId}`,
{ headers: { Authorization: `Bearer ${apiKey}` } }
);
if (!res.ok) {
return fold.json({ error: "Payment not found" }, 404);
}
const data = await res.json() as any;
return fold.json({
id: data.id,
status: data.status,
amount: data.amount / 100,
currency: data.currency,
description: data.description,
created: new Date(data.created * 1000).toISOString(),
metadata: data.metadata,
});
});
A stateful URL shortener using key-value storage. Create short links and redirect visitors.
Key-value storageURL redirect handlingClick tracking
import { defineHandler } from '@fold-run/runtime'
export default defineHandler(async (fold) => {
const url = new URL(fold.request.url);
const path = url.pathname;
if (fold.request.method === "POST") {
const { url: targetUrl } = await fold.body<{ url: string }>();
const code = Math.random().toString(36).substring(2, 8);
await fold.kv.put(`link:${code}`, JSON.stringify({
url: targetUrl,
clicks: 0,
created: Date.now(),
}));
return fold.json({ code, shortUrl: `${url.origin}/${code}` });
}
if (path.startsWith("/stats/")) {
const code = path.split("/")[2];
const raw = await fold.kv.get(`link:${code}`);
if (!raw) return fold.json({ error: "Not found" }, 404);
return fold.json(JSON.parse(raw));
}
const code = path.slice(1);
const raw = await fold.kv.get(`link:${code}`);
if (!raw) return fold.json({ error: "Not found" }, 404);
const entry = JSON.parse(raw);
entry.clicks++;
await fold.kv.put(`link:${code}`, JSON.stringify(entry));
return Response.redirect(entry.url, 302);
});
Analyze text sentiment using AI. Returns sentiment label, confidence score, and key phrases.
AI inferenceSentiment classificationKey phrase extraction
Monitor endpoint health on a schedule. Stores check results in KV and exposes a status dashboard.
Scheduled executionHTTP health monitoringStatus history
import { defineHandler } from '@fold-run/runtime'
export default defineHandler(async (fold) => {
if (fold.request.method === "GET") {
const raw = await fold.kv.get("health:results");
const results = raw ? JSON.parse(raw) : [];
return fold.json({ checks: results });
}
const configRaw = await fold.kv.get("health:endpoints");
if (!configRaw) {
return fold.json({ error: "No endpoints configured" }, 400);
}
const endpoints: string[] = JSON.parse(configRaw);
const results = await Promise.all(
endpoints.map(async (ep) => {
const start = Date.now();
try {
const res = await fetch(ep, { signal: AbortSignal.timeout(10000) });
return { url: ep, status: res.status,
latency: Date.now() - start, ok: res.ok };
} catch (err) {
return { url: ep, status: 0,
latency: Date.now() - start, ok: false };
}
})
);
const record = { checked: new Date().toISOString(), results };
await fold.kv.put("health:results", JSON.stringify(record));
return fold.json(record);
});
Extract text and metadata from PDF documents. Supports local files and URLs.
DocumentsParsingAI-callable