VDMDéveloppeurs

Membres

Connecter un membre

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.

Paramètres

loginobligatoire
chaîne, obligatoire — pseudo ou adresse e-mail
passwordobligatoire
chaîne, obligatoire — mot de passe du membre, en clair (utilisez toujours HTTPS)
Requête
curl -X POST "https://www.viedemerde.fr/api/v2/user/authenticate" \
  -H "X-VDM-Api-Key: $API_KEY" \
  --data-urlencode "login=…" \
  --data-urlencode "password=…"
Réponse 200
{
  "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.

Erreurs possibles

401

{
  "error": "103 - Invalid login credentials."
}

Renouveler un jeton utilisateur

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.

Paramètres

secretobligatoire
chaîne, obligatoire — secret du membre : empreinte MD5 de l’id du membre suivi de son pseudo (md5(id . username))
Requête
curl -X POST "https://www.viedemerde.fr/api/v2/user/refreshtoken" \
  -H "X-VDM-Api-Key: $API_KEY" \
  --data-urlencode "secret=…"
Réponse 200
{
  "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.

Erreurs possibles

401

{
  "error": "102 - Invalid API key."
}

401

{
  "error": "104 - Invalid or expired API token."
}

401

{
  "error": "9 - Missing parameter."
}

Déconnecter le membre

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.

Paramètres

Aucun paramètre.

Requête
curl "https://www.viedemerde.fr/api/v2/user/logout" \
  -H "X-VDM-Api-Key: $API_KEY" \
  -H "X-VDM-Api-Token: $TOKEN"
Réponse 200
{
  "data": "anonymous",
  "meta": {}
}

Exemple tiré de la doc d'origine : les valeurs sont fictives et certains champs ont pu évoluer.

Erreurs possibles

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."
}

Récupérer les options d’un membre

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — id du membre
Requête
curl "https://www.viedemerde.fr/api/v2/user/{userid}/options" \
  -H "X-VDM-Api-Key: $API_KEY" \
  -H "X-VDM-Api-Token: $TOKEN"
Réponse 200
{
  "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.

Erreurs possibles

401

{
  "data": "Vous devez être authentifié pour accéder à cette fonction.",
  "meta": {},
  "badge": [],
  "badge_display": []
}

Créer un compte

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.

Paramètres

usernameobligatoire
chaîne, obligatoire — pseudo
emailobligatoire
chaîne, obligatoire — adresse e-mail
passwordobligatoire
chaîne, obligatoire — mot de passe
confirm_passwordobligatoire
chaîne, obligatoire — le même mot de passe, une seconde fois
Requête
curl -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=…"
Réponse 200
{
  "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.

Erreurs possibles

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."
}

Envoyer les avatars d’un membre

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — votre id de membre
img_1obligatoire
fichier, obligatoire — premier avatar (photo de profil principale)
img_2facultatif
fichier, facultatif — deuxième avatar
img_3facultatif
fichier, facultatif — troisième avatar
Requête
curl -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=…"
Réponse 202
{
  "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.

Erreurs possibles

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."
}

Modifier les options de notification et de confidentialité d’un membre

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — votre id de membre
optin_vdmfacultatif
1 ou 0, facultatif — recevoir les actualités du site
optin_partnersfacultatif
1 ou 0, facultatif — recevoir les offres promotionnelles des partenaires
nl_weeklyfacultatif
1 ou 0, facultatif — s’abonner à la newsletter hebdomadaire
al_commentfacultatif
1 ou 0, facultatif — être prévenu quand un commentaire est publié sur une VDM suivie
al_messagefacultatif
1 ou 0, facultatif — être prévenu des nouveaux messages privés
nl_dailyfacultatif
1 ou 0, facultatif — s’abonner à la newsletter quotidienne
hide_profilefacultatif
1 ou 0, facultatif — masquer mon profil
show_activityfacultatif
1 ou 0, facultatif — afficher mon activité
activity_on_timelinefacultatif
1 ou 0, facultatif — publier mon activité sur mon fil
show_receiptfacultatif
1 ou 0, facultatif — envoyer des accusés de lecture
user_content_types_filtersfacultatif
tableau d’entiers, facultatif — ids des types de contenu à filtrer (voir /article/type/list) ; une valeur vide laisse le filtre actuel inchangé
Requête
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"
Réponse 202
{
  "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.

Erreurs possibles

401

{
  "data": "Vous devez être authentifié pour accéder à cette fonction.",
  "meta": {},
  "badge": [],
  "badge_display": []
}

Demander la suppression d’un compte

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — votre id de membre
Requête
curl -X DELETE "https://www.viedemerde.fr/api/v2/user/{userid}" \
  -H "X-VDM-Api-Key: $API_KEY" \
  -H "X-VDM-Api-Token: $TOKEN"
Réponse 204
{
  "data": {
    "response": "The procedure was performed"
  },
  "meta": {}
}

Exemple tiré de la doc d'origine : les valeurs sont fictives et certains champs ont pu évoluer.

Erreurs possibles

401

{
  "error": "102 - Invalid API key."
}

401

{
  "error": "104 - Invalid or expired API token."
}

404

{
  "error": "404 - This user not found."
}

Liker un membre

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é.

Paramètres

useridobligatoire
Ignoré : l’auteur du like est toujours le membre authentifié
user_likedobligatoire
entier, obligatoire — id du membre à liker
Requête
curl -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=…"
Réponse 202
{
  "data": {
    "number_of_likes": xx
  },
  "meta": {}
}

Exemple tiré de la doc d'origine : les valeurs sont fictives et certains champs ont pu évoluer.

Erreurs possibles

401

{
  "error": "102 - Invalid API key."
}

401

{
  "error": "104 - Invalid or expired API token."
}

208

{
  "error": "208 - You have already liked this user."
}

Se connecter avec Facebook (désactivé)

POST/user/connect/facebookClé d'API seule

Cet endpoint est désactivé : il renvoie toujours 400. Utilisez /user/authenticate.

Paramètres

idobligatoire
chaîne — id Facebook de l’utilisateur (ignoré : endpoint désactivé)
nameobligatoire
chaîne — nom (ignoré : endpoint désactivé)
emailobligatoire
chaîne — adresse e-mail (ignorée : endpoint désactivé)
genderfacultatif
chaîne — genre (ignoré : endpoint désactivé)
birthdayfacultatif
chaîne — date de naissance (ignorée : endpoint désactivé)
locationfacultatif
chaîne — localisation (ignorée : endpoint désactivé)
picturefacultatif
chaîne — URL de la photo (ignorée : endpoint désactivé)
Requête
curl -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=…"
Réponse 400
{
  "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.

Se connecter avec Twitter (désactivé)

POST/user/connect/twitterClé d'API seule

Cet endpoint est désactivé : il renvoie toujours 400. Utilisez /user/authenticate.

Paramètres

idobligatoire
chaîne — id Twitter de l’utilisateur (ignoré : endpoint désactivé)
nameobligatoire
chaîne — nom (ignoré : endpoint désactivé)
emailobligatoire
chaîne — adresse e-mail (ignorée : endpoint désactivé)
descriptionfacultatif
chaîne — description du profil (ignorée : endpoint désactivé)
profile_image_urlfacultatif
chaîne — URL de la photo (ignorée : endpoint désactivé)
Requête
curl -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=…"
Réponse 400
{
  "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.

Envoyer un lien de réinitialisation du mot de passe

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.

Paramètres

emailobligatoire
chaîne, obligatoire — adresse e-mail du compte
Requête
curl -X POST "https://www.viedemerde.fr/api/v2/user/resetpassword" \
  -H "X-VDM-Api-Key: $API_KEY" \
  --data-urlencode "email=…"
Réponse 200
{
  "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.

Changer le mot de passe d’un membre

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — votre id de membre
current_passwordobligatoire
chaîne, obligatoire — mot de passe actuel du membre
passwordobligatoire
chaîne, obligatoire — nouveau mot de passe
confirm_passwordobligatoire
chaîne, obligatoire — le nouveau mot de passe, une seconde fois
Requête
curl -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=…"
Réponse 202
{
  "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.

Erreurs possibles

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."
}

Changer l’adresse e-mail d’un membre

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — votre id de membre
current_passwordobligatoire
chaîne, obligatoire — mot de passe actuel du membre
emailobligatoire
chaîne, obligatoire — nouvelle adresse e-mail
Requête
curl -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=…"
Réponse 200
{
  "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.

Erreurs possibles

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."
}

Générer un identifiant de visiteur

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.

Paramètres

Aucun paramètre.

Requête
curl "https://www.viedemerde.fr/api/v2/user/uniqid" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 200
{
  "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.

Modifier le profil d’un membre

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — votre id de membre
titlefacultatif
chaîne, facultative — civilité : mr, mrs ou miss
birthdayfacultatif
date, facultative — date de naissance, AAAA-MM-JJ ou ISO 8601
cityfacultatif
chaîne, facultative — ville
relationfacultatif
chaîne, facultative — situation amoureuse : single, couple ou complicated
biofacultatif
chaîne, facultative — biographie, 2 000 caractères maximum
Requête
curl -X PUT "https://www.viedemerde.fr/api/v2/user/{userid}/profile" \
  -H "X-VDM-Api-Key: $API_KEY" \
  -H "X-VDM-Api-Token: $TOKEN"
Réponse 202
{
  "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.

Erreurs possibles

401

{
  "data": "Vous devez être authentifié pour accéder à cette fonction.",
  "meta": {},
  "badge": [],
  "badge_display": []
}

Récupérer la page publique d’un membre

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, dans le chemin — id du membre

Valeurs

badges:
    status: 0 => progress | 1 => acquired
    category: 1 => bronze | 2 => silver | 3 => gold
Requête
curl "https://www.viedemerde.fr/api/v2/user/{userid}/member" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 200
{
  "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.

Récupérer le profil d’un membre, en étant connecté

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, dans le chemin — id du membre

Valeurs

badges:
    status: 0 => progress | 1 => acquired
    category: 1 => bronze | 2 => silver | 3 => gold
Requête
curl "https://www.viedemerde.fr/api/v2/user/{userid}/profile" \
  -H "X-VDM-Api-Key: $API_KEY" \
  -H "X-VDM-Api-Token: $TOKEN"
Réponse 200
{
  "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.

Erreurs possibles

401

{
  "data": "Vous devez être authentifié pour accéder à cette fonction.",
  "meta": {},
  "badge": [],
  "badge_display": []
}

Lister les visiteurs du profil d’un membre

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — id du membre
pagefacultatif
tableau — pagination : page[number] (numéro de page, 1 par défaut) et page[bypage] (éléments par page, 30 par défaut)
orderbyfacultatif
tableau, orderby[date]=DESC par défaut — ordre de tri, sous la forme orderby[champ]=ASC|DESC
Requête
curl "https://www.viedemerde.fr/api/v2/user/{userid}/visits" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 200
{
  "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.

Lister les membres qui ont liké un membre

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — id du membre
pagefacultatif
tableau — pagination : page[number] (numéro de page, 1 par défaut) et page[bypage] (éléments par page, 30 par défaut)
orderbyfacultatif
tableau, orderby[date]=DESC par défaut — ordre de tri, sous la forme orderby[champ]=ASC|DESC
Requête
curl "https://www.viedemerde.fr/api/v2/user/{userid}/likes" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 200
{
  "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.

Supprimer un des avatars d’un membre

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — votre id de membre
imageidobligatoiredans l'URLformat \d+
entier, obligatoire, dans le chemin ({imageid}) — id de l’image à supprimer
Requête
curl -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"
Réponse 200
{
  "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.

Erreurs possibles

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."
}

Supprimer tous les avatars d’un membre

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — votre id de membre
Requête
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"
Réponse 200
{
  "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.

Erreurs possibles

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."
}

Réordonner les avatars d’un membre

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — votre id de membre
img_1obligatoire
entier, obligatoire — id de l’image à afficher en premier
img_2obligatoire
entier, obligatoire — id de l’image à afficher en deuxième
img_3obligatoire
entier, obligatoire — id de l’image à afficher en troisième
Requête
curl -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=…"
Réponse 200
{
  "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.

Erreurs possibles

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."
}

Lister les badges d’un membre

GET/user/{userid}/badgesJeton membre obligatoire

Jeton utilisateur obligatoire. Renvoie 404 si le membre n’existe pas.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — id du membre

Valeurs

status: 0 => progress | 1 => acquired
    category: 1 => bronze | 2 => silver | 3 => gold
Requête
curl "https://www.viedemerde.fr/api/v2/user/{userid}/badges" \
  -H "X-VDM-Api-Key: $API_KEY" \
  -H "X-VDM-Api-Token: $TOKEN"
Réponse 200
{
  "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.

Erreurs possibles

401

{
  "data": [
    "Vous devez être authentifié pour accéder à cette fonction."
  ],
  "meta": {},
  "badge": [],
  "badge_display": []
}

Lister les VDM d’un membre

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — id du membre

Valeurs

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 => hilarious
Requête
curl "https://www.viedemerde.fr/api/v2/user/{userid}/articles" \
  -H "X-VDM-Api-Key: $API_KEY" \
  -H "X-VDM-Api-Token: $TOKEN"
Réponse 200
{
  "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.

Erreurs possibles

401

{
  "data": [
    "Vous devez être authentifié pour accéder à cette fonction."
  ],
  "meta": {},
  "badge": [],
  "badge_display": []
}

Lister les VDM favorites d’un membre

GET/user/{userid}/favoritesJeton membre obligatoire

Jeton utilisateur obligatoire. Avec pagination (meta). Chaque VDM inclut vos propres votes, smileys et favoris.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — id du membre
pagefacultatif
tableau — pagination : page[number] (numéro de page, 1 par défaut) et page[bypage] (éléments par page, 30 par défaut)

Valeurs

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 => hilarious
Requête
curl "https://www.viedemerde.fr/api/v2/user/{userid}/favorites" \
  -H "X-VDM-Api-Key: $API_KEY" \
  -H "X-VDM-Api-Token: $TOKEN"
Réponse 200
{
  "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.

Erreurs possibles

401

{
  "data": [
    "Vous devez être authentifié pour accéder à cette fonction."
  ],
  "meta": {},
  "badge": [],
  "badge_display": []
}

Lister les commentaires d’un membre

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.

Paramètres

useridobligatoiredans l'URLformat \d+
entier, obligatoire — id du membre

Valeurs

status: 0 => default | 1 => highlighted | 2 => nuked | 3 => confession | 4 => deleted
Requête
curl "https://www.viedemerde.fr/api/v2/user/{userid}/comments" \
  -H "X-VDM-Api-Key: $API_KEY" \
  -H "X-VDM-Api-Token: $TOKEN"
Réponse 200
{
  "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.

Erreurs possibles

401

{
  "data": [
    "Vous devez être authentifié pour accéder à cette fonction."
  ],
  "meta": {},
  "badge": [],
  "badge_display": []
}