Turn CSV or JSON data into polished HTML reports. Follow these steps to make your first API call in under 2 minutes.
Avg. time to first report: 90 secondsSign up with just your email — no credit card required. Free tier includes 5 reports per day.
curl -X POST https://reportforge-api.vercel.app/api/signup \ -H "Content-Type: application/json" \ -d '{"email":"you@example.com"}'
Or visit your dashboard to manage keys in your browser.
POST CSV or JSON data to the matching endpoint. Pass your API key in the Authorization header using Bearer scheme.
curl -X POST https://reportforge-api.vercel.app/api/csv-to-report \ -H "Authorization: Bearer rf_live_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "csv": "item,quantity,price\nWidget A,10,29.99\nWidget B,5,49.99", "template": "sales-summary", "title": "Q1 Sales" }'
curl -X POST https://reportforge-api.vercel.app/api/json-to-report \ -H "Authorization: Bearer rf_live_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "data": [ {"item": "Widget A", "quantity": 10, "price": 29.99}, {"item": "Widget B", "quantity": 5, "price": 49.99} ], "template": "sales-summary", "title": "Q1 Sales" }'
The API returns a JSON object with an html field you can render directly, save to disk, or convert to PDF.
{
"html": "<!DOCTYPE html>...", // complete, self-contained HTML report
"meta": {
"template": "sales-summary",
"rowCount": 2,
"columns": ["item", "quantity", "price"],
"generatedAt": "2026-02-28T12:00:00Z"
}
}
Use ReportForge from any language. Here are ready-to-use examples for JavaScript and Python.
const response = await fetch("https://reportforge-api.vercel.app/api/csv-to-report", { method: "POST", headers: { "Content-Type": "application/json", "Authorization": "Bearer rf_live_YOUR_KEY", }, body: JSON.stringify({ csv: "item,quantity,price\nWidget A,10,29.99\nWidget B,5,49.99", template: "sales-summary", title: "Q1 Sales", }), }); const { html, meta } = await response.json(); console.log(`Report generated: ${meta.rowCount} rows, ${meta.template} template`); // Option 1: Open in browser document.getElementById("report").srcdoc = html; // Option 2: Save to file (Node.js) // fs.writeFileSync("report.html", html);
import requests response = requests.post( "https://reportforge-api.vercel.app/api/csv-to-report", json={ "csv": "item,quantity,price\nWidget A,10,29.99\nWidget B,5,49.99", "template": "sales-summary", "title": "Q1 Sales", }, headers={"Authorization": "Bearer rf_live_YOUR_KEY"}, ) data = response.json() print(f"Report generated: {data['meta']['rowCount']} rows") # Save to file with open("report.html", "w") as f: f.write(data["html"])
# JavaScript / TypeScript npm install reportforge-sdk # Python pip install reportforge
ReportForge includes four built-in templates. Pass the template name in your request body.
sales-summary
Revenue totals, top items, trend highlights
expense-report
Cost breakdown by category with totals
inventory-status
Stock levels, low-inventory alerts
invoice
Line-item invoice with subtotals and tax
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/csv-to-report | CSV string + template name → HTML report |
| POST | /api/json-to-report | JSON array + template name → HTML report |
| GET | /api/templates | List available templates and required columns |
| POST | /api/signup | Create a free API key by email |
| Tier | Reports / day | Max input size |
|---|---|---|
| Free | 5 | 100 KB |
| Starter ($19/mo) | 100 | 2 MB |
| Business ($49/mo) | Unlimited | 10 MB |
If something goes wrong, check these common issues first.
| Status | Meaning | How to Fix |
|---|---|---|
| 401 | Unauthorized | Your API key is missing or invalid. Check that your Authorization: Bearer header includes a valid rf_ key. |
| 429 | Too Many Requests | You've exceeded your daily rate limit. Wait for the reset or upgrade your plan for higher limits. |
| 400 | Bad Request | Check your request body format. Ensure you're sending valid JSON with the required fields ("csv" or "data", plus "template"). |
Free tier is ready now. Upgrade any time when you need more volume.