POST/user/authenticateClé d'API seule
En cas de succès, renvoie l’objet membre (200) et le jeton utilisateur dans l’en-tête de réponse X-VDM-Api-Token : renvoyez cet en-tête dans vos requêtes suivantes. Renvoie 401 si les identifiants manquent ou sont faux, ou si le compte est banni.
loginobligatoirepasswordobligatoirecurl -X POST "https://www.viedemerde.fr/api/v2/user/authenticate" \
-H "X-VDM-Api-Key: $API_KEY" \
--data-urlencode "login=…" \
--data-urlencode "password=…"{
"data": {
"id": 4294967294,
"fbid": 0,
"twid": 0,
"dateEntry": "2026-09-29T20:29:38+02:00",
"dateUpdate": "2026-10-30T06:42:16+01:00",
"status": 1,
"role": [
"ROLE_USER"
],
"username": "JohnDoe",
"email": "[email protected]",
"city": "Paris",
"area": null,
"country": null,
"timezone": "Pacific/Fakaofo",
"birthday": "1990-05-17T00:00:00+02:00",
"origin": 3,
"bio": "Bio de test",
"source": "cowroker",
"relation": "",
"title": "mr",
"site": 1,
"oldIDVDM": null,
"oldIDFML": null,
"avatar": null,
"metrics": null,
"signature": null
},
"meta": {},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
401
{
"error": "103 - Invalid login credentials."
}POST/user/refreshtokenClé d'API seule
Envoyez le jeton expiré dans l’en-tête X-VDM-Api-Token avec secret. L’ancien jeton est supprimé ; le nouveau est renvoyé dans l’en-tête de réponse X-VDM-Api-Token, avec l’objet membre (200). Renvoie 401 en cas d’échec.
secretobligatoiremd5(id . username))curl -X POST "https://www.viedemerde.fr/api/v2/user/refreshtoken" \
-H "X-VDM-Api-Key: $API_KEY" \
--data-urlencode "secret=…"{
"data": {
"id": 2321654987,
"fbid": 0,
"twid": 0,
"dateEntry": "2016-09-16 08:00:18",
"dateUpdate": "2016-09-16 08:00:18",
"status": 1,
"role": {
"0": "ROLE_ADMIN"
},
"username": "admin",
"email": "[email protected]",
"city": null,
"area": null,
"country": null,
"timezone": "Africa/Harare",
"birthday": "1997-11-23",
"origin": 1,
"bio": "Reiciendis sint sunt eum id tempora rerum occaecati corrupti.",
"source": "cowroker",
"relation": "couple",
"title": "mr",
"site": 1
},
"meta": {}
}Exemple tiré de la doc d'origine : les valeurs sont fictives et certains champs ont pu évoluer.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}401
{
"error": "9 - Missing parameter."
}GET/user/logoutJeton membre obligatoire
Supprime le jeton utilisateur envoyé dans X-VDM-Api-Token. Renvoie anonymous en cas de succès, 401 si le jeton est invalide.
Aucun paramètre.
curl "https://www.viedemerde.fr/api/v2/user/logout" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": "anonymous",
"meta": {}
}Exemple tiré de la doc d'origine : les valeurs sont fictives et certains champs ont pu évoluer.
400
{
"error":"100 - You must be authenticated in order to access this function."
}401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}GET/user/searchClé d'API seule
Renvoie {"isValid": true} si aucun compte n’utilise cette valeur, sinon isValid: false avec un message error. Pour un e-mail, le domaine est aussi vérifié. Renvoie 400 si search ou value manque ou est invalide.
searchobligatoireusername ou emailvalueobligatoirecurl "https://www.viedemerde.fr/api/v2/user/search" \
-H "X-VDM-Api-Key: $API_KEY"{
"data": {
"isValid": true
},
"meta": {},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
GET/user/{userid}/optionsJeton membre obligatoire
Renvoie les options de notification, de newsletter et de confidentialité du membre, telles que réglées avec /user/{userid}/moreinfos. Jeton utilisateur obligatoire.
useridobligatoiredans l'URLformat \d+curl "https://www.viedemerde.fr/api/v2/user/{userid}/options" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": {
"user_id": 4294967294,
"nl_weekly": true,
"nl_monthly": false,
"nl_daily": false,
"al_comment": true,
"al_message": false,
"hide_profile": false,
"show_activity": false,
"show_receipt": false,
"optin_vdm": false,
"optin_partners": false,
"activity_on_timeline": true,
"hide_illustrations": false,
"user_content_types_filters": []
},
"meta": {},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
401
{
"data": "Vous devez être authentifié pour accéder à cette fonction.",
"meta": {},
"badge": [],
"badge_display": []
}POST/userClé d'API seule
Renvoie le nouveau membre (201) et le connecte : le jeton utilisateur est dans l’en-tête de réponse X-VDM-Api-Token. Des images d’avatar peuvent être envoyées dans la même requête multipart. Renvoie 400 si le pseudo ou l’e-mail est déjà pris, si l’e-mail est invalide ou si les mots de passe diffèrent.
usernameobligatoireemailobligatoirepasswordobligatoireconfirm_passwordobligatoirecurl -X POST "https://www.viedemerde.fr/api/v2/user" \
-H "X-VDM-Api-Key: $API_KEY" \
--data-urlencode "username=…" \
--data-urlencode "email=…" \
--data-urlencode "password=…" \
--data-urlencode "confirm_password=…"{
"data": {
"id": 50467299,
"fbid": 0,
"twid": 0,
"dateEntry": {
"date": "2016-09-16 10:28:19.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"dateUpdate": null,
"status": 0,
"role": {
"0": "ROLE_USER"
},
"username": "test",
"email": "[email protected]",
"city": null,
"area": null,
"country": null,
"timezone": null,
"birthday": null,
"origin": "api",
"bio": null,
"source": "site",
"relation": null,
"title": "mr",
"site": 3
},
"meta": {}
}Exemple tiré de la doc d'origine : les valeurs sont fictives et certains champs ont pu évoluer.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}400
{
"error": "This username is already associated with an account."
}400
{
"error": "This email is already associated with an account."
}400
{
"error": "This email is not valid."
}400
{
"error": "Field confirm_password is missing."
}400
{
"error": "The password fields must match."
}POST/user/{userid}/avatarJeton membre obligatoire
Envoyez les images en fichiers multipart. Taille maximale : 25 Mo par fichier. Renvoie les avatars (202). Uniquement pour votre propre compte (un admin peut agir sur tout compte), 403 sinon.
useridobligatoiredans l'URLformat \d+img_1obligatoireimg_2facultatifimg_3facultatifcurl -X POST "https://www.viedemerde.fr/api/v2/user/{userid}/avatar" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN" \
--data-urlencode "img_1=…"{
"data": {
"img_1": {
"url": "/img/4a081d3b5c2a14e9f38471d80202df34.jpeg/avatar_small/img_users",
"id": 5,
"name": "4a081d3b5c2a14e9f38471d80202df34.jpeg"
},
"img_2": {
"url": "/images/default-avatar.jpg",
"id": ""
},
"img_3": {
"url": "/images/default-avatar.jpg",
"id": ""
}
},
"meta": {}
}Exemple tiré de la doc d'origine : les valeurs sont fictives et certains champs ont pu évoluer.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}404
{
"error": "404 - This user not found."
}400
{
"error": "400 - The file is too large. Allowed maximum size is 1 MB."
}PUT/user/{userid}/moreinfosJeton membre obligatoire
Seuls les champs envoyés sont modifiés. Chaque option vaut 1 (activée) ou 0 (désactivée). Renvoie les options mises à jour (202). Uniquement pour votre propre compte (un admin peut agir sur tout compte), 403 sinon. Relisez-les avec /user/{userid}/options.
useridobligatoiredans l'URLformat \d+optin_vdmfacultatif1 ou 0, facultatif — recevoir les actualités du siteoptin_partnersfacultatif1 ou 0, facultatif — recevoir les offres promotionnelles des partenairesnl_weeklyfacultatif1 ou 0, facultatif — s’abonner à la newsletter hebdomadaireal_commentfacultatif1 ou 0, facultatif — être prévenu quand un commentaire est publié sur une VDM suivieal_messagefacultatif1 ou 0, facultatif — être prévenu des nouveaux messages privésnl_dailyfacultatif1 ou 0, facultatif — s’abonner à la newsletter quotidiennehide_profilefacultatif1 ou 0, facultatif — masquer mon profilshow_activityfacultatif1 ou 0, facultatif — afficher mon activitéactivity_on_timelinefacultatif1 ou 0, facultatif — publier mon activité sur mon filshow_receiptfacultatif1 ou 0, facultatif — envoyer des accusés de lectureuser_content_types_filtersfacultatif/article/type/list) ; une valeur vide laisse le filtre actuel inchangécurl -X PUT "https://www.viedemerde.fr/api/v2/user/{userid}/moreinfos" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": {
"user_id": 4294967294,
"nl_weekly": true,
"nl_monthly": false,
"nl_daily": false,
"al_comment": true,
"al_message": false,
"hide_profile": false,
"show_activity": false,
"show_receipt": false,
"optin_vdm": false,
"optin_partners": false,
"activity_on_timeline": true,
"hide_illustrations": false,
"user_content_types_filters": []
},
"meta": {},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
401
{
"data": "Vous devez être authentifié pour accéder à cette fonction.",
"meta": {},
"badge": [],
"badge_display": []
}DELETE/user/{userid}Jeton membre obligatoire
Ne supprime pas le compte tout de suite : envoie au membre un e-mail avec un lien pour confirmer la suppression. Renvoie 204. Uniquement pour votre propre compte (un admin peut agir sur tout compte), 403 sinon.
useridobligatoiredans l'URLformat \d+curl -X DELETE "https://www.viedemerde.fr/api/v2/user/{userid}" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": {
"response": "The procedure was performed"
},
"meta": {}
}Exemple tiré de la doc d'origine : les valeurs sont fictives et certains champs ont pu évoluer.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}404
{
"error": "404 - This user not found."
}POST/user/likeJeton membre obligatoire
Jeton utilisateur obligatoire : l’auteur du like est toujours le membre authentifié, qui ne peut pas se liker lui-même (401). Renvoie le nouveau nombre de likes du membre, number_of_likes (202), ou 208 si vous l’aviez déjà liké. Le membre liké est notifié.
useridobligatoireuser_likedobligatoirecurl -X POST "https://www.viedemerde.fr/api/v2/user/like" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN" \
--data-urlencode "userid=…" \
--data-urlencode "user_liked=…"{
"data": {
"number_of_likes": xx
},
"meta": {}
}Exemple tiré de la doc d'origine : les valeurs sont fictives et certains champs ont pu évoluer.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}208
{
"error": "208 - You have already liked this user."
}POST/user/connect/facebookClé d'API seule
Cet endpoint est désactivé : il renvoie toujours 400. Utilisez /user/authenticate.
idobligatoirenameobligatoireemailobligatoiregenderfacultatifbirthdayfacultatiflocationfacultatifpicturefacultatifcurl -X POST "https://www.viedemerde.fr/api/v2/user/connect/facebook" \
-H "X-VDM-Api-Key: $API_KEY" \
--data-urlencode "id=…" \
--data-urlencode "name=…" \
--data-urlencode "email=…"{
"data": "Missing datas for facebook connect",
"meta": {},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
POST/user/connect/twitterClé d'API seule
Cet endpoint est désactivé : il renvoie toujours 400. Utilisez /user/authenticate.
idobligatoirenameobligatoireemailobligatoiredescriptionfacultatifprofile_image_urlfacultatifcurl -X POST "https://www.viedemerde.fr/api/v2/user/connect/twitter" \
-H "X-VDM-Api-Key: $API_KEY" \
--data-urlencode "id=…" \
--data-urlencode "name=…" \
--data-urlencode "email=…"{
"data": "Missing datas for twitter connect",
"meta": {},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
POST/user/resetpasswordClé d'API seule
Si un compte utilise cet e-mail, lui envoie un lien pour choisir un nouveau mot de passe ; le mot de passe actuel reste valable d’ici là. Renvoie 200 pour tout e-mail valide, qu’un compte l’utilise ou non, et 400 si l’e-mail est invalide.
emailobligatoirecurl -X POST "https://www.viedemerde.fr/api/v2/user/resetpassword" \
-H "X-VDM-Api-Key: $API_KEY" \
--data-urlencode "email=…"{
"data": "User's password has been reset",
"meta": {},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
PUT/user/edit/password/{userid}Jeton membre obligatoire
Renvoie 202 en cas de succès, 400 si confirm_password manque ou ne correspond pas, 403 si current_password est absent ou faux. Les autres sessions du membre (ses autres jetons) sont déconnectées ; le jeton de la requête reste valable. Uniquement pour votre propre compte (un admin peut agir sur tout compte sans current_password), 403 sinon.
useridobligatoiredans l'URLformat \d+current_passwordobligatoirepasswordobligatoireconfirm_passwordobligatoirecurl -X PUT "https://www.viedemerde.fr/api/v2/user/edit/password/{userid}" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN" \
--data-urlencode "current_password=…" \
--data-urlencode "password=…" \
--data-urlencode "confirm_password=…"{
"data": "User's password has been updated",
"meta": {}
}Exemple tiré de la doc d'origine : les valeurs sont fictives et certains champs ont pu évoluer.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}401
{
"error": "100 - You must be authenticated in order to access this function."
}400
{
"error": "16 - Field confirm_password is missing."
}400
{
"error": "17 - The password fields must match."
}PUT/user/edit/email/{userid}Jeton membre obligatoire
Le compte repasse en attente jusqu’à ce que le membre clique sur le lien de validation envoyé à la nouvelle adresse. Renvoie 202 en cas de succès, 400 si l’e-mail est déjà pris ou invalide, 403 si current_password est absent ou faux. Uniquement pour votre propre compte (un admin peut agir sur tout compte sans current_password), 403 sinon.
useridobligatoiredans l'URLformat \d+current_passwordobligatoireemailobligatoirecurl -X PUT "https://www.viedemerde.fr/api/v2/user/edit/email/{userid}" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN" \
--data-urlencode "current_password=…" \
--data-urlencode "email=…"{
"data": "User's email has been updated",
"meta": {}
}Exemple tiré de la doc d'origine : les valeurs sont fictives et certains champs ont pu évoluer.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}401
{
"error": "100 - You must be authenticated in order to access this function."
}400
{
"error": "12 - This email is already associated with an account."
}400
{
"error": "13 - This email is not valid."
}GET/user/uniqidClé d'API seule
Renvoie {"uniqid": …}, un entier aléatoire qui identifie un appareil anonyme. Envoyez-le dans l’en-tête X-VDM-Uniqid pour que les votes, smileys et modérations soient enregistrés sans compte.
Aucun paramètre.
curl "https://www.viedemerde.fr/api/v2/user/uniqid" \
-H "X-VDM-Api-Key: $API_KEY"{
"data": {
"uniqid": 1139849784
},
"meta": {},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
PUT/user/{userid}/profileJeton membre obligatoire
Seuls les champs envoyés sont modifiés : title, birthday, city, relation, bio, ainsi que area, country, countrycode, timezone et source ; les autres champs sont ignorés (l’e-mail et le mot de passe ont leurs propres endpoints). Renvoie le membre mis à jour (202), ou 400 si la bio est trop longue. Uniquement pour votre propre compte (un admin peut agir sur tout compte), 403 sinon.
useridobligatoiredans l'URLformat \d+titlefacultatifmr, mrs ou missbirthdayfacultatifAAAA-MM-JJ ou ISO 8601cityfacultatifrelationfacultatifsingle, couple ou complicatedbiofacultatifcurl -X PUT "https://www.viedemerde.fr/api/v2/user/{userid}/profile" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": {
"id": 4294967294,
"fbid": 0,
"twid": 0,
"dateEntry": "2026-09-29T20:29:38+02:00",
"dateUpdate": "2026-10-30T06:42:16+01:00",
"status": 1,
"role": [
"ROLE_USER"
],
"username": "JohnDoe",
"email": "[email protected]",
"city": "Paris",
"area": null,
"country": null,
"timezone": "Pacific/Fakaofo",
"birthday": "1990-05-17T00:00:00+02:00",
"origin": 3,
"bio": "Bio de test",
"source": "cowroker",
"relation": "",
"title": "mr",
"site": 1,
"oldIDVDM": null,
"oldIDFML": null,
"avatar": null,
"metrics": null,
"signature": null
},
"meta": {},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
401
{
"data": "Vous devez être authentifié pour accéder à cette fonction.",
"meta": {},
"badge": [],
"badge_display": []
}GET/user/{userid}/memberClé d'API seule
Renvoie le membre (champs publics, sauf pour vous-même et les admins), ses trois avatars, la visibilité de son profil et ses statistiques. Avec X-VDM-Uniqid, la visite est comptée. 404 si le membre n’existe pas.
useridobligatoiredans l'URLformat \d+badges:
status: 0 => progress | 1 => acquired
category: 1 => bronze | 2 => silver | 3 => goldcurl "https://www.viedemerde.fr/api/v2/user/{userid}/member" \
-H "X-VDM-Api-Key: $API_KEY"{
"data": {
"user": {
"id": 4294967294,
"dateEntry": "2026-09-29T20:29:38+02:00",
"status": 1,
"username": "JohnDoe",
"city": "Paris",
"country": null,
"bio": "Bio de test",
"relation": "",
"title": "mr",
"site": 1,
"avatar": null,
"metrics": null,
"signature": null
},
"avatar_1": null,
"avatar_2": {
"url": "https://www.viedemerde.fr/img/4c312a6bec147abb7872d50d2f157ed1.jpg/avatar_small/img_users",
"id": 30,
"name": "4c312a6bec147abb7872d50d2f157ed1.jpg"
},
"avatar_3": null,
"profile_visibility": false,
"number_of_visits": 1005,
"number_of_likes": 2,
"number_of_friends": 0,
"number_of_followers": 0,
"number_of_comment": 36,
"number_of_favorite": 8,
"number_of_article": 1,
"number_of_badge": 24
},
"meta": {},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
GET/user/{userid}/profileJeton membre obligatoire
Jeton utilisateur obligatoire. Comme /user/{userid}/member, avec en plus le nombre de visites, de likes et d’amis ; la visite est comptée pour le membre connecté. 404 si le membre n’existe pas.
useridobligatoiredans l'URLformat \d+badges:
status: 0 => progress | 1 => acquired
category: 1 => bronze | 2 => silver | 3 => goldcurl "https://www.viedemerde.fr/api/v2/user/{userid}/profile" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": {
"user": {
"id": 4294967294,
"fbid": 0,
"twid": 0,
"dateEntry": "2026-09-29T20:29:38+02:00",
"dateUpdate": "2026-10-30T06:42:16+01:00",
"status": 1,
"role": [
"ROLE_USER"
],
"username": "JohnDoe",
"email": "[email protected]",
"city": "Paris",
"area": null,
"country": null,
"timezone": "Pacific/Fakaofo",
"birthday": "1990-05-17T00:00:00+02:00",
"origin": 3,
"bio": "Bio de test",
"source": "cowroker",
"relation": "",
"title": "mr",
"site": 1,
"oldIDVDM": null,
"oldIDFML": null,
"avatar": null,
"metrics": null,
"signature": null
},
"avatar_1": null,
"avatar_2": {
"url": "https://www.viedemerde.fr/img/4c312a6bec147abb7872d50d2f157ed1.jpg/avatar_small/img_users",
"id": 30,
"name": "4c312a6bec147abb7872d50d2f157ed1.jpg"
},
"avatar_3": null,
"profile_visibility": false,
"number_of_visits": 1005,
"number_of_likes": 2,
"number_of_friends": 0,
"number_of_followers": 0,
"number_of_comment": 36,
"number_of_favorite": 8,
"number_of_article": 1,
"number_of_badge": 24,
"metrics": {
"isFollowed": false,
"isBlocked": false,
"isLike": false
}
},
"meta": {},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
401
{
"data": "Vous devez être authentifié pour accéder à cette fonction.",
"meta": {},
"badge": [],
"badge_display": []
}GET/user/{userid}/visitsClé d'API seule
Avec pagination : meta donne page, per_page, page_count et total_count. Visites les plus récentes d’abord par défaut.
useridobligatoiredans l'URLformat \d+pagefacultatifpage[number] (numéro de page, 1 par défaut) et page[bypage] (éléments par page, 30 par défaut)orderbyfacultatiforderby[date]=DESC par défaut — ordre de tri, sous la forme orderby[champ]=ASC|DESCcurl "https://www.viedemerde.fr/api/v2/user/{userid}/visits" \
-H "X-VDM-Api-Key: $API_KEY"{
"data": [
{
"id": 4294967295,
"username": "admin",
"birthday": "1944-10-30T00:00:00+0100",
"relation": "couple",
"city": "Lille",
"country": null,
"avatar": null,
"title": null,
"dateofvisit": "1791454075",
"metrics": {
"isFollowed": false,
"isBlocked": false,
"isLike": false
}
},
{
"id": 3216549910,
"username": "VDMbot",
"birthday": "2001-12-06T00:00:00+0100",
"relation": "single",
"city": "Lille",
"country": null,
"avatar": null,
"title": "mrs",
"dateofvisit": "-1425592455",
"metrics": {
"isFollowed": false,
"isBlocked": false,
"isLike": false
}
}
],
"meta": {
"page": 1,
"per_page": 30,
"page_count": 1,
"total_count": 6
},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
GET/user/{userid}/likesClé d'API seule
Avec pagination : meta donne page, per_page, page_count et total_count. Likes les plus récents d’abord par défaut.
useridobligatoiredans l'URLformat \d+pagefacultatifpage[number] (numéro de page, 1 par défaut) et page[bypage] (éléments par page, 30 par défaut)orderbyfacultatiforderby[date]=DESC par défaut — ordre de tri, sous la forme orderby[champ]=ASC|DESCcurl "https://www.viedemerde.fr/api/v2/user/{userid}/likes" \
-H "X-VDM-Api-Key: $API_KEY"{
"data": [
{
"id": 4294967295,
"username": "admin",
"birthday": "1944-10-30T00:00:00+0100",
"relation": "couple",
"city": "Lille",
"country": null,
"avatar": null,
"title": null,
"dateoflike": "1793346960"
}
],
"meta": {
"page": 1,
"per_page": 30,
"page_count": 1,
"total_count": 1
},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
DELETE/user/avatar/{userid}/{imageid}Jeton membre obligatoire
Renvoie 200 en cas de succès, 404 si le membre ou l’image n’existe pas. Uniquement pour votre propre compte (un admin peut agir sur tout compte), 403 sinon.
useridobligatoiredans l'URLformat \d+imageidobligatoiredans l'URLformat \d+{imageid}) — id de l’image à supprimercurl -X DELETE "https://www.viedemerde.fr/api/v2/user/avatar/{userid}/{imageid}" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": "User's avatar has been deleted",
"meta": {}
}
With attribute /all
{
"data": "All user's avatar has been deleted",
"meta": {}
}Exemple tiré de la doc d'origine : les valeurs sont fictives et certains champs ont pu évoluer.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}401
{
"error": "100 - You must be authenticated in order to access this function."
}404
{
"error": "10 - This user not found."
}404
{
"error": "27 - Image not found."
}DELETE/user/avatar/{userid}/allJeton membre obligatoire
Renvoie 200 en cas de succès. Uniquement pour votre propre compte (un admin peut agir sur tout compte), 403 sinon.
useridobligatoiredans l'URLformat \d+curl -X DELETE "https://www.viedemerde.fr/api/v2/user/avatar/{userid}/all" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": "All user's avatar has been deleted",
"meta": {}
}Exemple tiré de la doc d'origine : les valeurs sont fictives et certains champs ont pu évoluer.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}401
{
"error": "100 - You must be authenticated in order to access this function."
}404
{
"error": "10 - This user not found."
}404
{
"error": "27 - Image not found."
}PATCH/user/avatar/{userid}Jeton membre obligatoire
Envoyez les ids des images dans l’ordre d’affichage voulu. Renvoie 200. Uniquement pour votre propre compte (un admin peut agir sur tout compte), 403 sinon.
useridobligatoiredans l'URLformat \d+img_1obligatoireimg_2obligatoireimg_3obligatoirecurl -X PATCH "https://www.viedemerde.fr/api/v2/user/avatar/{userid}" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN" \
--data-urlencode "img_1=…" \
--data-urlencode "img_2=…" \
--data-urlencode "img_3=…"{
"data": "User's avatar have been updated",
"meta": {}
}Exemple tiré de la doc d'origine : les valeurs sont fictives et certains champs ont pu évoluer.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}401
{
"error": "100 - You must be authenticated in order to access this function."
}404
{
"error": "10 - This user not found."
}GET/user/{userid}/badgesJeton membre obligatoire
Jeton utilisateur obligatoire. Renvoie 404 si le membre n’existe pas.
useridobligatoiredans l'URLformat \d+status: 0 => progress | 1 => acquired
category: 1 => bronze | 2 => silver | 3 => goldcurl "https://www.viedemerde.fr/api/v2/user/{userid}/badges" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": [
{
"user": 4294967294,
"id": 1,
"status": 1,
"progression": 5,
"data": "",
"stamp": "2026-09-30T08:16:00+02:00",
"site": null,
"name": "Débutant",
"description": "Vous avez parcouru 5 pages du site. C'est un début.",
"hidden": "0",
"goal": 5,
"limited": "0",
"category": 1,
"total": 7698968,
"illustration": "lI6nHr5hWXlu0.gif"
},
{
"user": 4294967294,
"id": 26,
"status": 1,
"progression": 1,
"data": "",
"stamp": "2026-10-14T14:13:55+02:00",
"site": null,
"name": "Dura lex sed lex",
"description": "Lire la charte, c'est bien. Ce badge est sponsorisé par Alan, notre modérateur.",
"hidden": "0",
"goal": 1,
"limited": "0",
"category": 1,
"total": 46695,
"illustration": "26.gif"
}
],
"meta": {},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
401
{
"data": [
"Vous devez être authentifié pour accéder à cette fonction."
],
"meta": {},
"badge": [],
"badge_display": []
}GET/user/{userid}/articlesJeton membre obligatoire
Jeton utilisateur obligatoire. Pour votre propre compte, vos VDM dans tous les statuts sauf supprimé (y compris en attente et refusées) ; pour un autre membre, ses VDM publiées seulement. Avec mots-clés, statistiques, images, paragraphes et vidéos. Sans pagination.
useridobligatoiredans l'URLformat \d+status: 0 => new | 1 => rejected | 2 => promoted | 3 => refused | 4 => validated | 5 => private | 6 => autopilot | 7 => deleted | 8 => scheduled | 9 => tocheck
type: 1 => classic | 3 => photo | 4 => histo | 5 => world | 6 => confession | 7 => illustrated | 9 => news | 10 => video
genders: 1 => male | 2 => female
layout: 1 => teaching | 2 => layout2 | 3 => layout3
flag: 1 => popular | 2 => coupdecoeur
usermetrics:
smiley: 1 => amusing | 2 => funny | 3 => weird | 4 => hilariouscurl "https://www.viedemerde.fr/api/v2/user/{userid}/articles" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": [
{
"id": 518671,
"status": 11,
"type": 1,
"spicy": false,
"optin": false,
"socialTruncate": false,
"title": null,
"content": "Today, I tested the API for an hour before noticing I had swapped my key and my token. FML",
"content_hidden": "Today, I tested the API for an hour before noticing I had swapped my key and my token. FML",
"created": "2026-10-30T08:54:24+01:00",
"updated": "2026-10-30T08:54:24+01:00",
"published": "2026-10-30T08:54:24+01:00",
"user": 4294967294,
"author": "JohnDoe",
"gender": null,
"layout": 0,
"flag": 0,
"origin": "api",
"apikey": "{{apikey}}",
"vote": 1,
"site": 1,
"siteorig": null,
"slug": "today-i-tested-the-api-for-an-hour-before-noticing-i-had-swapped-my-key-and-my-token-fml",
"bitly": null,
"metrics": {
"article": 518671,
"comment": 0,
"favorite": 0,
"reports": 1,
"mod_positive": 0,
"mod_negative": 0,
"votes_up": 0,
"votes_down": 0,
"smiley_amusing": 0,
"smiley_funny": 0,
"smiley_weird": 0,
"smiley_hilarious": 0
},
"usermetrics": {
"favorite": false,
"smiley": null,
"votes": null
},
"keywords": [],
"images": [],
"videos": [],
"openview": 0,
"url": null,
"suggested": null,
"paragraphs": []
},
{
"id": 518670,
"status": 11,
"type": 1,
"spicy": false,
"optin": false,
"socialTruncate": false,
"title": null,
"content": "Today, I tested the API for an hour before noticing I had swapped my key and my token. FML",
"content_hidden": "Today, I tested the API for an hour before noticing I had swapped my key and my token. FML",
"created": "2026-10-30T08:53:13+01:00",
"updated": "2026-10-30T08:53:13+01:00",
"published": "2026-10-30T08:53:13+01:00",
"user": 4294967294,
"author": "JohnDoe",
"gender": null,
"layout": 0,
"flag": 0,
"origin": "api",
"apikey": "{{apikey}}",
"vote": 1,
"site": 1,
"siteorig": null,
"slug": "today-i-tested-the-api-for-an-hour-before-noticing-i-had-swapped-my-key-and-my-token-fml",
"bitly": null,
"metrics": {
"article": 518670,
"comment": 0,
"favorite": 0,
"reports": 1,
"mod_positive": 0,
"mod_negative": 0,
"votes_up": 0,
"votes_down": 0,
"smiley_amusing": 0,
"smiley_funny": 0,
"smiley_weird": 0,
"smiley_hilarious": 0
},
"usermetrics": {
"favorite": false,
"smiley": null,
"votes": null
},
"keywords": [],
"images": [],
"videos": [],
"openview": 0,
"url": null,
"suggested": null,
"paragraphs": []
}
],
"meta": {},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
401
{
"data": [
"Vous devez être authentifié pour accéder à cette fonction."
],
"meta": {},
"badge": [],
"badge_display": []
}GET/user/{userid}/favoritesJeton membre obligatoire
Jeton utilisateur obligatoire. Avec pagination (meta). Chaque VDM inclut vos propres votes, smileys et favoris.
useridobligatoiredans l'URLformat \d+pagefacultatifpage[number] (numéro de page, 1 par défaut) et page[bypage] (éléments par page, 30 par défaut)status: 0 => new | 1 => rejected | 2 => promoted | 3 => refused | 4 => validated | 5 => private | 6 => autopilot | 7 => deleted | 8 => scheduled | 9 => tocheck
type: 1 => classic | 2 => blog | 3 => photo | 4 => histo | 5 => world | 6 => confession | 7 => illustrated | 9 => news | 10 => video
genders: 1 => male | 2 => female
layout: 1 => teaching | 2 => layout2 | 3 => layout3
flag: 1 => popular | 2 => coupdecoeur
usermetrics:
smiley: 1 => amusing | 2 => funny | 3 => weird | 4 => hilariouscurl "https://www.viedemerde.fr/api/v2/user/{userid}/favorites" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": [
{
"id": 518664,
"status": 4,
"type": 1,
"spicy": false,
"optin": false,
"socialTruncate": false,
"title": "Amusez-vous bien…",
"content": "Aujourd'hui, retour de soirée. Sur la route, ma femme compte combien de lapins nous croisons sur le côté de la route, et me dit que ce serait bête d'en écraser un. Un lapin ? Je n'en ai pas écrasé. Mais un sanglier… VDM",
"content_hidden": "Aujourd'hui, retour de soirée. Sur la route, ma femme compte combien de lapins nous croisons sur le côté de la route, et me dit que ce serait bête d'en écraser un. Un lapin ? Je n'en ai pas écrasé. Mais un sanglier… VDM",
"created": "2026-10-06T21:58:24+02:00",
"updated": "2026-10-21T11:09:45+02:00",
"published": "2026-10-18T07:55:00+02:00",
"user": 1,
"author": "Laure",
"gender": 2,
"layout": 0,
"flag": 0,
"origin": "api",
"apikey": "b4e042287442ad81",
"vote": 1,
"site": 1,
"siteorig": null,
"slug": "amusez-vous-bien",
"bitly": null,
"metrics": {
"article": 518664,
"comment": 5,
"favorite": 1,
"reports": 0,
"mod_positive": 0,
"mod_negative": 0,
"votes_up": 4,
"votes_down": 13,
"smiley_amusing": 4,
"smiley_funny": 0,
"smiley_weird": 0,
"smiley_hilarious": 0
},
"usermetrics": {
"favorite": true,
"smiley": 1,
"votes": null
},
"keywords": [],
"images": [
{
"url": "https://localhost:8100/img/62da819fa43dd02828de70822f7b2e70.png/medium/",
"usage": 8,
"name": "62da819fa43dd02828de70822f7b2e70.png",
"copyright": null,
"legend": null,
"width": 1200,
"height": 628
},
{
"url": "https://localhost:8100/img/1cbf05493820b33ab4cece8a1e7d87c0.png/medium/",
"usage": 9,
"name": "1cbf05493820b33ab4cece8a1e7d87c0.png",
"copyright": null,
"legend": null,
"width": 1200,
"height": 628
}
],
"videos": [],
"openview": 0,
"url": null,
"suggested": null
},
{
"id": 9,
"status": 4,
"type": 1,
"spicy": false,
"optin": false,
"socialTruncate": false,
"title": "",
"content": "Aujourd'hui, comme tous les 10 août en trois ans de relation, ma copine est triste et pleure beaucoup sans que je puisse la consoler. Supposant que c'était la date de décès d'un proche, je n'avais jamais osé demander la raison. Aujourd'hui, j'ai appris que c'était la date de r…",
"content_hidden": "Aujourd'hui, comme tous les 10 août en trois ans de relation, ma copine est triste et pleure beaucoup sans que je puisse la consoler. Supposant que c'était la date de décès d'un proche, je n'avais jamais osé demander la raison. Aujourd'hui, j'ai appris que c'était la date de r…",
"created": "2026-09-29T20:29:41+02:00",
"updated": "2026-10-04T10:19:37+02:00",
"published": "2026-10-04T08:19:37+02:00",
"user": 2321654987,
"author": null,
"gender": null,
"layout": 0,
"flag": 0,
"origin": null,
"apikey": null,
"vote": 2,
"site": 1,
"siteorig": null,
"slug": "aujourd-hui-comme-tous-les-10-aout-en-trois-ans-de-relation-ma-copine-est-triste-et-pleure-beauco",
"bitly": null,
"metrics": {
"article": 9,
"comment": 0,
"favorite": 0,
"reports": 0,
"mod_positive": 0,
"mod_negative": 0,
"votes_up": 1,
"votes_down": 10,
"smiley_amusing": 0,
"smiley_funny": 0,
"smiley_weird": 0,
"smiley_hilarious": 0
},
"usermetrics": {
"favorite": true,
"smiley": null,
"votes": null
},
"keywords": [],
"images": [],
"videos": [],
"openview": 0,
"url": null,
"suggested": null
}
],
"meta": {
"page": 1,
"per_page": 30,
"page_count": 1,
"total_count": 7
},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
401
{
"data": [
"Vous devez être authentifié pour accéder à cette fonction."
],
"meta": {},
"badge": [],
"badge_display": []
}GET/user/{userid}/commentsJeton membre obligatoire
Jeton utilisateur obligatoire. Renvoie les commentaires de premier niveau du membre (pas ses réponses à d’autres commentaires), chacun avec ses réponses. Sans pagination.
useridobligatoiredans l'URLformat \d+status: 0 => default | 1 => highlighted | 2 => nuked | 3 => confession | 4 => deleted
curl "https://www.viedemerde.fr/api/v2/user/{userid}/comments" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": [
{
"id": 1,
"date": "2026-09-30T05:10:06+02:00",
"status": 0,
"parent": 0,
"content": "Commentaire de test normal",
"article": 5,
"author": {
"id": 4294967294,
"username": "JohnDoe",
"avatar": "/images/default-avatar.jpg",
"title": "mr"
},
"thumbup": 3,
"thumbdown": 0,
"userthumbed": 0,
"report": 0,
"isModerator": false,
"replies": null
},
{
"id": 3,
"date": "2026-09-30T06:40:06+02:00",
"status": 4,
"parent": 0,
"content": "Commentaire supprimé",
"article": 5,
"author": {
"id": 4294967294,
"username": "JohnDoe",
"avatar": "/images/default-avatar.jpg",
"title": "mr"
},
"thumbup": 0,
"thumbdown": 4,
"userthumbed": 0,
"report": 2,
"isModerator": false,
"replies": null
}
],
"meta": {},
"badge": [],
"badge_display": []
}Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.
401
{
"data": [
"Vous devez être authentifié pour accéder à cette fonction."
],
"meta": {},
"badge": [],
"badge_display": []
}