Créer / mettre à jour des clients
POST /Customers
Crée ou met à jour un ou plusieurs clients (destinataires). Fonctionne en mode upsert : si un client avec le même recipientCode existe déjà, il est mis à jour sans erreur.
Paramètres de requête
Section intitulée « Paramètres de requête »| Paramètre | Type | Défaut | Description |
|---|---|---|---|
validationOnly | bool | false | Si true, valide sans persister |
Corps de la requête
Section intitulée « Corps de la requête »Tableau JSON d’objets Customer.
Champs du client
Section intitulée « Champs du client »Identification (obligatoires)
Section intitulée « Identification (obligatoires) »| Champ | Type | Max | Description |
|---|---|---|---|
activityCode | string | 3 | Code activité |
activityName | string | 30 | Libellé de l’activité |
recipientCode | string | 13 | Code unique du destinataire |
recipientAddress1 | string | 30 | Adresse ligne 1 (voir section Adresse) |
Informations générales
Section intitulée « Informations générales »| Champ | Type | Max | Requis | Description |
|---|---|---|---|---|
recipientName | string | 30 | Non | Nom du destinataire |
distributionChannelCode | string | 3 | Non | Code canal de distribution |
recipientRegionCode | string | 3 | Non | Code région |
bankHolidayGroupCode | string | 3 | Non | Groupe jours fériés |
| Champ | Type | Max | Requis | Description |
|---|---|---|---|---|
recipientAddress1 | string | 30 | Oui | Adresse ligne 1. Obligatoire |
recipientAddress2 | string | 30 | Non | Adresse ligne 2 |
recipientPostalCode | string | 9 | Non | Code postal |
recipientCity | string | 20 | Non | Ville |
recipientState | string | 9 | Non | Division territoriale |
recipientCountry | string | 3 | Non | Code pays |
recipientCountryName | string | 16 | Non | Nom du pays |
| Champ | Type | Max | Requis | Description |
|---|---|---|---|---|
recipientPhone | string | 15 | Non | Téléphone |
recipientFax | string | 15 | Non | Fax |
recipientPhone2 | string | 15 | Non | Téléphone 2 |
recipientComment | string | 70 | Non | Commentaire |
Gestion logistique
Section intitulée « Gestion logistique »| Champ | Type | Requis | Défaut | Description |
|---|---|---|---|---|
topTransferts | bool | Non | — | Transferts actifs |
minSchedulingDateContractExists | bool | Non | — | Contrat date ordonnancement min |
maxSchedulingDateContractExists | bool | Non | — | Contrat date ordonnancement max |
isResidualStockManagementManual | bool | Non | true | Gestion manuelle du reliquat |
isResidualStockManagementAuto | bool | Non | false | Gestion automatique du reliquat |
isManuallyBalance | bool | Non | true | Solde manuel |
isAutomaticallyBalance | bool | Non | true | Solde automatique |
isSoldeLastpick | bool | Non | false | Solde au dernier picking |
isIntermediary | bool | Non | false | Client intermédiaire |
isInternal | bool | Non | false | Client interne |
isCompteagres | bool | Non | — | Compte agréé |
Champs personnalisés
Section intitulée « Champs personnalisés »| Champ | Type | Max | Description |
|---|---|---|---|
customField1 à customField6 | string | 200 | Texte libre |
customField7 à customField10 | int | — | Entiers |
customField11, customField12 | DateTime | — | Dates |
Règles de validation
Section intitulée « Règles de validation »Champs obligatoires
Section intitulée « Champs obligatoires »recipientCode,activityCode,activityName,recipientAddress1
Longueurs maximales
Section intitulée « Longueurs maximales »Tous les champs string ont des limites strictes (erreur 801 si dépassées). Voir le tableau de chaque section pour les valeurs maximales.
Erreurs possibles
Section intitulée « Erreurs possibles »| Code | Description |
|---|---|
| 201 | Champ obligatoire manquant |
| 205 | recipientCode en doublon dans le même envoi |
| 206 | Activité non autorisée |
| 801 | Champ string trop long |
Exemple de requête
Section intitulée « Exemple de requête »[ { "activityCode": "001", "activityName": "Mon activité", "recipientCode": "CLI001", "recipientName": "Dupont SA", "recipientAddress1": "15 rue de la République", "recipientAddress2": "Bâtiment A", "recipientPostalCode": "69001", "recipientCity": "Lyon", "recipientCountry": "FR", "recipientPhone": "0472000000", "isResidualStockManagementManual": true, "isAutomaticallyBalance": true }]Exemples de code
Section intitulée « Exemples de code »curl -X POST "https://api.ezyconnect.com/Customers" \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '[{"activityCode":"001","activityName":"Mon activité","recipientCode":"CLI001","recipientName":"Dupont SA","recipientAddress1":"15 rue de la République","recipientPostalCode":"69001","recipientCity":"Lyon","recipientCountry":"FR"}]'const response = await fetch("https://api.ezyconnect.com/Customers", { method: "POST", headers: { "Authorization": "Bearer YOUR_TOKEN", "Content-Type": "application/json" }, body: JSON.stringify([{ activityCode: "001", activityName: "Mon activité", recipientCode: "CLI001", recipientName: "Dupont SA", recipientAddress1: "15 rue de la République", recipientPostalCode: "69001", recipientCity: "Lyon", recipientCountry: "FR" }])});const result = await response.json();console.log(result);import requests
payload = [{ "activityCode": "001", "activityName": "Mon activité", "recipientCode": "CLI001", "recipientName": "Dupont SA", "recipientAddress1": "15 rue de la République", "recipientPostalCode": "69001", "recipientCity": "Lyon", "recipientCountry": "FR"}]
response = requests.post( "https://api.ezyconnect.com/Customers", json=payload, headers={"Authorization": "Bearer YOUR_TOKEN"})print(response.json())using System.Net.Http;using System.Net.Http.Json;
var client = new HttpClient();client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "YOUR_TOKEN");
var customers = new[] { new { activityCode = "001", activityName = "Mon activité", recipientCode = "CLI001", recipientName = "Dupont SA", recipientAddress1 = "15 rue de la République", recipientPostalCode = "69001", recipientCity = "Lyon", recipientCountry = "FR"}};
var response = await client.PostAsJsonAsync("https://api.ezyconnect.com/Customers", customers);var result = await response.Content.ReadAsStringAsync();Console.WriteLine(result);import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;
String body = """ [{"activityCode":"001","activityName":"Mon activité", "recipientCode":"CLI001","recipientName":"Dupont SA", "recipientAddress1":"15 rue de la République", "recipientPostalCode":"69001","recipientCity":"Lyon","recipientCountry":"FR"}] """;
HttpClient client = HttpClient.newHttpClient();HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.ezyconnect.com/Customers")) .header("Authorization", "Bearer YOUR_TOKEN") .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(body)) .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());Exemple de réponse
Section intitulée « Exemple de réponse »{ "status": 0, "operationId": "c3d4e5f6-7890-abcd-ef12-345678901234", "errors": {}, "passed": ["CLI001"]}