Supported products
Dessert renders ad creative around a single product with an
animatable texture. If you try to generate against an
unsupported product (a multi-pack, a wipe, an accessory), the API
rejects the request with product_not_supported and a
message naming the product. This page lists what works and what
doesn't so you can pre-filter on your side.
What we support
Any single SKU from the categories below. Marketing copy doesn't matter — a "milky serum" still counts as a serum, a "buttery balm" still counts as a balm. We classify by the product's actual texture and category, not by the brand's headline copy.
| Category | Examples |
|---|---|
| Creams & lotions | Day cream, night cream, moisturizer, body cream, body lotion, hand cream. |
| Serums & essences | Vitamin C serum, retinol serum, peptide serum, hydrating essence, ampoule. |
| Oils | Face oil, body oil, hair oil, lip oil, cleansing oil, dry oil. |
| Balms | Lip balm, body balm, cleansing balm, repair balm, multi-balm. |
| Lip products | Lip gloss, lip stain, lip tint, lipstick, lip cream, tinted lip balm. |
| Gels | Cleansing gel, gel moisturizer, hydrogel, eye gel, gel-cream. |
| Mists & toners | Facial mist, hydrating toner, exfoliating toner, setting mist, essence mist. |
| Sunscreens | Mineral SPF, chemical SPF, tinted SPF, sunscreen gel, sunscreen stick (if flowable). |
| Eye & lip treatments | Eye cream, eye serum, eye treatment, lip mask, lip treatment. |
| Masks | Cream masks, gel masks, clay masks, sleeping masks. Sheet masks not yet supported. |
| Scrubs & exfoliants | Sugar scrub, salt scrub, enzyme exfoliant, AHA/BHA peel (liquid form). |
| Color & complexion | Foundation, primer, concealer, tinted moisturizer, blush, bronzer, highlighter. |
| Mousses & foams | Cleansing foam, mousse moisturizer, foaming wash. |
What we don't support yet
These get flagged as is_compatible: false in
GET /v1/products and
rejected with HTTP 400 in
POST /v1/ads/generate.
| Category | Why not | Common signals |
|---|---|---|
| Multi-packs & sets | Renderer ships one product per ad. A 3-pack of lip balms or a "Skincare Routine Bundle" can't be cleanly framed. | 3-pack, set of N, duo, trio, bundle, kit, caddy, sampler, routine, essentials set, collection. |
| Wipes & sheet products | The visible product is fabric, not a creamy/oily texture — there's nothing to animate as a swatch or pour. | wipes, cleansing cloth, towelettes, cotton pads, sheet mask, patches, strips. |
| Tools & accessories | No product texture at all. | brush, spatula, applicator, sponge, gua sha, roller, headband, device, candle, diffuser. |
| Bar soap | Solid bar — no flowable substance to swatch or animate. We may add bar-soap-specific templates later. | bar soap. |
| Hair, fragrance, deodorant | Outside our current vertical. Different visual conventions; different templates needed. | shampoo, conditioner, perfume, fragrance, eau de, cologne, deodorant, hair. |
| Samples, gift cards, subscriptions | Not standalone purchasable products with a hero shot. | sample, gift card, subscription. |
Pre-filtering on your side
The GET /v1/products
response includes is_compatible on every product. Filter
on that before passing
product_refs to
POST /v1/ads/generate:
products = requests.get(
"https://api.dessert.dev/v1/products",
headers={"Authorization": f"Bearer {api_key}"},
).json()["products"]
usable = [p for p in products if p["usable_for_ads"]]
incompatible = [p for p in products if not p["is_compatible"]]
for p in incompatible:
print(f"skipped {p['handle']}: {p['incompatibility_reason']}")
Rejection error shape
If you do hit
POST /v1/ads/generate
with an incompatible product, you'll get a 400 with a structured
error envelope:
{
"error": {
"code": "product_not_supported",
"message": "`Honey & Orange Blossom 3-Pack Of Lip Balms` is not supported by this API. Multi-product bundle / kit — our renderer ships one product per ad. See https://docs.dessert.dev/supported-products for the list of supported product types.",
"doc_url": "https://docs.dessert.dev/supported-products",
"incompatible_products": [
{
"name": "Honey & Orange Blossom 3-Pack Of Lip Balms",
"handle": "honey-orange-blossom-3-pack-of-lip-balms",
"reason": "Multi-product bundle / kit — our renderer ships one product per ad."
}
]
}
}
False positives
We classify products with a three-pass system: hard signals on product title, the AI-extracted texture/category, and an LLM disambiguation pass for ambiguous cases (e.g. marketing copy that reads like a bundle but is actually one item). Most rejections are unambiguous — but if you think a product was wrongly flagged, email support@dessert.dev with the product handle and we'll review within one business day.
Adding a new supported category (foam? stick balm? deodorant cream?) takes about a day on our side once we've validated the template inventory works for it. Open an issue with a sample product URL and we'll prioritize.