API REST Wiresphere
Documentation développeur complète de l'API REST Wiresphere. Cette API permet de gérer les produits, les transactions, les contacts clients, les paiements et les paramètres de boutique dans le contexte d'un système multi-tenant.
https://api.wiresphere.com (À REMPLACER) · Authentification par Bearer JWT (valide 24 h) · Header tenant-id obligatoire pour presque tous les endpoints. Retour à la vue d'ensemble des Docs.L'API utilise une authentification par token (Bearer JWT). Les tokens sont valides pendant 24 heures.
Envoyez username et password à l'endpoint d'authentification. Pour les utilisateurs admin, le header tenant-id ne doit pas être transmis.
Ajoutez le token reçu dans le header Authorization de toutes les requêtes sécurisées :
Authorization: Bearer <dein-token>
Les tokens sont valides pendant 24 heures. Un token expiré ou invalide entraîne un 409 Conflict.
Paramètres de header
| Nom | In | Type | Obligatoire | Description |
|---|---|---|---|---|
| tenant-id | header | string | Non | Contexte de la boutique. Doit être omis pour l'authentification admin. |
Corps de la requête (application/json)
{
"username": "dein-benutzername",
"password": "dein-passwort"
}
Réponse
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
L'API est multi-tenant. Chaque requête doit identifier (à l'exception de l'authentification en tant qu'admin) le contexte de la boutique via le header tenant-id.
Header tenant-id
Le header tenant-id est un champ obligatoire pour presque tous les endpoints. Il détermine dans quel contexte de boutique l'opération est exécutée. Sans ce header, les requêtes sont rejetées.
tenant-id: mein-shop-id
Les endpoints de liste prennent en charge des paramètres de requête uniformes pour la pagination, le filtrage et le tri.
Paramètres de requête (endpoints de liste)
| Paramètre | Défaut | Description |
|---|---|---|
| p | 0 | Numéro de page (base 0) |
| s | 10 | Entrées par page |
| f | — | Expression de filtre (voir ci-dessous) |
| o | — | Expression de tri (voir ci-dessous) |
Syntaxe de filtre (paramètre f)
Les filtres sont indiqués sous forme de groupes clé-valeur :
# Filtre simple (recherche par sous-chaîne) f=fieldName::value # Plusieurs valeurs (combinées par OU) f=fieldName::val1~~val2 # Exclure (préfixe --) f=fieldName::--ausgeschlossenValue # Combinaison f=name::Max~~--Moritz,email::@example.com # Filtre de période (ISO 8601) f=min_createdAt::2024-01-01T00:00:00.000Z f=max_createdAt::2024-12-31T23:59:59.999Z
Syntaxe de tri (paramètre o)
# Croissant o=name::ASC # Décroissant o=createdAt::DESC # Plusieurs champs o=createdAt::DESC,name::ASC
Gestion de l'inventaire produits d'une boutique. Prend en charge les opérations CRUD ainsi que les opérations en masse.
Header
| Nom | In | Obligatoire | Description |
|---|---|---|---|
| tenant-id | header | ID de la boutique | |
| Authorization | header | Bearer <token> |
Paramètres de requête
| Nom | Type | Description |
|---|---|---|
| p | integer | Page (défaut : 0) |
| s | integer | Taille de page (défaut : 10) |
| f | string[] | Filtre : name, SKU, vatClass, status |
| o | string[] | Tri : name, SKU, vatClass, status |
Réponse (200)
{
"totalElements": 42,
"totalPages": 5,
"size": 10,
"number": 0,
"first": true,
"last": false,
"content": [
{
"base": { /* Données de base du produit */ },
"additional": { /* Données complémentaires */ }
}
]
}
Paramètres de chemin
| Nom | In | Description |
|---|---|---|
| sku* | path | Identifiant unique du produit dans la boutique (Stock Keeping Unit) |
Réponse (200) — ProductDataDTO
{
"base": { /* Données de base du produit (nom, SKU, prix, etc.) */ },
"additional": { /* Champs étendus */ }
}
Corps de la requête (application/json) — ProductDataDTO
{
"base": {
// Champs obligatoires et données produit (nom, SKU, prix, statut, etc.)
},
"additional": {
// Champs complémentaires optionnels
}
}
Réponse
Corps de la requête (application/json)
["produktId1", "produktId2"]
Réponse
Renvoie toutes les opérations bulk enregistrées avec leurs schémas de paramètres.
Réponse (200) — Tableau de ProductOperationRegistrationDTO
[{
"operationId": "set-status",
"description": "Setzt den Status von Produkten",
"parameterTypes": { "status": "string" },
"previewProperties": ["status"]
}]
Simule une opération bulk et affiche l'état avant/après — sans enregistrer de données.
Corps de la requête
{
"operationId": "set-status",
"parameters": { "status": "ACTIVE" },
"confirmAll": false
}
Exécute une opération bulk sur les produits filtrés. Modifie les données de façon permanente.
Paramètres de requête
| Nom | Description |
|---|---|
| f | Filtre déterminant les produits concernés |
Corps de la requête
{
"operationId": "set-status",
"parameters": { "status": "INACTIVE" }
}
Les transactions regroupent l'ensemble des commandes, contrats et factures. Un endpoint public et un endpoint admin sont disponibles.
Valeurs doctype disponibles
Lors du filtrage via doctype, les valeurs suivantes sont connues : ORDER, CONTRACT, INVOICE
Champs de filtre (paramètre f)
| Champ | Format | Description |
|---|---|---|
| min_createdAt | ISO 8601 | Créé à partir de la date |
| max_createdAt | ISO 8601 | Créé jusqu'à la date |
| doctype | ORDER/CONTRACT/INVOICE | Type de transaction |
| docId | string | ID du document |
| processId | string | ID du processus |
| processType | string | Pipeline de processus |
| payload.channel | string | Canal de vente |
| payload.email | string | E-mail du client |
Champs de tri (paramètre o)
createdAt, docId, payload.netTotalPrice, payload.grossTotalPrice, payload.customer.name
Exemple
GET /api/v1/admin/transaction/?f=doctype::ORDER,min_createdAt::2024-01-01T00:00:00.000Z&o=createdAt::DESC&p=0&s=20 Authorization: Bearer <token> tenant-id: mein-shop
Paramètres de chemin
| Nom | Description |
|---|---|
| processId* | ID du processus (regroupe les transactions liées) |
| docId* | ID du document de la transaction spécifique |
Paramètres de requête
| Nom | Obligatoire | Description |
|---|---|---|
| props | Champs pour lesquels les valeurs distinctes doivent être déterminées | |
| and | Non | Préfiltre AND |
| or | Non | Préfiltre OR |
Réponse (200)
{
"doctype": ["ORDER", "INVOICE"],
"payload.channel": ["online", "terminal"]
}
Paramètres de chemin
| Nom | Description |
|---|---|
| processId* | ID du processus |
| docId* | ID du document de la transaction à annuler |
Paramètres de requête
| Nom | Description |
|---|---|
| reason | Motif d'annulation optionnel |
Paramètres de chemin
| Nom | Description |
|---|---|
| processId* | ID du processus — toutes les transactions associées sont annulées |
Paramètres de requête
| Nom | Description |
|---|---|
| reason | Motif d'annulation optionnel |
Options de filtre et de tri identiques à celles de l'endpoint admin, mais sans authentification Bearer. Filtre sur les données accessibles dans le contexte de la boutique.
Gestion CRM des personnes (clients, contacts). Deux chemins de controller parallèles existent avec des fonctionnalités identiques.
Endpoints parallèles
Les personnes peuvent être gérées via deux chemins : /api/v1/admin/person/ et /api/v1/admin/business-contacts/people/. Les deux offrent les mêmes fonctionnalités — privilégiez le chemin business-contacts pour les nouvelles intégrations.
Champs de filtre (paramètre f)
personId, firstName, lastName, email
Réponse (200) — PageCrmPersonDTO
{
"totalElements": 100,
"content": [{
"id": "507f1f77bcf86cd799439011",
"firstName": "Max",
"lastName": "Mustermann",
"email": "max@example.com",
"personId": "extern-123",
"addresses": [],
"communications": [],
"organisations": [],
"types": []
}]
}
Paramètres de chemin
| Nom | Description |
|---|---|
| id* | MongoDB ObjectId de la personne |
Corps de la requête (application/json) — PersonDTO
{
"firstName": "Max",
"lastName": "Mustermann",
"email": "max@example.com",
"salutation": "Herr",
"title": "Dr.",
"personId": "externe-id-123",
"addresses": [{
"street": "Musterstraße",
"streetNumber": "1",
"zipCode": "12345",
"city": "Musterstadt",
"country": "DE",
"type": "MAIN"
}],
"communications": [{
"type": "PHONE",
"value": "+49 123 4567890"
}],
"types": []
}
Même corps de requête que POST. Remplacement complet de l'enregistrement.
Corps de la requête — RelationDeltaDTO
{
"add": ["orgId1", "orgId2"],
"remove": ["orgIdAlt"]
}
Réponse (200) — OkDTO
{ "ok": true }
Corps de la requête
["id1", "id2", "id3"]
Gestion des entreprises et des organisations. Comme pour les personnes, accessible via deux chemins parallèles.
Champs de filtre
name (recherche par sous-chaîne)
Réponse (200) — PageCrmOrganisationDTO
{
"totalElements": 10,
"content": [{
"id": "...",
"name": "Muster GmbH",
"organisationId": "externe-id",
"addresses": [],
"communications": [],
"people": [],
"types": []
}]
}
Corps de la requête — OrganisationDTO
{
"name": "Muster GmbH",
"organisationId": "externe-id",
"addresses": [],
"communications": [],
"types": []
}
Corps de la requête — RelationDeltaDTO
{
"add": ["personId1"],
"remove": []
}
Les slugs définissent les routes URL de la boutique et présentent soit des produits individuels (product), soit des listes de produits (product-list).
Réponse — PageSlug
{
"content": [{
"id": "507f...",
"slug": "beton-c25-30",
"label": "Beton C25/30",
"objectType": "product",
"collection": "products",
"refId": "produktMongoId",
"inactive": false
}]
}
Corps de la requête — Slug
{
"id": "507f...", // À indiquer lors d'une mise à jour
"slug": "mein-slug", // Segment d'URL (obligatoire)
"collection": "products", // Collection MongoDB (obligatoire)
"objectType": "product", // "product" ou "product-list" (obligatoire)
"refId": "...", // ID du produit (si objectType "product")
"fields": { // Filtres pour "product-list"
"category": "beton"
},
"defaultSort": [{ "field": "name", "direction": "asc" }],
"context": ["main-nav"],
"inactive": false
}
Utile pour retrouver le slug d'un produit connu.
Paramètres de chemin
| Nom | Description |
|---|---|
| fieldName* | Champ produit à partir duquel les slugs sont générés |
Paramètres de requête
| Nom | Description |
|---|---|
| values | Restriction optionnelle à certaines valeurs de champ |
Paramètres de requête
| Nom | Description |
|---|---|
| navScope | Filtre optionnel sur le contexte de navigation |
Réponse (200)
["main-nav", "footer", "sidebar"]
Corps de la requête — Tableau de ItemOrderDTO
[
{ "sku": "SKU-001", "categoryId": "catId", "order": 0 },
{ "sku": "SKU-002", "categoryId": "catId", "order": 1 }
]
Corps de la requête — NavigationUpdateDTO
{
"slugId": "slugMongoId",
"navigationNames": ["main-nav", "footer"]
}
Paramètres de chemin
| Nom | Description |
|---|---|
| key* | Clé du paramètre |
Corps de la requête — Setting
{
"key": "einstellungs-key",
"public": {
// Paramètres accessibles publiquement
"theme": "dark"
},
"private": {
// Accessible uniquement aux requêtes authentifiées
"apiKey": "secret"
}
}
Paramètres de requête
| Nom | Description |
|---|---|
| p | Page |
| s | Taille de page |
| f | Filtre sur les noms de fichiers |
| mime | Filtre de type MIME (p. ex. image/png) |
Requête en multipart/form-data avec le champ file.
Content-Type: multipart/form-data file: [binary data]
Intégration Stripe pour le traitement des paiements. Deux modes existent : Stripe standard (stripe) et Stripe externe (stripe-external).
Réponse (200)
{ "publishableKey": "pk_live_..." }
Renvoie l'état de paiement actuel de la boutique.
Réservé aux webhooks Stripe
Cet endpoint est destiné aux événements webhook Stripe entrants. Le header Stripe-Signature est obligatoire et est défini automatiquement par Stripe.
Header
| Nom | Description |
|---|---|
| Stripe-Signature* | Header de signature défini par Stripe à des fins de vérification |
Réponse (200) — WebhookTestStatusDTO
{
"sandbox": {
"mode": "SANDBOX",
"passed": true,
"ranAt": "2024-01-15T10:30:00Z",
"durationMs": 234,
"pending": false
},
"production": { /* analogue */ }
}
Paramètres de chemin
| Nom | Description |
|---|---|
| entity* | Type d'entité (p. ex. products, persons) |
Corps de la requête (multipart)
Content-Type: application/json file: [binary — fichier CSV ou JSON]
Réponse (200) — UploadResponse
{
"success": true,
"importCount": 42
}
Paramètres de chemin
| Nom | Description |
|---|---|
| entity* | Type d'entité (p. ex. products, persons) |
Réponse
Fichier binaire (string format: binary)
Vue d'ensemble de toutes les structures de données utilisées.
PersonDTO
| Champ | Type | Description |
|---|---|---|
| id | string | MongoDB ObjectId |
| firstName | string | Prénom |
| lastName | string | Nom |
| string | Adresse e-mail | |
| salutation | string | Civilité |
| title | string | Titre (p. ex. Dr.) |
| personId | string | ID externe/propre |
| tenantId | integer | Affectation au tenant |
| addresses | AddressDTO[] | Adresses |
| communications | CommunicationDTO[] | Canaux de communication |
| organisations | OrganisationDTO[] | Organisations affectées |
| types | BusinessContactTypeDTO[] | Types de contact |
| createdAt | datetime | Date de création |
| updatedAt | datetime | Dernière mise à jour |
AddressDTO
| Champ | Type | Description |
|---|---|---|
| street | string | Nom de la rue |
| streetNumber | string | Numéro de rue |
| supplemental | string | Complément d'adresse |
| zipCode | string | Code postal |
| city | string | Ville |
| country | string | Pays (code ISO, p. ex. DE) |
| type | string | Type d'adresse (p. ex. MAIN, BILLING) |
Slug
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| id | string | — | MongoDB ObjectId |
| slug | string | Sous-route URL de la boutique | |
| label | string | — | Nom lisible |
| collection | string | Collection MongoDB | |
| objectType | string | "product" ou "product-list" | |
| refId | string | — | Référence produit (si product) |
| fields | object | — | Filtres pour product-list |
| context | string[] | — | Contextes d'affichage |
| defaultSort | SortField[] | — | Tri par défaut |
| inactive | boolean | — | Désactive le slug |
ProductDataDTO
| Champ | Type | Description |
|---|---|---|
| base | object | Données de base du produit (dynamiques, spécifiques à la boutique) |
| additional | object | Champs complémentaires extensibles |
RelationDeltaDTO
Utilisé pour les endpoints PATCH afin de gérer les relations (personnes↔organisations).
| Champ | Type | Description |
|---|---|---|
| add | string[] | IDs à ajouter |
| remove | string[] | IDs à supprimer |
API Wiresphere · OpenAPI 3.0.1 · Documentation générée en mai 2026
URL de base : https://api.wiresphere.com · Authentification : Bearer JWT · Validité du token : 24 heures