Landing pages
Une landing page est une page de conversion focalisée sur un seul produit. Elles sont indépendantes du catalogue boutique — vous pouvez avoir une landing page sans produit en ligne (pour des lancements à venir), ou une liée à un produit pour des pubs payantes.
Les sections (carrousels, faux visiteurs, comptes à rebours, etc.) sont gérées dans le tableau de bord en v1 ; l'API ne fait que CRUD sur l'enregistrement parent. Une mise à jour v1.1 exposera aussi le CRUD des sections.
Limites par plan
| Plan | Landing pages actives |
|---|---|
| Free | 0 (achat unique : 1000 DZD / à vie chacune) |
| Pro | 3 |
| Unlimited / Enterprise | illimité |
L'API **n'**applique pas ces limites à la création — vous pouvez créer des brouillons librement. Le flux de publication du dashboard vérifie les limites.
GET /v1/landing-pages
Liste les landing pages. Pagination par curseur.
Auth : clé plateforme avec landing_pages:read.
Paramètres de requête
| Param | Type | Notes |
|---|---|---|
limit | int 1–200 | Défaut 50 |
cursor | string | Opaque |
status | active | draft | Filtre |
Réponse 200
{
"data": {
"items": [
{
"id": 42,
"title": "Black T-Shirt — 30% off",
"slug": "black-tshirt-30-off",
"status": "active",
"language": "ar",
"product_id": 26,
"views": 1543,
"is_purchased": false,
"created_at": "2026-03-01 10:00:00",
"updated_at": "2026-03-15 14:22:11"
}
],
"next_cursor": null,
"has_more": false
}
}
GET /v1/landing-pages/{id}
Détail avec section_count.
{
"data": {
"id": 42,
"title": "Black T-Shirt — 30% off",
"slug": "black-tshirt-30-off",
"status": "active",
"language": "ar",
"product_id": 26,
"views": 1543,
"is_purchased": false,
"meta_title": "Black T-Shirt — Cotton 200gsm — 30% off | DZBuild",
"meta_description": "Limited-time offer on our cotton black t-shirt.",
"section_count": 7,
"created_at": "2026-03-01 10:00:00",
"updated_at": "2026-03-15 14:22:11"
}
}
POST /v1/landing-pages — créer
Auth : clé plateforme avec landing_pages:write. Nécessite Idempotency-Key.
Corps
| Champ | Type | Requis | Notes |
|---|---|---|---|
title | string 1–255 | ✅ | |
slug | string | Auto-déduit de title si omis | |
status | active | draft | Défaut draft | |
language | ar | fr | en | Défaut ar | |
product_id | int | Doit appartenir à votre boutique ; la page lie ce produit | |
meta_title | string ≤ 255 | Titre SEO ; défaut = title | |
meta_description | string | Description SEO |
Requête
curl -X POST 'https://api.dzbuild.app/v1/landing-pages' \
-H "Authorization: Bearer $DZ_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"title": "Black T-Shirt — 30% off",
"language": "ar",
"product_id": 26,
"status": "draft"
}'
Renvoie 201 avec la même forme que GET /v1/landing-pages/{id}. La nouvelle landing page n'a aucune section — peuplez-les depuis le dashboard.
PATCH /v1/landing-pages/{id}
Mise à jour partielle.
curl -X PATCH 'https://api.dzbuild.app/v1/landing-pages/42' \
-H "Authorization: Bearer $DZ_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{ "title": "Black T-Shirt — Spring promo" }'
Renommer régénère slug automatiquement uniquement si vous n'avez pas envoyé slug explicitement.
POST /v1/landing-pages/{id}/publish
Raccourci : passer le status à active. Équivaut à PATCH ... { status: "active" }.
curl -X POST 'https://api.dzbuild.app/v1/landing-pages/42/publish' \
-H "Authorization: Bearer $DZ_KEY" \
-H "Idempotency-Key: publish-42-$(date +%s)"
DELETE /v1/landing-pages/{id}
Suppression dure. Les cascades suppriment les sections.
curl -X DELETE 'https://api.dzbuild.app/v1/landing-pages/42' \
-H "Authorization: Bearer $DZ_KEY" \
-H "Idempotency-Key: del-42"
Réponse : { "data": { "deleted": true, "id": 42 } }.