RendrKitDocs

API Reference

Generate design-ready images from text descriptions. Integrate RendrKit into your product with a single API call.

Base URLhttps://api.rendrkit.dev/api/v1

Agent Integration Guide

Direct Render, template selection, photo guidelines, and full examples for AI agents.

Quickstart#

Get started in 30 seconds:

  1. Sign up for free to get your API key (50 images/month, no credit card)
  2. Make your first API call:
bash
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.

http
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

promptstring

Description of the image to generate. Required unless templateId + slots provided.

sizestring

Width x Height format. Default 1080x1080. Presets: 1080x1080, 1200x628, 1920x1080, 1080x1920, 1280x720

stylestring

Visual style. One of modern | playful | corporate | dark | minimal | bold | warm | elegant | neon | earth. Auto-selected if omitted.

headingstring

Exact heading text. When provided, the AI will use this text verbatim without rephrasing.

subheadingstring

Exact subheading text. When provided, the AI will use this text verbatim.

imageUrlstring

HTTPS 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.

brandobject

Optional brand settings. { colors: ["#hex"], font: "string", logoUrl: "string" }

brandKitIdstring

UUID of a saved brand kit. Applies brand colors, font, and logo.

fontstring

Google Font name to use (e.g. Poppins, Playfair Display). Overrides the default font.

backgroundstring

Background mode. One of auto | photo | gradient. Default: auto (AI decides).

noPhotoboolean

Skip photo search and use a gradient background instead. Equivalent to background: "gradient".

noGradientboolean

Strip all gradient decorations (orbs, noise, patterns) and force a clean solid background color.

formatstring

Output format. One of png | pdf. Default: png. PDF renders an A4 document.

variantsnumber

Generate 1-3 style variants. Each gets a different visual style. Default: 1.

json
{
  "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

json
{
  "prompt": "Coffee shop weekend special",
  "imageUrl": "https://your-cdn.com/coffee-shop.jpg"
}

Response 201

json
{
  "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

templateIdstring

Template ID from GET /templates. When provided with slots, skips AI entirely.

slotsobject

Key-value map of slot values for the template. Required when templateId is provided.

photoQuerystring

1-3 word search query for Unsplash/Pexels background photo. Used when the template needs a photo.

logoUrlstring

HTTPS URL to a logo image (PNG with transparent background recommended). Placed as an overlay on the generated image.

logoPositionstring

Logo placement: "top-left" | "top-right" | "bottom-left" (default) | "bottom-right".

json
{
  "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)

json
{
  "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

json
{
  "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 IDDescriptionBest For
magazine-coverFull-bleed photo, text overlay bottom-leftLifestyle, food, travel, real estate
split-modernPhoto left, text right on dark bgProducts, services, wellness
split-reverseText left, photo rightProducts, services
photo-badgeFull-bleed photo with colored badgeSales, promotions, launches
photo-topPhoto top 55%, text bottomBlog posts, property listings
photo-bottomText top, photo bottom 60%Blog headers, portfolio
photo-left-textPhoto 42% left, text rightServices, courses, workshops
dark-overlayFull-bleed photo, dark overlay, centeredGeneral purpose with photo
event-posterPhoto bg with date block + detailsEvents, conferences, concerts
profile-cardAvatar, name, role, bio, linksTeam intros, speaker announcements
blog-post-coverBlog post cover with photo backgroundBlog posts, articles, content marketing
video-thumbnailVideo thumbnail with play button overlayYouTube thumbnails, video content
dish-spotlightFeatured dish hero card with photo and priceFeatured dishes, daily specials
app-screenshotApp screenshot mockup right, text leftApp features, mobile screenshots
product-showcaseProduct hero with photo left, details rightProduct launches, e-commerce
real-estate-listingProperty listing with photo, price, featuresProperty listings, real estate ads
team-memberTeam member spotlight with photo and bioTeam intros, employee spotlights

Gradient / Solid Templates (no photo needed)

Template IDDescriptionBest For
gradient-heroCentered text on dark gradientTech, SaaS, AI, announcements
neon-darkUltra-dark bg with neon glowGaming, nightlife, crypto
stats-bannerThree large numbers with labelsMetrics, year-in-review, milestones
countdownCountdown timer blocksProduct launches, sale countdowns
testimonialStar rating, quote, authorCustomer reviews, social proof
pricing-cardCentered pricing card with featuresPricing, plan launches
announcementBold colored bg with watermark textBig announcements, flash sales
flash-saleUrgent limited-time offer, bold typographyFlash sales, urgent promotions
social-quoteElegant quote card with attributionQuotes, wisdom, thought leadership
hiring-postJob opening with role details and tagsJob postings, recruitment
review-cardCustomer review with star ratingCustomer reviews, social proof
course-cardOnline course card with pricingOnline courses, e-learning
podcast-episodePodcast episode card with show infoPodcast 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 IDTypeSlotsBest For
flowchartVertical flow3–5 steps × (icon, title, desc, color)How-to guides, processes
process-horizontalHorizontal pipeline3–5 steps × (icon, title, desc)Workflows, onboarding
checklistCheckbox list4–8 items (checked/unchecked)Requirements, to-do lists
comparison-vsSide-by-side VS2 sides × 3–6 itemsProduct comparisons, pros/cons
timeline-verticalDot timeline3–6 events × (date, title, desc)Roadmaps, milestones, history
stats-circlesCircular progress3–5 metrics × (label, value 0-100)KPIs, performance dashboards
stats-squaresSquare stat cards3–5 metrics × (label, value, suffix)Key metrics, achievements
pyramidPyramid/funnel3–5 tiers × (label, value)Sales funnels, hierarchies
donut-chartDonut/pie chart3–5 segments × (label, value %)Budget breakdowns, market share
cycleCircular cycle3–6 phases × (label)Processes, lifecycles, sprints
bar-chartVertical bars3–6 bars × (label, value 0-100)Comparisons, trends, rankings
icon-gridIcon + text grid4–9 items × (icon, title, desc)Feature grids, service listings
progress-barsHorizontal bars3–6 bars × (label, value 0-100)Goal tracking, skill levels
mind-mapRadial mind map1 center + up to 10 branches × (label, desc, color)Brainstorming, topic exploration, planning
org-chartHierarchy chart1 top + 4 mid + 8 bottom × (name, role)Team structure, company hierarchy
kanban-board3-column board3 columns × 5 cards (title, desc)Project status, sprint boards
swot-analysis2×2 matrix4 quadrants × 3 items eachStrategic planning, competitive analysis
numbered-listNumbered listicleUp to 10 items × (icon, title, desc)Top-N lists, tips, rankings
pros-consTwo-column listUp to 6 pros + 6 consDecision making, product reviews
feature-comparisonFeature tableUp to 15 rows × 4 columnsProduct comparisons, plan features
gauge-meterGauge dials1–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

bash
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

json
{
  "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

namestringrequired

Human-readable name for the brand kit.

colorsstring[]

Array of hex color codes.

fontstring

Font family name.

logoUrlstring

URL of the brand logo image.

json
{
  "name": "Acme Corp",
  "colors": ["#6D28D9", "#F59E0B", "#10B981"],
  "font": "Inter",
  "logoUrl": "https://example.com/acme-logo.png"
}

Response 201

json
{
  "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

json
[
  {
    "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

json
{
  "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

json
{
  "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

json
{
  "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

templateIdstringrequired

Template ID to use for all items.

sizestring

Default size for all items. Defaults to 1080x1080.

itemsarrayrequired

Array of objects, each with slots and optionally size to override per item. Max 50.

json
{
  "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

json
{
  "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)

fileFilerequired

Image file. Accepted types: JPEG, PNG, WebP. Max 10 MB.

bash
curl -X POST https://api.rendrkit.dev/api/v1/upload \
  -H "Authorization: Bearer rk_live_xxx" \
  -F "file=@photo.jpg"

Response 200

json
{
  "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

templateIdstringrequired

Base template ID to clone.

namestringrequired

Name for your custom template.

defaultSlotsobject

Default slot values that will be pre-filled on every use.

json
{
  "templateId": "gradient-hero",
  "name": "Acme Announcements",
  "defaultSlots": {
    "accent_color": "#6D28D9",
    "details": "ACME INC"
  }
}

Response 201

json
{
  "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

planstringrequired

Target plan. One of starter | pro | business

Response 200

json
{
  "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

json
{
  "url": "https://billing.stripe.com/p/session/..."
}

Plans & Quotas#

PlanPriceImages/monthBrand KitsRate Limit
Free$050110 req/min
Starter$19/mo1,000330 req/min
Pro$49/mo5,0001060 req/min
Business$149/mo20,000Unlimited120 req/min

Rate Limits#

Requests are rate-limited per API key. Exceeding the limit returns a 429 status with a RATE_LIMITED error code.

PlanRate Limit
Free10 req/min
Starter30 req/min
Pro60 req/min
Business120 req/min

Error Codes#

All errors return a JSON body with a code field and a human-readable message.

CodeHTTPDescription
BAD_REQUEST400Invalid request parameters
INVALID_PROMPT400Prompt validation failed
INVALID_EMAIL400Invalid email for signup
UNAUTHORIZED401Missing or invalid API key
IMAGE_NOT_FOUND404Image not found
BRAND_KIT_NOT_FOUND404Brand kit not found
EMAIL_EXISTS409Account already exists
RATE_LIMITED429Too many requests
QUOTA_EXCEEDED429Monthly image quota reached. Response includes upgrade_url.
INTERNAL_ERROR500Server error
json
{
  "code": "INVALID_PROMPT",
  "message": "Prompt must be between 1 and 2000 characters."
}

Code Examples#

curl

bash
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

typescript
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)

typescript
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

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:

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:

json
{
  "mcpServers": {
    "rendrkit": {
      "command": "npx",
      "args": ["-y", "@rendrkit/mcp"],
      "env": {
        "RENDRKIT_API_KEY": "rk_live_xxx"
      }
    }
  }
}

Built by RendrKit. Have questions? support@rendrkit.dev