Docs · Datafeed spec v1
The datafeed spec our competitors keep secret.
One CSV (or JSON) describes your entire catalog. It's deliberately compatible with the de-facto format most room visualizers already use — if you already maintain a product feed for one, it uploads to Ruangmu unchanged.
Already using another visualizer? Export the same CSV you maintain for it today and upload it as-is. Extra columns are ignored, never rejected.
Column reference
| Column | Required | What it does |
|---|---|---|
| SKU Number | Required | Your unique, stable product ID. Used for deep links (data-sku), analytics, and diff-based re-uploads — renders and history stay attached to it. |
| Product Name | Required | Shown to customers in the widget and on shared render images. |
| Category | Required | Free text shown as a filter to customers, e.g. “SPC”, “WPC”, “Carpet Tile”. |
| Collection | Optional | Groups products into a second-level filter in the widget. |
| Colors | Optional | Comma-separated color names; powers the color filter and search. |
| Thickness | Optional | Physical thickness with unit, e.g. “4mm”. Shown in product details. |
| Width | Recommended | Physical width with unit, e.g. “180mm”. Feeds the render prompt so plank/panel/tile scale looks right in the room. |
| Length | Recommended | Physical length with unit. Same role as Width for render realism. |
| Surface Applicability | Required | One of the six surfaces below. Selects which render pipeline your product uses — this is the most important column in the feed. |
| Product Layout | Optional | Straight, Herringbone or Chevron. Tells the renderer how to lay the product, e.g. herringbone plank direction. |
| Top-Down Image URL | Required | HTTPS link to a flat, top-down photo of the product (the swatch). This exact image is passed to the AI as the texture reference — its quality decides your render quality. |
| Product Page URL | Optional | Where “View product” links from the widget. |
| Add to Cart URL | Optional | Powers an “Add to cart” CTA. May contain {sku} which we substitute at click time. |
Surface Applicability values
Exactly one value per product. It routes the product to the right category tab and the right render prompt.
Floorplanks, tiles, carpet, vinyl rollsCeilinguPVC / WPC panels, slatsWallwall panels, wallpaper, paintCurtaincurtains and drapes, applied per windowRugplaced on the floor, keeps existing flooringFurniturereplaces a comparable furniture pieceProduct Layout values
Optional, floor/wall products only: Straight (default), Herringbone, Chevron. If your product ships in a fixed pattern, set it here so renders lay it correctly.
StraightHerringboneChevronSwatch image guidelines
- ✓Top-down, flat, evenly lit — no perspective shots, no room scenes, no watermarks.
- ✓Minimum 800×800px; JPG, PNG or WebP; under 5MB.
- ✓Show enough of the product that the pattern repeat is visible (for planks: at least 2–3 planks).
- ✓The AI uses this image as its texture reference, so what you upload is what gets rendered.
Prefer JSON?
POST the same fields as an array of objects with camelCase keys. Both formats are validated identically.
[
{
"skuNumber": "SPC-305",
"productName": "Walnut Herringbone",
"category": "SPC Flooring",
"collection": "Heritage",
"colors": "Dark Walnut",
"thickness": "4mm",
"width": "120mm",
"length": "610mm",
"surfaceApplicability": "Floor",
"productLayout": "Herringbone",
"topDownImageUrl": "https://yourstore.com/images/spc-305-topdown.jpg",
"productPageUrl": "https://yourstore.com/products/spc-305",
"addToCartUrl": "https://yourstore.com/cart/add?sku={sku}"
}
]Validation
- ✓Uploads are validated row by row — you get a per-row error report (missing columns, bad URLs, unknown surface values), never a silent partial import.
- ✓Re-uploads are diffed by SKU Number: changed rows update, missing rows can be disabled, analytics history is never wiped.
- ✓Duplicate SKU Numbers within one file are rejected with the row numbers listed.
Embed & JS API docs
The widget embed (one script tag), data-sku deep links, and the JavaScript API are documented in your dashboard once you create an account.