Le catalogue sur votre propre site.
Collez le widget pour afficher les modèles de vos fournisseurs à vos couleurs, ou appelez l'API depuis votre serveur pour construire vos propres pages. Chaque clé ne voit que les fournisseurs avec qui votre entreprise fait affaire.
Widget, sans développeur
Collez ces deux lignes à l'endroit où le catalogue doit apparaître. Le widget ajuste sa hauteur, garde un fond transparent et n'affiche que « Powered by KonAutomate » en bas.
<div id="veina-catalogue"></div> <script src="https://stone-canvas-hub.lovable.app/widget/v1.js" data-key="hc_pk_…" async></script>
Attributs facultatifs :
- data-lang="fr | en"
- data-accent="#1f4d43"
- data-font="Montserrat" (toute police Google Fonts)
- data-theme="light | dark | auto"
- data-bg="transparent | #ffffff"
- data-radius="0–16" · data-columns="2–5"
- data-type="slab | sink | faucet | vanity"
- data-target="id d'un autre conteneur"
- data-analytics="off" (aucune mesure d'utilisation)
Le widget ne s'affiche que sur les domaines inscrits sur sa clé.
Clés
Les clés sont remises par l'équipe Veina. Il en existe deux sortes :
- hc_pk_… publique : pour le widget et les pages web, seulement sur les domaines autorisés.
- hc_sk_… secrète : de serveur à serveur seulement. Refusée si elle est appelée depuis un navigateur. Ne la mettez jamais dans une page web.
Authorization: Bearer hc_sk_…
Adresses
Adresse de base : https://stone-canvas-hub.lovable.app/api/public/v1. Les réponses sont en JSON. Ajoutez lang=en pour les libellés et descriptions en anglais.
| GET | /suppliers | Vos fournisseurs, logo et nombre de produits |
| GET | /products | Produits filtrés et paginés |
| GET | /products/{id} | Un produit |
| GET | /filters | Filtres disponibles avec compteurs (product_type=…) |
| POST | /quote-requests | Demande de soumission d'un visiteur |
Filtres des produits
Combinez les paramètres librement ; séparez plusieurs valeurs par des virgules.
| product_type | slab, sink, faucet, vanity |
| supplier | tce-stone,kasa-quartz |
| material | quartz, granite, marble, quartzite, porcelain… |
| color | white, grey, black, beige, brown, gold, blue, green, red, multi |
| look | veined, solid, speckled, patterned, concrete, terrazzo |
| finish | polished, honed, matte, leathered, textured |
| thickness | 2, 3 |
| price_tier | economy, mid, upper_mid, premium |
| mount_type | undermount, topmount, dual_mount, farmhouse… |
| attr.<clé> | filtre propre au fournisseur, ex. attr.series=KSV |
| q | texte dans le nom ou le code |
| is_new, book_match | true | false |
| updated_since | 2026-10-01T00:00:00Z |
| sort | newest | name |
| page, per_page | per_page ≤ 100 (24 par défaut) |
{
"data": [{
"id": "6f1c…", "product_type": "slab",
"supplier": { "slug": "tce-stone", "name": "TCE Stone", "short_name": "TCE", "price_tier": "economy" },
"code": "TCE 2049", "name": "Calacatta Dorato", "material": "quartz",
"color_families": ["white", "gold"], "look": "veined", "finishes": ["polished"],
"thicknesses_cm": [2, 3], "slab_size": "126\" x 63\"",
"images": [{ "kind": "detail", "url": "https://stone-canvas-hub.lovable.app/api/public/img/…", "thumb": "…" }],
"product_url": "https://tcestone.com/products/…"
}],
"pagination": { "page": 1, "per_page": 24, "total": 212, "total_pages": 9 }
}Erreurs et limites
| 401 | missing_api_key, invalid_api_key |
| 403 | key_revoked, business_suspended, origin_not_allowed, origin_required, secret_key_in_browser |
| 404 | not_found (aussi pour un produit hors de vos fournisseurs) |
| 429 | rate_limited — attendez Retry-After secondes |
| 400 | invalid_parameter |
{ "error": { "code": "origin_not_allowed", "message": "origin_not_allowed" } }Chaque clé a une limite par minute (60 par défaut). Les images ont des adresses stables et peuvent être mises en cache.
Exemples
cURL
curl -H "Authorization: Bearer hc_sk_…" \ "https://stone-canvas-hub.lovable.app/api/public/v1/products?product_type=slab&color=white&look=veined"
JavaScript (Node)
const res = await fetch("https://stone-canvas-hub.lovable.app/api/public/v1/products?supplier=tce-stone&per_page=48", {
headers: { Authorization: `Bearer ${process.env.VEINA_SECRET_KEY}` },
});
const { data, pagination } = await res.json();PHP (WordPress)
$res = wp_remote_get("https://stone-canvas-hub.lovable.app/api/public/v1/products?product_type=sink", [
"headers" => ["Authorization" => "Bearer " . VEINA_SECRET_KEY],
]);
$catalogue = json_decode(wp_remote_retrieve_body($res), true);