VDMDéveloppeurs

VDM

Lister les statuts de VDM

GET/article/status/listClé d'API seule

Renvoie des paires uid/label : 0 new (en attente de modération par la communauté), 1 rejected, 2 promoted, 3 refused, 4 validated (publiée), 5 private, 6 autopilot, 7 deleted, 8 scheduled, 9 tocheck, 10 BestOfPire, 11 Check Edito (en attente de relecture par la rédaction), 12 republished.

Paramètres

Aucun paramètre.

Requête
curl "https://www.viedemerde.fr/api/v2/article/status/list" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 200
{
  "data": [
    {
      "uid": 11,
      "label": "Check Edito"
    },
    {
      "uid": 0,
      "label": "new"
    }
  ],
  "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.

Lister les types de VDM

GET/article/type/listClé d'API seule

Renvoie des paires uid/label, par exemple 1 classic, 3 photo, 6 confession, 9 news, 10 video, 16 contest.

Paramètres

Aucun paramètre.

Requête
curl "https://www.viedemerde.fr/api/v2/article/type/list" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 200
{
  "data": [
    {
      "uid": 1,
      "label": "classic"
    },
    {
      "uid": 3,
      "label": "photo"
    }
  ],
  "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.

Lister les genres d’auteur

GET/article/gender/listClé d'API seule

Renvoie des paires uid/label : 1 man, 2 woman, 3 Other, 4 Enby, 5 TransFem, 6 TransMasc. Utilisez l’uid comme gender pour soumettre une VDM.

Paramètres

Aucun paramètre.

Requête
curl "https://www.viedemerde.fr/api/v2/article/gender/list" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 200
{
  "data": [
    {
      "uid": 1,
      "label": "man"
    },
    {
      "uid": 2,
      "label": "woman"
    }
  ],
  "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.

Lister les types de vote

GET/article/votetype/listClé d'API seule

Renvoie des paires uid/label (libellés traduits) pour les boutons de vote. Utilisez l’uid avec /article/{article}/vote/{votetype}.

Paramètres

Aucun paramètre.

Requête
curl "https://www.viedemerde.fr/api/v2/article/votetype/list" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 200
{
  "data": [
    {
      "uid": 1,
      "label": "Tu l'as bien mérité"
    },
    {
      "uid": 2,
      "label": "Ça aurait pu m'arriver"
    }
  ],
  "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.

Lister les catégories

GET/article/category/listClé d'API seule

Renvoie les catégories du site courant, triées par nom, avec uid, label et rub (toujours vrai). Utilisez un uid comme keyword[] dans /article/list.

Paramètres

Aucun paramètre.

Requête
curl "https://www.viedemerde.fr/api/v2/article/category/list" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 200
{
  "data": [
    {
      "uid": 1,
      "label": "Amour",
      "rub": true
    },
    {
      "uid": 5,
      "label": "Animaux",
      "rub": 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.

Lister les smileys

GET/article/smiley/listClé d'API seule

Renvoie des paires uid/label : 1 amusing, 2 funny, 3 weird, 4 hilarious. Utilisez l’uid avec /article/{article}/smile/{smiley}.

Paramètres

Aucun paramètre.

Requête
curl "https://www.viedemerde.fr/api/v2/article/smiley/list" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 200
{
  "data": [
    {
      "uid": 1,
      "label": "amusing"
    },
    {
      "uid": 2,
      "label": "funny"
    }
  ],
  "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.

Soumettre une VDM

POST/articleClé d'API seule

La VDM est créée avec le statut 11 (Check Edito) : la rédaction la relit avant qu’elle passe en modération ou soit publiée. Elle est rattachée au membre authentifié, s’il y en a un. Le contenu doit faire entre 20 et 320 caractères ; les guillemets droits qui l’entourent sont retirés. Renvoie la VDM (201), ou 400 si le contenu est trop court ou trop long, ou si une participation au concours n’a pas d’e-mail. Les autres champs envoyés sont ignorés.

Paramètres

contentfacultatif
chaîne, obligatoire en pratique — texte de la VDM, de 20 à 320 caractères
authorfacultatif
chaîne, facultative — nom d’auteur affiché avec la VDM
emailfacultatif
chaîne, facultative — adresse e-mail de l’auteur ; obligatoire pour une participation au concours
typefacultatif
entier, 1 (classic) par défaut — type de VDM : 1 (classic), 3 (photo), 6 (confession), 15 (medics) ou 16 (contest) ; toute autre valeur donne 1
spicyfacultatif
booléen, false par défaut — la VDM est épicée (contenu adulte)
contestfacultatif
booléen, false par défaut — participation au concours : passe le type à 16 (contest) et rend email obligatoire
optinfacultatif
booléen, false par défaut — indicateur d’opt-in
titlefacultatif
chaîne, facultative — titre
genderfacultatif
entier, facultatif — genre de l’auteur, voir /article/gender/list
Requête
curl -X POST "https://www.viedemerde.fr/api/v2/article" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 201
{
  "data": {
    "id": 518672,
    "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": null,
    "created": "2026-10-30T08:56:00+01:00",
    "updated": "2026-10-30T08:56:00+01:00",
    "published": "2026-10-30T08:56:00+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": 0,
      "comment": 0,
      "favorite": 0,
      "reports": 0,
      "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
  },
  "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 une VDM par son id

GET/article/{article}Clé d'API seule

Inclut mots-clés, statistiques, images, vidéos, paragraphes et jusqu’à 10 VDM suggérées, ainsi que vos votes, smileys et favoris si un jeton utilisateur ou X-VDM-Uniqid est envoyé. Les paragraphes sont dans un tableau paragraphs d’objets avec un type et un content : html (texte HTML) ou article (une VDM intégrée, au même format que dans /article/list). Les VDM promues et refusées sont renvoyées avec le type 12 (almost). Renvoie 404 si la VDM n’existe pas. Les VDM privées, supprimées ou programmées répondent aussi 404, sauf pour leur auteur et l’équipe du site.

Paramètres

articlefacultatifdans l'URLformat \d+
entier, dans le chemin — id de la VDM
Requête
curl "https://www.viedemerde.fr/api/v2/article/{article}" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 200
{
  "data": {
    "id": 518664,
    "status": 4,
    "type": 1,
    "spicy": false,
    "optin": false,
    "socialTruncate": false,
    "title": "Amusez-vous bien…",
    "content": "",
    "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": false,
      "smiley": null,
      "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": [],
    "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

404

{
  "data": [
    "VDM introuvable."
  ],
  "meta": {},
  "badge": [],
  "badge_display": []
}

Modérer une VDM en attente

GET/article/{article}/moderate/{mod}Clé d'API seule

Modération par la communauté : {mod} vaut 1 (oui, c’est une VDM) ou 0 (non), 0 par défaut. Seules les VDM au statut 0 (new) peuvent être modérées ; récupérez-les avec /article/list?moderate=1. Jeton utilisateur ou en-tête X-VDM-Uniqid obligatoire (401 sinon) ; un vote par votant et par VDM (406 sinon). Au-delà d’un certain nombre de oui, la VDM passe au statut promoted (2) ; au-delà d’un certain nombre de non, au statut rejected (1). Renvoie les statistiques de la VDM (202).

Paramètres

Aucun paramètre.

Requête
curl "https://www.viedemerde.fr/api/v2/article/{article}/moderate/{mod}" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 202
{
  "data": {
    "article": 57,
    "comment": 0,
    "favorite": 0,
    "reports": 0,
    "mod_positive": 5,
    "mod_negative": 0,
    "votes_up": 0,
    "votes_down": 0,
    "smiley_amusing": 0,
    "smiley_funny": 0,
    "smiley_weird": 0,
    "smiley_hilarious": 0
  },
  "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

404

{
  "data": [
    "VDM introuvable."
  ],
  "meta": {},
  "badge": [],
  "badge_display": []
}

Voter pour une VDM

GET/article/{article}/vote/{votetype}Clé d'API seule

{votetype} est facultatif : sans lui ou avec 0, le vote est positif ; avec un id de /article/votetype/list, il est négatif. Un jeton utilisateur ou X-VDM-Uniqid est obligatoire (400 sinon) : un vote par votant, VDM et type de vote (406 sinon). Envoyez la même requête avec la méthode DELETE pour retirer un vote. Renvoie les statistiques de la VDM (202).

Paramètres

Aucun paramètre.

Requête
curl "https://www.viedemerde.fr/api/v2/article/{article}/vote/{votetype}" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 202
{
  "data": {
    "article": 518664,
    "comment": 5,
    "favorite": 1,
    "reports": 0,
    "mod_positive": 0,
    "mod_negative": 0,
    "votes_up": 5,
    "votes_down": 13,
    "smiley_amusing": 4,
    "smiley_funny": 0,
    "smiley_weird": 0,
    "smiley_hilarious": 0
  },
  "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

404

{
  "data": [
    "VDM introuvable."
  ],
  "meta": {},
  "badge": [],
  "badge_display": []
}

Signaler une VDM

PATCH/article/{article}/reportClé d'API seule

Un jeton utilisateur ou X-VDM-Uniqid est obligatoire (400 sinon). Un signalement par votant et par VDM : les appels suivants ne changent rien. Renvoie les statistiques de la VDM (202), 404 si la VDM n’existe pas.

Paramètres

Aucun paramètre.

Requête
curl -X PATCH "https://www.viedemerde.fr/api/v2/article/{article}/report" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 202
{
  "data": {
    "article": 518672,
    "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
  },
  "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

404

{
  "data": "VDM introuvable.",
  "meta": {},
  "badge": [],
  "badge_display": []
}

Réagir à une VDM avec un smiley

GET/article/{article}/smile/{smiley}Jeton membre obligatoire

Fonctionne avec un jeton utilisateur ou un en-tête X-VDM-Uniqid (401 sans l’un ni l’autre). Les ids de smiley viennent de /article/smiley/list. Une réaction par votant, VDM et smiley (406 sinon). Renvoie le nouveau total pour ce smiley (202).

Paramètres

Aucun paramètre.

Requête
curl "https://www.viedemerde.fr/api/v2/article/{article}/smile/{smiley}" \
  -H "X-VDM-Api-Key: $API_KEY" \
  -H "X-VDM-Api-Token: $TOKEN"
Réponse 202
{
  "data": 5,
  "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

404

{
  "data": "VDM introuvable.",
  "meta": {},
  "badge": [],
  "badge_display": []
}

Ajouter une VDM aux favoris, ou l’en retirer

PATCH/article/{article}/bookmarkJeton membre obligatoire

Bascule : le premier appel ajoute la VDM aux favoris du membre, le suivant l’en retire. Jeton utilisateur obligatoire. Renvoie 202. Listez les favoris avec /user/{userid}/favorites.

Paramètres

Aucun paramètre.

Requête
curl -X PATCH "https://www.viedemerde.fr/api/v2/article/{article}/bookmark" \
  -H "X-VDM-Api-Key: $API_KEY" \
  -H "X-VDM-Api-Token: $TOKEN"
Réponse 202
{
  "data": 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": []
}

404

{
  "data": "VDM introuvable.",
  "meta": {},
  "badge": [],
  "badge_display": []
}

Lister les commentaires d’une VDM

GET/article/{article}/commentsClé d'API seule

Avec pagination (meta). Par défaut, les commentaires de premier niveau dans tous les statuts sauf supprimé. Renvoie une liste vide si les commentaires sont fermés sur la VDM. Avec authentification, les commentaires de vos contacts bloqués sont retirés et vos pouces sont inclus.

Paramètres

statusfacultatif
tableau d’entiers, facultatif — statuts de commentaire à inclure : 0 normal, 1 mis en avant, 2 nuké, 3 confession, 5 mots interdits, 6 nuké automatiquement ; par défaut : tous sauf 4 (supprimé)
authorfacultatif
tableau d’entiers, facultatif — uniquement les commentaires de ces ids de membre
parentfacultatif
tableau d’entiers, facultatif — uniquement les réponses à ces ids de commentaire (ex. parent[]=123)
reportedfacultatif
booléen, false par défaut — uniquement les commentaires signalés au-delà du seuil du site
repliesfacultatif
booléen, false par défaut — inclut les réponses de chaque commentaire dans sa propriété replies
flatfacultatif
booléen, false par défaut — renvoie commentaires et réponses ensemble, dans une seule liste à plat
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, facultatif — ordre de tri, sous la forme orderby[champ]=ASC|DESC ; aucun ordre particulier par défaut
Requête
curl "https://www.viedemerde.fr/api/v2/article/{article}/comments" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 200
{
  "data": [
    {
      "id": 170,
      "date": "2026-10-30T08:50:17+01:00",
      "status": 0,
      "parent": 0,
      "content": "Same thing happened to me last week, you're not alone!",
      "article": 518664,
      "author": {
        "id": 4294967294,
        "username": "JohnDoe",
        "avatar": "/images/default-avatar.jpg",
        "title": "mr"
      },
      "thumbup": 0,
      "thumbdown": 5,
      "userthumbed": 0,
      "report": 1,
      "isModerator": false,
      "replies": null
    },
    {
      "id": 171,
      "date": "2026-10-30T08:51:13+01:00",
      "status": 0,
      "parent": 0,
      "content": "Same thing happened to me last week, you're not alone!",
      "article": 518664,
      "author": {
        "id": 4294967294,
        "username": "JohnDoe",
        "avatar": "/images/default-avatar.jpg",
        "title": "mr"
      },
      "thumbup": 0,
      "thumbdown": 0,
      "userthumbed": 0,
      "report": 0,
      "isModerator": false,
      "replies": null
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 2,
    "page_count": 3,
    "total_count": 5
  },
  "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

404

{
  "data": "VDM introuvable.",
  "meta": {},
  "badge": [],
  "badge_display": []
}

Lister des VDM

GET/article/listClé d'API seule

Avec pagination (meta). Par défaut, les VDM publiées (statut 4) du site courant, les plus récentes d’abord. Les résultats peuvent être mis en cache jusqu’à une heure. Chaque VDM a une url vers sa page web ; avec un jeton utilisateur ou X-VDM-Uniqid, vos votes, smileys et favoris sont inclus. type[]=12 seul renvoie les « presque VDM » (VDM refusées). Exemple : /article/list?status[]=4&type[]=1&page[number]=1&page[bypage]=10&orderby[datePublish]=desc.

Paramètres

sitefacultatif
Ignoré : toujours le site courant
moderatefacultatif
booléen, false par défaut — renvoie les prochaines VDM que vous pouvez modérer (VDM au statut 0 pour lesquelles vous n’avez pas voté), voir /article/{article}/moderate/{mod}
spicyfacultatif
booléen, false par défaut — uniquement les VDM épicées
nospicyfacultatif
booléen, false par défaut — exclut les VDM épicées
reportedfacultatif
booléen, false par défaut — uniquement les VDM signalées au moins une fois
userfacultatif
entier, facultatif — uniquement les VDM de cet id de membre
countryfacultatif
tableau de chaînes, facultatif — uniquement les VDM de ces pays (codes ISO)
typefacultatif
tableau d’entiers, facultatif — uniquement ces types, voir /article/type/list
statusfacultatif
tableau d’entiers, [4] (validated) par défaut — uniquement ces statuts, voir /article/status/list ; les statuts 5 (privé), 7 (supprimé) et 8 (programmé) sont ignorés, sauf pour l’équipe du site
keywordfacultatif
tableau d’entiers, facultatif — uniquement les VDM liées à ces ids de mot-clé, voir /article/category/list
afterfacultatif
chaîne AAAA-MM-JJ HH:mm:ss, facultative — uniquement les VDM publiées après cette date
beforefacultatif
Actuellement ignoré par l’API (uniquement les VDM publiées avant cette date)
created_afterfacultatif
chaîne AAAA-MM-JJ HH:mm:ss, facultative — uniquement les VDM créées après cette date
created_beforefacultatif
chaîne AAAA-MM-JJ HH:mm:ss, facultative — uniquement les VDM créées avant cette date
exprfacultatif
chaîne, facultative — texte à chercher dans le titre et le contenu ; un nombre correspond à l’id de la VDM
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[datePublish]=DESC par défaut — ordre de tri, sous la forme orderby[champ]=ASC|DESC ; seuls les noms de colonnes sont acceptés
Requête
curl "https://www.viedemerde.fr/api/v2/article/list" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 200
{
  "data": [
    {
      "id": 518664,
      "status": 4,
      "type": 1,
      "spicy": false,
      "optin": false,
      "socialTruncate": false,
      "title": "Amusez-vous bien…",
      "content": "",
      "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": 0,
        "favorite": 1,
        "reports": 0,
        "mod_positive": 0,
        "mod_negative": 0,
        "votes_up": 1,
        "votes_down": 13,
        "smiley_amusing": 1,
        "smiley_funny": 0,
        "smiley_weird": 0,
        "smiley_hilarious": 0
      },
      "usermetrics": {
        "favorite": false,
        "smiley": 1,
        "votes": [
          0
        ]
      },
      "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": "https://www.viedemerde.lan/article/amusez-vous-bien_518664.html?modeapp=1",
      "suggested": null,
      "paragraphs": []
    },
    {
      "id": 22724,
      "status": 12,
      "type": 1,
      "spicy": false,
      "optin": false,
      "socialTruncate": false,
      "title": "Merci la RATP",
      "content": "",
      "content_hidden": "Aujourd'hui, dans le métro, un homme joue de l'accordéon à côté de moi. Dans un élan de bonté, je lui tends un ticket restaurant pour qu'il puisse s'acheter à manger. Il s'est arrêté de jouer, m'a regardé et m'a dit : \"Ah non mais je ne fais pas la manche, je suis juste là pou…",
      "created": "2014-10-08T12:48:27+02:00",
      "updated": "2026-10-10T19:39:27+02:00",
      "published": "2026-10-08T18:30:00+02:00",
      "user": 1,
      "author": "N……",
      "gender": null,
      "layout": 0,
      "flag": 0,
      "origin": "api",
      "apikey": "49b3d5acbfcbc",
      "vote": 1,
      "site": 1,
      "siteorig": null,
      "slug": "merci-la-ratp",
      "bitly": null,
      "metrics": {
        "article": 22724,
        "comment": 0,
        "favorite": 0,
        "reports": 0,
        "mod_positive": 0,
        "mod_negative": 0,
        "votes_up": 0,
        "votes_down": 3,
        "smiley_amusing": 0,
        "smiley_funny": 0,
        "smiley_weird": 0,
        "smiley_hilarious": 0
      },
      "usermetrics": {
        "favorite": false,
        "smiley": null,
        "votes": null
      },
      "keywords": [],
      "images": [
        {
          "url": "https://localhost:8100/img/e1e894b355d8789ecf2046c2b654c3fb.png/medium/",
          "usage": 8,
          "name": "e1e894b355d8789ecf2046c2b654c3fb.png",
          "copyright": null,
          "legend": null,
          "width": 1200,
          "height": 628
        },
        {
          "url": "https://localhost:8100/img/45e39b27e81c9d1ed6fc60b4d830889e.png/medium/",
          "usage": 9,
          "name": "45e39b27e81c9d1ed6fc60b4d830889e.png",
          "copyright": null,
          "legend": null,
          "width": 1200,
          "height": 628
        }
      ],
      "videos": [],
      "openview": 0,
      "url": "https://www.viedemerde.lan/article/merci-la-ratp_22724.html?modeapp=1",
      "suggested": null,
      "paragraphs": []
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 2,
    "page_count": 7,
    "total_count": 13
  },
  "badge": [],
  "badge_display": []
}

Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.

Chercher des VDM pour une autocomplétion

GET/article/list/short/{expr}Jeton membre obligatoire

Jeton utilisateur obligatoire. Renvoie jusqu’à 10 VDM publiées correspondant à {expr} (dans le titre ou le contenu, ou l’id exact s’il s’agit d’un nombre), sous forme de paires id/title ; sans titre, le début du contenu est utilisé.

Paramètres

Aucun paramètre.

Requête
curl "https://www.viedemerde.fr/api/v2/article/list/short/{expr}" \
  -H "X-VDM-Api-Key: $API_KEY" \
  -H "X-VDM-Api-Token: $TOKEN"
Réponse 200
{
  "data": [
    {
      "id": 9,
      "title": "Aujourd'hui, comme tous l..."
    },
    {
      "id": 5,
      "title": "Il manque le stylo !"
    }
  ],
  "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": null,
  "meta": {
    "status": "ERROR",
    "msg": "Vous devez être authentifié pour accéder à cette fonction."
  },
  "badge": [],
  "badge_display": []
}

Lister les meilleures VDM

GET/article/top/{period}Clé d'API seule

VDM publiées triées par nombre de votes (positifs et négatifs), avec pagination (meta). Utilisez /article/top pour le classement de tous les temps ou /article/top/{period}. Avec un jeton utilisateur ou X-VDM-Uniqid, vos votes, smileys et favoris sont inclus.

Paramètres

periodfacultatifdans l'URLformat (\w+)?
chaîne, dans le chemin, top par défaut — top (de tous les temps), top_day, top_week, top_month ou top_year (VDM publiées le dernier jour, la dernière semaine, le dernier mois ou la dernière année) ; toute autre valeur équivaut à « de tous les temps »
pagefacultatif
tableau — pagination : page[number] (numéro de page, 1 par défaut) et page[bypage] (éléments par page, 30 par défaut)
Requête
curl "https://www.viedemerde.fr/api/v2/article/top/{period}" \
  -H "X-VDM-Api-Key: $API_KEY"
Réponse 200
{
  "data": [
    {
      "id": 8,
      "status": 4,
      "type": 1,
      "spicy": false,
      "optin": false,
      "socialTruncate": false,
      "title": "",
      "content": "Aujourd'hui, le grand patron du supermarché dans lequel je travaille est venu nous rendre visite. Il a estimé que les rayons étaient trop bien rangés et que par conséquent il y a avait trop de personnel. Nous sommes deux dans l'équipe, et c'est moi qui ai tout rangé hier après…",
      "content_hidden": "Aujourd'hui, le grand patron du supermarché dans lequel je travaille est venu nous rendre visite. Il a estimé que les rayons étaient trop bien rangés et que par conséquent il y a avait trop de personnel. Nous sommes deux dans l'équipe, et c'est moi qui ai tout rangé hier après…",
      "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-le-grand-patron-du-supermarche-dans-lequel-je-travaille-est-venu-nous-rendre-visite-i",
      "bitly": null,
      "metrics": {
        "article": 8,
        "comment": 14,
        "favorite": 0,
        "reports": 0,
        "mod_positive": 0,
        "mod_negative": 0,
        "votes_up": 34,
        "votes_down": 35,
        "smiley_amusing": 0,
        "smiley_funny": 0,
        "smiley_weird": 0,
        "smiley_hilarious": 0
      },
      "usermetrics": {
        "favorite": false,
        "smiley": null,
        "votes": null
      },
      "keywords": [],
      "images": [
        {
          "url": "https://localhost:8100/img/bd23c56532ea00209cdf5add9bb60da1.png/medium/",
          "usage": 8,
          "name": "bd23c56532ea00209cdf5add9bb60da1.png",
          "copyright": null,
          "legend": null,
          "width": 1200,
          "height": 628
        },
        {
          "url": "https://localhost:8100/img/1dd5c32cbc75ef1d81be29e324535d55.png/medium/",
          "usage": 8,
          "name": "1dd5c32cbc75ef1d81be29e324535d55.png",
          "copyright": null,
          "legend": null,
          "width": 1200,
          "height": 628
        }
      ],
      "videos": [],
      "openview": 0,
      "url": null,
      "suggested": null
    },
    {
      "id": 5,
      "status": 4,
      "type": 2,
      "spicy": false,
      "optin": false,
      "socialTruncate": false,
      "title": "Il manque le stylo !",
      "content": "Aujourd'hui, bac de littérature. Je ne me rends compte qu'une fois dans la salle d'examen que j'ai seulement pris de quoi manger, pas de quoi écrire. VDM",
      "content_hidden": "Aujourd'hui, bac de littérature. Je ne me rends compte qu'une fois dans la salle d'examen que j'ai seulement pris de quoi manger, pas de quoi écrire. VDM",
      "created": "2026-09-29T20:29:39+02:00",
      "updated": "2026-10-12T16:28:48+02:00",
      "published": "2026-10-04T07:43:16+02:00",
      "user": 2321654987,
      "author": null,
      "gender": null,
      "layout": 0,
      "flag": 0,
      "origin": null,
      "apikey": null,
      "vote": 1,
      "site": 1,
      "siteorig": null,
      "slug": "il-manque-le-stylo",
      "bitly": null,
      "metrics": {
        "article": 5,
        "comment": 5,
        "favorite": 0,
        "reports": 0,
        "mod_positive": 0,
        "mod_negative": 0,
        "votes_up": 0,
        "votes_down": 58,
        "smiley_amusing": 0,
        "smiley_funny": 0,
        "smiley_weird": 0,
        "smiley_hilarious": 0
      },
      "usermetrics": {
        "favorite": false,
        "smiley": null,
        "votes": null
      },
      "keywords": [],
      "images": [
        {
          "url": "https://localhost:8100/img/d17c18a3cd79b3da1118b522d3f8a4b4.png/medium/",
          "usage": 8,
          "name": "d17c18a3cd79b3da1118b522d3f8a4b4.png",
          "copyright": null,
          "legend": null,
          "width": 1200,
          "height": 628
        },
        {
          "url": "https://localhost:8100/img/4efca042feb3f51ff16e73b8883d338e.png/medium/",
          "usage": 9,
          "name": "4efca042feb3f51ff16e73b8883d338e.png",
          "copyright": null,
          "legend": null,
          "width": 1200,
          "height": 628
        }
      ],
      "videos": [],
      "openview": 0,
      "url": null,
      "suggested": null
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 30,
    "page_count": 1,
    "total_count": 12
  },
  "badge": [],
  "badge_display": []
}

Réponse réelle de l'API, sur des données de test. Les listes sont coupées à 2 éléments.