Aller au contenu principal

Exemples d'appels API

Statut

Document de référence — v1.0 — relu le 2026-05-10.

URL de base

https://api.danmonvillage.fr/api/v1

Headers communs

HeaderValeurObligatoire
Content-Typeapplication/jsonPour les requêtes POST/PUT/PATCH
Acceptapplication/jsonRecommandé
AuthorizationBearer {sanctum_token}Routes protégées
X-App-Sourcedmv | backoffice | playloop | assosuite | mairieRoutes avec identify.app

Authentification

Échanger un token Supabase

POST /api/v1/auth/exchange
Content-Type: application/json
X-App-Source: dmv

{
"supabase_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

Réponse 200 :

{
"token": "1|abc123...",
"token_type": "Bearer",
"user": {
"userId": "uuid",
"email": "user@example.com",
"roles": ["user"],
"acteurs": []
}
}

Réponse 401 :

{
"error": "invalid_token",
"message": "Token JWT invalide ou expiré."
}

Obtenir l'utilisateur courant

GET /api/v1/auth/me
Authorization: Bearer 1|abc123...
X-App-Source: dmv

Se déconnecter

POST /api/v1/auth/logout
Authorization: Bearer 1|abc123...
X-App-Source: dmv

Acteurs

Lister les acteurs

GET /api/v1/acteurs?commune_id=<uuid-commune>&kind=association&page=1
X-App-Source: dmv

Obtenir un acteur par slug

GET /api/v1/acteurs/association-les-amis-du-village
X-App-Source: dmv

Documents d'un acteur

GET /api/v1/acteurs/association-les-amis-du-village/documents
X-App-Source: dmv

PlayLoop (devices)

Authentification device

Les devices PlayLoop s'authentifient via un token opaque (pas de JWT Supabase).

GET /api/v1/playloop/device/playlist
Authorization: Bearer device_token_opaque_xxx

Réponse 401 si token invalide :

{
"error": "invalid_device_token",
"message": "Token device invalide ou révoqué."
}

Health check

GET /api/v1/health

Réponse 200 :

{
"status": "ok",
"version": "0.1.0",
"env": "production"
}

Erreurs courantes

400 — Header manquant

{
"error": "missing_app_source",
"message": "Le header X-App-Source est obligatoire.",
"allowed": ["dmv", "backoffice", "playloop", "assosuite", "mairie"]
}

401 — Non authentifié

{
"message": "Unauthenticated."
}

403 — Scope violé

{
"error": "scope_violation",
"message": "Cette action dépasse votre périmètre autorisé."
}

422 — Validation échouée

{
"message": "The supabase_token field is required.",
"errors": {
"supabase_token": ["The supabase_token field is required."]
}
}