API Reference
Generate design-ready images from text descriptions. Integrate RendrKit into your product with a single API call.
https://api.rendrkit.dev/api/v1Agent Integration Guide
Direct Render, template selection, photo guidelines, and full examples for AI agents.
Quickstart#
Get started in 30 seconds:
- Sign up for free to get your API key (50 images/month, no credit card)
- Make your first API call:
curl -X POST https://api.rendrkit.dev/api/v1/generate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "Product launch announcement, dark theme"}'That's it. You'll get back a URL to a production-ready PNG image.
Authentication#
Authenticate every request with an API key sent in the Authorization header.
Authorization: Bearer rk_live_xxxxxxxxxxxxx- Production keys start with
rk_live_ - Sandbox keys start with
rk_test_ - Get your API key at rendrkit.dev/signup
POST/api/v1/generate#
Generate a new image. Two modes: prompt mode (AI picks the template) or direct render (you pick the template + fill slots). See Direct Render below.
Request Body
promptstringDescription of the image to generate. Required unless templateId + slots provided.
sizestringWidth x Height format. Default 1080x1080. Presets: 1080x1080, 1200x628, 1920x1080, 1080x1920, 1280x720
stylestringVisual style. One of modern | playful | corporate | dark | minimal | bold | warm | elegant | neon | earth. Auto-selected if omitted.
headingstringExact heading text. When provided, the AI will use this text verbatim without rephrasing.
subheadingstringExact subheading text. When provided, the AI will use this text verbatim.
imageUrlstringHTTPS URL of your own photo. When provided, RendrKit uses this as the background instead of searching Unsplash/Pexels. Saves API requests and gives you full control over the image.
brandobjectOptional brand settings. { colors: ["#hex"], font: "string", logoUrl: "string" }
brandKitIdstringUUID of a saved brand kit. Applies brand colors, font, and logo.
fontstringGoogle Font name to use (e.g. Poppins, Playfair Display). Overrides the default font.
backgroundstringBackground mode. One of auto | photo | gradient. Default: auto (AI decides).
noPhotobooleanSkip photo search and use a gradient background instead. Equivalent to background: "gradient".
noGradientbooleanStrip all gradient decorations (orbs, noise, patterns) and force a clean solid background color.
formatstringOutput format. One of png | pdf. Default: png. PDF renders an A4 document.
variantsnumberGenerate 1-3 style variants. Each gets a different visual style. Default: 1.
{
"prompt": "Summer sale announcement for clothing brand",
"size": "1080x1080",
"style": "bold",
"heading": "Summer Sale - 40% Off",
"subheading": "Use code SUMMER40 at checkout",
"brand": {
"colors": ["#6D28D9", "#F59E0B"],
"font": "Inter"
}
}With your own photo
{
"prompt": "Coffee shop weekend special",
"imageUrl": "https://your-cdn.com/coffee-shop.jpg"
}Response 201
{
"id": "img_abc123",
"url": "https://cdn.rendrkit.dev/img_abc123.png",
"width": 1080,
"height": 1080,
"prompt": "Instagram post: Launch day announcement, dark theme",
"style": "modern",
"templateId": "gradient-hero",
"createdAt": "2026-01-15T12:00:00Z",
"attribution": {
"source": "unsplash",
"photographer": "John Doe",
"photographerUrl": "https://unsplash.com/@johndoe",
"photoUrl": "https://unsplash.com/photos/abc123"
}
}attribution contains photo credit info from Unsplash/Pexels. Returns null when you provide your own imageUrl or when a gradient template is used (no third-party photo).
Direct Render (Recommended for AI Agents)#
Skip AI content generation entirely by providing a templateId and slots directly. Faster, cheaper, and gives your AI agent full control over content.
Additional Parameters
templateIdstringTemplate ID from GET /templates. When provided with slots, skips AI entirely.
slotsobjectKey-value map of slot values for the template. Required when templateId is provided.
photoQuerystring1-3 word search query for Unsplash/Pexels background photo. Used when the template needs a photo.
logoUrlstringHTTPS URL to a logo image (PNG with transparent background recommended). Placed as an overlay on the generated image.
logoPositionstringLogo placement: "top-left" | "top-right" | "bottom-left" (default) | "bottom-right".
{
"templateId": "magazine-cover",
"slots": {
"heading": "Taste Tuscany",
"subheading": "Opening Saturday at 7pm. Live jazz and free prosecco.",
"badge_text": "GRAND OPENING",
"accent_color": "#D4A574"
},
"photoQuery": "italian restaurant interior"
}Without photo (gradient templates)
{
"templateId": "gradient-hero",
"slots": {
"badge_text": "BETA",
"heading": "Ship Smarter",
"accent_color": "#8B5CF6",
"subheading": "AI-powered deployment pipeline. Join the beta March 1.",
"cta_text": "Join Beta"
}
}GET/api/v1/templates#
List all available templates with their slot definitions. Use this to let your AI agent pick the right template. No authentication required.
Response 200
{
"templates": [
{
"id": "magazine-cover",
"name": "Magazine Cover",
"description": "Full-bleed photo with text overlay at bottom-left.",
"bestFor": "Lifestyle, food, travel, real estate...",
"needsPhoto": true,
"slots": [
{ "name": "heading", "required": true, "description": "Main headline" },
{ "name": "subheading", "required": false, "description": "One-line description" },
{ "name": "badge_text", "required": false, "description": "Small label" },
{ "name": "accent_color", "required": false, "description": "Accent color hex" }
]
}
],
"count": 69
}Photo Templates (needs photoQuery or imageUrl)
| Template ID | Description | Best For |
|---|---|---|
magazine-cover | Full-bleed photo, text overlay bottom-left | Lifestyle, food, travel, real estate |
split-modern | Photo left, text right on dark bg | Products, services, wellness |
split-reverse | Text left, photo right | Products, services |
photo-badge | Full-bleed photo with colored badge | Sales, promotions, launches |
photo-top | Photo top 55%, text bottom | Blog posts, property listings |
photo-bottom | Text top, photo bottom 60% | Blog headers, portfolio |
photo-left-text | Photo 42% left, text right | Services, courses, workshops |
dark-overlay | Full-bleed photo, dark overlay, centered | General purpose with photo |
event-poster | Photo bg with date block + details | Events, conferences, concerts |
profile-card | Avatar, name, role, bio, links | Team intros, speaker announcements |
blog-post-cover | Blog post cover with photo background | Blog posts, articles, content marketing |
video-thumbnail | Video thumbnail with play button overlay | YouTube thumbnails, video content |
dish-spotlight | Featured dish hero card with photo and price | Featured dishes, daily specials |
app-screenshot | App screenshot mockup right, text left | App features, mobile screenshots |
product-showcase | Product hero with photo left, details right | Product launches, e-commerce |
real-estate-listing | Property listing with photo, price, features | Property listings, real estate ads |
team-member | Team member spotlight with photo and bio | Team intros, employee spotlights |
Gradient / Solid Templates (no photo needed)
| Template ID | Description | Best For |
|---|---|---|
gradient-hero | Centered text on dark gradient | Tech, SaaS, AI, announcements |
neon-dark | Ultra-dark bg with neon glow | Gaming, nightlife, crypto |
stats-banner | Three large numbers with labels | Metrics, year-in-review, milestones |
countdown | Countdown timer blocks | Product launches, sale countdowns |
testimonial | Star rating, quote, author | Customer reviews, social proof |
pricing-card | Centered pricing card with features | Pricing, plan launches |
announcement | Bold colored bg with watermark text | Big announcements, flash sales |
flash-sale | Urgent limited-time offer, bold typography | Flash sales, urgent promotions |
social-quote | Elegant quote card with attribution | Quotes, wisdom, thought leadership |
hiring-post | Job opening with role details and tags | Job postings, recruitment |
review-card | Customer review with star rating | Customer reviews, social proof |
course-card | Online course card with pricing | Online courses, e-learning |
podcast-episode | Podcast episode card with show info | Podcast episodes, audio content |
Infographic Templates — 21 types (no photo needed, 100% deterministic)
Deterministic templates for educational and informational content. No photo fetching — ideal for batch generation.
| Template ID | Type | Slots | Best For |
|---|---|---|---|
flowchart | Vertical flow | 3–5 steps × (icon, title, desc, color) | How-to guides, processes |
process-horizontal | Horizontal pipeline | 3–5 steps × (icon, title, desc) | Workflows, onboarding |
checklist | Checkbox list | 4–8 items (checked/unchecked) | Requirements, to-do lists |
comparison-vs | Side-by-side VS | 2 sides × 3–6 items | Product comparisons, pros/cons |
timeline-vertical | Dot timeline | 3–6 events × (date, title, desc) | Roadmaps, milestones, history |
stats-circles | Circular progress | 3–5 metrics × (label, value 0-100) | KPIs, performance dashboards |
stats-squares | Square stat cards | 3–5 metrics × (label, value, suffix) | Key metrics, achievements |
pyramid | Pyramid/funnel | 3–5 tiers × (label, value) | Sales funnels, hierarchies |
donut-chart | Donut/pie chart | 3–5 segments × (label, value %) | Budget breakdowns, market share |
cycle | Circular cycle | 3–6 phases × (label) | Processes, lifecycles, sprints |
bar-chart | Vertical bars | 3–6 bars × (label, value 0-100) | Comparisons, trends, rankings |
icon-grid | Icon + text grid | 4–9 items × (icon, title, desc) | Feature grids, service listings |
progress-bars | Horizontal bars | 3–6 bars × (label, value 0-100) | Goal tracking, skill levels |
mind-map | Radial mind map | 1 center + up to 10 branches × (label, desc, color) | Brainstorming, topic exploration, planning |
org-chart | Hierarchy chart | 1 top + 4 mid + 8 bottom × (name, role) | Team structure, company hierarchy |
kanban-board | 3-column board | 3 columns × 5 cards (title, desc) | Project status, sprint boards |
swot-analysis | 2×2 matrix | 4 quadrants × 3 items each | Strategic planning, competitive analysis |
numbered-list | Numbered listicle | Up to 10 items × (icon, title, desc) | Top-N lists, tips, rankings |
pros-cons | Two-column list | Up to 6 pros + 6 cons | Decision making, product reviews |
feature-comparison | Feature table | Up to 15 rows × 4 columns | Product comparisons, plan features |
gauge-meter | Gauge dials | 1–4 gauges × (label, value 0-100) | Performance scores, health metrics |
All infographic templates support light and dark color schemes via color slots.
Tip: Use Direct Render for infographics — deterministic output, zero AI.
Quick Start with Infographics
curl -X POST https://api.rendrkit.dev/api/v1/generate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "comparison-vs",
"slots": {
"title": "React vs Vue",
"left_icon": "⚛️", "left_name": "React", "left_color": "#61DAFB",
"left_bg": "#1E293B",
"left_item1": "Largest ecosystem", "left_item2": "JSX flexibility",
"left_item3": "Meta backing", "left_item4": "React Native",
"left_item5": "Server Components",
"right_icon": "💚", "right_name": "Vue", "right_color": "#42B883",
"right_bg": "#1E293B",
"right_item1": "Gentle learning curve", "right_item2": "Template syntax",
"right_item3": "Built-in state management", "right_item4": "Smaller bundle",
"right_item5": "Composition API",
"bg_color": "#0F172A", "title_color": "#F1F5F9", "text_color": "#CBD5E1"
},
"size": "1080x1080"
}'GET/api/v1/images/:id#
Retrieve details for a previously generated image.
Response 200
{
"id": "img_abc123",
"url": "https://cdn.rendrkit.dev/img_abc123.png",
"width": 1080,
"height": 1080,
"format": "png",
"prompt": "Instagram post: Launch day announcement, dark theme",
"style": "modern",
"createdAt": "2026-01-15T12:00:00Z"
}DELETE/api/v1/images/:id#
Permanently delete an image. This action cannot be undone.
Response 204
No content.
POST/api/v1/brand-kits#
Create a reusable brand kit with colors, fonts, and a logo.
Request Body
namestringrequiredHuman-readable name for the brand kit.
colorsstring[]Array of hex color codes.
fontstringFont family name.
logoUrlstringURL of the brand logo image.
{
"name": "Acme Corp",
"colors": ["#6D28D9", "#F59E0B", "#10B981"],
"font": "Inter",
"logoUrl": "https://example.com/acme-logo.png"
}Response 201
{
"id": "bk_xyz789",
"name": "Acme Corp",
"colors": ["#6D28D9", "#F59E0B", "#10B981"],
"font": "Inter",
"logoUrl": "https://example.com/acme-logo.png",
"createdAt": "2026-01-15T12:00:00Z"
}GET/api/v1/brand-kits#
List all brand kits for the authenticated account.
Response 200
[
{
"id": "bk_xyz789",
"name": "Acme Corp",
"colors": ["#6D28D9", "#F59E0B", "#10B981"],
"font": "Inter",
"logoUrl": "https://example.com/acme-logo.png",
"createdAt": "2026-01-15T12:00:00Z"
}
]GET/api/v1/brand-kits/:id#
Retrieve a single brand kit by its ID.
Response 200
{
"id": "bk_xyz789",
"name": "Acme Corp",
"colors": ["#6D28D9", "#F59E0B", "#10B981"],
"font": "Inter",
"logoUrl": "https://example.com/acme-logo.png",
"createdAt": "2026-01-15T12:00:00Z"
}PUT/api/v1/brand-kits/:id#
Update an existing brand kit. Send the full object; all fields are replaced.
Request Body
{
"name": "Acme Corp (Updated)",
"colors": ["#1E40AF", "#F59E0B"],
"font": "Poppins",
"logoUrl": "https://example.com/acme-logo-v2.png"
}Response 200
Returns the updated brand kit object.
DELETE/api/v1/brand-kits/:id#
Permanently delete a brand kit. This action cannot be undone.
Response 204
No content.
GET/api/v1/usage#
Get the current billing period usage for the authenticated account.
Response 200
{
"plan": "free",
"quota": 50,
"used": 12,
"remaining": 38,
"periodStart": "2026-02-01T00:00:00Z",
"periodEnd": "2026-02-28T23:59:59Z"
}POST/api/v1/generate/batch-render#
Generate multiple images from the same template with different data. Up to 50 items per batch. Perfect for e-commerce catalogs, certificate series, or social media campaigns.
Request Body
templateIdstringrequiredTemplate ID to use for all items.
sizestringDefault size for all items. Defaults to 1080x1080.
itemsarrayrequiredArray of objects, each with slots and optionally size to override per item. Max 50.
{
"templateId": "product-showcase",
"size": "1080x1080",
"items": [
{ "slots": { "heading": "AirPods Pro", "price": "$249", "accent_color": "#3B82F6" } },
{ "slots": { "heading": "HomePod Mini", "price": "$99", "accent_color": "#10B981" } },
{ "slots": { "heading": "Apple Watch", "price": "$399", "accent_color": "#8B5CF6" } }
]
}Response 200
{
"images": [
{ "index": 0, "id": "img_abc1", "url": "https://cdn.rendrkit.dev/img_abc1.png", "width": 1080, "height": 1080 },
{ "index": 1, "id": "img_abc2", "url": "https://cdn.rendrkit.dev/img_abc2.png", "width": 1080, "height": 1080 },
{ "index": 2, "id": "img_abc3", "url": "https://cdn.rendrkit.dev/img_abc3.png", "width": 1080, "height": 1080 }
]
}POST/api/v1/upload#
Upload an image to get a hosted URL. Use the returned URL as imageUrl in generate requests. Accepts multipart/form-data.
Request Body (multipart/form-data)
fileFilerequiredImage file. Accepted types: JPEG, PNG, WebP. Max 10 MB.
curl -X POST https://api.rendrkit.dev/api/v1/upload \
-H "Authorization: Bearer rk_live_xxx" \
-F "file=@photo.jpg"Response 200
{
"url": "https://cdn.rendrkit.dev/uploads/abc123.jpg",
"filename": "photo.jpg",
"size": 245760,
"mimeType": "image/jpeg"
}POST/api/v1/templates/clone#
Clone a template with custom default slot values. Creates a reusable preset (e.g., your brand's product card with pre-filled colors and logo). Returns a ut_ prefixed ID for use in future generate calls.
Request Body
templateIdstringrequiredBase template ID to clone.
namestringrequiredName for your custom template.
defaultSlotsobjectDefault slot values that will be pre-filled on every use.
{
"templateId": "gradient-hero",
"name": "Acme Announcements",
"defaultSlots": {
"accent_color": "#6D28D9",
"details": "ACME INC"
}
}Response 201
{
"id": "ut_abc123",
"name": "Acme Announcements",
"baseTemplateId": "gradient-hero",
"defaultSlots": { "accent_color": "#6D28D9", "details": "ACME INC" },
"createdAt": "2026-03-01T12:00:00Z"
}Use ut_abc123 as templateId in generate requests. Slots you provide at generation time override the defaults.
POST/api/v1/checkout#
Create a Stripe checkout session to upgrade your plan.
Request Body
planstringrequiredTarget plan. One of starter | pro | business
Response 200
{
"url": "https://checkout.stripe.com/c/pay/cs_live_..."
}Redirect the user to the returned URL to complete payment.
POST/api/v1/billing/portal#
Create a Stripe billing portal session to manage subscription, update payment method, or cancel.
Response 200
{
"url": "https://billing.stripe.com/p/session/..."
}Plans & Quotas#
| Plan | Price | Images/month | Brand Kits | Rate Limit |
|---|---|---|---|---|
| Free | $0 | 50 | 1 | 10 req/min |
| Starter | $19/mo | 1,000 | 3 | 30 req/min |
| Pro | $49/mo | 5,000 | 10 | 60 req/min |
| Business | $149/mo | 20,000 | Unlimited | 120 req/min |
Rate Limits#
Requests are rate-limited per API key. Exceeding the limit returns a 429 status with a RATE_LIMITED error code.
| Plan | Rate Limit |
|---|---|
| Free | 10 req/min |
| Starter | 30 req/min |
| Pro | 60 req/min |
| Business | 120 req/min |
Error Codes#
All errors return a JSON body with a code field and a human-readable message.
| Code | HTTP | Description |
|---|---|---|
BAD_REQUEST | 400 | Invalid request parameters |
INVALID_PROMPT | 400 | Prompt validation failed |
INVALID_EMAIL | 400 | Invalid email for signup |
UNAUTHORIZED | 401 | Missing or invalid API key |
IMAGE_NOT_FOUND | 404 | Image not found |
BRAND_KIT_NOT_FOUND | 404 | Brand kit not found |
EMAIL_EXISTS | 409 | Account already exists |
RATE_LIMITED | 429 | Too many requests |
QUOTA_EXCEEDED | 429 | Monthly image quota reached. Response includes upgrade_url. |
INTERNAL_ERROR | 500 | Server error |
{
"code": "INVALID_PROMPT",
"message": "Prompt must be between 1 and 2000 characters."
}Code Examples#
curl
curl -X POST https://api.rendrkit.dev/api/v1/generate \
-H "Authorization: Bearer rk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"prompt": "Instagram post: Launch day announcement, dark theme"}'JavaScript — Prompt Mode
import { RendrKit } from '@rendrkit/sdk';
const rk = new RendrKit({ apiKey: 'rk_live_xxx' });
const image = await rk.generate({
prompt: 'Blog OG image: How to Ship Fast',
});
console.log(image.url);JavaScript — Direct Render (Recommended)
import { RendrKit } from '@rendrkit/sdk';
const rk = new RendrKit({ apiKey: 'rk_live_xxx' });
// List available templates
const { templates } = await rk.listTemplates();
// Direct render with photo
const image = await rk.generate({
templateId: 'magazine-cover',
slots: {
heading: 'Taste Tuscany',
subheading: 'Opening Saturday at 7pm',
badge_text: 'GRAND OPENING',
accent_color: '#D4A574',
},
photoQuery: 'italian restaurant',
});
console.log(image.url);Python
import requests
resp = requests.post(
"https://api.rendrkit.dev/api/v1/generate",
headers={"Authorization": "Bearer rk_live_xxx"},
json={"prompt": "YouTube thumbnail: 5 AI Tools, bold text"}
)
print(resp.json()["url"])MCP Setup#
Use the @rendrkit/mcp package to let AI agents generate images via the Model Context Protocol.
Claude Desktop
Add this to your claude_desktop_config.json:
{
"mcpServers": {
"rendrkit": {
"command": "npx",
"args": ["-y", "@rendrkit/mcp"],
"env": {
"RENDRKIT_API_KEY": "rk_live_xxx"
}
}
}
}Cursor
Add this to your .cursor/mcp.json in the project root:
{
"mcpServers": {
"rendrkit": {
"command": "npx",
"args": ["-y", "@rendrkit/mcp"],
"env": {
"RENDRKIT_API_KEY": "rk_live_xxx"
}
}
}
}Built by RendrKit. Have questions? support@rendrkit.dev