SDK Java
Le SDK Java existe en code source mais n'est pas encore publié sur Maven Central. Il n'est donc pas installable via une dépendance Maven/Gradle aujourd'hui. Le code ci-dessous documente l'API telle qu'elle sera une fois le SDK publié — en attendant, utilisez l'API publique directement en HTTP (voir l'exemple Spring Boot avec RestTemplate).
Client OkHttp + parsing Gson. Le SDK ne définit aucun package model : toutes les méthodes retournent des Map<String, Object>/List<Map<String, Object>> bruts, pas d'objets typés.
Installation (à venir)
<dependency>
<groupId>com.moncreneau</groupId>
<artifactId>moncreneau-java</artifactId>
<version>1.0.0</version>
</dependency>
Gradle :
implementation 'com.moncreneau:moncreneau-java:1.0.0'
Configuration
import com.moncreneau.Moncreneau;
public class Main {
public static void main(String[] args) {
Moncreneau client = new Moncreneau("YOUR_API_KEY");
}
}
Avec URL de base et timeout personnalisés :
import com.moncreneau.Moncreneau;
Moncreneau client = new Moncreneau("YOUR_API_KEY", "https://mc-prd.duckdns.org/api/v1", 30);
Intégration Spring Boot
import com.moncreneau.Moncreneau;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MoncreneauConfig {
@Value("${moncreneau.api.key}")
private String apiKey;
@Bean
public Moncreneau moncreneauClient() {
return new Moncreneau(apiKey);
}
}
moncreneau.api.key=${MONCRENEAU_API_KEY}
Lister les départements
import com.moncreneau.Moncreneau;
import java.util.List;
import java.util.Map;
Moncreneau client = new Moncreneau("YOUR_API_KEY");
List<Map<String, Object>> departments = client.departments.list();
for (Map<String, Object> dept : departments) {
System.out.println(dept.get("id") + " - " + dept.get("name"));
}
Créer un rendez-vous
import com.moncreneau.Moncreneau;
import com.moncreneau.exceptions.MoncreneauException;
import java.util.Map;
Moncreneau client = new Moncreneau("YOUR_API_KEY");
Map<String, Object> data = Map.of(
"departmentId", 5,
"dateTime", "2026-02-15T10:00:00",
"name", "Amadou Diallo"
);
try {
Map<String, Object> appointment = client.appointments.create(data);
System.out.println("✅ Rendez-vous créé!");
System.out.println("ID: " + appointment.get("id"));
System.out.println("QR Code: " + appointment.get("qrCode"));
} catch (MoncreneauException e) {
if ("INSUFFICIENT_CREDITS".equals(e.getErrorCode())) {
System.err.println("❌ Crédits insuffisants: " + e.getMessage());
} else {
System.err.println("❌ Erreur: " + e.getMessage());
}
}
Vérifier la disponibilité d'un créneau
Le backend vérifie un créneau précis (dateTime), pas une plage de dates.
import com.moncreneau.Moncreneau;
import java.util.Map;
Moncreneau client = new Moncreneau("YOUR_API_KEY");
Map<String, Object> availability = client.departments.getAvailability("5", "2026-02-15T10:00:00");
if (Boolean.TRUE.equals(availability.get("available"))) {
System.out.println("✅ Créneau disponible! Places restantes: " + availability.get("remainingSlots"));
} else {
System.out.println("❌ Créneau indisponible: " + availability.get("unavailabilityReason"));
}
Annuler un rendez-vous
import com.moncreneau.Moncreneau;
Moncreneau client = new Moncreneau("YOUR_API_KEY");
client.appointments.cancel("123");
System.out.println("✅ Rendez-vous annulé, 1 crédit remboursé");
Gestion des erreurs
Il n'existe qu'une seule classe d'exception, com.moncreneau.exceptions.MoncreneauException (non vérifiée, RuntimeException) — le code métier se distingue via getErrorCode() :
import com.moncreneau.exceptions.MoncreneauException;
try {
Map<String, Object> appointment = client.appointments.create(data);
} catch (MoncreneauException e) {
switch (e.getErrorCode()) {
case "INSUFFICIENT_CREDITS" -> System.err.println("Crédits insuffisants: " + e.getMessage());
case "VALIDATION_ERROR" -> System.err.println("Validation: " + e.getDetails());
case "INVALID_API_KEY" -> System.err.println("Clé API invalide");
default -> System.err.println("Erreur " + e.getErrorCode() + " (HTTP " + e.getStatusCode() + "): " + e.getMessage());
}
}
Vérification des webhooks
verifyWebhookSignature est une méthode statique sur la classe Moncreneau, pas une méthode d'instance :
import com.moncreneau.Moncreneau;
boolean isValid = Moncreneau.verifyWebhookSignature(payload, signature, webhookSecret);
if (!isValid) {
// rejeter la requête (401)
}
Voir Sécurité des webhooks pour le détail du format de signature.