SDK Python
SDK officiel Python pour l'API MonCréneau, publié sur PyPI.
Installation
pip install moncreneau
Configuration
from moncreneau import Moncreneau
client = Moncreneau('YOUR_API_KEY')
Avec options :
from moncreneau import Moncreneau
client = Moncreneau(
'YOUR_API_KEY',
base_url='https://mc-prd.duckdns.org/api/v1',
timeout=30
)
Avec variables d'environnement :
import os
from moncreneau import Moncreneau
client = Moncreneau(os.getenv('MONCRENEAU_API_KEY'))
Lister les départements
from moncreneau import Moncreneau
client = Moncreneau('YOUR_API_KEY')
try:
departments = client.departments.list()
for dept in departments:
print(f"ID: {dept['id']} - {dept['name']}")
except Exception as e:
print(f"Erreur: {e}")
Créer un rendez-vous
from moncreneau import Moncreneau, MoncreneauError
client = Moncreneau('YOUR_API_KEY')
try:
appointment = client.appointments.create(
department_id=5,
date_time='2026-02-15T10:00:00',
name='Amadou Diallo'
)
print('✅ Rendez-vous créé !')
print(f"ID: {appointment['id']}")
print(f"QR Code: {appointment['qrCode']}")
print(f"Statut: {appointment['status']}")
except MoncreneauError as e:
if e.code == 'INSUFFICIENT_CREDITS':
print(f'❌ Crédits insuffisants: {e.message}')
else:
print(f'❌ Erreur: {e.message}')
Vérifier la disponibilité d'un créneau
Le backend vérifie un créneau précis (date_time), pas une plage de dates.
from moncreneau import Moncreneau
client = Moncreneau('YOUR_API_KEY')
try:
availability = client.departments.get_availability('5', '2026-02-15T10:00:00')
if availability['available']:
print('✅ Créneau disponible !')
print(f"Places restantes: {availability['remainingSlots']}")
else:
print('❌ Créneau indisponible')
print(f"Raison: {availability.get('unavailabilityReason')}")
except Exception as e:
print(f'Erreur: {e}')
Annuler un rendez-vous
from moncreneau import Moncreneau
client = Moncreneau('YOUR_API_KEY')
try:
client.appointments.cancel('123')
print('✅ Rendez-vous annulé, 1 crédit remboursé')
except Exception as e:
print(f'❌ Erreur: {e}')
Intégration Django
# settings.py
MONCRENEAU_API_KEY = os.getenv('MONCRENEAU_API_KEY')
# services.py
from django.conf import settings
from moncreneau import Moncreneau
class MoncreneauService:
def __init__(self):
self.client = Moncreneau(settings.MONCRENEAU_API_KEY)
def create_appointment(self, department_id: int, date_time: str, name: str):
return self.client.appointments.create(
department_id=department_id,
date_time=date_time,
name=name
)
def list_departments(self):
return self.client.departments.list()
# Singleton
moncreneau_service = MoncreneauService()
# views.py
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
import json
from moncreneau import MoncreneauError
from .services import moncreneau_service
@csrf_exempt
@require_http_methods(["POST"])
def create_appointment(request):
data = json.loads(request.body)
try:
appointment = moncreneau_service.create_appointment(
department_id=data['departmentId'],
date_time=data['dateTime'],
name=data['name']
)
return JsonResponse(appointment, status=201)
except MoncreneauError as e:
status = 402 if e.code == 'INSUFFICIENT_CREDITS' else e.status_code
return JsonResponse({'error': e.message}, status=status)
Gestion des erreurs
Il n'existe qu'une seule classe d'erreur, MoncreneauError — le code métier se distingue via .code :
from moncreneau import Moncreneau, MoncreneauError
client = Moncreneau('YOUR_API_KEY')
try:
appointment = client.appointments.create(
department_id=5,
date_time='2026-02-15T10:00:00',
name='Amadou Diallo'
)
except MoncreneauError as e:
if e.code == 'INSUFFICIENT_CREDITS':
print(f'Crédits insuffisants: {e.message}')
elif e.code == 'VALIDATION_ERROR':
print(f'Validation: {e.details}')
elif e.code == 'INVALID_API_KEY':
print('Clé API invalide')
else:
print(f'Erreur {e.code} (HTTP {e.status_code}): {e.message}')
Vérification des webhooks
verify_webhook_signature est une méthode statique sur la classe Moncreneau, pas une méthode d'instance :
# Flask
from flask import Flask, request, jsonify
from moncreneau import Moncreneau
import os
import json
app = Flask(__name__)
@app.route('/webhooks/moncreneau', methods=['POST'])
def handle_webhook():
signature = request.headers.get('X-Moncreneau-Signature')
payload = request.get_data(as_text=True)
is_valid = Moncreneau.verify_webhook_signature(
payload,
signature,
os.getenv('WEBHOOK_SECRET')
)
if not is_valid:
return 'Invalid signature', 401
event = json.loads(payload)
print('Event:', request.headers.get('X-Moncreneau-Event'), event)
return jsonify({'received': True})
Voir Sécurité des webhooks pour le détail du format de signature.
Type hints
Le SDK renvoie des Dict[str, Any] (pas d'objets typés dédiés) — les valeurs de retour se manipulent comme des dictionnaires standards (appointment['id'], pas appointment.id).