50% Rabatt auf JahresplänePläne ansehen →

Spacevo API

The interior design API built for staging at volume

One POST call turns an empty listing photo into a furnished room. Wire it into your portal, your agent CRM or your own design product and stage thousands of listings a month — no designer in the loop, no Photoshop, no per-property quote.

$99/month · 1,000 renders included · about $0.099 per render

Authorization: Bearer sk-...
POST/api/v1/render
{ id, status, credits_remaining }
GET/api/v1/render/{id}
{ status, image_url }

Built for teams that render in bulk

Three shapes of volume we already see on the web product. The API is the same pipeline with the browser taken out.

Property platforms and portals

Every new listing arrives with empty-room photography. Fire one call per photo on upload and the whole feed ships staged, in one house style, before an agent opens the CMS.

Home and furniture e-commerce

A catalogue shot sells a product; a room shot sells a basket. Generate lifestyle scenes per SKU and per style direction instead of booking a set, a stylist and a photographer for every range.

Renovation and design SaaS

Your users already upload room photos. Add a “see it restyled” step inside your own product and keep the workflow — and the customer — on your side of the integration.

Two calls, start to finish

POST a room photo, poll the render id, get a full-resolution image back with no watermark. Authentication is a bearer key you create in Settings → API Keys.

cURL
# 1. Submit a room photo
curl -X POST https://spacevo.io/api/v1/render \
  -H "Authorization: Bearer sk-your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://cdn.example.com/listings/8412/living-room.jpg",
    "style": "scandinavian",
    "room_type": "living-room"
  }'

# => { "id": "8f4c1d6e-2b7a-4f19-9c3d-5a10e7b64f28",
#      "status": "processing", "credits_remaining": 962 }

# 2. Poll for the result
curl https://spacevo.io/api/v1/render/8f4c1d6e-2b7a-4f19-9c3d-5a10e7b64f28 \
  -H "Authorization: Bearer sk-your_key"

# => { "id": "8f4c1d6e-2b7a-4f19-9c3d-5a10e7b64f28", "status": "succeeded",
#      "image_url": "https://cdn.spacevo.io/interior/api/8f4c1d6e.jpg" }
Python
import os
import time

import requests

API = "https://spacevo.io/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['SPACEVO_API_KEY']}"}

created = requests.post(
    f"{API}/render",
    headers=HEADERS,
    json={
        "image_url": "https://cdn.example.com/listings/8412/living-room.jpg",
        "style": "scandinavian",
        "room_type": "living-room",
    },
    timeout=30,
).json()

while True:
    render = requests.get(
        f"{API}/render/{created['id']}", headers=HEADERS, timeout=30
    ).json()
    if render["status"] in ("succeeded", "failed"):
        break
    time.sleep(2)

print(render["image_url"])
Node.js
const API = 'https://spacevo.io/api/v1';
const headers = {
  Authorization: `Bearer ${process.env.SPACEVO_API_KEY}`,
  'Content-Type': 'application/json',
};

const created = await fetch(`${API}/render`, {
  method: 'POST',
  headers,
  body: JSON.stringify({
    image_url: 'https://cdn.example.com/listings/8412/living-room.jpg',
    style: 'scandinavian',
    room_type: 'living-room',
  }),
}).then((res) => res.json());

let render;
do {
  await new Promise((resolve) => setTimeout(resolve, 2000));
  render = await fetch(`${API}/render/${created.id}`, { headers }).then((res) =>
    res.json()
  );
} while (render.status === 'processing');

console.log(render.image_url);

Rendering is asynchronous: the POST returns immediately with an id and your remaining quota, and the image lands on a later GET. Parameters, error codes and limits are in the API reference.

One plan, one number

No usage tiers to model, no surprise invoice at the end of the month. If you need more than the plan holds, that is a conversation rather than a pricing page.

API Plan

$99/month

≈ $0.099 per render

  • 1,000 image renders every month
  • Full-resolution output, no watermark
  • Commercial licence for listings and catalogues
  • 60 requests per minute, per key
  • Quota resets monthly and does not roll over
  • Email support from the people who built it

Card payment, cancel any time. Once you're subscribed, generate your key under Settings → API Keys and your first call works immediately.

Enterprise

Custom volume, SLA & white-label

  • Volume pricing above 10,000 renders a month
  • Uptime SLA and a priority render queue
  • White-label delivery under your own brand
  • Named contact, invoicing and security review
Talk to us

API questions, answered

Can I use the API for real estate listings?

Yes. The API Plan carries a commercial licence, so a staged photo can go straight onto a portal, a brochure or a client-facing CRM. One rule travels with it everywhere: most portals and industry codes require a virtually staged image to be labelled as such, so keep the disclosure your market expects.

How much does one render cost?

About $0.099. The plan is $99 a month with 1,000 renders included, there is no per-call surcharge on top, and a failed render is not billed.

Do API renders carry the Spacevo watermark?

No. The watermark exists on the free web tier only. Every image returned by GET /api/v1/render/{id} is full resolution and clean.

What happens when the 1,000 renders run out?

The API answers 402 and stops rendering. Quota resets at the start of the next billing month and unused renders do not roll over, so size the plan against the volume you actually run — and talk to us before you hit the ceiling.

Is there a free trial or a free API tier?

Not on the API. Try the model in the browser first — the first render is free and no card is needed — then move to the API once the output quality is settled.

How long does a render take?

Tens of seconds under normal load. Treat it as asynchronous: POST, store the id, poll the GET until status is succeeded. Rate limiting is 60 requests per minute per key.

Tell us what you need to render

Volume, source photography, the styles you care about. A short mail is enough for us to issue a key and get a first batch running.

Contact us to get started