Aller au contenu principal

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

PlanLanding pages actives
Free0 (achat unique : 1000 DZD / à vie chacune)
Pro3
Unlimited / Enterpriseillimité

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

ParamTypeNotes
limitint 1–200Défaut 50
cursorstringOpaque
statusactive | draftFiltre

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

ChampTypeRequisNotes
titlestring 1–255
slugstringAuto-déduit de title si omis
statusactive | draftDéfaut draft
languagear | fr | enDéfaut ar
product_idintDoit appartenir à votre boutique ; la page lie ce produit
meta_titlestring ≤ 255Titre SEO ; défaut = title
meta_descriptionstringDescription 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 } }.