Documentation · Référence API

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.

En bref : OpenAPI 3.0.1 · URL de base 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.
Authentification

L'API utilise une authentification par token (Bearer JWT). Les tokens sont valides pendant 24 heures.

1
Demander un token

Envoyez username et password à l'endpoint d'authentification. Pour les utilisateurs admin, le header tenant-id ne doit pas être transmis.

2
Utiliser le token

Ajoutez le token reçu dans le header Authorization de toutes les requêtes sécurisées :

Authorization: Bearer <dein-token>
3
Expiration du token

Les tokens sont valides pendant 24 heures. Un token expiré ou invalide entraîne un 409 Conflict.

POST
/api/v1/auth/token-auth
Demander un token — vérifier les identifiants de l'utilisateur et renvoyer un JWT

Paramètres de header

NomInTypeObligatoireDescription
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

200 Token créé avec succès
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
401 Identifiants invalides
400 Requête incorrecte
Concept de tenant

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
Inventaire (produits)

Gestion de l'inventaire produits d'une boutique. Prend en charge les opérations CRUD ainsi que les opérations en masse.

GET
/api/v1/admin/inventory/
Récupérer tous les produits (paginé)

Header

NomInObligatoireDescription
tenant-idheaderID de la boutique
AuthorizationheaderBearer <token>

Paramètres de requête

NomTypeDescription
pintegerPage (défaut : 0)
sintegerTaille de page (défaut : 10)
fstring[]Filtre : name, SKU, vatClass, status
ostring[]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 */ }
    }
  ]
}
GET
/api/v1/admin/inventory/{sku}
Récupérer un produit individuel par SKU

Paramètres de chemin

NomInDescription
sku*pathIdentifiant 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 */ }
}
PUT
/api/v1/admin/inventory/
Créer ou mettre à jour un produit (upsert)

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

200 ID du produit créé/mis à jour (string)
DELETE
/api/v1/admin/inventory/
Supprimer plusieurs produits à partir de leurs IDs

Corps de la requête (application/json)

["produktId1", "produktId2"]

Réponse

200 Confirmation (string)
GET
/api/v1/admin/inventory/operations
Récupérer les opérations en masse disponibles

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"]
}]
POST
/api/v1/admin/inventory/operations/preview
Prévisualiser une opération en masse (dry run)

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
}
POST
/api/v1/admin/inventory/operations/execute
Exécuter une opération en masse

Exécute une opération bulk sur les produits filtrés. Modifie les données de façon permanente.

Paramètres de requête

NomDescription
fFiltre déterminant les produits concernés

Corps de la requête

{
  "operationId": "set-status",
  "parameters": { "status": "INACTIVE" }
}
Transactions

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

GET
/api/v1/admin/transaction/
Récupérer toutes les transactions (admin) — paginé, filtrable

Champs de filtre (paramètre f)

ChampFormatDescription
min_createdAtISO 8601Créé à partir de la date
max_createdAtISO 8601Créé jusqu'à la date
doctypeORDER/CONTRACT/INVOICEType de transaction
docIdstringID du document
processIdstringID du processus
processTypestringPipeline de processus
payload.channelstringCanal de vente
payload.emailstringE-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
GET
/api/v1/admin/transaction/{processId}/{docId}
Récupérer une transaction individuelle

Paramètres de chemin

NomDescription
processId*ID du processus (regroupe les transactions liées)
docId*ID du document de la transaction spécifique
GET
/api/v1/admin/transaction/filter-values
Récupérer les valeurs distinctes pour les filtres

Paramètres de requête

NomObligatoireDescription
propsChamps pour lesquels les valeurs distinctes doivent être déterminées
andNonPréfiltre AND
orNonPréfiltre OR

Réponse (200)

{
  "doctype": ["ORDER", "INVOICE"],
  "payload.channel": ["online", "terminal"]
}
POST
/api/v1/admin/transaction/{processId}/{docId}/cancel
Annuler une transaction individuelle

Paramètres de chemin

NomDescription
processId*ID du processus
docId*ID du document de la transaction à annuler

Paramètres de requête

NomDescription
reasonMotif d'annulation optionnel
POST
/api/v1/admin/transaction/{processId}/cancel
Annuler l'ensemble du processus (toutes les transactions)

Paramètres de chemin

NomDescription
processId*ID du processus — toutes les transactions associées sont annulées

Paramètres de requête

NomDescription
reasonMotif d'annulation optionnel
GET
/api/v1/transaction/
Récupérer les transactions (endpoint public — pas de Bearer requis)

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.

Personnes (CRM)

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.

GET
/api/v1/admin/person/all
Récupérer toutes les personnes (paginé)

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": []
  }]
}
GET
/api/v1/admin/person/{id}
Récupérer une personne individuelle

Paramètres de chemin

NomDescription
id*MongoDB ObjectId de la personne
POST
/api/v1/admin/person
Créer une 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": []
}
PUT
/api/v1/admin/person/{id}
Mettre à jour une personne

Même corps de requête que POST. Remplacement complet de l'enregistrement.

PATCH
/api/v1/admin/person/{id}/organisations
Modifier l'affectation d'une personne aux organisations

Corps de la requête — RelationDeltaDTO

{
  "add": ["orgId1", "orgId2"],
  "remove": ["orgIdAlt"]
}
DELETE
/api/v1/admin/person/{id}
Supprimer une personne

Réponse (200) — OkDTO

{ "ok": true }
DELETE
/api/v1/admin/person/bulk-delete
Supprimer plusieurs personnes simultanément

Corps de la requête

["id1", "id2", "id3"]
Organisations (CRM)

Gestion des entreprises et des organisations. Comme pour les personnes, accessible via deux chemins parallèles.

GET
/api/v1/admin/organisation/all
Récupérer toutes les organisations (paginé)

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": []
  }]
}
POST
/api/v1/admin/organisation
Créer une organisation

Corps de la requête — OrganisationDTO

{
  "name": "Muster GmbH",
  "organisationId": "externe-id",
  "addresses": [],
  "communications": [],
  "types": []
}
PATCH
/api/v1/admin/organisation/{id}/people
Modifier l'affectation des personnes d'une organisation

Corps de la requête — RelationDeltaDTO

{
  "add": ["personId1"],
  "remove": []
}
Catalogue / Slugs

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).

GET
/api/v1/admin/catalog/
Récupérer tous les slugs (paginé)

Réponse — PageSlug

{
  "content": [{
    "id": "507f...",
    "slug": "beton-c25-30",
    "label": "Beton C25/30",
    "objectType": "product",
    "collection": "products",
    "refId": "produktMongoId",
    "inactive": false
  }]
}
PUT
/api/v1/admin/catalog/
Créer ou mettre à jour un slug (upsert)

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
}
GET
/api/v1/admin/catalog/ref-id/{refId}
Récupérer un slug par son ID de référence (ID produit)

Utile pour retrouver le slug d'un produit connu.

POST
/api/v1/admin/catalog/create-slugs/{fieldName}
Générer automatiquement des slugs

Paramètres de chemin

NomDescription
fieldName*Champ produit à partir duquel les slugs sont générés

Paramètres de requête

NomDescription
valuesRestriction optionnelle à certaines valeurs de champ
Catégories & navigation
GET
/api/v1/category/navigation
Récupérer la navigation (public)

Paramètres de requête

NomDescription
navScopeFiltre optionnel sur le contexte de navigation
GET
/api/v1/admin/category/navigation-contexts
Récupérer les contextes de navigation disponibles

Réponse (200)

["main-nav", "footer", "sidebar"]
PUT
/api/v1/admin/category/items/order
Mettre à jour l'ordre des éléments d'une catégorie

Corps de la requête — Tableau de ItemOrderDTO

[
  { "sku": "SKU-001", "categoryId": "catId", "order": 0 },
  { "sku": "SKU-002", "categoryId": "catId", "order": 1 }
]
POST
/api/v1/admin/category/update-slug-navigations
Ajouter un slug à une ou plusieurs navigations (idempotent)

Corps de la requête — NavigationUpdateDTO

{
  "slugId": "slugMongoId",
  "navigationNames": ["main-nav", "footer"]
}
Paramètres
GET
/api/v1/admin/settings/{key}
Récupérer un paramètre par clé

Paramètres de chemin

NomDescription
key*Clé du paramètre
PUT
/api/v1/admin/settings
Créer ou mettre à jour un 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"
  }
}
Gestion des fichiers
GET
/api/v1/admin/files/
Lister les fichiers/images

Paramètres de requête

NomDescription
pPage
sTaille de page
fFiltre sur les noms de fichiers
mimeFiltre de type MIME (p. ex. image/png)
POST
/api/v1/admin/files/
Téléverser un fichier

Requête en multipart/form-data avec le champ file.

Content-Type: multipart/form-data

file: [binary data]
Paiement / Stripe

Intégration Stripe pour le traitement des paiements. Deux modes existent : Stripe standard (stripe) et Stripe externe (stripe-external).

GET
/api/v1/payment/stripe/public
Récupérer les paramètres Stripe publics (p. ex. Publishable Key)

Réponse (200)

{ "publishableKey": "pk_live_..." }
GET
/api/v1/payment/stripe/state
Récupérer l'état de paiement Stripe actuel

Renvoie l'état de paiement actuel de la boutique.

POST
/api/v1/payment/stripe-common/capturable
Webhook Stripe — définir l'état du paiement (production)

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

NomDescription
Stripe-Signature*Header de signature défini par Stripe à des fins de vérification
POST
/api/v1/admin/payment/stripe-common/webhook-test
Tester le webhook Stripe (admin)

Réponse (200) — WebhookTestStatusDTO

{
  "sandbox": {
    "mode": "SANDBOX",
    "passed": true,
    "ranAt": "2024-01-15T10:30:00Z",
    "durationMs": 234,
    "pending": false
  },
  "production": { /* analogue */ }
}
Import / Export
POST
/api/v1/admin/import/{entity}
Importer des entités (upload CSV/JSON)

Paramètres de chemin

NomDescription
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
}
GET
/api/v1/admin/export/{entity}
Exporter des entités (téléchargement de fichier)

Paramètres de chemin

NomDescription
entity*Type d'entité (p. ex. products, persons)

Réponse

Fichier binaire (string format: binary)

Modèles de données (schémas)

Vue d'ensemble de toutes les structures de données utilisées.

PersonDTO

ChampTypeDescription
idstringMongoDB ObjectId
firstNamestringPrénom
lastNamestringNom
emailstringAdresse e-mail
salutationstringCivilité
titlestringTitre (p. ex. Dr.)
personIdstringID externe/propre
tenantIdintegerAffectation au tenant
addressesAddressDTO[]Adresses
communicationsCommunicationDTO[]Canaux de communication
organisationsOrganisationDTO[]Organisations affectées
typesBusinessContactTypeDTO[]Types de contact
createdAtdatetimeDate de création
updatedAtdatetimeDernière mise à jour

AddressDTO

ChampTypeDescription
streetstringNom de la rue
streetNumberstringNuméro de rue
supplementalstringComplément d'adresse
zipCodestringCode postal
citystringVille
countrystringPays (code ISO, p. ex. DE)
typestringType d'adresse (p. ex. MAIN, BILLING)

Slug

ChampTypeObligatoireDescription
idstringMongoDB ObjectId
slugstringSous-route URL de la boutique
labelstringNom lisible
collectionstringCollection MongoDB
objectTypestring"product" ou "product-list"
refIdstringRéférence produit (si product)
fieldsobjectFiltres pour product-list
contextstring[]Contextes d'affichage
defaultSortSortField[]Tri par défaut
inactivebooleanDésactive le slug

ProductDataDTO

ChampTypeDescription
baseobjectDonnées de base du produit (dynamiques, spécifiques à la boutique)
additionalobjectChamps complémentaires extensibles

RelationDeltaDTO

Utilisé pour les endpoints PATCH afin de gérer les relations (personnes↔organisations).

ChampTypeDescription
addstring[]IDs à ajouter
removestring[]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