Vue d'ensemble
L'API REST Shopisim vous permet de créer des vitrines personnalisées, d'intégrer le e-commerce dans des sites existants ou de développer des applications mobiles alimentées par les boutiques Shopisim.
URL de base
https://www.shopisim.com/apiType de contenu
application/jsonAuthentification
Bearer <JWT>Démarrage rapide
Toutes les réponses sont en JSON. Les endpoints publics ne nécessitent aucune authentification. Les endpoints vendeur/admin nécessitent un token JWT valide dans le header Authorization.
# Récupérer les produits d'une boutique (sans authentification)
curl https://www.shopisim.com/api/public/shops/my-shop/products
# S'authentifier et gérer sa boutique
TOKEN=$(curl -s -X POST https://www.shopisim.com/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"you@example.com","password":"secret"}' | jq -r .token)
curl https://www.shopisim.com/api/seller/shops/me \
-H "Authorization: Bearer $TOKEN"Localisation
Shopisim supporte les locales fr, en et de. Envoyez le header Accept-Language ou utilisez le paramètre ?locale=en pour obtenir du contenu traduit. Les messages d'erreur sont également retournés dans la langue demandée.
Pagination
Les endpoints de liste retournent des résultats paginés. Utilisez ?page=1&limit=20 pour contrôler la pagination. La réponse inclut les champs items, total, page et limit.
{
"items": [...],
"total": 142,
"page": 1,
"limit": 20
}Authentification
Inscription, connexion et gestion des sessions utilisateur avec des tokens JWT.
/auth/loginAuthentifie un utilisateur et retourne un token JWT.
Corps de la requête
{
"username": "user@example.com",
"password": "SecurePass123!"
}Réponse
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9..."
}/auth/registerCrée un nouveau compte utilisateur. Retourne un token JWT immédiatement.
Corps de la requête
{
"email": "user@example.com",
"password": "SecurePass123!",
"firstName": "Jean",
"lastName": "Dupont",
"locale": "fr"
}Réponse
{
"message": "...",
"user": { "id": 1, "email": "user@example.com", "firstName": "Jean", "lastName": "Dupont" },
"token": "eyJ0eXAi..."
}/auth/meAuthRécupère le profil de l'utilisateur authentifié.
Réponse
{
"id": 1, "email": "user@example.com", "firstName": "Jean", "lastName": "Dupont",
"phone": "+33612345678", "preferredLocale": "fr",
"roles": ["ROLE_USER", "ROLE_SELLER"], "status": "active",
"createdAt": "2026-01-15T10:30:00+00:00"
}/auth/meAuthMet à jour le profil de l'utilisateur authentifié.
Corps de la requête
{
"firstName": "Jean", "lastName": "Martin",
"phone": "+33612345678", "preferredLocale": "en"
}/auth/me/passwordAuthChange le mot de passe de l'utilisateur authentifié.
Corps de la requête
{
"currentPassword": "OldPass123!",
"newPassword": "NewSecurePass456!"
}/auth/verify-emailVérifie l'adresse email avec le token envoyé par email.
Corps de la requête
{ "token": "abc123..." }/auth/resend-verificationAuthRenvoie l'email de vérification.
/auth/forgot-passwordDemande un email de réinitialisation. Retourne toujours 200 par sécurité.
Corps de la requête
{ "email": "user@example.com" }/auth/reset-passwordRéinitialise le mot de passe avec le token reçu par email.
Corps de la requête
{ "token": "reset-token", "newPassword": "NewPass456!" }Boutiques
Parcourir et récupérer les informations des boutiques. Tous les endpoints sont publics.
/public/shopsListe toutes les boutiques actives.
Paramètres
limitint— Éléments par page (défaut 20)offsetint— Décalage pour la paginationRéponse
{
"items": [
{
"id": 1, "name": "Ma Boutique", "slug": "ma-boutique",
"description": "...", "logoUrl": "https://...",
"primaryColor": "#174374", "themeCode": "classic", "currency": "EUR"
}
],
"total": 42
}/public/shops/{slug}Récupère les détails complets d'une boutique spécifique.
Paramètres
slugstringrequis— Slug URL de la boutiquelocalestring— Locale pour le contenu traduit (fr, en, de)Réponse
{
"id": 1, "name": "Ma Boutique", "slug": "ma-boutique",
"description": "...", "logoUrl": "https://...", "bannerUrl": "https://...",
"faviconUrl": "https://...", "primaryColor": "#174374", "accentColor": "#3375ad",
"phone": "+33 1 23 45 67 89", "email": "contact@maboutique.fr",
"address": "123 Rue du Commerce", "city": "Paris", "zipCode": "75001", "country": "France",
"currency": "EUR", "themeCode": "classic",
"supportedLocales": ["fr", "en", "de"], "defaultLocale": "fr",
"shippingCostCents": 499, "customPages": [...], "contentBlocks": [...]
}/public/shops/{slug}/payment-methodsRécupère les méthodes de paiement activées pour une boutique.
Réponse
{
"testMode": false,
"methods": [
{ "provider": "stripe", "label": "Credit Card", "enabled": true },
{ "provider": "paypal", "label": "PayPal", "enabled": true }
]
}Produits
Parcourir et rechercher des produits dans une boutique.
/public/shops/{slug}/productsListe les produits d'une boutique avec pagination et recherche.
Paramètres
slugstringrequis— Slug URL de la boutiquepageint— Numéro de pagelimitint— Éléments par pageqstring— Requête de recherchelocalestring— Locale (fr, en, de)Réponse
{
"items": [
{
"id": 1, "title": "T-Shirt Premium", "slug": "t-shirt-premium",
"priceCents": 2999, "currency": "EUR", "stockQty": 50, "status": "active",
"category": { "id": 1, "name": "Clothing", "slug": "clothing" },
"images": [{ "id": 1, "url": "https://...", "alt": "..." }],
"variants": [{ "id": 1, "name": "Default", "sku": "TSP-001", "priceCents": 2999, "stockQty": 50 }],
"taxGroup": { "id": 1, "name": "TVA 20%", "rate": 20.00 }
}
],
"total": 85, "page": 1, "limit": 20
}/public/shops/{slug}/products/{productSlug}Récupère les informations détaillées d'un produit spécifique.
Paramètres
slugstringrequis— Slug URL de la boutiqueproductSlugstringrequis— Slug du produitlocalestring— Locale (fr, en, de)Catégories
Récupérer l'arborescence des catégories avec sous-catégories.
/public/shops/{slug}/categoriesRécupère l'arborescence complète des catégories d'une boutique (sous-catégories imbriquées).
Paramètres
slugstringrequis— Slug URL de la boutiquelocalestring— Locale (fr, en, de)Réponse
{
"items": [
{
"id": 1, "name": "Clothing", "slug": "clothing", "imageUrl": "https://...",
"productCount": 12,
"children": [
{ "id": 2, "name": "T-Shirts", "slug": "t-shirts", "productCount": 5, "children": [] }
]
}
]
}Panier
Créer et gérer les paniers d'achat. Les paniers sont identifiés par UUID.
/public/cartsCrée un nouveau panier pour une boutique.
Corps de la requête
{ "shopSlug": "ma-boutique" }Réponse
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"items": [], "totalCents": 0, "taxCents": 0, "totalWithTaxCents": 0
}/public/carts/{id}Récupère le contenu du panier avec le détail des taxes.
Paramètres
iduuidrequis— UUID du panierRéponse
{
"id": "550e8400-...",
"items": [
{
"id": 1, "productVariantId": 5, "productTitle": "T-Shirt Premium",
"variantName": "L / Blue", "qty": 2, "unitPriceCents": 2999,
"totalCents": 5998, "imageUrl": "https://..."
}
],
"totalCents": 5998, "taxCents": 1000, "totalWithTaxCents": 6998, "currency": "EUR"
}/public/carts/{id}/itemsAjoute un article au panier.
Corps de la requête
{ "productVariantId": 5, "qty": 2 }/public/carts/{id}/items/{itemId}Met à jour la quantité d'un article.
Corps de la requête
{ "qty": 3 }/public/carts/{id}/items/{itemId}Supprime un article du panier.
Paiement & Commande
Traiter les commandes avec plusieurs fournisseurs de paiement. Supporte Stripe, PayPal, Flutterwave, CinetPay, virement bancaire, contre-remboursement et mode test.
/public/checkoutCrée une commande à partir d'un panier. Retourne les instructions de paiement selon le fournisseur sélectionné.
Corps de la requête
{
"cartId": "550e8400-...",
"paymentProvider": "stripe",
"cgvAccepted": true,
"firstName": "Jean", "lastName": "Dupont",
"email": "jean@example.com", "phone": "+33612345678",
"shippingAddress": "123 Rue du Commerce",
"shippingCity": "Paris", "shippingZipCode": "75001", "shippingCountry": "FR"
}Réponse
{
"order": {
"id": 42, "orderNumber": "ORD-20260313-A1B2C3",
"status": "pending", "totalCents": 6998, "currency": "EUR"
},
"paymentAction": {
"type": "client_confirmation",
"clientSecret": "pi_xxx_secret_xxx",
"publishableKey": "pk_live_xxx"
}
}Types de flux de paiement
client_confirmation — Confirmer le paiement côté client (Stripe). Contient clientSecret et publishableKey.
redirect — Rediriger l'utilisateur vers la page de paiement (PayPal, Flutterwave, CinetPay). Contient redirectUrl.
pending — En attente de confirmation manuelle (virement bancaire). Contient bankDetails.
none — Aucun paiement requis (contre-remboursement, mode test). La commande est confirmée immédiatement.
/public/checkout/verify-returnVérifie un retour de paiement après redirection (PayPal, Flutterwave, CinetPay).
Corps de la requête
{
"provider": "paypal",
"orderNumber": "ORD-20260313-A1B2C3",
"transactionId": "PAYID-xxx"
}Réponse
{ "status": "paid", "orderNumber": "ORD-20260313-A1B2C3" }Commandes
Récupérer l'historique des commandes client.
/auth/me/ordersAuthRécupère l'historique des commandes du client authentifié.
Réponse
{
"items": [
{
"id": 42, "orderNumber": "ORD-20260313-A1B2C3", "status": "shipped",
"totalCents": 6998, "currency": "EUR", "itemCount": 2,
"shopName": "Ma Boutique", "shopSlug": "ma-boutique",
"createdAt": "2026-03-13T14:30:00+00:00"
}
]
}Recherche
Recherche plein texte alimentée par Meilisearch avec fallback SQL.
/public/shops/{slug}/searchRecherche avec autocomplétion dans les produits.
Paramètres
qstringrequis— Requête de recherchelocalestring— Locale (fr, en, de)limitint— Résultats maximum (défaut 10)Factures
Télécharger les factures de commande en PDF.
/public/orders/{orderNumber}/invoiceTélécharge la facture PDF d'une commande.
Paramètres
orderNumberstringrequis— Numéro de commande (ex : ORD-20260313-A1B2C3)Réponse
Binary PDF (Content-Type: application/pdf)
Contact
Envoyer des messages de contact aux propriétaires de boutique.
/public/contact/{shopSlug}Envoie un message de contact à une boutique.
Corps de la requête
{
"name": "Marie",
"email": "marie@example.com",
"subject": "Question",
"message": "Hello..."
}Réponse
{ "success": true }Blog
Lire les articles du blog.
/public/blogListe les articles de blog publiés.
Paramètres
pageint— Numéro de pagelimitint— Éléments par pagelocalestring— Locale (fr, en, de)tagstring— Filtrer par tag/public/blog/{slug}Récupère un article de blog spécifique.
Paramètres
localestring— Locale (fr, en, de)Compte Client
Gérer les adresses, exporter les données et supprimer le compte (RGPD).
/auth/me/addressesAuthListe les adresses enregistrées.
/auth/me/addressesAuthCrée une nouvelle adresse.
Corps de la requête
{
"label": "Home", "fullName": "Jean Dupont",
"address1": "123 Rue du Commerce", "address2": "Apt 4B",
"city": "Paris", "zipCode": "75001", "country": "FR",
"phone": "+33612345678", "isDefault": true
}/auth/me/addresses/{id}AuthMet à jour une adresse.
/auth/me/addresses/{id}AuthSupprime une adresse.
/auth/me/exportAuthExporte toutes les données utilisateur (conformité RGPD).
/auth/meAuthSupprime le compte et anonymise toutes les données (conformité RGPD). Notifie les boutiques concernées.
Vendeur — Gestion de la Boutique
Créer et gérer votre boutique. Nécessite ROLE_SELLER.
/seller/shopsAuthCrée une nouvelle boutique.
Corps de la requête
{
"name": "Ma Boutique", "slug": "ma-boutique",
"description": "...", "themeCode": "classic",
"primaryColor": "#174374", "currency": "EUR"
}/seller/shops/meAuthRécupère les détails de votre boutique.
/seller/shops/meAuthMet à jour votre boutique. Tous les champs sont optionnels.
Corps de la requête
{
"name": "...", "slug": "...", "description": "...",
"primaryColor": "#...", "accentColor": "#...",
"phone": "+33...", "email": "contact@...",
"address": "...", "city": "...", "zipCode": "...", "country": "...",
"seoTitle": "...", "seoDescription": "...", "keywords": "...",
"themeCode": "classic", "currency": "EUR",
"customPages": [...], "contentBlocks": [...]
}/seller/shops/me/activateAuthActive votre boutique (la rend publiquement visible).
/seller/shops/me/localesAuthRécupère la configuration des locales supportées.
/seller/shops/me/localesAuthMet à jour les locales supportées.
Corps de la requête
{ "supportedLocales": ["fr", "en", "de"], "defaultLocale": "fr" }/seller/shops/me/domainAuthRécupère la configuration du domaine personnalisé.
/seller/shops/me/domainAuthConfigure un domaine personnalisé.
Corps de la requête
{ "domain": "www.myboutique.com" }/seller/shops/me/domain/verifyAuthVérifie la configuration DNS de votre domaine personnalisé.
/seller/shops/me/domainAuthSupprime le domaine personnalisé.
Vendeur — Produits
Opérations CRUD sur les produits, variantes et traductions.
/seller/productsAuthListe vos produits.
Paramètres
pageint— Numéro de pagelimitint— Éléments par pagesearchstring— Requête de recherche/seller/productsAuthCrée un produit.
Corps de la requête
{
"title": "T-Shirt Premium", "slug": "t-shirt-premium",
"description": "...", "priceCents": 2999, "currency": "EUR",
"stockQty": 50, "sku": "TSP-001", "categoryId": 1, "taxGroupId": 1
}/seller/products/{id}AuthRécupère les détails d'un produit.
/seller/products/{id}AuthMet à jour un produit (tous les champs optionnels).
/seller/products/{id}AuthSupprime un produit.
/seller/products/{id}/activateAuthActive/publie un produit.
Variantes
/seller/products/{id}/variantsAuthListe les variantes d'un produit.
/seller/products/{id}/variantsAuthCrée une variante.
Corps de la requête
{
"name": "L / Blue", "sku": "TSP-001-L-BL",
"priceCents": 2999, "stockQty": 20,
"attributes": { "size": "L", "color": "Blue" }, "active": true
}/seller/products/{productId}/variants/{variantId}AuthMet à jour une variante.
/seller/products/{productId}/variants/{variantId}AuthSupprime une variante.
Traductions
/seller/products/{id}/translationsAuthRécupère toutes les traductions d'un produit.
/seller/products/{id}/translations/{locale}AuthMet à jour la traduction pour une locale.
Corps de la requête
{ "title": "Premium T-Shirt", "description": "English description..." }/seller/products/{id}/auto-translateAuthTraduit automatiquement le produit dans toutes les locales supportées grâce à l'IA.
Vendeur — Catégories
Gérer les catégories de produits avec support des sous-catégories.
/seller/categoriesAuthListe toutes les catégories.
/seller/categoriesAuthCrée une catégorie.
Corps de la requête
{
"name": "Clothing", "slug": "clothing",
"description": "...", "sortOrder": 0, "active": true, "parentId": null
}/seller/categories/{id}AuthMet à jour une catégorie.
/seller/categories/{id}AuthSupprime une catégorie.
/seller/categories/{id}/auto-translateAuthTraduit automatiquement la catégorie grâce à l'IA.
Vendeur — Commandes
Consulter et gérer les commandes, traiter les transitions de workflow.
/seller/ordersAuthListe les commandes de votre boutique.
Paramètres
pageint— Numéro de pagelimitint— Éléments par pagesearchstring— Requête de recherche/seller/orders/{id}AuthRécupère les détails d'une commande incluant les articles, les informations d'expédition et les transitions de workflow disponibles.
/seller/orders/{id}/workflowAuthRécupère les transitions de workflow disponibles pour une commande.
Réponse
{
"currentStatus": "paid",
"availableTransitions": [
{ "name": "process", "label": "Process order" },
{ "name": "ship", "label": "Mark as shipped" }
]
}/seller/orders/{id}/workflow/transitionAuthApplique une transition de workflow (ex : traiter, expédier, livrer, annuler, rembourser).
Corps de la requête
{ "transition": "ship" }/seller/orders/{id}/shipmentAuthAjoute les informations de suivi d'expédition.
Corps de la requête
{
"carrier": "DHL",
"trackingNumber": "1234567890",
"trackingUrl": "https://tracking.dhl.com/..."
}/seller/orders/{id}/confirm-paymentAuthConfirme manuellement un paiement par virement bancaire.
/seller/orders/{id}/invoiceAuthTélécharge la facture de commande en PDF.
Vendeur — Médias
Téléverser et gérer les images pour la boutique, les produits et les catégories. Utilisez multipart/form-data pour les téléversements de fichiers.
/seller/shops/me/logoAuthTéléverse le logo de la boutique (multipart/form-data).
/seller/shops/me/logoAuthSupprime le logo de la boutique.
/seller/shops/me/bannerAuthTéléverse la bannière de la boutique (multipart/form-data).
/seller/shops/me/bannerAuthSupprime la bannière de la boutique.
/seller/shops/me/banner/from-urlAuthDéfinit la bannière à partir d'une URL externe.
Corps de la requête
{ "url": "https://images.unsplash.com/..." }/seller/shops/me/favicon/generateAuthGénère automatiquement le favicon à partir des initiales ou du logo de la boutique.
Corps de la requête
{ "source": "initials" }/seller/shops/me/faviconAuthTéléverse un favicon personnalisé (multipart/form-data).
/seller/shops/me/faviconAuthSupprime le favicon.
/seller/products/{id}/imagesAuthTéléverse une image de produit (multipart/form-data).
/seller/products/{productId}/images/{imageId}AuthSupprime une image de produit.
/seller/products/{productId}/images/reorderAuthRéordonne les images d'un produit.
Corps de la requête
{ "imageIds": [3, 1, 2] }/seller/categories/{id}/imageAuthTéléverse une image de catégorie (multipart/form-data).
Vendeur — Paramètres de Paiement
Configurer les fournisseurs de paiement (Stripe, PayPal, Flutterwave, CinetPay, virement bancaire, contre-remboursement).
/seller/shops/me/payment-settingsAuthRécupère la configuration des paiements.
/seller/shops/me/payment-settingsAuthMet à jour les paramètres et identifiants des fournisseurs de paiement.
/seller/shops/me/payment-settings/validate-credentialsAuthValide les identifiants d'un fournisseur de paiement.
/seller/shops/me/payment-settings/toggle-test-modeAuthBascule entre le mode test et production.
Vendeur — Paramètres Email
Personnaliser les emails de notification de commande avec SMTP personnalisé, templates et traductions.
/seller/shops/me/email-settingsAuthRécupère la configuration email.
/seller/shops/me/email-settingsAuthMet à jour les paramètres email (SMTP, template, textes).
/seller/shops/me/email-settings/previewAuthAperçu du template email rendu.
Corps de la requête
{ "type": "order_confirmation", "locale": "fr" }/seller/shops/me/email-settings/send-testAuthEnvoie un email de test.
Corps de la requête
{ "type": "order_confirmation", "locale": "fr" }Vendeur — Notifications
Notifications en temps réel via Server-Sent Events (SSE) avec fallback polling.
/seller/notificationsAuthListe les notifications.
Paramètres
pageint— Numéro de pageunread_onlybool— Filtrer les non lues uniquement/seller/notifications/unread-countAuthRécupère le nombre de notifications non lues.
Réponse
{ "count": 5 }/seller/notifications/{id}/readAuthMarque une notification comme lue.
/seller/notifications/mark-all-readAuthMarque toutes les notifications comme lues.
/seller/notifications/streamAuthFlux Server-Sent Events pour les notifications en temps réel. Gardez la connexion ouverte.
Vendeur — Outils IA
Outils alimentés par l'IA pour la génération de contenu utilisant Claude et OpenAI.
/seller/shops/me/generate-descriptionAuthGénère par IA la description de la boutique avec optimisation SEO et traductions.
Corps de la requête
{ "keywords": "artisanal jewelry, handmade, Paris" }/seller/shops/me/generate-legalAuthGénère par IA les documents juridiques (CGV, politique de confidentialité, etc.).
Corps de la requête
{ "type": "cgv", "locale": "fr" }/seller/shops/me/ai-bannerAuthRecherche d'images de bannière sélectionnées par IA.
Corps de la requête
{ "keywords": "fashion boutique modern" }/seller/shops/me/ai-logoAuthGénère un logo de boutique par IA.
/seller/products/ai-generateAuthGénère une fiche produit complète par IA.
Corps de la requête
{ "name": "Organic Cotton T-Shirt" }/seller/products/{id}/social-captionAuthGénère par IA une légende pour les réseaux sociaux pour un produit.
Corps de la requête
{ "platform": "instagram", "locale": "fr" }/seller/shops/me/auto-translateAuthTraduit automatiquement tout le contenu de la boutique dans les locales supportées.
/seller/transcribeAuthTranscrit un fichier audio en texte (multipart/form-data).
Webhooks
Endpoints webhook des fournisseurs de paiement. Appelés par les fournisseurs de paiement pour confirmer les transactions.
Les URLs webhook suivantes sont configurées par fournisseur de paiement :
POST /webhooks/stripe
POST /webhooks/paypal
POST /webhooks/flutterwave
POST /webhooks/cinetpay
POST /webhooks/orange_money
POST /webhooks/mtn_momo
Ces endpoints sont à usage interne par les fournisseurs de paiement. Vous n'avez pas besoin de les appeler directement.
Gestion des erreurs
Toutes les erreurs suivent un format JSON cohérent avec des messages localisés.
{
"code": 401,
"message": "Invalid credentials"
}
// validation:
{
"error": "This email is already in use"
}Codes de statut HTTP
Limites d'utilisation
Directives d'utilisation de l'API.
Veuillez utiliser l'API de manière responsable. Directives générales :
- Endpoints publics : pas de limite stricte, mais évitez le polling excessif
- Endpoints authentifiés : conçus pour des usages mono-boutique
- Endpoints IA : soumis aux limites des fournisseurs en amont, à utiliser avec parcimonie
- Flux SSE : maintenir une seule connexion par session
- Téléversement de fichiers : maximum 10 Mo par fichier
Pour les intégrations à fort volume, veuillez nous contacter.
© 2026 Shopisim. Tous droits réservés.
Interface Swagger UI interactive également disponible sur /api/doc