La « boutique » est le conteneur de plus haut niveau des produits, commandes, clients, etc. Chaque clé est liée à exactement une boutique. Il n'existe aucun moyen de requêter les boutiques d'autres marchands.
GET /v1/store
Retourne le profil de la boutique à laquelle appartient la clé appelante.
Auth : clé plateforme avec store:read. Les clés du marchand l'ont par défaut ; une clé sans ce scope reçoit 403 forbidden (Missing scope: store:read).
Servi à neuf à chaque appel : une modification faite dans le tableau de bord apparaît au GET suivant via api.dzbuild.app comme via l'alias dzbuild.com/api/v1/store.
Requête
curl https://api.dzbuild.app/v1/store \ -H "Authorization: Bearer $DZ_KEY"
Réponse 200
{
"data": {
"id": 12345,
"name": "My Store",
"slug": "my-store",
"language": "ar",
"description": "Short tagline",
"logo": "/uploads/logos/12345/logo.webp",
"favicon": null,
"banner": null,
"theme": {
"primary_color": "#f59e0b",
"secondary_color": "#fbbf24",
"background_color": "#ffffff",
"font_family": "Cairo"
},
"store_theme": "starter",
"fast_checkout_theme": "classic",
"variant_card_style": "default",
"subdomain": "my-store.dzbuild.app",
"custom_domain": null,
"custom_domain_verified": false,
"public_url": "https://my-store.dzbuild.app",
"hide_branding": false,
"created_at": "2026-01-01 12:00:00"
},
"meta": { "request_id": "...", "api_version": "v1" }
}
Référence des champs
Champ | Type | Notes |
| int | Identifiant interne stable. Identique à |
| string | Nom d'affichage. Apparaît dans la navbar et les emails. |
| string | Identifiant compatible URL. Utilisé dans |
| enum |
|
| string|null | Tagline courte. |
| string|null | Chemin sur |
| string|null | Même logique. |
| string|null | Même logique. |
| hex string | Couleur dominante des boutons et accents. |
| hex string | Hover / accents secondaires. |
| hex string | Fond de page. |
| string | Typographie (par défaut |
| string | Clé du thème de boutique utilisé, la même que |
| string | Clé du thème du formulaire Fast Checkout, |
| string | Clé du style du sélecteur de variantes, |
| string|null | Sous-domaine émis par DZBuild. Normalement présent ; |
| string|null | Domaine personnel du marchand. Défini uniquement s'il a été ajouté depuis le tableau de bord. |
| bool |
|
| string|null | URL où arrivent réellement les clients : le domaine du marchand lorsqu'il est entièrement en ligne et défini comme adresse principale de la boutique, sinon le sous-domaine ; |
| bool | « Powered by DZBuild » caché dans le footer. Plan Illimité. |
| timestamp | Heure de création de la boutique, heure d'Alger (UTC+01:00). |
Erreurs
HTTP | Code | Cause |
401 |
| Clé invalide ou manquante |
402 |
| Quota mensuel de requêtes de la boutique épuisé — voir Limites de débit |
403 |
|
|
404 |
| La boutique a été supprimée pendant que vous utilisiez la clé (très rare) |
429 |
| Plafond par minute atteint pour cette boutique, partagé par toutes ses clés ; respectez |
PATCH /v1/store
Met à jour le profil de la boutique, avec les mêmes champs que la page des paramètres de la boutique dans le tableau de bord, sauf le numéro WhatsApp. Seuls les champs envoyés changent.
Auth : clé plateforme avec store:write. Nécessite Idempotency-Key.
Corps
Champ | Type | Notes |
| string | Jusqu'à 100 caractères. Ne peut pas être vide. |
| string | Jusqu'à 5000 caractères. |
| int|null | Un id de wilaya issu de |
| string | Jusqu'à 100 caractères. |
| string | Jusqu'à 500 caractères. |
| string | Jusqu'à 20 caractères. |
| string|null | Une adresse email valide. |
| string|null | Code de vérification Google Search Console, jusqu'à 100 caractères. |
| string|null | Code de vérification Bing Webmaster, jusqu'à 100 caractères. |
Les balises HTML sont retirées des valeurs texte et un texte plus long est coupé à la limite. Le slug, le domaine personnalisé et les couleurs ne font pas partie de cet endpoint ; les couleurs et les autres réglages de design se modifient avec PATCH /v1/store/design.
Requête
curl -X PATCH https://api.dzbuild.app/v1/store \
-H "Authorization: Bearer $DZ_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: store-profile-1" \
-d '{"store_phone": "0550000000", "description": "Short tagline"}'
Réponse 200
{
"data": {
"updated": ["description", "store_phone"],
"values": {"description": "Short tagline", "store_phone": "0550000000"}
},
"meta": { "request_id": "...", "api_version": "v1" }
}
Le changement est enregistré et peut être annulé avec POST /v1/changes/{change_id}/undo ; retrouvez son id avec GET /v1/changes?entity=store.settings. Un GET /v1/store envoyé juste après l'écriture renvoie les nouvelles valeurs.
Erreurs
HTTP | Code | Cause |
400 |
| Le corps n'est pas un JSON valide, ou |
403 |
|
|
404 |
| La boutique a été supprimée. |
422 |
| Le corps ne contient aucun des champs ci-dessus. |
422 |
| Un champ est un objet ou une liste, ou |
422 |
|
|
422 |
|
|
422 |
| La même |
GET /v1/store/design
Renvoie le design de la boutique : les champs de la page de personnalisation du tableau de bord (/dashboard/customize) pour le thème actuel de la boutique, regroupés dans les mêmes sections, chacun avec sa valeur actuelle. Quelques thèmes masquent certains de ces champs sur cette page ; l'API les liste tous.
Auth : clé plateforme avec store:read.
Servi à neuf via api.dzbuild.app, comme GET /v1/store. La réponse de PATCH /v1/store/design porte aussi les valeurs écrites dans values.
Requête
curl https://api.dzbuild.app/v1/store/design \ -H "Authorization: Bearer $DZ_KEY"
Réponse 200
Deux sections sont montrées, avec une partie de leurs champs.
{
"data": {
"theme": "starter",
"plan": "enterprise",
"sections": [
{
"key": "theme",
"name": {"ar": "الألوان والخط", "fr": "Couleurs et Police"},
"plan_required": "free",
"page": "home",
"fields": [
{"key": "primary_color", "type": "color", "plan_required": "free", "writable": true, "locked": false, "value": "#f59e0b"},
{"key": "background_color", "type": "color", "plan_required": "pro", "writable": true, "locked": false, "value": "#ffffff"},
{"key": "font_family", "type": "select", "plan_required": "free", "writable": true, "locked": false, "value": "Cairo"}
]
},
{
"key": "productCard",
"name": {"ar": "بطاقة المنتج", "fr": "Carte produit"},
"plan_required": "free",
"page": "home",
"fields": [
{"key": "card_hide_price", "type": "switch", "plan_required": "free", "writable": true, "locked": false, "value": false},
{"key": "card_border_radius", "type": "select", "plan_required": "free", "writable": true, "locked": false, "allowed_values": ["0px", "8px", "16px", "24px"], "value": "16px"}
]
}
]
},
"meta": { "request_id": "...", "api_version": "v1" }
}
Référence des champs
Champ | Type | Notes |
| string | Clé du thème utilisé par la boutique. Voir Thèmes. |
| string | Le plan sur lequel les verrous sont calculés : |
| string | Identifiant de la section, par exemple |
| object | Le titre de la section affiché par le tableau de bord, en |
| string | Le plan que le tableau de bord affiche sur la section. |
| string |
|
| array | Les champs de la section. Peut être vide : quelques sections, comme |
| string | Le nom à envoyer dans |
| string | Le contrôle du tableau de bord : |
| string | Le plan que le tableau de bord affiche sur le champ. |
| bool |
|
| bool |
|
| array | Seulement sur les champs à choix fixe : les valeurs que le champ accepte. |
| any | La valeur actuelle. Les champs |
GET /v1/store/design/fields
La même liste sans la clé value. Appelez-la avant une écriture pour voir les champs que le thème de la boutique affiche, le nom à envoyer pour chacun et ceux que le plan verrouille.
Auth : clé plateforme avec store:read. Servi à neuf via api.dzbuild.app, comme GET /v1/store.
Requête
curl https://api.dzbuild.app/v1/store/design/fields \ -H "Authorization: Bearer $DZ_KEY"
Réponse 200
Les deux dernières sections sont montrées.
{
"data": {
"theme": "starter",
"plan": "enterprise",
"sections": [
{
"key": "customCss",
"name": {"ar": "CSS مخصّص", "fr": "CSS personnalisé"},
"plan_required": "enterprise",
"page": "all",
"fields": [
{"key": "custom_css", "type": "textarea", "plan_required": "enterprise", "writable": true, "locked": false}
]
},
{
"key": "customJs",
"name": {"ar": "JavaScript مخصّص", "fr": "JavaScript personnalisé"},
"plan_required": "enterprise",
"page": "all",
"fields": [
{"key": "custom_js", "type": "textarea", "plan_required": "enterprise", "writable": false, "locked": false}
]
}
]
},
"meta": { "request_id": "...", "api_version": "v1" }
}
Erreurs
GET /v1/store/design et GET /v1/store/design/fields répondent les mêmes erreurs que GET /v1/store : 401 unauthorized, 402 quota_exceeded, 403 forbidden (Missing scope: store:read, plan ou pilote), 404 not_found et 429 rate_limited.
PATCH /v1/store/design
Modifie les champs de design : couleurs, en-tête, hero, cartes produit, page produit, textes de la page de commande, pied de page, liens sociaux, SEO et plus encore. Seuls les champs envoyés changent. Les couleurs et hide_branding se règlent ici, pas avec PATCH /v1/store.
Auth : clé plateforme avec store:write. Nécessite Idempotency-Key.
Corps
Envoyez n'importe quel champ que GET /v1/store/design/fields liste avec writable: true. Les champs de design que le thème actuel ne liste pas sont aussi acceptés : ils sont enregistrés, et un thème qui les affiche les utilise. Les clés que l'API ne connaît pas sont ignorées. Chaque valeur est nettoyée selon son type :
Type | Exemples | Ce qui est enregistré |
Interrupteur |
| Envoyez |
Couleur |
| Une valeur |
Couleur de remplacement |
| Une valeur |
Texte |
| Les balises HTML sont retirées et le texte est coupé à la longueur du champ, par exemple 255 caractères pour |
Lien |
| Un lien |
Choix fixe |
| L'une des |
Nombre |
| Gardé entre 4 et 48. |
Certains champs ont leurs propres règles :
font_family: lettres latines, chiffres, espaces et tirets. Tout le reste est enregistré commeCairo. Le tableau de bord proposeCairo,TajawaletAlmarai.button_style: le tableau de bord proposerounded,squareetpill.navbar_styleacceptedefault,centered,minimaloutransparent;navbar_menu_styleacceptedefault,pills,underlineoubuttons;navbar_logo_sizeacceptesmall,mediumoularge;cart_icon_styleacceptedefault,filled,outlineouminimal. Ces quatre champs n'ont pas d'allowed_values, et toute autre valeur refuse l'écriture entière avec422 invalid_value.facebook_pixel_id: 15 à 17 chiffres, ou vide pour l'effacer.custom_css: plan Enterprise seulement. Il est nettoyé avant d'être enregistré.
La barre d'achat et le formulaire de commande des pages produit ont quatre champs à eux. Tous les plans peuvent les écrire, et leurs valeurs par défaut gardent l'apparence qu'avait la boutique avant leur arrivée.
Champ | Valeurs | Ce qu'il change |
|
|
|
|
|
|
|
|
|
|
|
|
Le thème Digital n'a pas de formulaire Fast Checkout : fc_show_qty n'y change rien, et buybar_show_mobile: false masque la barre du téléphone tandis que les boutons d'achat restent dans la page.
Verrous de plan
Un champ que le plan de la boutique verrouille n'est pas écrit. Il est listé dans skipped avec la raison, et l'appel répond quand même 200 si un autre champ a été écrit. Quand tous les champs envoyés sont ignorés, l'appel répond 422 no_writable_fields.
Raison dans | Quand |
| Un champ réservé au plan |
|
|
|
|
Une clé marchand appartient à une boutique sur un plan Enterprise actif : rien n'est verrouillé pour elle. Les verrous s'appliquent aux jetons d'application installée, qui fonctionnent avec tous les plans.
Requête
curl -X PATCH https://api.dzbuild.app/v1/store/design \
-H "Authorization: Bearer $DZ_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: store-design-1" \
-d '{"primary_color": "#0f766e", "show_hero": true, "hero_title": "New collection"}'
Réponse 200
{
"data": {
"updated": ["primary_color", "show_hero", "hero_title"],
"skipped": [],
"values": {"primary_color": "#0f766e", "show_hero": 1, "hero_title": "New collection"},
"change_id": 812
},
"meta": { "request_id": "...", "api_version": "v1" }
}
updated liste les champs écrits et values la valeur enregistrée pour chacun, après nettoyage. skipped est une liste vide quand rien n'a été ignoré, sinon un objet comme {"hide_branding": "requires the unlimited plan"}.
Le changement est enregistré et peut être annulé avec POST /v1/changes/{change_id}/undo, avec le change_id de la réponse ; il vaut null dans le cas rare où l'écriture est enregistrée sans trace d'annulation, et GET /v1/changes?entity=store.design liste les précédents. Le jeton d'une application installée ne peut ni lire ni annuler les changements (403 forbidden, Apps cannot use this endpoint). Un GET /v1/store/design envoyé juste après l'écriture renvoie les nouvelles valeurs.
Erreurs
HTTP | Code | Cause |
400 |
| Le corps n'est pas un JSON valide, ou |
403 |
|
|
404 |
| La boutique a été supprimée. |
413 |
| Le corps dépasse 1 Mo. |
422 |
| Le corps ne contient aucun champ de design, ou tous ses champs ont été ignorés à cause du plan. |
422 |
| Un champ est un objet ou une liste, ou une valeur a été refusée, comme un |
422 |
| Un champ lien utilise un schéma autre que |
422 |
|
|
422 |
| La même |
Une réponse 422 n'écrit rien.