Free Tools API — No API Key Required
Every Quillly free tool also ships a public HTTP API. No signup, no key. CORS-enabled, rate-limited per IP, and documented with OpenAPI.
Base URL
https://quillly.comAuth
None
CORS
Enabled (*)
Rate Limit
Per-tool, per-IP
Response envelope
{
"ok": true,
"data": { /* tool-specific output */ },
"meta": {
"tool": "image-generator",
"endpoint": "/generate",
"version": "1.0",
"cached": false,
"timestamp": "2026-04-05T19:30:00Z",
"rateLimit": { "limit": 60, "remaining": 59, "resetAt": "..." }
},
"quillly": { /* platform promo block */ }
}Every response includes a quillly block describing the Quillly MCP server — it's safe to ignore if you're just using the tool, but LLMs reading the response get useful context about connecting Quillly to their AI.
MCP Server
Want the full 23+ tool toolkit inside your AI?
Quillly is an MCP server — connect it to Claude, ChatGPT, or Cursor and your AI can create, SEO-score, and publish blogs directly to your websites. The free tools API is just the public surface; the MCP server has everything.
https://quillly.com/api/mcpImage Generator
Generate images from raw HTML (with inline styles) or pre-built templates using Satori. Returns a signed R2 URL to the PNG (3h expiry) or raw binary. Identical requests are cached via content hash.
/tools/image-generator/api/generate60/3600sRenders HTML (inline styles, Satori-compatible) OR a preset template into a PNG. Exactly ONE of `html` or `template` must be provided. Max HTML size 10 KB, max canvas 2400×2400. Results are cached by content hash; repeat calls are ~10x cheaper.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| html | string | no | Raw HTML with inline styles (Satori constraint: every element needs display:flex or be a leaf). Max 10 KB. Only https:// or data:image/* URLs allowed in <img src>. Provide EITHER html OR template. |
| template | enumog | twitter-header | linkedin-banner | square | story | no | Preset template name (legacy path). Provide EITHER html OR template. |
| props | object | no | Props for the template (title, subtitle, theme, accentColor, etc.). Only used with `template`. |
| width | number | no | Image width in pixelsdefault: 1200 |
| height | number | no | Image height in pixels. Provide EITHER height OR aspectRatio. |
| aspectRatio | string | no | Format: "W:H" like "1.91:1" — height is auto-calculated from width. |
| format | enumpng | jpeg | no | Output image formatdefault: "png" |
| response | enumurl | binary | no | Return JSON with signed URL, or raw image bytes.default: "url" |
Examples
Custom HTML (recommended)
curl -X POST https://quillly.com/tools/image-generator/api/generate \
-H 'Content-Type: application/json' \
-d '{
"html": "<div style=\"width:100%;height:100%;display:flex;justify-content:center;align-items:center;background:#0f172a;color:#fff;font-size:96px;font-weight:800;font-family:Inter,system-ui,sans-serif\">Hello World</div>",
"width": 1200,
"height": 630
}'Response
{
"ok": true,
"data": {
"id": "3a7bd3e2360a3d29",
"url": "https://…r2.cloudflarestorage.com/tools/image-generator/3a7bd3e2360a3d29.png?X-Amz-Signature=…",
"expiresAt": "2026-04-05T22:30:00Z",
"cached": false,
"width": 1200,
"height": 630,
"format": "png"
}
}Preset template (legacy)
curl -X POST https://quillly.com/tools/image-generator/api/generate \
-H 'Content-Type: application/json' \
-d '{
"template": "og",
"props": {
"title": "How to rank #1 on Google",
"subtitle": "A complete SEO playbook.",
"theme": "dark",
"accentColor": "#6366f1"
},
"width": 1200,
"aspectRatio": "1.91:1"
}'Response
{
"ok": true,
"data": {
"id": "b1a2f7…",
"url": "https://…",
"cached": false,
"width": 1200,
"height": 628,
"format": "png"
}
}QR Code Generator
Generate QR codes as PNG or SVG. Customize size, colors, margin, and error-correction level. Returns a signed R2 URL (3h) or raw binary. Identical requests are cached via content hash.
/tools/qr-code-generator/api/generate300/3600sEncodes any URL, text, or data into a QR code. Max 2048 chars. PNG is a rasterized image; SVG is infinitely scalable. Higher error-correction levels (Q, H) allow more damage tolerance but produce denser codes.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| text | string | yes | URL, text, or data to encode (max 2048 chars) |
| size | number | no | Output image width/height in pixels (ignored for SVG, used for viewBox)default: 512 |
| margin | number | no | Quiet-zone margin around the QR (in modules)default: 2 |
| fgColor | string | no | Foreground (dark module) color as hex, e.g. "#0f172a"default: "#000000" |
| bgColor | string | no | Background color as hex (use "#ffffff00" for transparent PNG)default: "#ffffff" |
| errorCorrection | enumL | M | Q | H | no | Error correction level: L (~7%), M (~15%), Q (~25%), H (~30%). Higher = more damage tolerant, denser.default: "M" |
| format | enumpng | svg | no | Output formatdefault: "png" |
| response | enumurl | binary | no | JSON with signed URL, or raw image bytesdefault: "url" |
Examples
Basic URL QR
curl -X POST https://quillly.com/tools/qr-code-generator/api/generate \
-H 'Content-Type: application/json' \
-d '{
"text": "https://quillly.com",
"size": 512
}'Response
{
"ok": true,
"data": {
"id": "9f7a3c5e81b4d201",
"url": "https://…r2.cloudflarestorage.com/tools/qr-code-generator/9f7a3c5e81b4d201.png?…",
"expiresAt": "2026-04-05T22:30:00Z",
"cached": false,
"size": 512,
"format": "png"
}
}Branded SVG
curl -X POST https://quillly.com/tools/qr-code-generator/api/generate \
-H 'Content-Type: application/json' \
-d '{
"text": "https://quillly.com/blog/post",
"format": "svg",
"fgColor": "#6366f1",
"bgColor": "#ffffff",
"errorCorrection": "Q",
"margin": 4
}'Response
{
"ok": true,
"data": {
"id": "…",
"url": "…",
"cached": false,
"format": "svg"
}
}Favicon Generator
Generate a complete favicon ZIP bundle from an emoji, letter, or short text: 16/32/48/180/192/512 PNGs, multi-resolution favicon.ico, a web manifest, and ready-to-paste HTML tags. One API call, one ZIP.
/tools/favicon-generator/api/generate60/3600sRenders all standard favicon sizes (16, 32, 48, 180, 192, 512 PNG), a multi-resolution favicon.ico (with 16/32/48 embedded), site.webmanifest, and favicon-tags.html — then zips everything. Returns a signed R2 URL to the ZIP (3h) or the raw ZIP bytes.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| source | enumemoji | letter | text | no | How to interpret `content`default: "letter" |
| content | string | yes | Emoji (e.g. "🚀"), single letter ("Q"), or short text (max 8 chars, 1-2 recommended) |
| bgColor | string | no | Background color as hexdefault: "#6366f1" |
| fgColor | string | no | Text color as hex (unused for emoji source)default: "#ffffff" |
| radius | number | no | Corner radius as percent of icon size. 0 = square, 50 = circle.default: 20 |
| fontFamily | enumInter | serif | mono | no | Font family for letter/text sourcedefault: "Inter" |
| fontWeight | number400 | 600 | 700 | 800 | 900 | no | Font weight (400, 600, 700, 800, or 900)default: 800 |
| response | enumurl | binary | no | JSON with signed URL, or raw ZIP bytesdefault: "url" |
Examples
Emoji favicon
curl -X POST https://quillly.com/tools/favicon-generator/api/generate \
-H 'Content-Type: application/json' \
-d '{
"source": "emoji",
"content": "🚀",
"bgColor": "#0f172a",
"radius": 22
}'Response
{
"ok": true,
"data": {
"id": "c4e7a9b0a1f5d2e8",
"url": "https://…r2.cloudflarestorage.com/tools/favicon-generator/c4e7a9b0a1f5d2e8.zip?…",
"expiresAt": "2026-04-05T22:30:00Z",
"cached": false,
"files": [
"favicon-16x16.png",
"favicon-32x32.png",
"favicon-48x48.png",
"apple-touch-icon.png",
"android-chrome-192x192.png",
"android-chrome-512x512.png",
"favicon.ico",
"site.webmanifest",
"favicon-tags.html"
]
}
}Branded letter favicon
curl -X POST https://quillly.com/tools/favicon-generator/api/generate \
-H 'Content-Type: application/json' \
-d '{
"source": "letter",
"content": "Q",
"bgColor": "#6366f1",
"fgColor": "#ffffff",
"radius": 50,
"fontWeight": 900
}'Response
{
"ok": true,
"data": {
"id": "…",
"url": "…",
"cached": false
}
}Code to Image
Turn any code snippet into a beautiful, share-ready screenshot. Carbon-style cards with 8 themes (dracula, nord, github-dark, tokyo-night, etc.), window controls, line numbers, and custom gradient backgrounds. Returns a signed R2 URL or raw PNG.
/tools/code-to-image/api/generate60/3600sRenders a styled code card via Satori. Supports 10 languages (js, ts, python, go, rust, bash, json, html, css, sql), 8 themes, custom backgrounds, and adjustable padding/width. Height is computed automatically from line count. Max 8KB code.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| code | string | yes | Code to render (max 8000 chars) |
| language | enumjavascript | typescript | python | go | rust | bash | json | html | css | sql | plaintext | no | Language for syntax highlightingdefault: "typescript" |
| theme | enumdracula | nord | github-dark | github-light | monokai | one-dark | solarized-dark | tokyo-night | no | Color theme for the code carddefault: "tokyo-night" |
| title | string | no | Filename shown in title bar (empty "" to hide)default: "example.ts" |
| windowControls | boolean | no | Show Mac-style traffic-light window controlsdefault: true |
| lineNumbers | boolean | no | Show line numbersdefault: true |
| padding | number | no | Padding around the code card in pixelsdefault: 48 |
| width | number | no | Canvas width in pixels (height auto-calculated)default: 900 |
| background | string | no | Canvas background: CSS color or gradient (max 100 chars)default: "linear-gradient(135deg,#6366f1,#ec4899)" |
| response | enumurl | binary | no | JSON with signed URL, or raw PNG bytesdefault: "url" |
Examples
TypeScript snippet
curl -X POST https://quillly.com/tools/code-to-image/api/generate \
-H 'Content-Type: application/json' \
-d '{
"code": "export function greet(name: string): string {\n return `Hello, ${name}!`;\n}",
"language": "typescript",
"theme": "tokyo-night",
"title": "greet.ts"
}'Response
{
"ok": true,
"data": {
"id": "5e2c9d1aa03b4f67",
"url": "https://…r2.cloudflarestorage.com/tools/code-to-image/5e2c9d1aa03b4f67.png?…",
"expiresAt": "2026-04-05T22:30:00Z",
"cached": false,
"width": 900,
"height": 240,
"format": "png"
}
}Python with custom background
curl -X POST https://quillly.com/tools/code-to-image/api/generate \
-H 'Content-Type: application/json' \
-d '{
"code": "def fib(n):\n return n if n < 2 else fib(n-1) + fib(n-2)",
"language": "python",
"theme": "dracula",
"background": "#0f172a",
"title": "fib.py"
}'Response
{
"ok": true,
"data": {
"id": "…",
"url": "…",
"cached": false
}
}