Overview
The Shopisim REST API lets you build custom storefronts, integrate e-commerce into existing websites, or create mobile apps powered by Shopisim shops.
Base URL
https://www.shopisim.com/apiContent Type
application/jsonAuthentication
Bearer <JWT>Quick Start
All responses are JSON. Public endpoints require no authentication. Seller/Admin endpoints require a valid JWT token in the Authorization header.
# Fetch a shop's products (no auth required)
curl https://www.shopisim.com/api/public/shops/my-shop/products
# Authenticate and manage your shop
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"Localization
Shopisim supports fr, en, and de locales. Send the Accept-Language header or use the ?locale=en query parameter to get translated content. Error messages are also returned in the requested language.
Pagination
List endpoints return paginated results. Use ?page=1&limit=20 to control pagination. The response includes items, total, page, and limit fields.
{
"items": [...],
"total": 142,
"page": 1,
"limit": 20
}Authentication
Register, login, and manage user sessions with JWT tokens.
/auth/loginAuthenticate a user and receive a JWT token.
Request Body
{
"username": "user@example.com",
"password": "SecurePass123!"
}Response
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9..."
}/auth/registerCreate a new user account. Returns a JWT token immediately.
Request Body
{
"email": "user@example.com",
"password": "SecurePass123!",
"firstName": "Jean",
"lastName": "Dupont",
"locale": "fr"
}Response
{
"message": "...",
"user": { "id": 1, "email": "user@example.com", "firstName": "Jean", "lastName": "Dupont" },
"token": "eyJ0eXAi..."
}/auth/meAuthGet the authenticated user's profile.
Response
{
"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/meAuthUpdate the authenticated user's profile.
Request Body
{
"firstName": "Jean", "lastName": "Martin",
"phone": "+33612345678", "preferredLocale": "en"
}/auth/me/passwordAuthChange the authenticated user's password.
Request Body
{
"currentPassword": "OldPass123!",
"newPassword": "NewSecurePass456!"
}/auth/verify-emailVerify email address using the token sent by email.
Request Body
{ "token": "abc123..." }/auth/resend-verificationAuthResend the verification email.
/auth/forgot-passwordRequest a password reset email. Always returns 200 for security.
Request Body
{ "email": "user@example.com" }/auth/reset-passwordReset password using the token received by email.
Request Body
{ "token": "reset-token", "newPassword": "NewPass456!" }Shops
Browse and retrieve shop information. All endpoints are public.
/public/shopsList all active shops.
Parameters
limitint- Items per page (default 20)offsetint- Offset for paginationResponse
{
"items": [
{
"id": 1, "name": "Ma Boutique", "slug": "ma-boutique",
"description": "...", "logoUrl": "https://...",
"primaryColor": "#174374", "themeCode": "classic", "currency": "EUR"
}
],
"total": 42
}/public/shops/{slug}Get full details of a specific shop.
Parameters
slugstringrequired- Shop URL sluglocalestring- Locale for translated content (fr, en, de)Response
{
"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-methodsGet enabled payment methods for a shop.
Response
{
"testMode": false,
"methods": [
{ "provider": "stripe", "label": "Credit Card", "enabled": true },
{ "provider": "paypal", "label": "PayPal", "enabled": true }
]
}Products
Browse and search products within a shop.
/public/shops/{slug}/productsList products for a shop with pagination and search.
Parameters
slugstringrequired- Shop URL slugpageint- Page numberlimitint- Items per pageqstring- Search querylocalestring- Locale (fr, en, de)Response
{
"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}Get detailed information about a specific product.
Parameters
slugstringrequired- Shop URL slugproductSlugstringrequired- Product sluglocalestring- Locale (fr, en, de)Categories
Retrieve shop category tree with subcategories.
/public/shops/{slug}/categoriesGet the full category tree for a shop (supports nested subcategories).
Parameters
slugstringrequired- Shop URL sluglocalestring- Locale (fr, en, de)Response
{
"items": [
{
"id": 1, "name": "Clothing", "slug": "clothing", "imageUrl": "https://...",
"productCount": 12,
"children": [
{ "id": 2, "name": "T-Shirts", "slug": "t-shirts", "productCount": 5, "children": [] }
]
}
]
}Cart
Create and manage shopping carts. Carts are identified by UUID.
/public/cartsCreate a new cart for a shop.
Request Body
{ "shopSlug": "ma-boutique" }Response
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"items": [], "totalCents": 0, "taxCents": 0, "totalWithTaxCents": 0
}/public/carts/{id}Retrieve cart contents with tax breakdown.
Parameters
iduuidrequired- Cart UUIDResponse
{
"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}/itemsAdd an item to the cart.
Request Body
{ "productVariantId": 5, "qty": 2 }/public/carts/{id}/items/{itemId}Update item quantity.
Request Body
{ "qty": 3 }/public/carts/{id}/items/{itemId}Remove an item from the cart.
Checkout & Payment
Process orders with multiple payment providers. Supports Stripe, PayPal, Flutterwave, CinetPay, bank transfer, cash on delivery, and test mode.
/public/checkoutCreate an order from a cart. Returns payment instructions based on the selected provider.
Request Body
{
"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"
}Response
{
"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"
}
}Payment Flow Types
client_confirmation - Confirm payment client-side (Stripe). Contains clientSecret and publishableKey.
redirect - Redirect user to payment page (PayPal, Flutterwave, CinetPay). Contains redirectUrl.
pending - Awaiting manual confirmation (bank transfer). Contains bankDetails.
none - No payment needed (cash on delivery, test mode). Order is confirmed immediately.
/public/checkout/verify-returnVerify a payment return after redirect (PayPal, Flutterwave, CinetPay).
Request Body
{
"provider": "paypal",
"orderNumber": "ORD-20260313-A1B2C3",
"transactionId": "PAYID-xxx"
}Response
{ "status": "paid", "orderNumber": "ORD-20260313-A1B2C3" }Orders
Retrieve customer order history.
/auth/me/ordersAuthGet the authenticated customer's order history.
Response
{
"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"
}
]
}Search
Full-text search powered by Meilisearch with SQL fallback.
/public/shops/{slug}/searchAutocomplete search across products.
Parameters
qstringrequired- Search querylocalestring- Locale (fr, en, de)limitint- Max results (default 10)Invoices
Download order invoices as PDF.
/public/orders/{orderNumber}/invoiceDownload the invoice PDF for an order.
Parameters
orderNumberstringrequired- Order number (e.g. ORD-20260313-A1B2C3)Response
Binary PDF (Content-Type: application/pdf)
Contact
Send contact messages to shop owners.
/public/contact/{shopSlug}Send a contact message to a shop.
Request Body
{
"name": "Marie",
"email": "marie@example.com",
"subject": "Question",
"message": "Hello..."
}Response
{ "success": true }Blog
Read blog posts.
/public/blogList published blog posts.
Parameters
pageint- Page numberlimitint- Items per pagelocalestring- Locale (fr, en, de)tagstring- Filter by tag/public/blog/{slug}Get a specific blog post.
Parameters
localestring- Locale (fr, en, de)Customer Account
Manage addresses, export data, and delete accounts (GDPR).
/auth/me/addressesAuthList saved addresses.
/auth/me/addressesAuthCreate a new address.
Request Body
{
"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}AuthUpdate an address.
/auth/me/addresses/{id}AuthDelete an address.
/auth/me/exportAuthExport all user data (GDPR compliance).
/auth/meAuthDelete account and anonymize all data (GDPR compliance). Notifies affected shops.
Seller - Shop Management
Create and manage your shop. Requires ROLE_SELLER.
/seller/shopsAuthCreate a new shop.
Request Body
{
"name": "Ma Boutique", "slug": "ma-boutique",
"description": "...", "themeCode": "classic",
"primaryColor": "#174374", "currency": "EUR"
}/seller/shops/meAuthGet your shop details.
/seller/shops/meAuthUpdate your shop. All fields optional.
Request Body
{
"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/activateAuthActivate your shop (make it publicly visible).
/seller/shops/me/localesAuthGet supported locales configuration.
/seller/shops/me/localesAuthUpdate supported locales.
Request Body
{ "supportedLocales": ["fr", "en", "de"], "defaultLocale": "fr" }/seller/shops/me/domainAuthGet custom domain configuration.
/seller/shops/me/domainAuthSet a custom domain.
Request Body
{ "domain": "www.myboutique.com" }/seller/shops/me/domain/verifyAuthVerify DNS configuration for your custom domain.
/seller/shops/me/domainAuthRemove custom domain.
Seller - Products
CRUD operations on products, variants, and translations.
/seller/productsAuthList your products.
Parameters
pageint- Page numberlimitint- Items per pagesearchstring- Search query/seller/productsAuthCreate a product.
Request Body
{
"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}AuthGet product details.
/seller/products/{id}AuthUpdate a product (all fields optional).
/seller/products/{id}AuthDelete a product.
/seller/products/{id}/activateAuthActivate/publish a product.
Variants
/seller/products/{id}/variantsAuthList product variants.
/seller/products/{id}/variantsAuthCreate a variant.
Request Body
{
"name": "L / Blue", "sku": "TSP-001-L-BL",
"priceCents": 2999, "stockQty": 20,
"attributes": { "size": "L", "color": "Blue" }, "active": true
}/seller/products/{productId}/variants/{variantId}AuthUpdate a variant.
/seller/products/{productId}/variants/{variantId}AuthDelete a variant.
Translations
/seller/products/{id}/translationsAuthGet all translations for a product.
/seller/products/{id}/translations/{locale}AuthUpdate translation for a locale.
Request Body
{ "title": "Premium T-Shirt", "description": "English description..." }/seller/products/{id}/auto-translateAuthAuto-translate product to all supported locales using AI.
Seller - Categories
Manage product categories with subcategory support.
/seller/categoriesAuthList all categories.
/seller/categoriesAuthCreate a category.
Request Body
{
"name": "Clothing", "slug": "clothing",
"description": "...", "sortOrder": 0, "active": true, "parentId": null
}/seller/categories/{id}AuthUpdate a category.
/seller/categories/{id}AuthDelete a category.
/seller/categories/{id}/auto-translateAuthAuto-translate category using AI.
Seller - Orders
View and manage orders, process workflow transitions.
/seller/ordersAuthList orders for your shop.
Parameters
pageint- Page numberlimitint- Items per pagesearchstring- Search query/seller/orders/{id}AuthGet order details including items, shipment info, and available workflow transitions.
/seller/orders/{id}/workflowAuthGet available workflow transitions for an order.
Response
{
"currentStatus": "paid",
"availableTransitions": [
{ "name": "process", "label": "Process order" },
{ "name": "ship", "label": "Mark as shipped" }
]
}/seller/orders/{id}/workflow/transitionAuthApply a workflow transition (e.g., process, ship, deliver, cancel, refund).
Request Body
{ "transition": "ship" }/seller/orders/{id}/shipmentAuthAdd shipment tracking information.
Request Body
{
"carrier": "DHL",
"trackingNumber": "1234567890",
"trackingUrl": "https://tracking.dhl.com/..."
}/seller/orders/{id}/confirm-paymentAuthManually confirm a bank transfer payment.
/seller/orders/{id}/invoiceAuthDownload order invoice as PDF.
Seller - Media
Upload and manage images for shop, products, and categories. Use multipart/form-data for file uploads.
/seller/shops/me/logoAuthUpload shop logo (multipart/form-data).
/seller/shops/me/logoAuthDelete shop logo.
/seller/shops/me/bannerAuthUpload shop banner (multipart/form-data).
/seller/shops/me/bannerAuthDelete shop banner.
/seller/shops/me/banner/from-urlAuthSet banner from an external URL.
Request Body
{ "url": "https://images.unsplash.com/..." }/seller/shops/me/favicon/generateAuthAuto-generate favicon from shop initials or logo.
Request Body
{ "source": "initials" }/seller/shops/me/faviconAuthUpload custom favicon (multipart/form-data).
/seller/shops/me/faviconAuthDelete favicon.
/seller/products/{id}/imagesAuthUpload product image (multipart/form-data).
/seller/products/{productId}/images/{imageId}AuthDelete a product image.
/seller/products/{productId}/images/reorderAuthReorder product images.
Request Body
{ "imageIds": [3, 1, 2] }/seller/categories/{id}/imageAuthUpload category image (multipart/form-data).
Seller - Payment Settings
Configure payment providers (Stripe, PayPal, Flutterwave, CinetPay, bank transfer, cash on delivery).
/seller/shops/me/payment-settingsAuthGet payment configuration.
/seller/shops/me/payment-settingsAuthUpdate payment provider settings and credentials.
/seller/shops/me/payment-settings/validate-credentialsAuthValidate payment provider credentials.
/seller/shops/me/payment-settings/toggle-test-modeAuthToggle test/live mode.
Seller - Email Settings
Customize order notification emails with custom SMTP, templates, and translations.
/seller/shops/me/email-settingsAuthGet email configuration.
/seller/shops/me/email-settingsAuthUpdate email settings (SMTP, template, texts).
/seller/shops/me/email-settings/previewAuthPreview rendered email template.
Request Body
{ "type": "order_confirmation", "locale": "fr" }/seller/shops/me/email-settings/send-testAuthSend a test email.
Request Body
{ "type": "order_confirmation", "locale": "fr" }Seller - Notifications
Real-time notifications via Server-Sent Events (SSE) with polling fallback.
/seller/notificationsAuthList notifications.
Parameters
pageint- Page numberunread_onlybool- Filter unread only/seller/notifications/unread-countAuthGet unread notification count.
Response
{ "count": 5 }/seller/notifications/{id}/readAuthMark a notification as read.
/seller/notifications/mark-all-readAuthMark all notifications as read.
/seller/notifications/streamAuthServer-Sent Events stream for real-time notifications. Keep the connection open.
Seller - AI Tools
AI-powered tools for content generation using Claude and OpenAI.
/seller/shops/me/generate-descriptionAuthAI-generate shop description with SEO optimization and translations.
Request Body
{ "keywords": "artisanal jewelry, handmade, Paris" }/seller/shops/me/generate-legalAuthAI-generate legal documents (CGV, privacy policy, etc.).
Request Body
{ "type": "cgv", "locale": "fr" }/seller/shops/me/ai-bannerAuthSearch AI-curated banner images.
Request Body
{ "keywords": "fashion boutique modern" }/seller/shops/me/ai-logoAuthAI-generate a shop logo.
/seller/products/ai-generateAuthAI-generate a complete product listing.
Request Body
{ "name": "Organic Cotton T-Shirt" }/seller/products/{id}/social-captionAuthAI-generate social media caption for a product.
Request Body
{ "platform": "instagram", "locale": "fr" }/seller/shops/me/auto-translateAuthAuto-translate all shop content to supported locales.
/seller/transcribeAuthTranscribe an audio file to text (multipart/form-data).
Webhooks
Payment provider webhook endpoints. These are called by payment providers to confirm transactions.
The following webhook URLs are configured per payment provider:
POST /webhooks/stripe
POST /webhooks/paypal
POST /webhooks/flutterwave
POST /webhooks/cinetpay
POST /webhooks/orange_money
POST /webhooks/mtn_momo
These endpoints are for internal use by payment providers. You don't need to call them directly.
Error Handling
All errors follow a consistent JSON format with localized messages.
{
"code": 401,
"message": "Invalid credentials"
}
// validation:
{
"error": "This email is already in use"
}HTTP Status Codes
Rate Limits
API usage guidelines.
Please be respectful of API usage. General guidelines:
- Public endpoints: no hard limit, but avoid excessive polling
- Authenticated endpoints: designed for single-shop usage patterns
- AI endpoints: subject to upstream provider limits, use sparingly
- SSE stream: maintain a single connection per session
- File uploads: max 10 MB per file
For high-volume integrations, please contact us.
© 2026 Shopisim. All rights reserved.
Interactive Swagger UI also available at /api/doc