API Reference
Generate design-ready images from text descriptions. Integrate RendrKit into your product with a single API call.
https://api.rendrkit.dev/v1Authentication#
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
POST/api/v1/generate#
Generate a new image from a text prompt.
Request Body
promptstringrequiredDescription of the image to generate.
sizestringWidth x Height format. Default 1080x1080. Presets: 1080x1080, 1200x628, 1920x1080, 1080x1920, 1280x720
stylestringVisual style. One of modern | playful | corporate | dark | minimal | bold. Default modern
brandobjectOptional brand settings. { colors: ["#hex"], font: "string", logoUrl: "string" }
{
"prompt": "Instagram post: Launch day announcement, dark theme",
"size": "1080x1080",
"style": "modern",
"brand": {
"colors": ["#6D28D9", "#F59E0B"],
"font": "Inter",
"logoUrl": "https://example.com/logo.png"
}
}Response 201
{
"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"
}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"
}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 |
|---|---|---|
INVALID_PROMPT | 400 | Prompt validation failed |
UNAUTHORIZED | 401 | Missing or invalid API key |
QUOTA_EXCEEDED | 429 | Monthly image quota reached |
RATE_LIMITED | 429 | Too many requests |
IMAGE_NOT_FOUND | 404 | Image not found |
BRAND_KIT_NOT_FOUND | 404 | Brand kit not found |
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/v1/generate \
-H "Authorization: Bearer rk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"prompt": "Instagram post: Launch day announcement, dark theme"}'JavaScript
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);Python
import requests
resp = requests.post(
"https://api.rendrkit.dev/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