L'API REST de Save France permet d'interagir avec les différentes ressources du système de manière sécurisée. Elle suit les principes RESTful et utilise JSON comme format d'échange.
L'API utilise JWT (JSON Web Tokens) pour l'authentification.
POST /api/login_check
Content-Type: application/json
{
"username": "user@example.com",
"password": "votre-mot-de-passe"
}
Réponse réussie (200 OK) :
{
"token": "votre.jwt.token.ici",
"refresh_token": "votre.refresh.token.ici"
}
Ajoutez le token dans l'en-tête Authorization :
Authorization: Bearer votre.jwt.token.ici
GET /api/users/me
PATCH /api/users/me
Content-Type: application/merge-patch+json
{
"firstName": "Nouveau prénom",
"phone": "+33123456789"
}
GET /api/requests?page=1&itemsPerPage=10&status[]=new&status[]=in_progress
POST /api/requests
Content-Type: application/json
{
"title": "Problème d'équipement",
"description": "Description détaillée du problème",
"equipment": "/api/equipments/1"
}
GET /api/requests/123
GET /api/equipments?page=1&itemsPerPage=20
POST /api/equipments
Content-Type: application/json
{
"name": "PC Portable",
"model": "Dell XPS 15",
"serialNumber": "XPS123456"
}
Les réponses de liste sont paginées. Exemple de réponse :
{
"@context": "/api/contexts/Request",
"@id": "/api/requests",
"@type": "hydra:Collection",
"hydra:totalItems": 42,
"hydra:view": {
"@id": "/api/requests?page=1",
"@type": "hydra:PartialCollectionView",
"hydra:first": "/api/requests?page=1",
"hydra:last": "/api/requests?page=3",
"hydra:next": "/api/requests?page=2"
},
"hydra:member": [
{
"@id": "/api/requests/1",
"@type": "Request",
"id": 1,
"title": "Problème d'équipement",
"status": "new"
}
]
}
status : Filtrer par statut (ex: ?status=new,in_progress)createdAt[after] : Demandes créées après une datecreatedAt[before] : Demandes créées avant une dateequipment : ID de l'équipementGET /api/requests?status=new&createdAt[after]=2025-01-01&equipment=1
Utilisez le paramètre order pour trier les résultats :
GET /api/requests?order[createdAt]=desc
200 OK : Requête réussie201 Created : Ressource créée204 No Content : Suppression réussie400 Bad Request : Données invalides401 Unauthorized : Authentification requise403 Forbidden : Droits insuffisants404 Not Found : Ressource introuvable422 Unprocessable Entity : Erreur de validation500 Internal Server Error : Erreur serveurEn cas d'erreur, la réponse contient un objet avec les détails :
{
"code": 400,
"message": "Validation Failed",
"errors": {
"email": "Cette valeur n'est pas une adresse email valide.",
"password": "Ce mot de passe est trop court."
}
}
request.created : Nouvelle demande crééerequest.updated : Demande mise à jouroffer.created : Nouvelle offre crééetroubleshooting.updated : Dépannage mis à jourPOST /api/webhooks
Content-Type: application/json
{
"url": "https://votre-app.com/webhooks/request-created",
"event": "request.created",
"secret": "votre-secret-pour-signature"
}
{
"event": "request.created",
"data": {
"id": 123,
"reference": "REQ-2023-0001",
"status": "new"
},
"timestamp": "2023-01-01T12:00:00+01:00",
"signature": "hmac-sha256-signature"
}
L'API est versionnée via l'URL. La version actuelle est v1.
/api/v1/requests
# Authentification
TOKEN=$(curl -X POST -H "Content-Type: application/json" \
-d '{"username":"user@example.com","password":"password"}' \
https://api.savefrance.fr/api/login_check | jq -r '.token')
# Créer une demande
curl -X POST https://api.savefrance.fr/api/requests \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Problème technique","description":"Description..."}'
Pour toute question ou problème, contactez l'équipe technique à support@savefrance.fr.