API des boutiques

Chaque boutique ShopKollect expose la même API publique en JSON. C'est elle qu'utilise l'application ShopKollect ; vous pouvez l'utiliser pour vos propres applications ou intégrations.

Adresse

L'adresse de la boutique (sous-domaine ou domaine du marchand), suivie de /api/v1. Exemple :

https://demo.shop.pixelorigin.com/api/v1/products

Langue

En-tête Accept-Language (fr, en, es, ar) ; repli sur la langue de la boutique.

Prix

En centimes, TTC, avec une version mise en forme. Le serveur revérifie toujours prix, stock, horaires et compositions.

Authentification

Catalogue et commande sans compte. Compte client : jeton personnel « Authorization: Bearer … » obtenu à la connexion, propre à la boutique.

Erreurs et limites

Erreurs {"message", "errors"} (422 validation, 401 jeton, 404, 429 trop de requêtes). Débit limité par adresse IP.

Découverte et boutique

GET /.well-known/shopkollect.json Fiche de la boutique : nom, logo, couleurs, langues, devise, modules, adresse de l'API.
GET /api/v1/shop Coordonnées, état ouvert / fermé et message, pages (CGV, mentions…).
GET /api/v1/pickup-slots Heures de retrait du jour (HH:MM) ; « required » indique si une heure doit être choisie.

Catalogue

GET /api/v1/categories Catégories visibles, avec le nombre de produits en vente.
GET /api/v1/products Produits en vente : prix TTC en centimes, promotion, images (320 / 640 / 1024 px), stock, « composable ». category id ou slug de catégorieq recherche (2 caractères min.)sort position, new, price_asc, price_desc, name
GET /api/v1/products/{slug} Fiche complète : description, allergènes, URL de la page produit.
GET /api/v1/products/{slug}/composition Parcours Smart Kiosk du produit (pages, options, prix, règles min / max) : même définition que la borne.

Panier et commandes

POST /api/v1/cart/quote Le panier est tenu par l'application : le serveur renvoie les lignes chiffrées (compositions comprises), le total et les erreurs par ligne. lines [{product: id ou slug, quantity, selection?: {page_id: {option_id: quantité}}}]
POST /api/v1/orders Passe la commande (paiement sur place) → numéro et jeton de suivi. Mêmes contrôles que le site : horaires, stock, heure de retrait. lines [{product: id ou slug, quantity, selection?: {page_id: {option_id: quantité}}}]name stringphone stringemail stringnote stringpickup_time HH:MM, parmi /pickup-slotsaccept acceptation des CGV (obligatoire)
GET /api/v1/orders/{number} Suivi : statut (new, preparing, ready, collected, cancelled), heure de retrait, lignes. Avec le jeton de suivi ou le jeton du client. token jeton de suivi de la commande
POST /api/v1/devices Enregistre un téléphone (jeton Firebase) pour les notifications « commande prête » / « annulée », rattaché aux commandes suivies. token stringplatform android | ioslocale stringorders [{number, token}]
DELETE /api/v1/devices Désinscrit un téléphone. token string

Compte client (propre à chaque boutique)

POST /api/v1/auth/register Crée le compte → jeton personnel (un par appareil). Un client qui a déjà commandé sans compte garde son historique. name stringemail stringphone stringpassword stringnewsletter booleandevice_name string
POST /api/v1/auth/login Connexion → jeton personnel. 5 essais par minute. email stringpassword stringdevice_name string
POST /api/v1/auth/password Mot de passe oublié : envoie le même e-mail que le site. email string
DELETE /api/v1/auth/token jeton Déconnexion : révoque le jeton utilisé.
GET /api/v1/me jeton Profil du client.
PUT /api/v1/me jeton Modifie nom, e-mail, téléphone, newsletter, langue, mot de passe.
GET /api/v1/me/orders jeton Les 50 dernières commandes.
GET /api/v1/me/export jeton Export des données (RGPD), JSON.
DELETE /api/v1/me jeton Supprime le compte (confirm=true) ; les commandes restent chez la boutique sans lien avec le client. confirm boolean