Documentation

RendrAI API Reference

Welcome to the RendrAI developer documentation. Our REST API lets you generate photorealistic interior renders programmatically, embed interactive visualization widgets on any website, and integrate AI rendering into your existing design workflows.

New to RendrAI? Start with the Quick Start guide to generate your first render in under 5 minutes. All API calls require an API key from your dashboard.

Quick Start

Get up and running in minutes. Here's the fastest path to your first AI render.

1. Get your API key

Sign up for a free account and navigate to Dashboard → API Keys to generate your key. Free accounts include 20 render credits.

2. Make your first request

Send a POST request to /v1/renders with your image URL and desired style:

curl -X POST https://api.rendrai.io/v1/renders \
  -H "Authorization: Bearer rai_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://your-server.com/room-photo.jpg",
    "style": "scandinavian",
    "room_type": "kitchen",
    "quality": "4k",
    "lighting": "natural_daylight"
  }'

3. Poll for the result

Rendering typically takes 30–90 seconds. Poll the status endpoint or use webhooks for a callback when complete:

curl https://api.rendrai.io/v1/renders/render_abc123 \
  -H "Authorization: Bearer rai_live_YOUR_API_KEY"

Authentication

All API requests must include your API key in the Authorization header as a Bearer token:

Authorization: Bearer rai_live_YOUR_API_KEY

RendrAI has two key types:

Key TypePrefixUsage
Live keyrai_live_Production renders, debits real credits
Test keyrai_test_Testing, returns mock responses, no credit cost

Security: Never expose your API key in client-side JavaScript or public repositories. Use environment variables and server-side code for API calls.

POST /v1/renders

Create a new render job. The render processes asynchronously; use the returned id to check status.

Request body

ParameterTypeRequiredDescription
image_urlstringYesPublicly accessible URL of the source room image (JPEG or PNG, max 20MB)
stylestringYesStyle preset slug (see GET /styles). Example: scandinavian
room_typestringYesOne of: kitchen, living_room, bedroom, bathroom, office, dining_room, exterior
qualitystringNoOutput resolution: 1080p, 2k, 4k (default), 8k
lightingstringNoOne of: natural_daylight, golden_hour, evening_ambient, dramatic_shadows, studio_lighting
creativityintegerNo1–10. Low = conservative interpretation, high = creative reinterpretation. Default: 6
webhook_urlstringNoURL to POST the result to when rendering completes
metadataobjectNoArbitrary key/value pairs returned with the response

Response

{
  "id": "render_abc123xyz",
  "status": "processing",
  "created_at": "2026-03-12T14:30:00Z",
  "estimated_seconds": 45,
  "credits_used": 1,
  "metadata": {}
}

GET /v1/renders/:id

Retrieve the status and result of a render job.

Response (completed)

{
  "id": "render_abc123xyz",
  "status": "completed",
  "created_at": "2026-03-12T14:30:00Z",
  "completed_at": "2026-03-12T14:30:43Z",
  "render_seconds": 43,
  "credits_used": 1,
  "output": {
    "url": "https://cdn.rendrai.io/renders/render_abc123xyz.jpg",
    "width": 3840,
    "height": 2160,
    "format": "jpeg",
    "size_bytes": 4820480,
    "expires_at": "2026-04-12T14:30:43Z"
  },
  "input": {
    "style": "scandinavian",
    "room_type": "kitchen",
    "quality": "4k",
    "lighting": "natural_daylight"
  }
}

Status values

StatusDescription
queuedWaiting to be processed
processingAI is generating the render
completedRender finished successfully
failedRender failed — no credit charged

GET /v1/styles

Returns the full list of available style presets with metadata.

curl https://api.rendrai.io/v1/styles \
  -H "Authorization: Bearer rai_live_YOUR_API_KEY"
{
  "styles": [
    {
      "id": "scandinavian",
      "name": "Scandinavian",
      "description": "Clean lines, natural materials, neutral tones with cozy warmth",
      "available_for": ["kitchen", "living_room", "bedroom", "bathroom"],
      "plan_required": "starter"
    },
    {
      "id": "japandi",
      "name": "Japandi",
      "description": "Fusion of Japanese minimalism and Scandinavian functionality",
      "available_for": ["kitchen", "living_room", "bedroom"],
      "plan_required": "professional"
    }
  ],
  "total": 63
}

Webhooks

Rather than polling, you can specify a webhook_url in your render request. RendrAI will send a POST to your endpoint when the render completes or fails.

Webhook payload

{
  "event": "render.completed",
  "render_id": "render_abc123xyz",
  "status": "completed",
  "output_url": "https://cdn.rendrai.io/renders/render_abc123xyz.jpg",
  "timestamp": "2026-03-12T14:30:43Z"
}

Tip: Verify webhook authenticity by checking the X-RendrAI-Signature header against an HMAC-SHA256 hash of the raw request body using your API key as the secret.

iFrame Embed

The simplest way to embed RendrAI on your website. Paste this snippet anywhere on your page:

<iframe
  src="https://rendrai.io/embed/kitchen?key=YOUR_API_KEY"
  width="100%"
  height="700px"
  frameborder="0"
  allow="camera; microphone"
  style="border-radius:12px;border:1px solid #E7E5E4;"
  title="RendrAI Kitchen Visualizer"
></iframe>

Embed URL parameters

ParameterDescription
keyYour public embed key (different from your API key)
themelight or dark
primary_colorHex color for accent elements, e.g. %23F97316
roomPre-selected room type: kitchen, living_room, etc.
hide_brandingtrue to hide RendrAI branding (Professional plan+)

Node.js Example

const axios = require('axios');

async function generateRender(imageUrl, style) {
  // Submit render job
  const { data } = await axios.post(
    'https://api.rendrai.io/v1/renders',
    {
      image_url: imageUrl,
      style: style,
      room_type: 'kitchen',
      quality: '4k',
      lighting: 'natural_daylight'
    },
    {
      headers: { 'Authorization': 'Bearer rai_live_YOUR_KEY' }
    }
  );

  const renderId = data.id;
  console.log('Render queued:', renderId);

  // Poll until complete
  let result;
  while (true) {
    await new Promise(r => setTimeout(r, 3000));
    const { data: status } = await axios.get(
      `https://api.rendrai.io/v1/renders/${renderId}`,
      { headers: { 'Authorization': 'Bearer rai_live_YOUR_KEY' } }
    );
    if (status.status === 'completed') {
      result = status;
      break;
    }
    if (status.status === 'failed') throw new Error('Render failed');
  }

  console.log('Render URL:', result.output.url);
  return result.output.url;
}

generateRender('https://example.com/my-kitchen.jpg', 'scandinavian');

Error Codes

CodeHTTP StatusDescription
unauthorized401Invalid or missing API key
insufficient_credits402Account has no credits remaining
invalid_image400Image URL is inaccessible or format is unsupported
invalid_style400Style slug not found or not available on your plan
rate_limited429Too many requests. See rate limits
render_failed500Internal rendering error — no credit charged, retry safe

Rate Limits

API rate limits are enforced per API key:

PlanRenders/minAPI requests/min
Starter230
Professional10120
EnterpriseCustomCustom

Rate limit headers are included in every response:

X-RateLimit-Limit: 10
X-RateLimit-Remaining: 8
X-RateLimit-Reset: 1741788060
Need help?
Our developer team is available via email and Discord. Professional and Enterprise plans include priority support.
Email Support
Action completed