Authentification
L'API utilise une authentification par session (cookies).
Pour chaque requête modifiant des données (POST, PUT, DELETE), vous devez inclure un token CSRF.
1. Se connecter
POST /auth/login/
Content-Type: application/json
X-CSRFToken: <csrf_token>
{
"email": "votre@email.com",
"password": "votre_mot_de_passe"
}
2. Se déconnecter
POST /auth/logout/
X-CSRFToken: <csrf_token>
Le cookie de session sessionid est automatiquement géré par le navigateur.
Pour les requêtes API, incluez toujours le header X-CSRFToken.
Niveaux d'accès
| Rôle |
Description |
| Superuser |
Accès complet à toutes les ressources |
| Staff |
Accès à toutes les communes (lecture/écriture PAVs et localisations) |
| User avec commune |
Accès uniquement aux PAVs et localisations de sa commune |
Endpoints
Communes
Seuls les superusers peuvent créer, modifier ou supprimer des communes.
| Méthode |
Endpoint |
Description |
| GET |
/api/cities/ |
Lister toutes les communes |
| POST |
/api/cities/ |
Créer une commune |
| GET |
/api/cities/{id}/ |
Détail d'une commune |
| PUT |
/api/cities/{id}/ |
Modifier une commune |
| DELETE |
/api/cities/{id}/ |
Supprimer une commune |
Structure des données
{
"name": "Enghien", // Requis, unique
"postal_code": "7850", // Optionnel
"city": "Hainaut" // Optionnel (région/province)
}
Localisations
Les utilisateurs non-staff ne peuvent accéder qu'aux localisations de leur commune.
| Méthode |
Endpoint |
Description |
| GET |
/api/locations/ |
Lister les localisations |
| POST |
/api/locations/ |
Créer une localisation |
| GET |
/api/locations/{id}/ |
Détail d'une localisation |
| PUT |
/api/locations/{id}/ |
Modifier une localisation |
| DELETE |
/api/locations/{id}/ |
Supprimer une localisation |
Structure des données
{
"street": "Place du Marché", // Optionnel
"postal_code": "7850", // Optionnel
"city": 1, // ID de la commune (auto-assigné pour non-staff)
"locality": "Centre-ville", // Optionnel
"country": "Belgique", // Optionnel
"longitude": 3.9667, // Optionnel (coordonnée GPS)
"latitude": 50.6833 // Optionnel (coordonnée GPS)
}
PAVs (Points d'Apport Volontaire)
Les utilisateurs non-staff ne peuvent accéder qu'aux PAVs de leur commune.
| Méthode |
Endpoint |
Description |
| GET |
/pav/ |
Lister les PAVs |
| POST |
/pav/ |
Créer un PAV |
| GET |
/pav/{id}/ |
Détail d'un PAV |
| PUT |
/pav/{id}/ |
Modifier un PAV |
| DELETE |
/pav/{id}/ |
Supprimer un PAV |
Structure des données
{
"name": "Verre - Place du Marché", // Requis
"location": 1, // ID de la localisation
"type": 1, // ID du type de PAV
"is_full": false // État (défaut: false)
}
Logs de statut
| Méthode |
Endpoint |
Description |
| GET |
/logs/ |
Lister les logs |
| POST |
/logs/ |
Signaler un changement de statut |
Structure des données
{
"pav": 1, // ID du PAV (requis)
"status": true // true = plein, false = vide (requis)
}
Codes d'erreur
| Code |
Description |
200 | Succès |
201 | Ressource créée |
204 | Suppression réussie |
400 | Requête invalide (données manquantes ou incorrectes) |
401 | Non authentifié |
403 | Accès refusé (permissions insuffisantes) |
404 | Ressource non trouvée |
429 | Trop de requêtes (rate limiting) |
Exemple Python
import requests
BASE_URL = "https://pav404.be"
session = requests.Session()
# 1. Récupérer le CSRF token
login_page = session.get(f"{BASE_URL}/auth/login/")
csrf_token = session.cookies.get('csrftoken')
# 2. Se connecter
response = session.post(
f"{BASE_URL}/auth/login/",
json={"email": "user@example.com", "password": "password123"},
headers={"X-CSRFToken": csrf_token}
)
# Mettre à jour le CSRF token après connexion
csrf_token = session.cookies.get('csrftoken')
# 3. Créer une localisation
response = session.post(
f"{BASE_URL}/api/locations/",
json={
"street": "Rue de la Gare",
"postal_code": "7850",
"locality": "Centre"
},
headers={"X-CSRFToken": csrf_token}
)
location = response.json()
# 4. Créer un PAV
response = session.post(
f"{BASE_URL}/pav/",
json={
"name": "Verre - Gare",
"location": location["id"],
"type": 1
},
headers={"X-CSRFToken": csrf_token}
)
pav = response.json()
print(f"PAV créé: {pav}")
Documentation interactive
Une documentation Swagger est disponible à
/docs/
et ReDoc à
/redoc/.