Back to Gitlabhq

API Merge requests

doc-locale/fr-fr/api/merge_requests.md

19.3.0237.0 KB
Original Source

{{< details >}}

  • Édition : Gratuite, GitLab Premium, GitLab Ultimate
  • Offre : GitLab.com, GitLab Self-Managed, GitLab Dedicated

{{< /details >}}

<!-- Do not remove these outdated lines until the changes are actually implemented in the API -->

{{< history >}}

  • reference obsolète dans GitLab 12.7.
  • merged_by obsolète dans GitLab 14.7.
  • merge_status obsolète en faveur de detailed_merge_status dans GitLab 15.6.
  • with_merge_status_recheck modifié dans GitLab 15.11 avec un indicateur nommé restrict_merge_status_recheck pour être ignoré pour les requêtes des utilisateurs ayant des permissions insuffisantes. Désactivé par défaut.
  • approvals_before_merge obsolète dans GitLab 16.0.
  • prepared_at introduit dans GitLab 16.1.
  • merge_user_id introduit dans GitLab 17.0.
  • merge_user_username introduit dans GitLab 17.0.
  • La valeur merged_at de order_by introduite dans GitLab 17.2.
  • merge_after introduit dans GitLab 17.5.
  • security_policy_violations disponible en général dans GitLab 18.4. L'indicateur de fonctionnalité policy_mergability_check a été supprimé.
  • Le paramètre de filtre draft introduit dans GitLab 19.0.
  • Le paramètre de filtre wip obsolète dans GitLab 19.0.

{{< /history >}}

Utilisez cette API pour gérer les merge requests. Vous pouvez :

  • Automatisez toute partie du processus de revue de code.
  • Connectez les modifications de code à des outils externes.
  • Envoyez les informations des merge requests à des systèmes non GitLab dans le format de votre choix.
  • Mettez à jour, approuvez, fusionnez ou bloquez des merge requests en fonction de données provenant de systèmes externes.

Tous les appels API vers des informations non publiques nécessitent une authentification.

Suppressions dans l'API v5 {#removals-in-api-v5}

L'attribut approvals_before_merge est obsolète et est prévu pour suppression dans l'API v5 en faveur de l'API d'approbation des merge requests.

Lister les merge requests {#list-merge-requests}

Listez toutes les merge requests accessibles à l'utilisateur authentifié. Par défaut, ne retourne que les merge requests créées par l'utilisateur actuel. Utilisez scope=all pour récupérer toutes les merge requests.

Utilisez le paramètre state pour obtenir uniquement les merge requests avec un état donné (opened, closed, locked, ou merged) ou tous les états (all). La recherche par locked ne renvoie généralement aucun résultat, car cet état est de courte durée et transitoire. Utilisez les paramètres de pagination page et per_page pour restreindre la liste des merge requests.

plaintext
GET /merge_requests
GET /merge_requests?state=opened
GET /merge_requests?state=all
GET /merge_requests?milestone=release
GET /merge_requests?labels=bug,reproduced
GET /merge_requests?author_id=5
GET /merge_requests?author_username=gitlab-bot
GET /merge_requests?my_reaction_emoji=star
GET /merge_requests?scope=assigned_to_me
GET /merge_requests?scope=reviews_for_me
GET /merge_requests?search=foo&in=title

Attributs pris en charge :

AttributTypeObligatoireDescription
approved_by_ids[]tableau d'entiersNonRetourne les merge requests approuvées par tous les utilisateurs avec l'id donné, jusqu'à 5 utilisateurs. None retourne les merge requests sans approbation. Any retourne les merge requests avec une approbation.
approved_by_usernames[]tableau de chaînesNonRetourne les merge requests approuvées par tous les utilisateurs avec l'username donné, jusqu'à 5 utilisateurs. None retourne les merge requests sans approbation. Any retourne les merge requests avec une approbation.
approver_ids[]tableau d'entiersNonRetourne les merge requests dont tous les utilisateurs avec l'id spécifié sont des approbateurs éligibles selon les règles d'approbation. None retourne les merge requests sans approbateur éligible. Any retourne les merge requests avec au moins un approbateur éligible. Premium et Ultimate uniquement.
assignee_identier ou chaîneNonRetourne les merge requests assignées à l'utilisateur avec l'id donné. None retourne les merge requests non assignées. Any retourne les merge requests avec un assigné. Mutuellement exclusif avec assignee_username.
assignee_username[]tableau de chaînesNonRetourne les merge requests assignées aux noms d'utilisateur donnés. Mutuellement exclusif avec assignee_id.
author_identierNonRetourne les merge requests créées par l'utilisateur avec l'id donné. Mutuellement exclusif avec author_username. À combiner avec scope=all ou scope=assigned_to_me.
author_usernamestringNonRetourne les merge requests créées par le username donné. Mutuellement exclusif avec author_id.
created_afterdatetimeNonRetourne les merge requests créées à la date et l'heure données ou après. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
created_beforedatetimeNonRetourne les merge requests créées à la date et l'heure données ou avant. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
deployed_afterdatetimeNonRetourne les merge requests déployées après la date/l'heure donnée. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
deployed_beforedatetimeNonRetourne les merge requests déployées avant la date/l'heure donnée. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
environmentstringNonRetourne les merge requests déployées dans l'environnement donné.
instringNonModifie la portée de l'attribut search. title, description, ou une chaîne les joignant par une virgule. La valeur par défaut est title,description.
labelsstringNonRetourne les merge requests correspondant à une liste de labels séparés par des virgules. None liste toutes les merge requests sans label. Any liste toutes les merge requests avec au moins un label. Les noms prédéfinis ne sont pas sensibles à la casse.
merge_user_identierNonRetourne les merge requests fusionnées par l'utilisateur avec l'id donné. Mutuellement exclusif avec merge_user_username. Introduit dans GitLab 17.0.
merge_user_usernamestringNonRetourne les merge requests fusionnées par l'utilisateur avec le username donné. Mutuellement exclusif avec merge_user_id. Introduit dans GitLab 17.0.
milestonestringNonRetourne les merge requests pour un jalon spécifique. None retourne les merge requests sans jalon. Any retourne les merge requests avec un jalon assigné.
my_reaction_emojistringNonRetourne les merge requests auxquelles l'utilisateur authentifié a réagi avec l'emoji donné. None retourne les tickets sans réaction. Any retourne les tickets avec au moins une réaction.
non_archivedbooleanNonSi true, retourne uniquement les merge requests des projets non archivés. La valeur par défaut est false.
nothashNonRetourne les merge requests ne correspondant pas aux paramètres fournis. Accepte : labels, milestone, author_id, author_username, assignee_id, assignee_username, reviewer_id, reviewer_username, my_reaction_emoji.
order_bystringNonRetourne les merge requests triées par les champs created_at, updated_at, merged_at (introduit dans GitLab 17.2), label_priority, priority, milestone_due, popularity, ou title. La valeur par défaut est created_at.
reviewer_identier ou chaîneNonRetourne les merge requests dont l'utilisateur est relecteur avec l'id donné. None retourne les merge requests sans relecteur. Any retourne les merge requests avec un relecteur quelconque. Mutuellement exclusif avec reviewer_username.
reviewer_usernamestringNonRetourne les merge requests dont l'utilisateur est relecteur avec le username donné. None retourne les merge requests sans relecteur. Any retourne les merge requests avec un relecteur quelconque. Mutuellement exclusif avec reviewer_id.
scopestringNonRetourne les merge requests pour la portée donnée : created_by_me, assigned_to_me, reviews_for_me, ou all. reviews_for_me retourne les merge requests où l'utilisateur actuel est assigné comme relecteur. La valeur par défaut est created_by_me.
searchstringNonRecherche des merge requests par rapport à leur title et leur description. À combiner avec l'attribut in.
sortstringNonRetourne les merge requests triées dans l'ordre asc ou desc. La valeur par défaut est desc.
source_branchstringNonRetourne les merge requests avec la branche source donnée.
statestringNonRetourne toutes les merge requests (all) ou uniquement celles qui sont opened, closed, locked, ou merged. La valeur par défaut est all.
target_branchstringNonRetourne les merge requests avec la branche cible donnée.
updated_afterdatetimeNonRetourne les merge requests mises à jour à la date et l'heure données ou après. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
updated_beforedatetimeNonRetourne les merge requests mises à jour à la date et l'heure données ou avant. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
viewstringNonSi simple, retourne l'iid, l'URL, le titre, la description et l'état de base de la merge request.
draftbooleanNonFiltre les merge requests par leur statut draft. true retourne uniquement les merge requests en brouillon, false retourne les merge requests qui ne sont pas en brouillon. Mutuellement exclusif avec wip.
wipstringNonObsolète dans GitLab 19.0. Utilisez draft à la place. Filtre les merge requests par leur statut wip. yes retourne uniquement les merge requests en brouillon, no retourne les merge requests qui ne sont pas en brouillon.
with_labels_detailsbooleanNonSi true, la réponse renvoie plus de détails pour chaque label dans le champ labels : :name, :color, :description, :description_html, :text_color. La valeur par défaut est false.
with_merge_status_recheckbooleanNonSi true, cette projection demande (sans garantie) un recalcul asynchrone du champ merge_status. Activez le feature flag restrict_merge_status_recheck pour ignorer cet attribut lorsqu'il est demandé par des utilisateurs sans le rôle Développeur, Mainteneur ou Propriétaire.

En cas de succès, retourne 200 OK. Si view est défini sur simple, retourne un sous-ensemble de champs. Sinon, les attributs de la réponse incluent :

AttributTypeDescription
allow_collaborationbooleanSi true, cette duplication autorise la collaboration des membres pouvant fusionner vers la branche cible. Utilisé uniquement pour les merge requests issues de duplications.
allow_maintainer_to_pushbooleanObsolète. Utilisez allow_collaboration à la place.
approvals_before_mergeentierObsolète dans GitLab 16.0. Pour configurer les règles d'approbation, consultez plutôt l'API d'approbation des merge requests. GitLab Premium et Ultimate uniquement.
assignee[]objetObsolète. Utilisez assignees à la place.
assignees[]tableauUtilisateurs assignés à la merge request.
assignees.avatar_urlstringURL complète de l'image d'avatar de l'assigné.
assignees.identierL'identifiant unique de l'assigné.
assignees.lockedbooleanSi true, le compte de l'assigné est verrouillé en raison de tentatives d'authentification échouées, et il ne peut pas se connecter tant que le verrouillage n'expire pas ou qu'un administrateur ne déverrouille pas le compte.
assignees.namestringNom d'affichage de l'assigné. Peut être masqué, en fonction des permissions de l'utilisateur actuel.
assignees.public_emailstringL'adresse e-mail publique de l'assigné.
assignees.statestringÉtat actuel du compte utilisateur de l'assigné. Valeurs possibles : active, blocked, ou deactivated.
assignees.usernamestringNom d'utilisateur de l'assigné de la merge request.
assignees.web_urlstringURL complète vers la page de profil de l'assigné.
author[]objetObjet contenant des informations sur l'utilisateur qui a créé la merge request.
author.avatar_urlstringURL complète de l'image d'avatar de l'auteur.
author.identierL'identifiant unique de l'utilisateur qui a créé la merge request.
author.lockedbooleanSi true, le compte de l'auteur est verrouillé en raison de tentatives d'authentification échouées, et il ne peut pas se connecter tant que le verrouillage n'expire pas ou qu'un administrateur ne déverrouille pas le compte.
author.namestringNom d'affichage de l'auteur. Peut être masqué, en fonction des permissions de l'utilisateur actuel.
author.public_emailstringL'adresse e-mail publique de l'auteur.
author.statestringÉtat actuel du compte utilisateur. Valeurs possibles : active, blocked, ou deactivated.
author.usernamestringNom d'utilisateur de l'auteur de la merge request.
author.web_urlstringURL complète vers la page de profil de l'auteur.
blocking_discussions_resolvedbooleanSi true, tous les fils de discussion de la merge request doivent être résolus avant la fusion.
closed_atdateTimeHorodatage de la fermeture de la merge request.
closed_by[]objetObjet contenant des informations sur l'utilisateur qui a fermé la merge request. Si null, la merge request est ouverte.
closed_by.avatar_urlstringURL complète de l'image d'avatar de l'utilisateur qui a fermé la merge request.
closed_by.identierL'identifiant unique de l'utilisateur qui a fermé la merge request.
closed_by.lockedbooleanSi true, le compte de l'utilisateur qui a fermé la merge request est verrouillé en raison de tentatives d'authentification échouées, et il ne peut pas se connecter tant que le verrouillage n'expire pas ou qu'un administrateur ne déverrouille pas le compte.
closed_by.namestringNom d'affichage de l'utilisateur qui a fermé la merge request. Peut être masqué, en fonction des permissions de l'utilisateur actuel.
closed_by.public_emailstringL'adresse e-mail publique de l'utilisateur qui a fermé la merge request.
closed_by.statestringÉtat actuel du compte de l'utilisateur qui a fermé la merge request. Valeurs possibles : active, blocked, ou deactivated.
closed_by.usernamestringNom d'utilisateur de l'utilisateur qui a fermé la merge request.
closed_by.web_urlstringURL complète vers la page de profil de l'utilisateur qui a fermé la merge request.
created_atdateTimeHorodatage de la création de la merge request.
descriptionstringDescription de la merge request. Contient le Markdown rendu en HTML pour la mise en cache.
description_htmlstringSi render_html est défini, la version HTML rendue de la description.
detailed_merge_statusstringInformations détaillées sur le statut de fusion. Voir statut de fusion pour une liste des valeurs potentielles.
discussion_lockedbooleanSi true, les discussions sont verrouillées. Seuls les membres du projet peuvent ajouter, modifier ou résoudre des commentaires dans les discussions verrouillées.
downvotesentierNombre de votes négatifs pour la merge request.
draftbooleanSi true, la merge request est marquée dans un état draft.
force_remove_source_branchbooleanSi true, les paramètres du projet imposent la suppression de la branche source après la fusion.
has_conflictsbooleanSi true, la merge request présente des conflits et ne peut pas être fusionnée. Dépend de la propriété merge_status. Retourne false sauf si merge_status est cannot_be_merged.
identierL'identifiant unique de la merge request.
iidentierL'identifiant interne de la merge request dans le projet.
importedbooleanSi true, la merge request a été importée.
imported_fromstringSource de l'import, comme Bitbucket.
labels[]tableauTableau des labels assignés à la merge request. Si with_labels_details est true, retourne un tableau pour chaque label.
labels.archivedbooleanSi with_labels_details est true, le label est archivé.
labels.colorstringSi with_labels_details est true, la couleur d'arrière-plan du label.
labels.descriptionstringSi with_labels_details est true, le texte de description du label. Si null, le label n'a pas de description.
labels.description_html.stringSi with_labels_details est true, la description rendue en HTML du label. Si null, le label n'a pas de description.
labels.identierSi with_labels_details est true, l'identifiant unique du label.
labels.namestringSi with_labels_details est true, le nom du label.
labels.text_colorstringSi with_labels_details est true, la couleur du texte du label.
merge_afterdateTimeSi défini, horodatage à partir duquel la merge request peut être fusionnée. Introduit dans GitLab 17.8.
merge_commit_shastringSi défini, le SHA du commit de fusion de la merge request. Retourne null jusqu'à la fusion.
merge_statusstringStatut de la merge request. Utilisez plutôt detailed_merge_status, qui tient compte de tous les statuts potentiels. Affecte la propriété has_conflicts. Pour les notes importantes sur les données de réponse, voir notes sur la réponse d'une merge request unique. Obsolète dans GitLab 15.6.
merge_userobjetObjet contenant des informations sur l'utilisateur qui a fusionné la merge request, l'a définie en fusion automatique, ou null.
merge_when_pipeline_succeedsbooleanSi true, la merge request est définie en fusion automatique.
merged_atdateTimeHorodatage de la fusion de la merge request.
merged_by[]objetObsolète. Utilisez merge_user à la place.
milestone[]objetObjet contenant des informations sur le jalon assigné à la merge request.
milestone.created_atdateTimeHorodatage de la création du jalon.
milestone.descriptionstringTexte de description du jalon. Si null, le jalon n'a pas de description.
milestone.due_datedateDate d'échéance du jalon. Si null, le jalon n'a pas de date d'échéance.
milestone.expiredbooleanSi true, le jalon a expiré.
milestone.group_identierIdentifiant du groupe auquel appartient le jalon. Inclus uniquement si le jalon est un jalon de groupe.
milestone.identierIdentifiant unique du jalon.
milestone.iidentierIdentifiant interne du jalon dans le projet ou le groupe.
milestone.project_identierIdentifiant du projet auquel appartient le jalon. Inclus uniquement si le jalon est un jalon de projet.
milestone.start_datedateDate de début du jalon. Si null, le jalon n'a pas de date de début
milestone.statestringÉtat actuel du jalon, comme active ou closed.
milestone.titlestringNom du jalon.
milestone.updated_atdateTimeHorodatage de la dernière mise à jour du jalon.
milestone.web_urlstringURL web complète pour afficher le jalon.
prepared_atdateTimeHorodatage de la préparation de la merge request. Ce champ est renseigné une seule fois, uniquement après la complétion de toutes les étapes de préparation, et n'est pas mis à jour si d'autres modifications sont ajoutées.
project_identierL'identifiant du projet contenant la merge request.
referencestringObsolète. Utilisez references à la place.
references[]objetObjet avec toutes les références internes de la merge request.
references.fullstringRéférence complète d'une merge request, incluant le chemin complet du projet, comme gitlab-org/gitlab!123. Lorsqu'elle est demandée entre groupes ou projets, identique à references.relative.
references.relativestringRéférence relative à un projet ou groupe spécifique : !123 pour une merge request dans le projet actuel, ou other-project!123 pour un autre projet dans le même groupe.
references.shortstringRéférence la plus courte possible vers une merge request, comme !123. Lorsqu'elle est récupérée depuis le projet de la merge request, identique à references.relative.
reviewers[]tableauRelecteurs de la merge request.
reviewers.avatar_urlstringURL complète de l'image d'avatar du relecteur.
reviewers.identierL'identifiant unique du relecteur.
reviewers.lockedbooleanSi true, le compte du relecteur est verrouillé en raison de tentatives d'authentification échouées, et il ne peut pas se connecter tant que le verrouillage n'expire pas ou qu'un administrateur ne déverrouille pas le compte.
reviewers.namestringNom d'affichage du relecteur. Peut être masqué, en fonction des permissions de l'utilisateur actuel.
reviewers.public_emailstringL'adresse e-mail publique du relecteur.
reviewers.statestringÉtat actuel du compte utilisateur du relecteur. Valeurs possibles : active, blocked, ou deactivated.
reviewers.usernamestringNom d'utilisateur du relecteur de la merge request.
reviewers.web_urlstringURL complète vers la page de profil du relecteur.
shastringSHA du commit head dans la branche source.
should_remove_source_branchbooleanSi true, la branche source est supprimée après la fusion.
source_branchstringNom de la branche source.
source_project_identierIdentifiant du projet source.
squashbooleanSi true, les commits sont squashés lors de la fusion.
squash_commit_shastringSi défini, le SHA du commit squash. Vide jusqu'à la fusion.
squash_on_mergebooleanSi true, les commits sont squashés lors de la fusion.
statestringL'état actuel de la merge request. Valeurs possibles : opened, closed, merged, ou locked.
target_branchstringNom de la branche cible.
target_project_identierIdentifiant du projet cible.
task_completion_status[]objetObjet contenant des informations sur l'état d'avancement de la liste de tâches.
task_completion_status.completed_countentierNombre d'éléments de liste de tâches complétés dans la description de la merge request. Retourne 0 si la merge request n'a pas de description ou pas d'éléments de liste de tâches.
task_completion_status.countentierNombre total d'éléments de liste de tâches trouvés dans la description de la merge request. Retourne 0 si la merge request n'a pas de description ou pas d'éléments de liste de tâches.
time_stats[]objetObjet contenant des informations sur le suivi du temps pour cette merge request.
time_stats.human_time_estimatestringFormat lisible par l'humain de time_stats.time_estimate, comme 3h 30m.
time_stats.human_total_time_spentstringFormat lisible par l'humain de time_stats.total_time_spent, comme 3h 30m.
time_stats.time_estimateentierTemps estimé pour compléter la merge request, en secondes.
time_stats.total_time_spententierTemps total passé à travailler sur la merge request, en secondes.
titlestringLe titre de la merge request.
title_htmlstringSi render_html est true, la version HTML rendue du titre.
updated_atdateTimeHorodatage de la dernière mise à jour de la merge request.
upvotesentierNombre de votes positifs pour la merge request.
user_notes_countentierNombre de commentaires utilisateur.
web_urlstringURL web pour afficher la merge request.
work_in_progressbooleanObsolète. Utilisez draft à la place.

Autres réponses possibles :

  • 401 Unauthorized si le jeton d'accès est invalide.
  • 408 Request Timeout si la requête de base de données expire.
  • 422 Unprocessable Entity si la validation a échoué.
  • 429 Too Many Requests si le paramètre search est utilisé et que la requête a été soumise à une limite de débit.

Exemple de réponse :

json
[
  {
    "id": 1,
    "iid": 1,
    "project_id": 3,
    "title": "test1",
    "description": "fixed login page css paddings",
    "state": "merged",
    "imported": false,
    "imported_from": "none",
    "merged_by": { // Deprecated and will be removed in API v5, use `merge_user` instead
      "id": 87854,
      "name": "Douwe Maan",
      "username": "DouweM",
      "state": "active",
      "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
      "web_url": "https://gitlab.com/DouweM"
    },
    "merge_user": {
      "id": 87854,
      "name": "Douwe Maan",
      "username": "DouweM",
      "state": "active",
      "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
      "web_url": "https://gitlab.com/DouweM"
    },
    "merged_at": "2018-09-07T11:16:17.520Z",
    "merge_after": "2018-09-07T11:16:00.000Z",
    "prepared_at": "2018-09-04T11:16:17.520Z",
    "closed_by": null,
    "closed_at": null,
    "created_at": "2017-04-29T08:46:00Z",
    "updated_at": "2017-04-29T08:46:00Z",
    "target_branch": "main",
    "source_branch": "test1",
    "upvotes": 0,
    "downvotes": 0,
    "author": {
      "id": 1,
      "name": "Administrator",
      "username": "admin",
      "state": "active",
      "avatar_url": null,
      "web_url" : "https://gitlab.example.com/admin"
    },
    "assignee": {
      "id": 1,
      "name": "Administrator",
      "username": "admin",
      "state": "active",
      "avatar_url": null,
      "web_url" : "https://gitlab.example.com/admin"
    },
    "assignees": [{
      "name": "Miss Monserrate Beier",
      "username": "axel.block",
      "id": 12,
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
      "web_url": "https://gitlab.example.com/axel.block"
    }],
    "reviewers": [{
      "id": 2,
      "name": "Sam Bauch",
      "username": "kenyatta_oconnell",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/956c92487c6f6f7616b536927e22c9a0?s=80&d=identicon",
      "web_url": "http://gitlab.example.com//kenyatta_oconnell"
    }],
    "source_project_id": 2,
    "target_project_id": 3,
    "labels": [
      "Community contribution",
      "Manage"
    ],
    "draft": false,
    "work_in_progress": false,
    "milestone": {
      "id": 5,
      "iid": 1,
      "project_id": 3,
      "title": "v2.0",
      "description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
      "state": "closed",
      "created_at": "2015-02-02T19:49:26.013Z",
      "updated_at": "2015-02-02T19:49:26.013Z",
      "due_date": "2018-09-22",
      "start_date": "2018-08-08",
      "web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
    },
    "merge_when_pipeline_succeeds": true,
    "merge_status": "can_be_merged",
    "detailed_merge_status": "not_open",
    "sha": "8888888888888888888888888888888888888888",
    "merge_commit_sha": null,
    "squash_commit_sha": null,
    "user_notes_count": 1,
    "discussion_locked": null,
    "should_remove_source_branch": true,
    "force_remove_source_branch": false,
    "allow_collaboration": false,
    "allow_maintainer_to_push": false,
    "web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
    "references": {
      "short": "!1",
      "relative": "my-group/my-project!1",
      "full": "my-group/my-project!1"
    },
    "time_stats": {
      "time_estimate": 0,
      "total_time_spent": 0,
      "human_time_estimate": null,
      "human_total_time_spent": null
    },
    "squash": false,
    "task_completion_status":{
      "count":0,
      "completed_count":0
    }
  }
]

Notes sur la réponse de liste des merge requests {#merge-requests-list-response-notes}

  • L'affichage des merge requests peut ne pas mettre à jour de manière proactive merge_status (ce qui affecte également has_conflicts), car cette opération peut être coûteuse. Si vous avez besoin de la valeur de ces champs depuis cet endpoint, définissez le paramètre with_merge_status_recheck sur true dans la requête.
  • Pour les notes sur les champs d'objet des merge requests, voir notes sur la réponse d'une merge request unique.

Lister les merge requests d'un projet {#list-project-merge-requests}

Listez toutes les merge requests d'un projet.

plaintext
GET /projects/:id/merge_requests
GET /projects/:id/merge_requests?state=opened
GET /projects/:id/merge_requests?state=all
GET /projects/:id/merge_requests?iids[]=42&iids[]=43
GET /projects/:id/merge_requests?milestone=release
GET /projects/:id/merge_requests?labels=bug,reproduced
GET /projects/:id/merge_requests?my_reaction_emoji=star

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
iids[]tableau d'entiersNonRetourne les merge requests correspondant aux IID fournis.
approved_by_ids[]tableau d'entiersNonRetourne les merge requests approuvées par tous les utilisateurs avec l'id donné, jusqu'à 5 utilisateurs. None retourne les merge requests sans approbation. Any retourne les merge requests avec une approbation.
approved_by_usernames[]tableau de chaînesNonRetourne les merge requests approuvées par tous les utilisateurs avec l'username donné, jusqu'à 5 utilisateurs. None retourne les merge requests sans approbation. Any retourne les merge requests avec une approbation.
approver_ids[]tableau d'entiersNonRetourne les merge requests dont tous les utilisateurs avec l'id spécifié sont des approbateurs éligibles selon les règles d'approbation. None retourne les merge requests sans approbateur éligible. Any retourne les merge requests avec au moins un approbateur éligible. Premium et Ultimate uniquement.
assignee_identier ou chaîneNonRetourne les merge requests assignées à l'utilisateur avec l'id donné. None retourne les merge requests non assignées. Any retourne les merge requests avec un assigné. Mutuellement exclusif avec assignee_username.
assignee_username[]tableau de chaînesNonRetourne les merge requests assignées aux noms d'utilisateur donnés. Mutuellement exclusif avec assignee_id.
author_identierNonRetourne les merge requests créées par l'utilisateur avec l'id donné. Mutuellement exclusif avec author_username.
author_usernamestringNonRetourne les merge requests créées par le username donné. Mutuellement exclusif avec author_id.
created_afterdatetimeNonRetourne les merge requests créées à la date et l'heure données ou après. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
created_beforedatetimeNonRetourne les merge requests créées à la date et l'heure données ou avant. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
deployed_afterdatetimeNonRetourne les merge requests déployées après la date et l'heure données. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
deployed_beforedatetimeNonRetourne les merge requests déployées avant la date et l'heure données. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
environmentstringNonRetourne les merge requests déployées dans l'environnement donné.
instringNonModifie la portée de l'attribut search. title, description, ou une chaîne les joignant par une virgule. La valeur par défaut est title,description.
labelsstringNonRetourne les merge requests correspondant à une liste de labels séparés par des virgules. None liste toutes les merge requests sans label. Any liste toutes les merge requests avec au moins un label. Les noms prédéfinis ne sont pas sensibles à la casse.
merge_user_identierNonRetourne les merge requests fusionnées par l'utilisateur avec l'id donné. Mutuellement exclusif avec merge_user_username. Introduit dans GitLab 17.0.
merge_user_usernamestringNonRetourne les merge requests fusionnées par l'utilisateur avec le username donné. Mutuellement exclusif avec merge_user_id. Introduit dans GitLab 17.0.
milestonestringNonRetourne les merge requests pour un jalon spécifique. None retourne les merge requests sans jalon. Any retourne les merge requests avec un jalon assigné.
my_reaction_emojistringNonRetourne les merge requests auxquelles l'utilisateur authentifié a réagi avec l'emoji donné. None retourne les tickets sans réaction. Any retourne les tickets avec au moins une réaction.
nothashNonRetourne les merge requests ne correspondant pas aux paramètres fournis. Accepte : labels, milestone, author_id, author_username, assignee_id, assignee_username, reviewer_id, reviewer_username, my_reaction_emoji.
order_bystringNonRetourne les merge requests triées par les champs created_at, updated_at, merged_at (introduit dans GitLab 17.2), label_priority, priority, milestone_due, popularity, ou title. La valeur par défaut est created_at.
reviewer_identier ou chaîneNonRetourne les merge requests dont l'utilisateur est relecteur avec l'id donné. None retourne les merge requests sans relecteur. Any retourne les merge requests avec un relecteur quelconque. Mutuellement exclusif avec reviewer_username.
reviewer_usernamestringNonRetourne les merge requests dont l'utilisateur est relecteur avec le username donné. None retourne les merge requests sans relecteur. Any retourne les merge requests avec un relecteur quelconque. Mutuellement exclusif avec reviewer_id.
scopestringNonRetourne les merge requests pour la portée donnée : created_by_me, assigned_to_me, reviews_for_me, ou all. reviews_for_me retourne les merge requests où l'utilisateur actuel est assigné comme relecteur. La valeur par défaut est all.
searchstringNonRecherche des merge requests par rapport à leur title et leur description. À combiner avec l'attribut in.
sortstringNonRetourne les merge requests triées dans l'ordre asc ou desc. La valeur par défaut est desc.
source_branchstringNonRetourne les merge requests avec la branche source donnée.
statestringNonRetourne toutes les merge requests (all) ou uniquement celles qui sont opened, closed, locked, ou merged. La valeur par défaut est all.
target_branchstringNonRetourne les merge requests avec la branche cible donnée.
updated_afterdatetimeNonRetourne les merge requests mises à jour à la date et l'heure données ou après. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
updated_beforedatetimeNonRetourne les merge requests mises à jour à la date et l'heure données ou avant. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
viewstringNonSi simple, retourne l'iid, l'URL, le titre, la description et l'état de base de la merge request.
draftbooleanNonFiltre les merge requests par leur statut draft. true retourne uniquement les merge requests en brouillon, false retourne les merge requests qui ne sont pas en brouillon. Mutuellement exclusif avec wip.
wipstringNonObsolète dans GitLab 19.0. Utilisez draft à la place. Filtre les merge requests par leur statut wip. yes retourne uniquement les merge requests en brouillon, no retourne les merge requests qui ne sont pas en brouillon.
with_labels_detailsbooleanNonSi true, la réponse renvoie plus de détails pour chaque label dans le champ labels : :name, :color, :description, :description_html, :text_color. La valeur par défaut est false.
with_merge_status_recheckbooleanNonSi true, cette projection demande (sans garantie) un recalcul asynchrone du champ merge_status. Activez le feature flag restrict_merge_status_recheck pour ignorer cet attribut lorsqu'il est demandé par des utilisateurs sans le rôle Développeur, Mainteneur ou Propriétaire.

En cas de succès, renvoie 200 OK et les attributs de réponse suivants :

AttributTypeDescription
[].identierIdentifiant de la merge request.
[].iidentierIdentifiant interne de la merge request.
[].approvals_before_mergeentierNombre d'approbations requises avant que cette merge request puisse être fusionnée. Pour configurer les règles d'approbation, voir l'API d'approbation des merge requests. Obsolète dans GitLab 16.0. Premium et Ultimate uniquement.
[].assigneeobjetPremier assigné de la merge request.
[].assigneestableauAssignés de la merge request.
[].authorobjetUtilisateur qui a créé cette merge request.
[].blocking_discussions_resolvedbooleanIndique si toutes les discussions sont résolues, uniquement si elles sont toutes requises avant que la merge request puisse être fusionnée.
[].closed_atdatetimeHorodatage de la fermeture de la merge request.
[].closed_byobjetUtilisateur qui a fermé cette merge request.
[].created_atdatetimeHorodatage de la création de la merge request.
[].descriptionstringDescription de la merge request.
[].detailed_merge_statusstringStatut de fusion détaillé de la merge request. Voir statut de fusion pour une liste des valeurs potentielles.
[].discussion_lockedbooleanIndique si les commentaires sur la merge request sont réservés aux membres uniquement.
[].downvotesentierNombre de votes négatifs pour la merge request.
[].draftbooleanIndique si la merge request est un brouillon.
[].force_remove_source_branchbooleanIndique si les paramètres du projet entraînent la suppression de la branche source après la fusion.
[].has_conflictsbooleanIndique si la merge request présente des conflits et ne peut pas être fusionnée. Dépend de la propriété merge_status. Retourne false sauf si merge_status est cannot_be_merged.
[].labelstableauLabels de la merge request.
[].merge_commit_shastringSHA du commit de fusion de la merge request. Retourne null jusqu'à la fusion.
[].merge_statusstringStatut de la merge request. Peut être unchecked, checking, can_be_merged, cannot_be_merged, ou cannot_be_merged_recheck. Affecte la propriété has_conflicts. Pour les notes importantes sur les données de réponse, voir Notes sur la réponse d'une merge request unique. Obsolète dans GitLab 15.6. Utilisez detailed_merge_status à la place.
[].merge_userobjetUtilisateur qui a fusionné cette merge request, l'utilisateur qui l'a définie en fusion automatique, ou null.
[].merge_when_pipeline_succeedsbooleanIndique si la merge request est définie en fusion automatique.
[].merged_atdatetimeHorodatage de la fusion de la merge request.
[].merged_byobjetUtilisateur qui a fusionné cette merge request ou l'a définie en fusion automatique. Obsolète dans GitLab 14.7, et prévu pour suppression dans la version 5 de l'API. Utilisez merge_user à la place.
[].milestoneobjetJalon de la merge request.
[].prepared_atdatetimeHorodatage de la préparation de la merge request. Ce champ est renseigné une seule fois, uniquement après la complétion de toutes les étapes de préparation, et n'est pas mis à jour si d'autres modifications sont ajoutées.
[].project_identierIdentifiant du projet où réside la merge request. Toujours égal à target_project_id.
[].referencestringRéférence interne de la merge request. Retournée au format abrégé par défaut. Obsolète dans GitLab 12.7, et prévu pour suppression dans la version 5 de l'API. Utilisez references à la place.
[].referencesobjetRéférences internes de la merge request. Inclut les références short, relative, et full. references.relative est relative au groupe ou au projet de la merge request. Lorsqu'elle est récupérée depuis le projet de la merge request, les formats relative et short sont identiques. Lorsqu'elle est demandée entre groupes ou projets, les formats relative et full sont identiques.
[].reviewerstableauRelecteurs de la merge request.
[].shastringSHA diff head de la merge request.
[].should_remove_source_branchbooleanIndique si la branche source de la merge request doit être supprimée après la fusion.
[].source_branchstringBranche source de la merge request.
[].source_project_identierIdentifiant du projet source de la merge request. Égal à target_project_id, sauf si la merge request provient d'une duplication.
[].squashbooleanSi true, tous les commits sont squashés en un seul commit lors de la fusion. Project settings peut remplacer cette valeur. Utilisez plutôt squash_on_merge pour prendre en compte les options de squash du projet.
[].squash_commit_shastringSHA du commit de squash. Vide jusqu'à la fusion.
[].squash_on_mergebooleanIndique si le merge request doit être soumis à un squash lors de la fusion.
[].statestringÉtat du merge request. Peut être opened, closed, merged, locked.
[].target_branchstringBranche cible du merge request.
[].target_project_identierID du projet cible du merge request.
[].task_completion_statusobjetStatut d'avancement des tâches. Inclut count et completed_count.
[].time_statsobjetStatistiques de suivi du temps pour le merge request. Inclut time_estimate, total_time_spent, human_time_estimate et human_total_time_spent.
[].titlestringTitre du merge request.
[].updated_atdatetimeHorodatage de la dernière mise à jour du merge request.
[].upvotesentierNombre de votes positifs pour la merge request.
[].user_notes_countentierNombre de notes utilisateur du merge request.
[].web_urlstringURL web du merge request.
[].work_in_progressbooleanDéprécié : Utilisez draft à la place. Indique si la merge request est un brouillon.

Exemple de requête :

shell
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests"

Exemple de réponse :

json
[
  {
    "id": 1,
    "iid": 1,
    "project_id": 3,
    "title": "test1",
    "description": "fixed login page css paddings",
    "state": "merged",
    "imported": false,
    "imported_from": "none",
    "merged_by": { // Deprecated and will be removed in API v5, use `merge_user` instead
      "id": 87854,
      "name": "Douwe Maan",
      "username": "DouweM",
      "state": "active",
      "locked": false,
      "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
      "web_url": "https://gitlab.com/DouweM"
    },
    "merge_user": {
      "id": 87854,
      "name": "Douwe Maan",
      "username": "DouweM",
      "state": "active",
      "locked": false,
      "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
      "web_url": "https://gitlab.com/DouweM"
    },
    "merged_at": "2018-09-07T11:16:17.520Z",
    "merge_after": "2018-09-07T11:16:00.000Z",
    "prepared_at": "2018-09-04T11:16:17.520Z",
    "closed_by": null,
    "closed_at": null,
    "created_at": "2017-04-29T08:46:00Z",
    "updated_at": "2017-04-29T08:46:00Z",
    "target_branch": "main",
    "source_branch": "test1",
    "upvotes": 0,
    "downvotes": 0,
    "author": {
      "id": 1,
      "name": "Administrator",
      "username": "admin",
      "state": "active",
      "locked": false,
      "avatar_url": null,
      "web_url" : "https://gitlab.example.com/admin"
    },
    "assignee": {
      "id": 1,
      "name": "Administrator",
      "username": "admin",
      "state": "active",
      "locked": false,
      "avatar_url": null,
      "web_url" : "https://gitlab.example.com/admin"
    },
    "assignees": [{
      "name": "Miss Monserrate Beier",
      "username": "axel.block",
      "id": 12,
      "state": "active",
      "locked": false,
      "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
      "web_url": "https://gitlab.example.com/axel.block"
    }],
    "reviewers": [{
      "id": 2,
      "name": "Sam Bauch",
      "username": "kenyatta_oconnell",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/956c92487c6f6f7616b536927e22c9a0?s=80&d=identicon",
      "web_url": "http://gitlab.example.com//kenyatta_oconnell"
    }],
    "source_project_id": 2,
    "target_project_id": 3,
    "labels": [
      "Community contribution",
      "Manage"
    ],
    "draft": false,
    "work_in_progress": false,
    "milestone": {
      "id": 5,
      "iid": 1,
      "project_id": 3,
      "title": "v2.0",
      "description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
      "state": "closed",
      "created_at": "2015-02-02T19:49:26.013Z",
      "updated_at": "2015-02-02T19:49:26.013Z",
      "due_date": "2018-09-22",
      "start_date": "2018-08-08",
      "web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
    },
    "merge_when_pipeline_succeeds": true,
    "merge_status": "can_be_merged",
    "detailed_merge_status": "not_open",
    "sha": "8888888888888888888888888888888888888888",
    "merge_commit_sha": null,
    "squash_commit_sha": null,
    "user_notes_count": 1,
    "discussion_locked": null,
    "should_remove_source_branch": true,
    "force_remove_source_branch": false,
    "web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
    "reference": "!1",
    "references": {
      "short": "!1",
      "relative": "!1",
      "full": "my-group/my-project!1"
    },
    "time_stats": {
      "time_estimate": 0,
      "total_time_spent": 0,
      "human_time_estimate": null,
      "human_total_time_spent": null
    },
    "squash": false,
    "squash_on_merge": false,
    "task_completion_status":{
      "count":0,
      "completed_count":0
    },
    "has_conflicts": false,
    "blocking_discussions_resolved": true,
    "approvals_before_merge": 2
  }
]

Pour les notes importantes sur les données de réponse, consultez les notes sur la liste de réponses des merge requests.

Lister les merge requests d'un groupe {#list-group-merge-requests}

Lister tous les merge requests d'un groupe et de ses sous-groupes.

plaintext
GET /groups/:id/merge_requests
GET /groups/:id/merge_requests?state=opened
GET /groups/:id/merge_requests?state=all
GET /groups/:id/merge_requests?milestone=release
GET /groups/:id/merge_requests?labels=bug,reproduced
GET /groups/:id/merge_requests?my_reaction_emoji=star

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'identifiant ou le chemin encodé en URL du groupe.
approved_by_ids[]tableau d'entiersNonRetourne les merge requests approuvées par tous les utilisateurs avec l'id donné, jusqu'à 5 utilisateurs. None retourne les merge requests sans approbation. Any retourne les merge requests avec une approbation.
approved_by_usernames[]tableau de chaînesNonRetourne les merge requests approuvées par tous les utilisateurs avec l'username donné, jusqu'à 5 utilisateurs. None retourne les merge requests sans approbation. Any retourne les merge requests avec une approbation.
approver_ids[]tableau d'entiersNonRetourne les merge requests dont tous les utilisateurs avec l'id spécifié sont des approbateurs éligibles selon les règles d'approbation. None retourne les merge requests sans approbateur éligible. Any retourne les merge requests avec au moins un approbateur éligible. Premium et Ultimate uniquement.
assignee_identier ou chaîneNonRetourne les merge requests assignées à l'utilisateur avec l'id donné. None retourne les merge requests non assignées. Any retourne les merge requests avec un assigné. Mutuellement exclusif avec assignee_username.
assignee_username[]tableau de chaînesNonRetourne les merge requests assignées aux noms d'utilisateur donnés. Mutuellement exclusif avec assignee_id.
author_identierNonRetourne les merge requests créées par l'utilisateur avec l'id donné. Mutuellement exclusif avec author_username.
author_usernamestringNonRetourne les merge requests créées par le username donné. Mutuellement exclusif avec author_id.
created_afterdatetimeNonRetourne les merge requests créées à la date et l'heure données ou après. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
created_beforedatetimeNonRetourne les merge requests créées à la date et l'heure données ou avant. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
deployed_afterdatetimeNonRetourne les merge requests déployées après la date et l'heure données. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
deployed_beforedatetimeNonRetourne les merge requests déployées avant la date et l'heure données. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
environmentstringNonRetourne les merge requests déployées dans l'environnement donné.
instringNonModifie la portée de l'attribut search. title, description, ou une chaîne les joignant par une virgule. La valeur par défaut est title,description.
labelsstringNonRetourne les merge requests correspondant à une liste de labels séparés par des virgules. None liste toutes les merge requests sans label. Any liste toutes les merge requests avec au moins un label. Les noms prédéfinis ne sont pas sensibles à la casse.
merge_user_identierNonRetourne les merge requests fusionnées par l'utilisateur avec l'id donné. Mutuellement exclusif avec merge_user_username. Introduit dans GitLab 17.0.
merge_user_usernamestringNonRetourne les merge requests fusionnées par l'utilisateur avec le username donné. Mutuellement exclusif avec merge_user_id. Introduit dans GitLab 17.0.
milestonestringNonRetourne les merge requests pour un jalon spécifique. None retourne les merge requests sans jalon. Any retourne les merge requests avec un jalon assigné.
my_reaction_emojistringNonRetourne les merge requests auxquelles l'utilisateur authentifié a réagi avec l'emoji donné. None retourne les tickets sans réaction. Any retourne les tickets avec au moins une réaction.
non_archivedbooleanNonSi true, retourne uniquement les merge requests des projets non archivés. La valeur par défaut est true.
nothashNonRetourne les merge requests ne correspondant pas aux paramètres fournis. Accepte : labels, milestone, author_id, author_username, assignee_id, assignee_username, reviewer_id, reviewer_username, my_reaction_emoji.
order_bystringNonRetourne les merge requests triées par les champs created_at, updated_at, merged_at (introduit dans GitLab 17.2), label_priority, priority, milestone_due, popularity, ou title. La valeur par défaut est created_at.
reviewer_identier ou chaîneNonRetourne les merge requests dont l'utilisateur est relecteur avec l'id donné. None retourne les merge requests sans relecteur. Any retourne les merge requests avec un relecteur quelconque. Mutuellement exclusif avec reviewer_username.
reviewer_usernamestringNonRetourne les merge requests dont l'utilisateur est relecteur avec le username donné. None retourne les merge requests sans relecteur. Any retourne les merge requests avec un relecteur quelconque. Mutuellement exclusif avec reviewer_id.
scopestringNonRetourne les merge requests pour la portée donnée : created_by_me, assigned_to_me, reviews_for_me, ou all. reviews_for_me retourne les merge requests où l'utilisateur actuel est assigné comme relecteur. La valeur par défaut est all.
searchstringNonRecherche des merge requests par rapport à leur title et leur description. À combiner avec l'attribut in.
sortstringNonRetourne les merge requests triées dans l'ordre asc ou desc. La valeur par défaut est desc.
source_branchstringNonRetourne les merge requests avec la branche source donnée.
source_project_identierNonRetourne les merge requests ayant l'ID de projet source donné.
statestringNonRetourne toutes les merge requests (all) ou uniquement celles qui sont opened, closed, locked, ou merged. La valeur par défaut est all.
target_branchstringNonRetourne les merge requests avec la branche cible donnée.
updated_afterdatetimeNonRetourne les merge requests mises à jour à la date et l'heure données ou après. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
updated_beforedatetimeNonRetourne les merge requests mises à jour à la date et l'heure données ou avant. Attendu au format ISO 8601 (2019-03-15T08:00:00Z).
viewstringNonSi simple, retourne l'iid, l'URL, le titre, la description et l'état de base de la merge request.
draftbooleanNonFiltre les merge requests par leur statut draft. true retourne uniquement les merge requests en brouillon, false retourne les merge requests qui ne sont pas en brouillon. Mutuellement exclusif avec wip.
wipstringNonObsolète dans GitLab 19.0. Utilisez draft à la place. Filtre les merge requests par leur statut wip. yes retourne uniquement les merge requests en brouillon, no retourne les merge requests qui ne sont pas en brouillon.
with_labels_detailsbooleanNonSi true, la réponse renvoie plus de détails pour chaque label dans le champ labels : :name, :color, :description, :description_html, :text_color. La valeur par défaut est false.
with_merge_status_recheckbooleanNonSi true, cette projection demande (sans garantie) un recalcul asynchrone du champ merge_status. Activez le feature flag restrict_merge_status_recheck pour ignorer cet attribut lorsqu'il est demandé par des utilisateurs sans le rôle Développeur, Mainteneur ou Propriétaire.

Dans la réponse, group_id représente l'ID du groupe contenant le projet où réside le merge request.

En cas de succès, retourne 200 OK. Si view est défini sur simple, retourne un sous-ensemble de champs. Sinon, les attributs de la réponse incluent :

AttributTypeDescription
allow_collaborationbooleanSi true, cette duplication autorise la collaboration des membres pouvant fusionner vers la branche cible. Utilisé uniquement pour les merge requests issues de duplications.
allow_maintainer_to_pushbooleanObsolète. Utilisez allow_collaboration à la place.
approvals_before_mergeentierObsolète dans GitLab 16.0. Pour configurer les règles d'approbation, consultez plutôt l'API d'approbation des merge requests. GitLab Premium et Ultimate uniquement.
assignee[]objetObsolète. Utilisez assignees à la place.
assignees[]tableauUtilisateurs assignés à la merge request.
assignees.avatar_urlstringURL complète de l'image d'avatar de l'assigné.
assignees.identierL'identifiant unique de l'assigné.
assignees.lockedbooleanSi true, le compte de l'assigné est verrouillé en raison de tentatives d'authentification échouées, et il ne peut pas se connecter tant que le verrouillage n'expire pas ou qu'un administrateur ne déverrouille pas le compte.
assignees.namestringNom d'affichage de l'assigné. Peut être masqué, en fonction des permissions de l'utilisateur actuel.
assignees.public_emailstringL'adresse e-mail publique de l'assigné.
assignees.statestringÉtat actuel du compte utilisateur de l'assigné. Valeurs possibles : active, blocked, ou deactivated.
assignees.usernamestringNom d'utilisateur de l'assigné de la merge request.
assignees.web_urlstringURL complète vers la page de profil de l'assigné.
author[]objetObjet contenant des informations sur l'utilisateur qui a créé la merge request.
author.avatar_urlstringURL complète de l'image d'avatar de l'auteur.
author.identierL'identifiant unique de l'utilisateur qui a créé la merge request.
author.lockedbooleanSi true, le compte de l'auteur est verrouillé en raison de tentatives d'authentification échouées, et il ne peut pas se connecter tant que le verrouillage n'expire pas ou qu'un administrateur ne déverrouille pas le compte.
author.namestringNom d'affichage de l'auteur. Peut être masqué, en fonction des permissions de l'utilisateur actuel.
author.public_emailstringL'adresse e-mail publique de l'auteur.
author.statestringÉtat actuel du compte utilisateur. Valeurs possibles : active, blocked, ou deactivated.
author.usernamestringNom d'utilisateur de l'auteur de la merge request.
author.web_urlstringURL complète vers la page de profil de l'auteur.
blocking_discussions_resolvedbooleanSi true, tous les fils de discussion de la merge request doivent être résolus avant la fusion.
closed_atdateTimeHorodatage de la fermeture de la merge request.
closed_by[]objetObjet contenant des informations sur l'utilisateur qui a fermé la merge request. Si null, la merge request est ouverte.
closed_by.avatar_urlstringURL complète de l'image d'avatar de l'utilisateur qui a fermé la merge request.
closed_by.identierL'identifiant unique de l'utilisateur qui a fermé la merge request.
closed_by.lockedbooleanSi true, le compte de l'utilisateur qui a fermé la merge request est verrouillé en raison de tentatives d'authentification échouées, et il ne peut pas se connecter tant que le verrouillage n'expire pas ou qu'un administrateur ne déverrouille pas le compte.
closed_by.namestringNom d'affichage de l'utilisateur qui a fermé la merge request. Peut être masqué, en fonction des permissions de l'utilisateur actuel.
closed_by.public_emailstringL'adresse e-mail publique de l'utilisateur qui a fermé la merge request.
closed_by.statestringÉtat actuel du compte de l'utilisateur qui a fermé la merge request. Valeurs possibles : active, blocked, ou deactivated.
closed_by.usernamestringNom d'utilisateur de l'utilisateur qui a fermé la merge request.
closed_by.web_urlstringURL complète vers la page de profil de l'utilisateur qui a fermé la merge request.
created_atdateTimeHorodatage de la création de la merge request.
descriptionstringDescription de la merge request. Contient le Markdown rendu en HTML pour la mise en cache.
detailed_merge_statusstringInformations détaillées sur le statut de fusion. Voir statut de fusion pour une liste des valeurs potentielles.
discussion_lockedbooleanSi true, les discussions sont verrouillées. Seuls les membres du projet peuvent ajouter, modifier ou résoudre des commentaires dans les discussions verrouillées.
downvotesentierNombre de votes négatifs pour la merge request.
draftbooleanSi true, la merge request est marquée dans un état draft.
force_remove_source_branchbooleanSi true, les paramètres du projet imposent la suppression de la branche source après la fusion.
has_conflictsbooleanSi true, la merge request présente des conflits et ne peut pas être fusionnée. Dépend de la propriété merge_status. Retourne false sauf si merge_status est cannot_be_merged.
identierL'identifiant unique de la merge request.
iidentierL'identifiant interne de la merge request dans le projet.
importedbooleanSi true, la merge request a été importée.
imported_fromstringSource de l'import, comme Bitbucket.
labels[]tableauTableau des labels assignés à la merge request. Si with_labels_details est true, retourne un tableau pour chaque label.
labels.archivedbooleanSi with_labels_details est true, le label est archivé.
labels.colorstringSi with_labels_details est true, la couleur d'arrière-plan du label.
labels.descriptionstringSi with_labels_details est true, le texte de description du label. Si null, le label n'a pas de description.
labels.description_htmlstringSi with_labels_details est true, la description rendue en HTML du label. Si null, le label n'a pas de description.
labels.identierSi with_labels_details est true, l'identifiant unique du label.
labels.namestringSi with_labels_details est true, le nom du label.
labels.text_colorstringSi with_labels_details est true, la couleur du texte du label.
merge_afterdateTimeSi défini, horodatage à partir duquel la merge request peut être fusionnée. Introduit dans GitLab 17.8.
merge_commit_shastringSi défini, le SHA du commit de fusion de la merge request. Retourne null jusqu'à la fusion.
merge_statusstringStatut de la merge request. Utilisez plutôt detailed_merge_status, qui tient compte de tous les statuts potentiels. Affecte la propriété has_conflicts. Pour les notes importantes sur les données de réponse, voir notes sur la réponse d'une merge request unique. Obsolète dans GitLab 15.6.
merge_userobjetObjet contenant des informations sur l'utilisateur qui a fusionné la merge request, l'a définie en fusion automatique, ou null.
merge_when_pipeline_succeedsbooleanSi true, la merge request est définie en fusion automatique.
merged_atdateTimeHorodatage de la fusion de la merge request.
merged_by[]objetObsolète. Utilisez merge_user à la place.
milestone[]objetObjet contenant des informations sur le jalon assigné à la merge request.
milestone.created_atdateTimeHorodatage de la création du jalon.
milestone.descriptionstringTexte de description du jalon. Si null, le jalon n'a pas de description.
milestone.due_datedateDate d'échéance du jalon. Si null, le jalon n'a pas de date d'échéance.
milestone.expiredbooleanSi true, le jalon a expiré.
milestone.group_identierIdentifiant du groupe auquel appartient le jalon. Inclus uniquement si le jalon est un jalon de groupe.
milestone.identierIdentifiant unique du jalon.
milestone.iidentierIdentifiant interne du jalon dans le projet ou le groupe.
milestone.project_identierIdentifiant du projet auquel appartient le jalon. Inclus uniquement si le jalon est un jalon de projet.
milestone.start_datedateDate de début du jalon. Si null, le jalon n'a pas de date de début
milestone.statestringÉtat actuel du jalon, comme active ou closed.
milestone.titlestringNom du jalon.
milestone.updated_atdateTimeHorodatage de la dernière mise à jour du jalon.
milestone.web_urlstringURL web complète pour afficher le jalon.
prepared_atdateTimeHorodatage de la préparation de la merge request. Ce champ est renseigné une seule fois, uniquement après la complétion de toutes les étapes de préparation, et n'est pas mis à jour si d'autres modifications sont ajoutées.
project_identierL'identifiant du projet contenant la merge request.
referencestringObsolète. Utilisez references à la place.
references[]objetObjet avec toutes les références internes de la merge request.
references.fullstringRéférence complète d'une merge request, incluant le chemin complet du projet, comme gitlab-org/gitlab!123. Lorsqu'elle est demandée entre groupes ou projets, identique à references.relative.
references.relativestringRéférence relative à un projet ou groupe spécifique : !123 pour une merge request dans le projet actuel, ou other-project!123 pour un autre projet dans le même groupe.
references.shortstringRéférence la plus courte possible vers une merge request, comme !123. Lorsqu'elle est récupérée depuis le projet de la merge request, identique à references.relative.
reviewers[]tableauRelecteurs de la merge request.
reviewers.avatar_urlstringURL complète de l'image d'avatar du relecteur.
reviewers.identierL'identifiant unique du relecteur.
reviewers.lockedbooleanSi true, le compte du relecteur est verrouillé en raison de tentatives d'authentification échouées, et il ne peut pas se connecter tant que le verrouillage n'expire pas ou qu'un administrateur ne déverrouille pas le compte.
reviewers.namestringNom d'affichage du relecteur. Peut être masqué, en fonction des permissions de l'utilisateur actuel.
reviewers.public_emailstringL'adresse e-mail publique du relecteur.
reviewers.statestringÉtat actuel du compte utilisateur du relecteur. Valeurs possibles : active, blocked, ou deactivated.
reviewers.usernamestringNom d'utilisateur du relecteur de la merge request.
reviewers.web_urlstringURL complète vers la page de profil du relecteur.
shastringSHA du commit head dans la branche source.
should_remove_source_branchbooleanSi true, la branche source est supprimée après la fusion.
source_branchstringNom de la branche source.
source_project_identierIdentifiant du projet source.
squashbooleanSi true, les commits sont squashés lors de la fusion.
squash_commit_shastringSi défini, le SHA du commit squash. Vide jusqu'à la fusion.
squash_on_mergebooleanSi true, les commits sont squashés lors de la fusion.
statestringL'état actuel de la merge request. Valeurs possibles : opened, closed, merged, ou locked.
target_branchstringNom de la branche cible.
target_project_identierIdentifiant du projet cible.
task_completion_status[]objetObjet contenant des informations sur l'état d'avancement de la liste de tâches.
task_completion_status.completed_countentierNombre d'éléments de liste de tâches complétés dans la description de la merge request. Retourne 0 si la merge request n'a pas de description ou pas d'éléments de liste de tâches.
task_completion_status.countentierNombre total d'éléments de liste de tâches trouvés dans la description de la merge request. Retourne 0 si la merge request n'a pas de description ou pas d'éléments de liste de tâches.
time_stats[]objetObjet contenant des informations sur le suivi du temps pour cette merge request.
time_stats.human_time_estimatestringFormat lisible par l'humain de time_stats.time_estimate, comme 3h 30m.
time_stats.human_total_time_spentstringFormat lisible par l'humain de time_stats.total_time_spent, comme 3h 30m.
time_stats.time_estimateentierTemps estimé pour compléter la merge request, en secondes.
time_stats.total_time_spententierTemps total passé à travailler sur la merge request, en secondes.
titlestringLe titre de la merge request.
updated_atdateTimeHorodatage de la dernière mise à jour de la merge request.
upvotesentierNombre de votes positifs pour la merge request.
user_notes_countentierNombre de commentaires utilisateur.
web_urlstringURL web pour afficher la merge request.
work_in_progressbooleanObsolète. Utilisez draft à la place.

Autres réponses possibles :

  • 401 Unauthorized si le jeton d'accès est invalide.
  • 404 Not Found si le projet ou le merge request est introuvable.
  • 422 Unprocessable Entity si la validation a échoué.
  • 429 Too Many Requests si le paramètre search est utilisé et que la requête a été soumise à une limite de débit.

Exemple de réponse :

json
[
  {
    "id": 1,
    "iid": 1,
    "project_id": 3,
    "title": "test1",
    "description": "fixed login page css paddings",
    "state": "merged",
    "imported": false,
    "imported_from": "none",
    "merged_by": { // Deprecated and will be removed in API v5, use `merge_user` instead
      "id": 87854,
      "name": "Douwe Maan",
      "username": "DouweM",
      "state": "active",
      "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
      "web_url": "https://gitlab.com/DouweM"
    },
    "merge_user": {
      "id": 87854,
      "name": "Douwe Maan",
      "username": "DouweM",
      "state": "active",
      "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
      "web_url": "https://gitlab.com/DouweM"
    },
    "merged_at": "2018-09-07T11:16:17.520Z",
    "merge_after": "2018-09-07T11:16:00.000Z",
    "prepared_at": "2018-09-04T11:16:17.520Z",
    "closed_by": null,
    "closed_at": null,
    "created_at": "2017-04-29T08:46:00Z",
    "updated_at": "2017-04-29T08:46:00Z",
    "target_branch": "main",
    "source_branch": "test1",
    "upvotes": 0,
    "downvotes": 0,
    "author": {
      "id": 1,
      "name": "Administrator",
      "username": "admin",
      "state": "active",
      "avatar_url": null,
      "web_url" : "https://gitlab.example.com/admin"
    },
    "assignee": {
      "id": 1,
      "name": "Administrator",
      "username": "admin",
      "state": "active",
      "avatar_url": null,
      "web_url" : "https://gitlab.example.com/admin"
    },
    "assignees": [{
      "name": "Miss Monserrate Beier",
      "username": "axel.block",
      "id": 12,
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
      "web_url": "https://gitlab.example.com/axel.block"
    }],
    "reviewers": [{
      "id": 2,
      "name": "Sam Bauch",
      "username": "kenyatta_oconnell",
      "state": "active",
      "avatar_url": "https://www.gravatar.com/avatar/956c92487c6f6f7616b536927e22c9a0?s=80&d=identicon",
      "web_url": "http://gitlab.example.com//kenyatta_oconnell"
    }],
    "source_project_id": 2,
    "target_project_id": 3,
    "labels": [
      "Community contribution",
      "Manage"
    ],
    "draft": false,
    "work_in_progress": false,
    "milestone": {
      "id": 5,
      "iid": 1,
      "project_id": 3,
      "title": "v2.0",
      "description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
      "state": "closed",
      "created_at": "2015-02-02T19:49:26.013Z",
      "updated_at": "2015-02-02T19:49:26.013Z",
      "due_date": "2018-10-22",
      "start_date": "2018-09-08",
      "web_url": "gitlab.example.com/my-group/my-project/milestones/1"
    },
    "merge_when_pipeline_succeeds": true,
    "merge_status": "can_be_merged",
    "detailed_merge_status": "not_open",
    "sha": "8888888888888888888888888888888888888888",
    "merge_commit_sha": null,
    "squash_commit_sha": null,
    "user_notes_count": 1,
    "discussion_locked": null,
    "should_remove_source_branch": true,
    "force_remove_source_branch": false,
    "web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
    "references": {
      "short": "!1",
      "relative": "my-project!1",
      "full": "my-group/my-project!1"
    },
    "time_stats": {
      "time_estimate": 0,
      "total_time_spent": 0,
      "human_time_estimate": null,
      "human_total_time_spent": null
    },
    "squash": false,
    "task_completion_status":{
      "count":0,
      "completed_count":0
    },
    "has_conflicts": false,
    "blocking_discussions_resolved": true
  }
]

Pour les notes importantes sur les données de réponse, consultez les notes sur la liste de réponses des merge requests.

Récupérer un merge request {#retrieve-a-merge-request}

Récupérer des informations sur un merge request.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.
include_diverged_commits_countbooleanNonSi true, la réponse inclut les commits en retard par rapport à la branche cible.
include_rebase_in_progressbooleanNonSi true, la réponse indique si une opération de rebase est en cours.
render_htmlbooleanNonSi true, la réponse inclut le HTML rendu pour le titre et la description.

En cas de succès, retourne 200 OK. Autres réponses possibles :

  • 401 Unauthorized si le jeton d'accès est invalide.
  • 403 Forbidden si l'accès est refusé.
  • 404 Not Found si le projet ou le merge request est introuvable.
  • 408 Request Timeout si la requête de base de données expire.
  • 409 Conflict si un conflit de verrouillage de ressource existe.
  • 422 Unprocessable Entity si la validation a échoué.
  • 429 Too Many Requests si le paramètre search est utilisé et que la requête a été soumise à une limite de débit.

Réponse {#response}

AttributTypeDescription
allow_collaborationbooleanSi true, cette duplication autorise la collaboration des membres pouvant fusionner vers la branche cible. Utilisé uniquement pour les merge requests issues de duplications.
allow_maintainer_to_pushbooleanObsolète. Utilisez allow_collaboration à la place.
approvals_before_mergeentierObsolète dans GitLab 16.0. Pour configurer les règles d'approbation, consultez plutôt l'API d'approbation des merge requests. GitLab Premium et Ultimate uniquement.
assignee[]objetObsolète. Utilisez assignees à la place.
assignees[]tableauUtilisateurs assignés à la merge request.
assignees.avatar_urlstringURL complète de l'image d'avatar de l'assigné.
assignees.identierL'identifiant unique de l'assigné.
assignees.lockedbooleanSi true, le compte de l'assigné est verrouillé en raison de tentatives d'authentification échouées, et il ne peut pas se connecter tant que le verrouillage n'expire pas ou qu'un administrateur ne déverrouille pas le compte.
assignees.namestringNom d'affichage de l'assigné. Peut être masqué, en fonction des permissions de l'utilisateur actuel.
assignees.public_emailstringL'adresse e-mail publique de l'assigné.
assignees.statestringÉtat actuel du compte utilisateur de l'assigné. Valeurs possibles : active, blocked, ou deactivated.
assignees.usernamestringNom d'utilisateur de l'assigné de la merge request.
assignees.web_urlstringURL complète vers la page de profil de l'assigné.
author[]objetObjet contenant des informations sur l'utilisateur qui a créé la merge request.
author.avatar_urlstringURL complète de l'image d'avatar de l'auteur.
author.identierL'identifiant unique de l'utilisateur qui a créé la merge request.
author.lockedbooleanSi true, le compte de l'auteur est verrouillé en raison de tentatives d'authentification échouées, et il ne peut pas se connecter tant que le verrouillage n'expire pas ou qu'un administrateur ne déverrouille pas le compte.
author.namestringNom d'affichage de l'auteur. Peut être masqué, en fonction des permissions de l'utilisateur actuel.
author.public_emailstringL'adresse e-mail publique de l'auteur.
author.statestringÉtat actuel du compte utilisateur. Valeurs possibles : active, blocked, ou deactivated.
author.usernamestringNom d'utilisateur de l'auteur de la merge request.
author.web_urlstringURL complète vers la page de profil de l'auteur.
blocking_discussions_resolvedbooleanSi true, tous les fils de discussion de la merge request doivent être résolus avant la fusion.
changes_countstringSi défini, le nombre de modifications apportées au merge request. Vide lors de la création du merge request. Se renseigne de manière asynchrone. Une chaîne, pas un entier. Lorsqu'un merge request comporte trop de modifications à afficher et à stocker, la valeur est plafonnée à 1000 et retourne la chaîne "1000+". Consultez les champs API vides pour les nouveaux merge requests.
closed_atdateTimeHorodatage de la fermeture de la merge request.
closed_by[]objetObjet contenant des informations sur l'utilisateur qui a fermé la merge request. Si null, la merge request est ouverte.
closed_by.avatar_urlstringURL complète de l'image d'avatar de l'utilisateur qui a fermé la merge request.
closed_by.identierL'identifiant unique de l'utilisateur qui a fermé la merge request.
closed_by.lockedbooleanSi true, le compte de l'utilisateur qui a fermé la merge request est verrouillé en raison de tentatives d'authentification échouées, et il ne peut pas se connecter tant que le verrouillage n'expire pas ou qu'un administrateur ne déverrouille pas le compte.
closed_by.namestringNom d'affichage de l'utilisateur qui a fermé la merge request. Peut être masqué, en fonction des permissions de l'utilisateur actuel.
closed_by.public_emailstringL'adresse e-mail publique de l'utilisateur qui a fermé la merge request.
closed_by.statestringÉtat actuel du compte de l'utilisateur qui a fermé la merge request. Valeurs possibles : active, blocked, ou deactivated.
closed_by.usernamestringNom d'utilisateur de l'utilisateur qui a fermé la merge request.
closed_by.web_urlstringURL complète vers la page de profil de l'utilisateur qui a fermé la merge request.
created_atdatetimeHorodatage de la création de la merge request.
descriptionstringDescription de la merge request. Contient le Markdown rendu en HTML pour la mise en cache.
detailed_merge_statusstringInformations détaillées sur le statut de fusion. Voir statut de fusion pour une liste des valeurs potentielles.
diff_refs[]objetObjet contenant les références des SHA de base, de tête et de départ pour ce merge request. Correspond à la dernière version de diff du merge request. Vide lors de la création du merge request et se renseigne de manière asynchrone. Consultez les champs API vides pour les nouveaux merge requests.
diff_refs.base_shastringSHA du commit de base de fusion où les branches source et cible ont divergé.
diff_refs.start_shastringSHA du commit de la branche cible. Le point de départ du diff. Généralement identique à base_sha.
diff_refs.head_shastringSHA du commit head dans la branche source. Le dernier commit dans le merge request.
discussion_lockedbooleanSi true, les discussions sont verrouillées. Seuls les membres du projet peuvent ajouter, modifier ou résoudre des commentaires dans les discussions verrouillées.
diverged_commits_countentierSi défini, contient le nombre de commits en retard de la branche source par rapport à la branche cible.
downvotesentierNombre de votes négatifs pour la merge request.
draftbooleanSi true, la merge request est marquée dans un état draft.
first_contributionbooleanSi true, il s'agit de la première contribution de l'auteur à ce projet.
first_deployed_to_production_atdatetimeHorodatage de la fin du premier déploiement.
force_remove_source_branchbooleanSi true, les paramètres du projet imposent la suppression de la branche source après la fusion.
has_conflictsbooleanSi true, la merge request présente des conflits et ne peut pas être fusionnée. Dépend de la propriété merge_status. Retourne false sauf si merge_status est cannot_be_merged.
head_pipeline[]objetPipeline qui s'exécute sur le commit HEAD de la branche source du merge request. À utiliser à la place de pipeline, car il contient des informations plus complètes. Exposé uniquement si l'utilisateur actuel peut voir les pipelines de ce projet.
head_pipeline.before_shastringSHA du commit précédant ce pipeline.
head_pipeline.committed_atdateTimeHorodatage du commit.
head_pipeline.coveragenumberPourcentage de couverture des tests, comme 98.29.
head_pipeline.created_atdateTimeHorodatage de la création du pipeline.
head_pipeline.detailed_status[]objetObjet contenant des champs avec le statut détaillé de ce pipeline.
head_pipeline.detailed_status.action[]objetSi défini, objet contenant les actions disponibles pour ce pipeline.
head_pipeline.detailed_status.action.button_titlestringTitre du bouton pour l'action.
head_pipeline.detailed_status.action.confirmation_messagestringMessage de confirmation pour l'action.
head_pipeline.detailed_status.action.iconstringIcône pour l'action.
head_pipeline.detailed_status.action.methodstringMéthode HTTP pour l'action, comme POST.
head_pipeline.detailed_status.action.pathstringChemin pour l'action, comme "/namespace1/project1/-/jobs/2/cancel".
head_pipeline.detailed_status.action.titlestringTitre pour l'action.
head_pipeline.detailed_status.details_pathstringChemin vers la vue détaillée, comme "/test-group/test-project/-/pipelines/287".
head_pipeline.detailed_status.faviconstringChemin vers le favicon de statut.
head_pipeline.detailed_status.groupstringGroupe de statut, comme success.
head_pipeline.detailed_status.has_detailsbooleanSi défini, une vue détaillée est disponible.
head_pipeline.detailed_status.iconstringNom de l'icône de statut, comme "status_success".
head_pipeline.detailed_status.illustration.contentstringTexte du contenu pour l'illustration, comme "This job depends on upstream jobs that need to succeed in order for this job to be triggered".
head_pipeline.detailed_status.illustration.imagestringChemin vers l'image d'illustration.
head_pipeline.detailed_status.illustration.sizestringTaille de l'illustration.
head_pipeline.detailed_status.illustration.titlestringTitre pour l'illustration, comme "This job has not been triggered yet".
head_pipeline.detailed_status.labelstringLabel de statut pour le pipeline, comme "passed".
head_pipeline.detailed_status.textstringTexte de statut pour le pipeline, comme "passed".
head_pipeline.detailed_status.tooltipstringTexte d'info-bulle pour le pipeline, comme "passed".
head_pipeline.durationentierTemps passé à exécuter le pipeline, en secondes.
head_pipeline.finished_atdateTimeHorodatage de la fin du pipeline.
head_pipeline.identierIdentifiant numérique unique du pipeline. Clé étrangère vers la table ci_pipelines.
head_pipeline.iidentierID numérique interne du pipeline.
head_pipeline.project_identierID numérique du projet contenant le pipeline.
head_pipeline.queued_durationentierTemps passé en file d'attente, en secondes.
head_pipeline.refstringNom de la référence Git (branche ou tag) sur laquelle le pipeline s'exécute.
head_pipeline.shastringSHA du commit qui a déclenché le pipeline.
head_pipeline.sourcestringFaçon dont le pipeline a été déclenché. Par exemple push, merge_request_event ou api
head_pipeline.started_atdateTimeHorodatage du démarrage du pipeline.
head_pipeline.statusstringStatut actuel du pipeline. Valeurs possibles : success, failed, running, pending
head_pipeline.tagbooleanSi true, ce pipeline s'exécute sur un tag Git.
head_pipeline.updated_atdateTimeHorodatage de la dernière mise à jour du pipeline.
head_pipeline.user[]objetObjet contenant des informations sur l'utilisateur qui a déclenché le pipeline.
head_pipeline.user.avatar_urlstringURL complète vers l'image d'avatar de l'utilisateur.
head_pipeline.user.identierL'identifiant unique de l'utilisateur qui a déclenché le pipeline.
head_pipeline.user.lockedbooleanSi true, le compte de l'utilisateur qui a déclenché le pipeline est verrouillé en raison d'échecs de tentatives d'authentification, et il ne peut pas se connecter jusqu'à ce que le verrou expire ou qu'un administrateur déverrouille le compte.
head_pipeline.user.namestringNom d'affichage de l'utilisateur qui a déclenché le pipeline. Peut être masqué, en fonction des permissions de l'utilisateur actuel.
head_pipeline.user.public_emailstringL'adresse e-mail publique de l'utilisateur qui a déclenché le pipeline.
head_pipeline.user.statestringÉtat actuel du compte de l'utilisateur qui a déclenché le pipeline. Valeurs possibles : active, blocked, ou deactivated.
head_pipeline.user.usernamestringNom d'utilisateur de l'utilisateur qui a déclenché le pipeline.
head_pipeline.user.web_urlstringURL complète vers la page de profil de l'utilisateur qui a déclenché le pipeline.
head_pipeline.web_urlstringURL complète vers la page du pipeline.
head_pipeline.yaml_errorsstringToute erreur de configuration YAML. Par exemple, widgets:build: needs 'widgets:test')
identierIdentifiant de la merge request.
iidentierIdentifiant interne de la merge request.
importedbooleanSi true, la merge request a été importée.
imported_fromstringSource de l'import, comme Bitbucket.
labels[]tableauTableau des labels assignés à la merge request. Si with_labels_details est true, retourne un tableau pour chaque label.
labels.archivedbooleanSi with_labels_details est true, le label est archivé.
labels.colorstringSi with_labels_details est true, la couleur d'arrière-plan du label.
labels.descriptionstringSi with_labels_details est true, le texte de description du label. Si null, le label n'a pas de description.
labels.description_htmlstringSi with_labels_details est true, la description rendue en HTML du label. Si null, le label n'a pas de description.
labels.identierSi with_labels_details est true, l'identifiant unique du label.
labels.namestringSi with_labels_details est true, le nom du label.
labels.text_colorstringSi with_labels_details est true, la couleur du texte du label.
latest_build_finished_atdatetimeHorodatage de la fin du dernier build pour le merge request.
latest_build_started_atdatetimeHorodatage du début du dernier build pour le merge request.
merge_afterdateTimeSi défini, horodatage à partir duquel la merge request peut être fusionnée. Introduit dans GitLab 17.8.
merge_commit_shastringSi défini, le SHA du commit de fusion de la merge request. Retourne null jusqu'à la fusion.
merge_errorstringSi défini, le message d'erreur affiché lorsqu'une fusion échoue. Pour vérifier la fusionnabilité, utilisez plutôt detailed_merge_status.
merge_statusstringStatut de la merge request. Utilisez plutôt detailed_merge_status, qui tient compte de tous les statuts potentiels. Affecte la propriété has_conflicts. Pour les notes importantes sur les données de réponse, voir notes sur la réponse d'une merge request unique. Obsolète dans GitLab 15.6.
merge_user[]objetL'utilisateur qui a fusionné ce merge request, l'utilisateur qui l'a défini sur la fusion automatique, ou null.
merge_when_pipeline_succeedsbooleanSi true, la merge request est définie en fusion automatique.
merged_atdateTimeHorodatage de la fusion de la merge request.
merged_by[]objetUtilisateur qui a fusionné cette merge request ou l'a définie en fusion automatique. Obsolète dans GitLab 14.7, et prévu pour suppression dans la version 5 de l'API. Utilisez merge_user à la place.
milestone[]objetObjet contenant des informations sur le jalon assigné à la merge request.
milestone.created_atdateTimeHorodatage de la création du jalon.
milestone.descriptionstringTexte de description du jalon. Si null, le jalon n'a pas de description.
milestone.due_datedateDate d'échéance du jalon. Si null, le jalon n'a pas de date d'échéance.
milestone.expiredbooleanSi true, le jalon a expiré.
milestone.group_identierIdentifiant du groupe auquel appartient le jalon. Inclus uniquement si le jalon est un jalon de groupe.
milestone.identierIdentifiant unique du jalon.
milestone.iidentierIdentifiant interne du jalon dans le projet ou le groupe.
milestone.project_identierIdentifiant du projet auquel appartient le jalon. Inclus uniquement si le jalon est un jalon de projet.
milestone.start_datedateDate de début du jalon. Si null, le jalon n'a pas de date de début
milestone.statestringÉtat actuel du jalon, comme active ou closed.
milestone.titlestringNom du jalon.
milestone.updated_atdateTimeHorodatage de la dernière mise à jour du jalon.
milestone.web_urlstringURL web complète pour afficher le jalon.
pipeline[]objetPipeline s'exécutant sur le HEAD de la branche du merge request. Envisagez d'utiliser plutôt head_pipeline, car il contient plus d'informations.
prepared_atdateTimeHorodatage de la préparation de la merge request. Ce champ est renseigné une seule fois, uniquement après la complétion de toutes les étapes de préparation, et n'est pas mis à jour si d'autres modifications sont ajoutées.
project_identierL'identifiant du projet contenant la merge request.
rebase_in_progressbooleanSi true, Sidekiq exécute une opération de rebase sur cette branche.
referencestringObsolète. Utilisez references à la place. Obsolète dans GitLab 12.7, et prévu pour suppression dans la version 5 de l'API. Utilisez references à la place.
references[]objetObjet avec toutes les références internes de la merge request.
references.fullstringRéférence complète d'une merge request, incluant le chemin complet du projet, comme gitlab-org/gitlab!123. Lorsqu'elle est demandée entre groupes ou projets, identique à references.relative.
references.relativestringRéférence relative à un projet ou groupe spécifique : !123 pour une merge request dans le projet actuel, ou other-project!123 pour un autre projet dans le même groupe.
references.shortstringRéférence la plus courte possible vers une merge request, comme !123. Lorsqu'elle est récupérée depuis le projet de la merge request, identique à references.relative.
reviewers[]tableauRelecteurs de la merge request.
reviewers.avatar_urlstringURL complète de l'image d'avatar du relecteur.
reviewers.identierL'identifiant unique du relecteur.
reviewers.lockedbooleanSi true, le compte du relecteur est verrouillé en raison de tentatives d'authentification échouées, et il ne peut pas se connecter tant que le verrouillage n'expire pas ou qu'un administrateur ne déverrouille pas le compte.
reviewers.namestringNom d'affichage du relecteur. Peut être masqué, en fonction des permissions de l'utilisateur actuel.
reviewers.public_emailstringL'adresse e-mail publique du relecteur.
reviewers.statestringÉtat actuel du compte utilisateur du relecteur. Valeurs possibles : active, blocked, ou deactivated.
reviewers.usernamestringNom d'utilisateur du relecteur de la merge request.
reviewers.web_urlstringURL complète vers la page de profil du relecteur.
shastringSHA du commit head dans la branche source.
should_remove_source_branchbooleanSi true, la branche source est supprimée après la fusion.
source_branchstringNom de la branche source.
source_project_identierIdentifiant du projet source.
squashbooleanSi true, les commits sont squashés lors de la fusion.
squash_commit_shastringSi défini, le SHA du commit squash. Vide jusqu'à la fusion.
squash_on_mergebooleanSi true, les commits sont squashés lors de la fusion.
statestringL'état actuel de la merge request. Valeurs possibles : opened, closed, merged, ou locked.
subscribedbooleanSi true, l'utilisateur authentifié actuel est abonné à ce merge request.
target_branchstringNom de la branche cible.
target_project_identierIdentifiant du projet cible.
task_completion_status[]objetObjet contenant des informations sur l'état d'avancement de la liste de tâches.
task_completion_status.completed_countentierNombre d'éléments de liste de tâches complétés dans la description de la merge request. Retourne 0 si la merge request n'a pas de description ou pas d'éléments de liste de tâches.
task_completion_status.countentierNombre total d'éléments de liste de tâches trouvés dans la description de la merge request. Retourne 0 si la merge request n'a pas de description ou pas d'éléments de liste de tâches.
time_stats[]objetObjet contenant des informations sur le suivi du temps pour cette merge request.
time_stats.human_time_estimatestringFormat lisible par l'humain de time_stats.time_estimate, comme 3h 30m.
time_stats.human_total_time_spentstringFormat lisible par l'humain de time_stats.total_time_spent, comme 3h 30m.
time_stats.time_estimateentierTemps estimé pour compléter la merge request, en secondes.
time_stats.total_time_spententierTemps total passé à travailler sur la merge request, en secondes.
titlestringLe titre de la merge request.
updated_atdatetimeHorodatage de la dernière mise à jour de la merge request.
upvotesentierNombre de votes positifs pour la merge request.
user[]objetPermissions de l'utilisateur demandées pour le merge request.
user.can_mergebooleanSi true, l'utilisateur authentifié actuel peut fusionner ce merge request.
user_notes_countentierNombre de commentaires utilisateur.
web_urlstringURL web pour afficher la merge request.
work_in_progressbooleanObsolète. Utilisez draft à la place.

Exemple de réponse :

json
{
  "id": 155016530,
  "iid": 133,
  "project_id": 15513260,
  "title": "Manual job rules",
  "description": "",
  "state": "opened",
  "imported": false,
  "imported_from": "none",
  "created_at": "2022-05-13T07:26:38.402Z",
  "updated_at": "2022-05-14T03:38:31.354Z",
  "merged_by": null, // Deprecated and will be removed in API v5. Use `merge_user` instead.
  "merge_user": null,
  "merged_at": null,
  "merge_after": "2018-09-07T11:16:00.000Z",
  "prepared_at": "2018-09-04T11:16:17.520Z",
  "closed_by": null,
  "closed_at": null,
  "target_branch": "main",
  "source_branch": "manual-job-rules",
  "user_notes_count": 0,
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "id": 4155490,
    "username": "marcel.amirault",
    "name": "Marcel Amirault",
    "state": "active",
    "avatar_url": "https://gitlab.com/uploads/-/system/user/avatar/4155490/avatar.png",
    "web_url": "https://gitlab.com/marcel.amirault"
  },
  "assignees": [],
  "assignee": null,
  "reviewers": [],
  "source_project_id": 15513260,
  "target_project_id": 15513260,
  "labels": [],
  "draft": false,
  "work_in_progress": false,
  "milestone": null,
  "merge_when_pipeline_succeeds": false,
  "merge_status": "can_be_merged",
  "detailed_merge_status": "mergeable",
  "sha": "e82eb4a098e32c796079ca3915e07487fc4db24c",
  "merge_commit_sha": null,
  "squash_commit_sha": null,
  "discussion_locked": null,
  "should_remove_source_branch": null,
  "force_remove_source_branch": true,
  "reference": "!133", // Deprecated. Use `references` instead.
  "references": {
    "short": "!133",
    "relative": "!133",
    "full": "marcel.amirault/test-project!133"
  },
  "web_url": "https://gitlab.com/marcel.amirault/test-project/-/merge_requests/133",
  "time_stats": {
    "time_estimate": 0,
    "total_time_spent": 0,
    "human_time_estimate": null,
    "human_total_time_spent": null
  },
  "squash": false,
  "task_completion_status": {
    "count": 0,
    "completed_count": 0
  },
  "has_conflicts": false,
  "blocking_discussions_resolved": true,
  "approvals_before_merge": null, // deprecated, use [Merge request approvals API](merge_request_approvals.md)
  "subscribed": true,
  "changes_count": "1",
  "latest_build_started_at": "2022-05-13T09:46:50.032Z",
  "latest_build_finished_at": null,
  "first_deployed_to_production_at": null,
  "pipeline": { // Use `head_pipeline` instead.
    "id": 538317940,
    "iid": 1877,
    "project_id": 15513260,
    "sha": "1604b0c46c395822e4e9478777f8e54ac99fe5b9",
    "ref": "refs/merge-requests/133/merge",
    "status": "failed",
    "source": "merge_request_event",
    "created_at": "2022-05-13T09:46:39.560Z",
    "updated_at": "2022-05-13T09:47:20.706Z",
    "web_url": "https://gitlab.com/marcel.amirault/test-project/-/pipelines/538317940"
  },
  "head_pipeline": {
    "id": 538317940,
    "iid": 1877,
    "project_id": 15513260,
    "sha": "1604b0c46c395822e4e9478777f8e54ac99fe5b9",
    "ref": "refs/merge-requests/133/merge",
    "status": "failed",
    "source": "merge_request_event",
    "created_at": "2022-05-13T09:46:39.560Z",
    "updated_at": "2022-05-13T09:47:20.706Z",
    "web_url": "https://gitlab.com/marcel.amirault/test-project/-/pipelines/538317940",
    "before_sha": "1604b0c46c395822e4e9478777f8e54ac99fe5b9",
    "tag": false,
    "yaml_errors": null,
    "user": {
      "id": 4155490,
      "username": "marcel.amirault",
      "name": "Marcel Amirault",
      "state": "active",
      "avatar_url": "https://gitlab.com/uploads/-/system/user/avatar/4155490/avatar.png",
      "web_url": "https://gitlab.com/marcel.amirault"
    },
    "started_at": "2022-05-13T09:46:50.032Z",
    "finished_at": "2022-05-13T09:47:20.697Z",
    "committed_at": null,
    "duration": 30,
    "queued_duration": 10,
    "coverage": null,
    "detailed_status": {
      "icon": "status_failed",
      "text": "failed",
      "label": "failed",
      "group": "failed",
      "tooltip": "failed",
      "has_details": true,
      "details_path": "/marcel.amirault/test-project/-/pipelines/538317940",
      "illustration": null,
      "favicon": "/assets/ci_favicons/favicon_status_failed-41304d7f7e3828808b0c26771f0309e55296819a9beea3ea9fbf6689d9857c12.png"
    },
    "archived": false
  },
  "diff_refs": {
    "base_sha": "1162f719d711319a2efb2a35566f3bfdadee8bab",
    "head_sha": "e82eb4a098e32c796079ca3915e07487fc4db24c",
    "start_sha": "1162f719d711319a2efb2a35566f3bfdadee8bab"
  },
  "merge_error": null,
  "first_contribution": false,
  "user": {
    "can_merge": true
  },
  "approvals_before_merge": { // Available for GitLab Premium and Ultimate tiers only
    "id": 1,
    "title": "test1",
    "approvals_before_merge": null
  },
}

Notes de réponse pour un merge request unique {#single-merge-request-response-notes}

La fusionnabilité (merge_status) de chaque merge request est vérifiée de manière asynchrone lorsqu'une requête est faite vers ce point de terminaison. Interrogez ce point de terminaison d'API pour obtenir le statut mis à jour. Cela affecte la propriété has_conflicts, car elle dépend de merge_status. Elle renvoie false sauf si merge_status est cannot_be_merged.

Statut de fusion {#merge-status}

Utilisez detailed_merge_status au lieu de merge_status pour tenir compte de tous les statuts potentiels.

  • Le champ detailed_merge_status peut contenir l'une des valeurs suivantes relatives au merge request :
    • approvals_syncing : Les approbations du merge request sont en cours de synchronisation.
    • checking : Git teste si une fusion valide est possible.
    • ci_must_pass : Un pipeline CI/CD doit réussir avant la fusion.
    • ci_still_running : Un pipeline CI/CD est toujours en cours d'exécution.
    • commits_status : La branche source doit exister et contenir des commits.
    • conflict : Des conflits existent entre la branche source et la branche cible.
    • discussions_not_resolved : Toutes les discussions doivent être résolues avant la fusion.
    • draft_status : Impossible de fusionner car le merge request est un brouillon.
    • jira_association_missing : Le titre ou la description doit faire référence à un ticket Jira. Pour configurer, consultez exiger un ticket Jira associé pour que les merge requests soient fusionnés.
    • mergeable : La branche peut fusionner proprement dans la branche cible.
    • merge_request_blocked : Bloqué par un autre merge request.
    • merge_time : Ne peut pas être fusionné avant l'heure spécifiée.
    • need_rebase : Le merge request doit être rebasé.
    • not_approved : Une approbation est requise avant la fusion.
    • not_open : Le merge request doit être ouvert avant la fusion.
    • preparing : Le diff du merge request est en cours de création.
    • requested_changes : Le merge request a des relecteurs qui ont demandé des modifications.
    • security_policy_pipeline_check : Tous les pipelines pour le dernier commit doivent réussir avant que le merge request soit fusionné lorsque des politiques de sécurité sont appliquées.
    • security_policy_violations : Toutes les politiques de sécurité doivent être satisfaites.
    • status_checks_must_pass : Toutes les vérifications de statut doivent réussir avant la fusion.
    • unchecked : Git n'a pas encore testé si une fusion valide est possible.
    • locked_paths : Les chemins verrouillés par d'autres utilisateurs doivent être déverrouillés avant de fusionner dans la branche par défaut.
    • locked_lfs_files : Les fichiers LFS verrouillés par d'autres utilisateurs doivent être déverrouillés avant la fusion.
    • title_regex : Vérifie si le titre correspond à l'expression régulière attendue, si elle est configurée dans les paramètres du projet.

Étapes de préparation {#preparation-steps}

Le champ prepared_at est renseigné une seule fois, uniquement après la fin de ces étapes :

  • Créer le diff.
  • Créer les pipelines.
  • Vérifier la fusionnabilité.
  • Lier tous les objets Git LFS.
  • Envoyer les notifications.

Le champ prepared_at n'est pas mis à jour si d'autres modifications sont ajoutées au merge request.

Récupérer les participants d'un merge request {#retrieve-merge-request-participants}

Récupérer les participants d'un merge request.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/participants

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.

Exemple de réponse :

json
[
  {
    "id": 1,
    "name": "John Doe1",
    "username": "user1",
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon",
    "web_url": "http://localhost/user1"
  },
  {
    "id": 2,
    "name": "John Doe2",
    "username": "user2",
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/10fc7f102be8de7657fb4d80898bbfe3?s=80&d=identicon",
    "web_url": "http://localhost/user2"
  }
]

Récupérer les relecteurs d'un merge request {#retrieve-merge-request-reviewers}

Récupérer les relecteurs d'un merge request.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/reviewers

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.

Exemple de réponse :

json
[
  {
    "user": {
      "id": 1,
      "name": "John Doe1",
      "username": "user1",
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon",
      "web_url": "http://localhost/user1"
    },
    "state": "unreviewed",
    "created_at": "2022-07-27T17:03:27.684Z"
  },
  {
    "user": {
      "id": 2,
      "name": "John Doe2",
      "username": "user2",
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/10fc7f102be8de7657fb4d80898bbfe3?s=80&d=identicon",
      "web_url": "http://localhost/user2"
    },
    "state": "reviewed",
    "created_at": "2022-07-27T17:03:27.684Z"
  }
]

Récupérer les commits d'un merge request {#retrieve-merge-request-commits}

Récupérer les commits d'un merge request.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/commits

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiID ou chemin encodé en URL du projet.
merge_request_iidentierOuiIdentifiant interne de la merge request.

En cas de succès, renvoie 200 OK et les attributs de réponse suivants :

AttributTypeDescription
commitstableau d'objetsCommits dans le merge request.
commits[].idstringIdentifiant du commit.
commits[].short_idstringIdentifiant court du commit.
commits[].created_atdatetimeIdentique au champ committed_date.
commits[].parent_idstableauIdentifiants des commits parents.
commits[].titlestringTitre du commit.
commits[].messagestringMessage de commit.
commits[].author_namestringNom de l'auteur du commit.
commits[].author_emailstringAdresse e-mail de l'auteur du commit.
commits[].authored_datedatetimeDate et heure de création du commit.
commits[].committer_namestringNom du contributeur.
commits[].committer_emailstringAdresse e-mail du contributeur.
commits[].committed_datedatetimeDate et heure du commit.
commits[].trailersobjetTrailers Git analysés pour le commit. Les clés en double n'incluent que la dernière valeur.
commits[].extended_trailersobjetTrailers Git analysés pour le commit.
commits[].web_urlstringURL web du merge request.

Exemple de requête :

shell
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/commits"

Exemple de réponse :

json
[
  {
    "id": "ed899a2f4b50b4370feeea94676502b42383c746",
    "short_id": "ed899a2f4b5",
    "title": "Replace sanitize with escape once",
    "author_name": "Example User",
    "author_email": "[email protected]",
    "authored_date": "2012-09-20T11:50:22+03:00",
    "committer_name": "Example User",
    "committer_email": "[email protected]",
    "committed_date": "2012-09-20T11:50:22+03:00",
    "created_at": "2012-09-20T11:50:22+03:00",
    "message": "Replace sanitize with escape once",
    "trailers": {},
    "extended_trailers": {},
    "web_url": "https://gitlab.example.com/project/-/commit/ed899a2f4b50b4370feeea94676502b42383c746"
  },
  {
    "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",
    "short_id": "6104942438c",
    "title": "Sanitize for network graph",
    "author_name": "Example User",
    "author_email": "[email protected]",
    "authored_date": "2012-09-20T09:06:12+03:00",
    "committer_name": "Example User",
    "committer_email": "[email protected]",
    "committed_date": "2012-09-20T09:06:12+03:00",
    "created_at": "2012-09-20T09:06:12+03:00",
    "message": "Sanitize for network graph",
    "trailers": {},
    "extended_trailers": {},
    "web_url": "https://gitlab.example.com/project/-/commit/6104942438c14ec7bd21c6cd5bd995272b3faff6"
  }
]

Récupérer les dépendances d'un merge request {#retrieve-merge-request-dependencies}

Récupérer les dépendances qui doivent être résolues avant qu'un merge request puisse être fusionné.

[!note] Si l'utilisateur n'a pas accès au merge request bloquant, aucun attribut blocking_merge_request n'est renvoyé.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/blocks

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.

Exemple de requête :

shell
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/blocks"

Exemple de réponse :

json
[
  {
    "id": 1,
    "blocking_merge_request": {
      "id": 145,
      "iid": 12,
      "project_id": 7,
      "title": "Interesting MR",
      "description": "Does interesting things.",
      "state": "opened",
      "created_at": "2024-07-05T21:29:11.172Z",
      "updated_at": "2024-07-05T21:29:11.172Z",
      "merged_by": null,
      "merge_user": null,
      "merged_at": null,
      "merge_after": "2018-09-07T11:16:00.000Z",
      "closed_by": null,
      "closed_at": null,
      "target_branch": "master",
      "source_branch": "v2.x",
      "user_notes_count": 0,
      "upvotes": 0,
      "downvotes": 0,
      "author": {
        "id": 2,
        "username": "aiguy123",
        "name": "AI GUY",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "https://localhost/aiguy123"
      },
      "assignees": [
        {
          "id": 2,
          "username": "aiguy123",
          "name": "AI GUY",
          "state": "active",
          "locked": false,
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "https://localhost/aiguy123"
        }
      ],
      "assignee": {
        "id": 2,
        "username": "aiguy123",
        "name": "AI GUY",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "https://localhost/aiguy123"
      },
      "reviewers": [
        {
          "id": 2,
          "username": "aiguy123",
          "name": "AI GUY",
          "state": "active",
          "locked": false,
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "https://localhost/aiguy123"
        },
        {
          "id": 1,
          "username": "root",
          "name": "Administrator",
          "state": "active",
          "locked": false,
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "https://localhost/root"
        }
      ],
      "source_project_id": 7,
      "target_project_id": 7,
      "labels": [],
      "draft": false,
      "imported": false,
      "imported_from": "none",
      "work_in_progress": false,
      "milestone": null,
      "merge_when_pipeline_succeeds": false,
      "merge_status": "unchecked",
      "detailed_merge_status": "unchecked",
      "sha": "ce7e4f2d0ce13cb07479bb39dc10ee3b861c08a6",
      "merge_commit_sha": null,
      "squash_commit_sha": null,
      "discussion_locked": null,
      "should_remove_source_branch": null,
      "force_remove_source_branch": true,
      "prepared_at": null,
      "reference": "!12",
      "references": {
        "short": "!12",
        "relative": "!12",
        "full": "my-group/my-project!12"
      },
      "web_url": "https://localhost/my-group/my-project/-/merge_requests/12",
      "time_stats": {
        "time_estimate": 0,
        "total_time_spent": 0,
        "human_time_estimate": null,
        "human_total_time_spent": null
      },
      "squash": false,
      "squash_on_merge": false,
      "task_completion_status": {
        "count": 0,
        "completed_count": 0
      },
      "has_conflicts": false,
      "blocking_discussions_resolved": true,
      "approvals_before_merge": null
    },
    "blocked_merge_request": {
      "id": 146,
      "iid": 13,
      "project_id": 7,
      "title": "Really cool MR",
      "description": "Adds some stuff",
      "state": "opened",
      "created_at": "2024-07-05T21:31:34.811Z",
      "updated_at": "2024-07-27T02:57:08.054Z",
      "merged_by": null,
      "merge_user": null,
      "merged_at": null,
      "merge_after": "2018-09-07T11:16:00.000Z",
      "closed_by": null,
      "closed_at": null,
      "target_branch": "master",
      "source_branch": "remove-from",
      "user_notes_count": 0,
      "upvotes": 1,
      "downvotes": 0,
      "author": {
        "id": 2,
        "username": "aiguy123",
        "name": "AI GUY",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "https://localhost/aiguy123"
      },
      "assignees": [
        {
          "id": 2,
          "username": "aiguy123",
          "name": "AI GUY",
          "state": "active",
          "locked": false,
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "https://localhose/aiguy123"
        }
      ],
      "assignee": {
        "id": 2,
        "username": "aiguy123",
        "name": "AI GUY",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "https://localhost/aiguy123"
      },
      "reviewers": [
        {
          "id": 1,
          "username": "root",
          "name": "Administrator",
          "state": "active",
          "locked": false,
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "https://localhost/root"
        }
      ],
      "source_project_id": 7,
      "target_project_id": 7,
      "labels": [],
      "draft": false,
      "imported": false,
      "imported_from": "none",
      "work_in_progress": false,
      "milestone": {
        "id": 59,
        "iid": 6,
        "project_id": 7,
        "title": "Sprint 1718897375",
        "description": "Accusantium omnis iusto a animi.",
        "state": "active",
        "created_at": "2024-06-20T15:29:35.739Z",
        "updated_at": "2024-06-20T15:29:35.739Z",
        "due_date": null,
        "start_date": null,
        "expired": false,
        "web_url": "https://localhost/my-group/my-project/-/milestones/6"
      },
      "merge_when_pipeline_succeeds": false,
      "merge_status": "cannot_be_merged",
      "detailed_merge_status": "not_approved",
      "sha": "daa75b9b17918f51f43866ff533987fda71375ea",
      "merge_commit_sha": null,
      "squash_commit_sha": null,
      "discussion_locked": null,
      "should_remove_source_branch": null,
      "force_remove_source_branch": true,
      "prepared_at": "2024-07-11T18:50:46.215Z",
      "reference": "!13",
      "references": {
        "short": "!13",
        "relative": "!13",
        "full": "my-group/my-project!12"
      },
      "web_url": "https://localhost/my-group/my-project/-/merge_requests/13",
      "time_stats": {
        "time_estimate": 0,
        "total_time_spent": 0,
        "human_time_estimate": null,
        "human_total_time_spent": null
      },
      "squash": false,
      "squash_on_merge": false,
      "task_completion_status": {
        "count": 0,
        "completed_count": 0
      },
      "has_conflicts": true,
      "blocking_discussions_resolved": true,
      "approvals_before_merge": null
    },
    "project_id": 7
  }
]

Supprimer une dépendance de merge request {#delete-a-merge-request-dependency}

Supprimer une dépendance de merge request.

plaintext
DELETE /projects/:id/merge_requests/:merge_request_iid/blocks/:block_id

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'identifiant ou le chemin encodé en URL du projet appartenant à l'utilisateur authentifié.
merge_request_iidentierOuiL'ID interne du merge request.
block_identierOuiL'identifiant du bloc.

Exemple de requête :

shell
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/blocks/1"

Renvoie :

  • 204 No Content si la dépendance est supprimée avec succès.
  • 403 Forbidden si l'utilisateur n'a pas les permissions pour mettre à jour le merge request.
  • 403 Forbidden si l'utilisateur n'a pas les permissions pour lire le merge request bloquant.

Créer une dépendance de merge request {#create-a-merge-request-dependency}

Créer une dépendance de merge request.

plaintext
POST /projects/:id/merge_requests/:merge_request_iid/blocks

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'identifiant ou le chemin encodé en URL du projet appartenant à l'utilisateur authentifié.
merge_request_iidentierOuiL'identifiant interne du merge request à bloquer.
blocking_merge_request_identierConditionnelL'identifiant global du merge request bloquant. Requis si blocking_merge_request_iid n'est pas fourni.
blocking_merge_request_iidentierConditionnelL'IID du merge request bloquant. Requis si blocking_merge_request_id n'est pas fourni.
blocking_project_identier ou chaîneNonL'identifiant ou le chemin encodé en URL du projet qui contient le merge request bloquant. Requis lorsque blocking_merge_request_iid fait référence à un merge request dans un autre projet. Par défaut, le projet actuel.

Exemple de requête utilisant IID (même projet) :

shell
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/blocks?blocking_merge_request_iid=2"

Exemple de requête utilisant IID (entre projets) :

shell
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/blocks?blocking_merge_request_iid=5&blocking_project_id=2"

Exemple de requête utilisant un identifiant global (méthode héritée) :

shell
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/blocks?blocking_merge_request_id=12345"

Renvoie :

  • 201 Created si la dépendance est créée avec succès.
  • 400 Bad request si l'enregistrement du merge request bloquant échoue.
  • 403 Forbidden si l'utilisateur n'a pas les permissions pour lire le merge request bloquant.
  • 404 Not found si le merge request bloquant est introuvable.
  • 409 Conflict si le bloc existe déjà.

Exemple de réponse :

json
{
  "id": 1,
  "blocking_merge_request": {
    "id": 145,
    "iid": 12,
    "project_id": 7,
    "title": "Interesting MR",
    "description": "Does interesting things.",
    "state": "opened",
    "created_at": "2024-07-05T21:29:11.172Z",
    "updated_at": "2024-07-05T21:29:11.172Z",
    "merged_by": null,
    "merge_user": null,
    "merged_at": null,
    "merge_after": "2018-09-07T11:16:00.000Z",
    "closed_by": null,
    "closed_at": null,
    "target_branch": "master",
    "source_branch": "v2.x",
    "user_notes_count": 0,
    "upvotes": 0,
    "downvotes": 0,
    "author": {
      "id": 2,
      "username": "aiguy123",
      "name": "AI GUY",
      "state": "active",
      "locked": false,
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "https://localhost/aiguy123"
    },
    "assignees": [
      {
        "id": 2,
        "username": "aiguy123",
        "name": "AI GUY",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "https://localhost/aiguy123"
      }
    ],
    "assignee": {
      "id": 2,
      "username": "aiguy123",
      "name": "AI GUY",
      "state": "active",
      "locked": false,
      "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
      "web_url": "https://localhost/aiguy123"
    },
    "reviewers": [
      {
        "id": 2,
        "username": "aiguy123",
        "name": "AI GUY",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "https://localhost/aiguy123"
      },
      {
        "id": 1,
        "username": "root",
        "name": "Administrator",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "https://localhost/root"
      }
    ],
    "source_project_id": 7,
    "target_project_id": 7,
    "labels": [],
    "draft": false,
    "imported": false,
    "imported_from": "none",
    "work_in_progress": false,
    "milestone": null,
    "merge_when_pipeline_succeeds": false,
    "merge_status": "unchecked",
    "detailed_merge_status": "unchecked",
    "sha": "ce7e4f2d0ce13cb07479bb39dc10ee3b861c08a6",
    "merge_commit_sha": null,
    "squash_commit_sha": null,
    "discussion_locked": null,
    "should_remove_source_branch": null,
    "force_remove_source_branch": true,
    "prepared_at": null,
    "reference": "!12",
    "references": {
      "short": "!12",
      "relative": "!12",
      "full": "my-group/my-project!12"
    },
    "web_url": "https://localhost/my-group/my-project/-/merge_requests/12",
    "time_stats": {
      "time_estimate": 0,
      "total_time_spent": 0,
      "human_time_estimate": null,
      "human_total_time_spent": null
    },
    "squash": false,
    "squash_on_merge": false,
    "task_completion_status": {
      "count": 0,
      "completed_count": 0
    },
    "has_conflicts": false,
    "blocking_discussions_resolved": true,
    "approvals_before_merge": null
  },
  "project_id": 7
}

Récupérer les merge requests bloqués {#retrieve-blocked-merge-requests}

Récupérer les merge requests bloqués par un merge request.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/blockees

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.

Exemple de requête :

shell
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/blockees"

Exemple de réponse :

json
[
  {
    "id": 18,
    "blocking_merge_request": {
      "id": 71,
      "iid": 10,
      "project_id": 7,
      "title": "At quaerat occaecati voluptate ex explicabo nisi.",
      "description": "Aliquid distinctio officia corrupti ad nemo natus ipsum culpa.",
      "state": "merged",
      "created_at": "2024-07-05T19:44:14.023Z",
      "updated_at": "2024-07-05T19:44:14.023Z",
      "merged_by": {
        "id": 40,
        "username": "i-user-0-1720208283",
        "name": "I User0",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/8325417f0f7919e3724957543b4414fdeca612cade1e4c0be45685fdaa2be0e2?s=80&d=identicon",
        "web_url": "http://127.0.0.1:3000/i-user-0-1720208283"
      },
      "merge_user": {
        "id": 40,
        "username": "i-user-0-1720208283",
        "name": "I User0",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/8325417f0f7919e3724957543b4414fdeca612cade1e4c0be45685fdaa2be0e2?s=80&d=identicon",
        "web_url": "http://127.0.0.1:3000/i-user-0-1720208283"
      },
      "merged_at": "2024-06-26T19:44:14.123Z",
      "closed_by": null,
      "closed_at": null,
      "target_branch": "master",
      "source_branch": "Brickwood-Brunefunc-417",
      "user_notes_count": 0,
      "upvotes": 0,
      "downvotes": 0,
      "author": {
        "id": 40,
        "username": "i-user-0-1720208283",
        "name": "I User0",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/8325417f0f7919e3724957543b4414fdeca612cade1e4c0be45685fdaa2be0e2?s=80&d=identicon",
        "web_url": "http://127.0.0.1:3000/i-user-0-1720208283"
      },
      "assignees": [],
      "assignee": null,
      "reviewers": [],
      "source_project_id": 7,
      "target_project_id": 7,
      "labels": [],
      "draft": false,
      "imported": false,
      "imported_from": "none",
      "work_in_progress": false,
      "milestone": null,
      "merge_when_pipeline_succeeds": false,
      "merge_status": "can_be_merged",
      "detailed_merge_status": "not_open",
      "merge_after": null,
      "sha": null,
      "merge_commit_sha": null,
      "squash_commit_sha": null,
      "discussion_locked": null,
      "should_remove_source_branch": null,
      "force_remove_source_branch": null,
      "prepared_at": null,
      "reference": "!10",
      "references": {
        "short": "!10",
        "relative": "!10",
        "full": "flightjs/Flight!10"
      },
      "web_url": "http://127.0.0.1:3000/flightjs/Flight/-/merge_requests/10",
      "time_stats": {
        "time_estimate": 0,
        "total_time_spent": 0,
        "human_time_estimate": null,
        "human_total_time_spent": null
      },
      "squash": false,
      "squash_on_merge": false,
      "task_completion_status": {
        "count": 0,
        "completed_count": 0
      },
      "has_conflicts": false,
      "blocking_discussions_resolved": true,
      "approvals_before_merge": null
    },
    "blocked_merge_request": {
      "id": 176,
      "iid": 14,
      "project_id": 7,
      "title": "second_mr",
      "description": "Signed-off-by: Lucas Zampieri <[email protected]>",
      "state": "opened",
      "created_at": "2024-07-08T19:12:29.089Z",
      "updated_at": "2024-08-27T19:27:17.045Z",
      "merged_by": null,
      "merge_user": null,
      "merged_at": null,
      "closed_by": null,
      "closed_at": null,
      "target_branch": "master",
      "source_branch": "second_mr",
      "user_notes_count": 0,
      "upvotes": 0,
      "downvotes": 0,
      "author": {
        "id": 1,
        "username": "root",
        "name": "Administrator",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/fc3634394c590e212d964e8e0a34c4d9b8c17c992f4d6d145d75f9c21c1c3b6e?s=80&d=identicon",
        "web_url": "http://127.0.0.1:3000/root"
      },
      "assignees": [],
      "assignee": null,
      "reviewers": [],
      "source_project_id": 7,
      "target_project_id": 7,
      "labels": [],
      "draft": false,
      "imported": false,
      "imported_from": "none",
      "work_in_progress": false,
      "milestone": null,
      "merge_when_pipeline_succeeds": false,
      "merge_status": "cannot_be_merged",
      "detailed_merge_status": "commits_status",
      "merge_after": null,
      "sha": "3a576801e528db79a75fbfea463673054ff224fb",
      "merge_commit_sha": null,
      "squash_commit_sha": null,
      "discussion_locked": null,
      "should_remove_source_branch": null,
      "force_remove_source_branch": true,
      "prepared_at": null,
      "reference": "!14",
      "references": {
        "short": "!14",
        "relative": "!14",
        "full": "flightjs/Flight!14"
      },
      "web_url": "http://127.0.0.1:3000/flightjs/Flight/-/merge_requests/14",
      "time_stats": {
        "time_estimate": 0,
        "total_time_spent": 0,
        "human_time_estimate": null,
        "human_total_time_spent": null
      },
      "squash": false,
      "squash_on_merge": false,
      "task_completion_status": {
        "count": 0,
        "completed_count": 0
      },
      "has_conflicts": true,
      "blocking_discussions_resolved": true,
      "approvals_before_merge": null
    },
    "project_id": 7
  }
]

Récupérer les modifications d'un merge request {#retrieve-merge-request-changes}

[!warning] Ce point de terminaison a été déprécié dans GitLab 15.7 et est prévu pour suppression dans la version v5 de l'API. Utilisez plutôt le point de terminaison liste des diffs de merge request.

<!-- Do not remove line until endpoint is actually removed -->

Récupérer des informations sur un merge request, notamment ses fichiers et ses modifications.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/changes

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.
access_raw_diffsbooleanNonRécupérer les diffs de modifications via Gitaly.
unidiffbooleanNonPrésenter les diffs de modifications au format diff unifié. La valeur par défaut est false. Introduite dans GitLab 16.5.

Les diffs associés à l'ensemble des modifications sont soumis aux mêmes limitations de taille que les autres diffs renvoyés par l'API ou consultés via l'interface utilisateur. Lorsque ces limites impactent les résultats, le champ overflow contient la valeur true. Récupérez les données de diff sans ces limites en ajoutant le paramètre access_raw_diffs, qui accède aux diffs directement depuis Gitaly, et non depuis la base de données. Cette approche est généralement plus lente et plus gourmande en ressources, mais n'est pas soumise aux limites de taille imposées aux diffs stockés en base de données. Les limites inhérentes à Gitaly s'appliquent toujours.

Exemple de réponse :

json
{
  "id": 21,
  "iid": 1,
  "project_id": 4,
  "title": "Blanditiis beatae suscipit hic assumenda et molestias nisi asperiores repellat et.",
  "state": "reopened",
  "created_at": "2015-02-02T19:49:39.159Z",
  "updated_at": "2015-02-02T20:08:49.959Z",
  "target_branch": "secret_token",
  "source_branch": "version-1-9",
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "name": "Chad Hamill",
    "username": "jarrett",
    "id": 5,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/b95567800f828948baf5f4160ebb2473?s=40&d=identicon",
    "web_url" : "https://gitlab.example.com/jarrett"
  },
  "assignee": {
    "name": "Administrator",
    "username": "root",
    "id": 1,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40&d=identicon",
    "web_url" : "https://gitlab.example.com/root"
  },
  "assignees": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "reviewers": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "source_project_id": 4,
  "target_project_id": 4,
  "labels": [ ],
  "description": "Qui voluptatibus placeat ipsa alias quasi. Deleniti rem ut sint. Optio velit qui distinctio.",
  "draft": false,
  "work_in_progress": false,
  "milestone": {
    "id": 5,
    "iid": 1,
    "project_id": 4,
    "title": "v2.0",
    "description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
    "state": "closed",
    "created_at": "2015-02-02T19:49:26.013Z",
    "updated_at": "2015-02-02T19:49:26.013Z",
    "due_date": null
  },
  "merge_when_pipeline_succeeds": true,
  "merge_status": "can_be_merged",
  "detailed_merge_status": "mergeable",
  "subscribed" : true,
  "sha": "8888888888888888888888888888888888888888",
  "merge_commit_sha": null,
  "squash_commit_sha": null,
  "user_notes_count": 1,
  "changes_count": "1",
  "should_remove_source_branch": true,
  "force_remove_source_branch": false,
  "squash": false,
  "web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
  "references": {
    "short": "!1",
    "relative": "!1",
    "full": "my-group/my-project!1"
  },
  "discussion_locked": false,
  "time_stats": {
    "time_estimate": 0,
    "total_time_spent": 0,
    "human_time_estimate": null,
    "human_total_time_spent": null
  },
  "task_completion_status":{
    "count":0,
    "completed_count":0
  },
  "changes": [
    {
    "old_path": "VERSION",
    "new_path": "VERSION",
    "a_mode": "100644",
    "b_mode": "100644",
    "diff": "@@ -1 +1 @@\ -1.9.7\ +1.9.8",
    "new_file": false,
    "renamed_file": false,
    "deleted_file": false
    }
  ],
  "overflow": false
}

Lister les diffs d'un merge request {#list-merge-request-diffs}

{{< history >}}

{{< /history >}}

Lister les diffs des fichiers modifiés dans un merge request.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/diffs

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.
pageentierNonLa page de résultats à renvoyer. La valeur par défaut est 1.
per_pageentierNonLe nombre de résultats par page. La valeur par défaut est 20.
unidiffbooleanNonPrésenter les diffs au format diff unifié. La valeur par défaut est false. Introduite dans GitLab 16.5.

En cas de succès, renvoie 200 OK et les attributs de réponse suivants :

AttributTypeDescription
a_modestringAncien mode de fichier du fichier.
b_modestringNouveau mode de fichier du fichier.
collapsedbooleanLes diffs du fichier sont exclus mais peuvent être récupérés à la demande.
deleted_filebooleanLe fichier a été supprimé.
diffstringReprésentation diff des modifications apportées au fichier.
generated_filebooleanLe fichier est marqué comme généré.
new_filebooleanLe fichier a été ajouté.
new_pathstringNouveau chemin du fichier.
old_pathstringAncien chemin du fichier.
renamed_filebooleanLe fichier a été renommé.
too_largebooleanLes diffs du fichier sont exclus et ne peuvent pas être récupérés.

Exemple de requête :

shell
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/diffs?page=1&per_page=2"

Exemple de réponse :

json
[
  {
    "old_path": "README",
    "new_path": "README",
    "a_mode": "100644",
    "b_mode": "100644",
    "diff": "@@ -1 +1 @@\ -Title\ +README",
    "collapsed": false,
    "too_large": false,
    "new_file": false,
    "renamed_file": false,
    "deleted_file": false,
    "generated_file": false
  },
  {
    "old_path": "VERSION",
    "new_path": "VERSION",
    "a_mode": "100644",
    "b_mode": "100644",
    "diff": "@@\ -1.9.7\ +1.9.8",
    "collapsed": false,
    "too_large": false,
    "new_file": false,
    "renamed_file": false,
    "deleted_file": false,
    "generated_file": false
  }
]

[!note] Ce point de terminaison est soumis aux limites de diff des merge requests. Les merge requests qui dépassent les limites de diff renvoient des résultats limités.

Afficher les diffs bruts d'un merge request {#show-merge-request-raw-diffs}

Afficher les diffs bruts des fichiers modifiés dans un merge request.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/raw_diffs

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.

En cas de succès, renvoie 200 OK et une réponse diff brute à utiliser par programmation :

Exemple de requête :

shell
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/raw_diffs"

Exemple de réponse :

diff
        diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb
index 31525ad523553c8d7eff163db3e539058efd6d3a..f30e36d6fdf4cd4fa25f62e08ecdbf4a7b169681 100644
--- a/lib/api/helpers.rb
+++ b/lib/api/helpers.rb
@@ -944,6 +944,10 @@ def send_git_blob(repository, blob)
       body ''
     end

+    def send_git_diff(repository, diff_refs)
+      header(*Gitlab::Workhorse.send_git_diff(repository, diff_refs))
+    end
+
     def send_git_archive(repository, **kwargs)
       header(*Gitlab::Workhorse.send_git_archive(repository, **kwargs))

diff --git a/lib/api/merge_requests.rb b/lib/api/merge_requests.rb
index e02d9eea1852f19fe5311acda6aa17465eeb422e..f32b38585398a18fea75c11d7b8ebb730eeb3fab 100644
--- a/lib/api/merge_requests.rb
+++ b/lib/api/merge_requests.rb
@@ -6,6 +6,8 @@ class MergeRequests < ::API::Base
     include PaginationParams
     include Helpers::Unidiff

+    helpers ::API::Helpers::HeadersHelpers
+
     CONTEXT_COMMITS_POST_LIMIT = 20

     before { authenticate_non_get! }

[!note] Ce point de terminaison est soumis aux limites de diff des merge requests. Les merge requests qui dépassent les limites de diff renvoient des résultats limités.

Lister les pipelines d'un merge request {#list-merge-request-pipelines}

Lister tous les pipelines d'un merge request.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/pipelines

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.

Pour restreindre la liste des pipelines de merge request, utilisez les paramètres de pagination page et per_page.

Exemple de réponse :

json
[
  {
    "id": 77,
    "sha": "959e04d7c7a30600c894bd3c0cd0e1ce7f42c11d",
    "ref": "main",
    "status": "success"
  }
]

Créer un pipeline de merge request {#create-merge-request-pipeline}

Créer un nouveau pipeline pour un merge request. Un pipeline créé depuis ce point de terminaison n'exécute pas un pipeline de branche/tag ordinaire. Pour créer des jobs, configurez .gitlab-ci.yml avec only: [merge_requests].

Le nouveau pipeline peut être :

plaintext
POST /projects/:id/merge_requests/:merge_request_iid/pipelines

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.

Exemple de réponse :

json
{
  "id": 2,
  "sha": "b83d6e391c22777fca1ed3012fce84f633d7fed0",
  "ref": "refs/merge-requests/1/head",
  "status": "pending",
  "web_url": "http://localhost/user1/project1/pipelines/2",
  "before_sha": "0000000000000000000000000000000000000000",
  "tag": false,
  "yaml_errors": null,
  "user": {
    "id": 1,
    "name": "John Doe1",
    "username": "user1",
    "state": "active",
    "avatar_url": "https://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon",
    "web_url": "http://example.com"
  },
  "created_at": "2019-09-04T19:20:18.267Z",
  "updated_at": "2019-09-04T19:20:18.459Z",
  "started_at": null,
  "finished_at": null,
  "committed_at": null,
  "duration": null,
  "coverage": null,
  "detailed_status": {
    "icon": "status_pending",
    "text": "pending",
    "label": "pending",
    "group": "pending",
    "tooltip": "pending",
    "has_details": false,
    "details_path": "/user1/project1/pipelines/2",
    "illustration": null,
    "favicon": "/assets/ci_favicons/favicon_status_pending-5bdf338420e5221ca24353b6bff1c9367189588750632e9a871b7af09ff6a2ae.png"
  },
  "archived": false
}

Créer un merge request {#create-a-merge-request}

Créer un nouveau merge request.

plaintext
POST /projects/:id/merge_requests
AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet
source_branchstringOuiLa branche source.
target_branchstringOuiLa branche cible.
titlestringOuiTitre du merge request.
allow_collaborationbooleanNonAutoriser les commits des membres pouvant fusionner dans la branche cible.
approvals_before_mergeentierNonNombre d'approbations requises avant que ce merge request puisse être fusionné (voir ci-dessous). Pour configurer les règles d'approbation, consultez l'API d'approbation des merge requests. Obsolète dans GitLab 16.0. Premium et Ultimate uniquement.
allow_maintainer_to_pushbooleanNonAlias de allow_collaboration.
assignee_identierNonIdentifiant de l'utilisateur assigné.
assignee_idstableau d'entiersNonL'identifiant des utilisateurs à assigner au merge request. Définissez la valeur sur 0 ou fournissez une valeur vide pour retirer tous les assignés.
descriptionstringNonDescription de la merge request. Limité à 1 048 576 caractères.
labelsstringNonLabels pour le merge request, sous forme de liste séparée par des virgules. Si un label n'existe pas déjà, cela crée un nouveau label de projet et l'assigne au merge request.
merge_afterstringNonDate après laquelle le merge request peut être fusionné. Introduit dans GitLab 17.8.
milestone_identierNonL'identifiant global d'un jalon. Mutuellement exclusif avec milestone.
milestonestringNonLe titre d'un jalon de projet ou de groupe ancêtre à assigner au merge request. Correspondance exacte (sensible à la casse). Mutuellement exclusif avec milestone_id.
remove_source_branchbooleanNonIndicateur spécifiant si un merge request doit supprimer la branche source lors de la fusion.
reviewer_idstableau d'entiersNonL'identifiant des utilisateurs ajoutés en tant que relecteur au merge request. Si défini sur 0 ou laissé vide, aucun relecteur n'est ajouté.
squashbooleanNonSi true, tous les commits sont squashés en un seul commit lors de la fusion. Si non fourni, utilise par défaut le paramètre d'option squash du projet. Les paramètres du projet peuvent remplacer cette valeur au moment de la fusion.
target_project_identierNonIdentifiant numérique du projet cible.

Exemple de réponse :

json
{
  "id": 1,
  "iid": 1,
  "project_id": 3,
  "title": "test1",
  "description": "fixed login page css paddings",
  "state": "merged",
  "imported": false,
  "imported_from": "none",
  "created_at": "2017-04-29T08:46:00Z",
  "updated_at": "2017-04-29T08:46:00Z",
  "target_branch": "main",
  "source_branch": "test1",
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  "assignee": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  "source_project_id": 2,
  "target_project_id": 3,
  "labels": [
    "Community contribution",
    "Manage"
  ],
  "draft": false,
  "work_in_progress": false,
  "milestone": {
    "id": 5,
    "iid": 1,
    "project_id": 3,
    "title": "v2.0",
    "description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
    "state": "closed",
    "created_at": "2015-02-02T19:49:26.013Z",
    "updated_at": "2015-02-02T19:49:26.013Z",
    "due_date": "2018-09-22",
    "start_date": "2018-08-08",
    "web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
  },
  "merge_when_pipeline_succeeds": true,
  "merge_status": "can_be_merged",
  "detailed_merge_status": "not_open",
  "merge_error": null,
  "sha": "8888888888888888888888888888888888888888",
  "merge_commit_sha": null,
  "squash_commit_sha": null,
  "user_notes_count": 1,
  "discussion_locked": null,
  "should_remove_source_branch": true,
  "force_remove_source_branch": false,
  "allow_collaboration": false,
  "allow_maintainer_to_push": false,
  "web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
  "references": {
    "short": "!1",
    "relative": "!1",
    "full": "my-group/my-project!1"
  },
  "time_stats": {
    "time_estimate": 0,
    "total_time_spent": 0,
    "human_time_estimate": null,
    "human_total_time_spent": null
  },
  "squash": false,
  "subscribed": false,
  "changes_count": "1",
  "merged_by": { // Deprecated and will be removed in API v5, use `merge_user` instead
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merge_user": {
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merged_at": "2018-09-07T11:16:17.520Z",
  "merge_after": "2018-09-07T11:16:00.000Z",
  "prepared_at": "2018-09-04T11:16:17.520Z",
  "closed_by": null,
  "closed_at": null,
  "latest_build_started_at": "2018-09-07T07:27:38.472Z",
  "latest_build_finished_at": "2018-09-07T08:07:06.012Z",
  "first_deployed_to_production_at": null,
  "pipeline": {
    "id": 29626725,
    "sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
    "ref": "patch-28",
    "status": "success",
    "web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
  },
  "diff_refs": {
    "base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
    "head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
    "start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
  },
  "diverged_commits_count": 2,
  "task_completion_status":{
    "count":0,
    "completed_count":0
  }
}

Pour les notes importantes sur les données de réponse, voir notes sur la réponse d'une merge request unique.

Mettre à jour un merge request {#update-a-merge-request}

Mettre à jour un merge request existant.

plaintext
PUT /projects/:id/merge_requests/:merge_request_iid
AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'identifiant d'un merge request.
add_labelsstringNonNoms de labels séparés par des virgules à ajouter à un merge request. Si un label n'existe pas déjà, cela crée un nouveau label de projet et l'assigne au merge request.
allow_collaborationbooleanNonAutoriser les commits des membres pouvant fusionner dans la branche cible.
allow_maintainer_to_pushbooleanNonAlias de allow_collaboration.
assignee_identierNonL'identifiant de l'utilisateur à assigner au merge request. Définissez la valeur sur 0 ou fournissez une valeur vide pour retirer tous les assignés.
assignee_idstableau d'entiersNonL'identifiant des utilisateurs à assigner au merge request. Définissez la valeur sur 0 ou fournissez une valeur vide pour retirer tous les assignés.
descriptionstringNonDescription de la merge request. Limité à 1 048 576 caractères.
discussion_lockedbooleanNonIndicateur spécifiant si la discussion du merge request est verrouillée. Seuls les membres du projet peuvent ajouter, modifier ou résoudre des commentaires dans les discussions verrouillées.
labelsstringNonNoms de labels séparés par des virgules pour un merge request. Définir sur une chaîne vide pour annuler l'attribution de tous les labels. Si un label n'existe pas déjà, cela crée un nouveau label de projet et l'assigne au merge request.
merge_afterstringNonDate après laquelle le merge request peut être fusionné. Introduit dans GitLab 17.8.
milestone_identierNonL'identifiant global d'un jalon à assigner au merge request. Définissez la valeur sur 0 ou fournissez une valeur vide pour retirer le jalon. Mutuellement exclusif avec milestone.
milestonestringNonLe titre d'un jalon de projet ou de groupe ancêtre à assigner au merge request. Correspondance exacte (sensible à la casse). Mutuellement exclusif avec milestone_id.
remove_labelsstringNonNoms de labels séparés par des virgules à retirer d'un merge request.
remove_source_branchbooleanNonIndicateur spécifiant si un merge request doit supprimer la branche source lors de la fusion.
reviewer_idstableau d'entiersNonL'identifiant des utilisateurs définis en tant que relecteur du merge request. Définissez la valeur sur 0 ou fournissez une valeur vide pour retirer tous les relecteurs.
squashbooleanNonSi true, tous les commits sont squashés en un seul commit lors de la fusion. Si non fourni, utilise par défaut le paramètre d'option squash du projet. Si le projet est configuré pour Exiger ou Ne pas autoriser le squash, ce paramètre prend le dessus au moment de la fusion.
state_eventstringNonNouvel état (fermer/rouvrir).
target_branchstringNonLa branche cible.
titlestringNonTitre du merge request.

Doit inclure au moins un attribut non obligatoire.

Exemple de réponse :

json
{
  "id": 1,
  "iid": 1,
  "project_id": 3,
  "title": "test1",
  "description": "fixed login page css paddings",
  "state": "merged",
  "created_at": "2017-04-29T08:46:00Z",
  "updated_at": "2017-04-29T08:46:00Z",
  "target_branch": "main",
  "source_branch": "test1",
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  "assignee": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  "assignees": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "reviewers": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "source_project_id": 2,
  "target_project_id": 3,
  "labels": [
    "Community contribution",
    "Manage"
  ],
  "draft": false,
  "work_in_progress": false,
  "milestone": {
    "id": 5,
    "iid": 1,
    "project_id": 3,
    "title": "v2.0",
    "description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
    "state": "closed",
    "created_at": "2015-02-02T19:49:26.013Z",
    "updated_at": "2015-02-02T19:49:26.013Z",
    "due_date": "2018-09-22",
    "start_date": "2018-08-08",
    "web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
  },
  "merge_when_pipeline_succeeds": true,
  "merge_status": "can_be_merged",
  "detailed_merge_status": "not_open",
  "merge_error": null,
  "sha": "8888888888888888888888888888888888888888",
  "merge_commit_sha": null,
  "squash_commit_sha": null,
  "user_notes_count": 1,
  "discussion_locked": null,
  "should_remove_source_branch": true,
  "force_remove_source_branch": false,
  "allow_collaboration": false,
  "allow_maintainer_to_push": false,
  "web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
  "references": {
    "short": "!1",
    "relative": "!1",
    "full": "my-group/my-project!1"
  },
  "time_stats": {
    "time_estimate": 0,
    "total_time_spent": 0,
    "human_time_estimate": null,
    "human_total_time_spent": null
  },
  "squash": false,
  "subscribed": false,
  "changes_count": "1",
  "merged_by": { // Deprecated and will be removed in API v5, use `merge_user` instead
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merge_user": {
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merged_at": "2018-09-07T11:16:17.520Z",
  "merge_after": "2018-09-07T11:16:00.000Z",
  "prepared_at": "2018-09-04T11:16:17.520Z",
  "closed_by": null,
  "closed_at": null,
  "latest_build_started_at": "2018-09-07T07:27:38.472Z",
  "latest_build_finished_at": "2018-09-07T08:07:06.012Z",
  "first_deployed_to_production_at": null,
  "pipeline": {
    "id": 29626725,
    "sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
    "ref": "patch-28",
    "status": "success",
    "web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
  },
  "diff_refs": {
    "base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
    "head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
    "start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
  },
  "diverged_commits_count": 2,
  "task_completion_status":{
    "count":0,
    "completed_count":0
  }
}

Pour les notes importantes sur les données de réponse, voir notes sur la réponse d'une merge request unique.

Supprimer un merge request {#delete-a-merge-request}

Supprimer un merge request. Seuls les administrateurs et les propriétaires de projets peuvent supprimer des merge requests.

plaintext
DELETE /projects/:id/merge_requests/:merge_request_iid
AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.
shell
curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/4/merge_requests/85"

Fusionner un merge request {#merge-a-merge-request}

Accepter et fusionner les modifications soumises avec un merge request à l'aide de cette API.

plaintext
PUT /projects/:id/merge_requests/:merge_request_iid/merge

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.
auto_mergebooleanNonSi true, le merge request fusionne lorsque le pipeline réussit.
merge_commit_messagestringNonMessage de commit de fusion personnalisé.
merge_when_pipeline_succeedsbooleanNonObsolète dans GitLab 17.11. Utilisez auto_merge à la place.
shastringNonSi présent, ce SHA doit correspondre au HEAD de la branche source. Utilisez ce paramètre pour vous assurer que seuls les commits examinés sont fusionnés.
should_remove_source_branchbooleanNonSi true, supprime la branche source.
squash_commit_messagestringNonMessage de commit de squash personnalisé.
squashbooleanNonSi true, tous les commits sont squashés en un seul commit lors de la fusion.

Cette API renvoie des codes de statut HTTP spécifiques en cas d'échec :

Statut HTTPMessageRaison
401401 UnauthorizedCet utilisateur n'est pas autorisé à accepter ce merge request.
405405 Method Not AllowedLe merge request ne peut pas être fusionné.
409SHA does not match HEAD of source branchLe paramètre sha fourni ne correspond pas au HEAD de la source.
422Branch cannot be mergedLa fusion du merge request a échoué.

Pour les notes importantes sur les données de réponse, voir notes sur la réponse d'une merge request unique.

Exemple de réponse :

json
{
  "id": 1,
  "iid": 1,
  "project_id": 3,
  "title": "test1",
  "description": "fixed login page css paddings",
  "state": "merged",
  "created_at": "2017-04-29T08:46:00Z",
  "updated_at": "2017-04-29T08:46:00Z",
  "target_branch": "main",
  "source_branch": "test1",
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  "assignee": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  "assignees": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "reviewers": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "source_project_id": 2,
  "target_project_id": 3,
  "labels": [
    "Community contribution",
    "Manage"
  ],
  "draft": false,
  "work_in_progress": false,
  "milestone": {
    "id": 5,
    "iid": 1,
    "project_id": 3,
    "title": "v2.0",
    "description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
    "state": "closed",
    "created_at": "2015-02-02T19:49:26.013Z",
    "updated_at": "2015-02-02T19:49:26.013Z",
    "due_date": "2018-09-22",
    "start_date": "2018-08-08",
    "web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
  },
  "merge_when_pipeline_succeeds": true,
  "merge_status": "can_be_merged",
  "detailed_merge_status": "not_open",
  "merge_error": null,
  "sha": "8888888888888888888888888888888888888888",
  "merge_commit_sha": null,
  "squash_commit_sha": null,
  "user_notes_count": 1,
  "discussion_locked": null,
  "should_remove_source_branch": true,
  "force_remove_source_branch": false,
  "allow_collaboration": false,
  "allow_maintainer_to_push": false,
  "web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
  "references": {
    "short": "!1",
    "relative": "!1",
    "full": "my-group/my-project!1"
  },
  "time_stats": {
    "time_estimate": 0,
    "total_time_spent": 0,
    "human_time_estimate": null,
    "human_total_time_spent": null
  },
  "squash": false,
  "subscribed": false,
  "changes_count": "1",
  "merged_by": { // Deprecated and will be removed in API v5, use `merge_user` instead
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merge_user": {
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merged_at": "2018-09-07T11:16:17.520Z",
  "merge_after": "2018-09-07T11:16:00.000Z",
  "prepared_at": "2018-09-04T11:16:17.520Z",
  "closed_by": null,
  "closed_at": null,
  "latest_build_started_at": "2018-09-07T07:27:38.472Z",
  "latest_build_finished_at": "2018-09-07T08:07:06.012Z",
  "first_deployed_to_production_at": null,
  "pipeline": {
    "id": 29626725,
    "sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
    "ref": "patch-28",
    "status": "success",
    "web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
  },
  "diff_refs": {
    "base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
    "head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
    "start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
  },
  "diverged_commits_count": 2,
  "task_completion_status":{
    "count":0,
    "completed_count":0
  }
}

Fusionner vers le chemin de référence de fusion par défaut {#merge-to-default-merge-ref-path}

Fusionne les modifications entre les branches source et cible du merge request dans la référence refs/merge-requests/:iid/merge du dépôt du projet cible, si possible. Cette référence représente l'état que la branche cible aurait si une action de fusion ordinaire était effectuée.

Cette action n'est pas une action de fusion ordinaire, car elle ne modifie en aucune façon l'état de la branche cible du merge request.

Cette référence (refs/merge-requests/:iid/merge) n'est pas nécessairement écrasée lors de l'envoi de requêtes à cette API, bien qu'elle s'assure que la référence est dans l'état le plus récent possible.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/merge_ref

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.

Cette API renvoie des codes de statut HTTP spécifiques :

Statut HTTPMessageRaison
200(aucun)Succès. Renvoie le commit HEAD de refs/merge-requests/:iid/merge.
400Merge request is not mergeableLe merge request présente des conflits.
400Merge ref cannot be updated
400Unsupported operationLa base de données GitLab est en mode lecture seule.

Exemple de réponse :

json
{
  "commit_id": "854a3a7a17acbcc0bbbea170986df1eb60435f34"
}

Annuler la fusion lorsque le pipeline réussit {#cancel-merge-when-pipeline-succeeds}

plaintext
POST /projects/:id/merge_requests/:merge_request_iid/cancel_merge_when_pipeline_succeeds

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.

Cette API renvoie des codes de statut HTTP spécifiques :

Statut HTTPMessageRaison
201(aucun)Succès, ou le merge request a déjà été fusionné.
406Can't cancel the automatic mergeLe merge request est fermé.

Pour les notes importantes sur les données de réponse, voir notes sur la réponse d'une merge request unique.

Exemple de réponse :

json
{
  "id": 1,
  "iid": 1,
  "project_id": 3,
  "title": "test1",
  "description": "fixed login page css paddings",
  "state": "merged",
  "created_at": "2017-04-29T08:46:00Z",
  "updated_at": "2017-04-29T08:46:00Z",
  "target_branch": "main",
  "source_branch": "test1",
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  "assignee": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  "assignees": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "reviewers": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "source_project_id": 2,
  "target_project_id": 3,
  "labels": [
    "Community contribution",
    "Manage"
  ],
  "draft": false,
  "work_in_progress": false,
  "milestone": {
    "id": 5,
    "iid": 1,
    "project_id": 3,
    "title": "v2.0",
    "description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
    "state": "closed",
    "created_at": "2015-02-02T19:49:26.013Z",
    "updated_at": "2015-02-02T19:49:26.013Z",
    "due_date": "2018-09-22",
    "start_date": "2018-08-08",
    "web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
  },
  "merge_when_pipeline_succeeds": false,
  "merge_status": "can_be_merged",
  "detailed_merge_status": "not_open",
  "merge_error": null,
  "sha": "8888888888888888888888888888888888888888",
  "merge_commit_sha": null,
  "squash_commit_sha": null,
  "user_notes_count": 1,
  "discussion_locked": null,
  "should_remove_source_branch": true,
  "force_remove_source_branch": false,
  "allow_collaboration": false,
  "allow_maintainer_to_push": false,
  "web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
  "references": {
    "short": "!1",
    "relative": "!1",
    "full": "my-group/my-project!1"
  },
  "time_stats": {
    "time_estimate": 0,
    "total_time_spent": 0,
    "human_time_estimate": null,
    "human_total_time_spent": null
  },
  "squash": false,
  "subscribed": false,
  "changes_count": "1",
  "merged_by": { // Deprecated and will be removed in API v5, use `merge_user` instead
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merge_user": {
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merged_at": "2018-09-07T11:16:17.520Z",
  "merge_after": "2018-09-07T11:16:00.000Z",
  "prepared_at": "2018-09-04T11:16:17.520Z",
  "closed_by": null,
  "closed_at": null,
  "latest_build_started_at": "2018-09-07T07:27:38.472Z",
  "latest_build_finished_at": "2018-09-07T08:07:06.012Z",
  "first_deployed_to_production_at": null,
  "pipeline": {
    "id": 29626725,
    "sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
    "ref": "patch-28",
    "status": "success",
    "web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
  },
  "diff_refs": {
    "base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
    "head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
    "start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
  },
  "diverged_commits_count": 2,
  "task_completion_status":{
    "count":0,
    "completed_count":0
  }
}

Rebaser un merge request {#rebase-a-merge-request}

Rebaser automatiquement le source_branch du merge request par rapport à son target_branch.

plaintext
PUT /projects/:id/merge_requests/:merge_request_iid/rebase
AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.
skip_cibooleanNonDéfinissez sur true pour ignorer la création d'un pipeline CI.
shell
curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/rebase"

Cette API renvoie des codes de statut HTTP spécifiques :

Statut HTTPMessageRaison
202(aucun message)Ajouté à la file d'attente avec succès.
403Cannot push to source branchVous n'avez pas l'autorisation de pousser vers la branche source du merge request.
403Source branch does not existVous n'avez pas l'autorisation de pousser vers la branche source du merge request.
403Source branch is protected from force pushVous n'avez pas l'autorisation de pousser vers la branche source du merge request.
409Failed to enqueue the rebase operationUne transaction de longue durée a peut-être bloqué votre requête.

Si la requête est ajoutée à la file d'attente avec succès, la réponse contient :

json
{
  "rebase_in_progress": true
}

Vous pouvez interroger le point de terminaison récupérer un merge request avec le paramètre include_rebase_in_progress pour vérifier le statut de la requête asynchrone.

Si l'opération de rebase est en cours, la réponse inclut les éléments suivants :

json
{
  "rebase_in_progress": true,
  "merge_error": null
}

Une fois l'opération de rebase terminée avec succès, la réponse inclut les éléments suivants :

json
{
  "rebase_in_progress": false,
  "merge_error": null
}

Si l'opération de rebase échoue, la réponse inclut les éléments suivants :

json
{
  "rebase_in_progress": false,
  "merge_error": "Rebase failed. Please rebase locally"
}

Commentaires sur les merge requests {#comments-on-merge-requests}

La ressource notes permet de créer des commentaires.

Lister les tickets qui se ferment lors de la fusion {#list-issues-that-close-on-merge}

Lister les tickets qui seraient fermés lors de la fusion d'un merge request.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/closes_issues

Attributs pris en charge :

AttributTypeObligatoireDescription
identier ou chaîneOuiID ou chemin encodé en URL du projet.
merge_request_iidentierOuiIdentifiant interne de la merge request.

En cas de succès, renvoie 200 OK et les attributs de réponse suivants lorsque vous utilisez le système de suivi des tickets GitLab :

AttributTypeDescription
[].assigneeobjetPremier responsable du ticket.
[].assigneestableauResponsables du ticket.
[].authorobjetUtilisateur qui a créé ce ticket.
[].blocking_issues_countentierNombre de tickets que ce ticket bloque.
[].closed_atdatetimeHorodatage de la fermeture du ticket.
[].closed_byobjetUtilisateur qui a fermé ce ticket.
[].confidentialbooleanIndique si le ticket est confidentiel.
[].created_atdatetimeHorodatage de la création du ticket.
[].descriptionstringDescription du ticket.
[].discussion_lockedbooleanIndique si les commentaires sur le ticket sont réservés aux membres.
[].downvotesentierNombre de votes négatifs reçus par le ticket.
[].due_datedateDate d'échéance du ticket.
[].identierID du ticket.
[].iidentierID interne du ticket.
[].issue_typestringType du ticket. Peut être issue, incident, test_case, requirement, task.
[].labelstableauLabels du ticket.
[].merge_requests_countentierNombre de merge requests qui ferment le ticket lors de la fusion.
[].milestoneobjetJalon du ticket.
[].project_identierID du projet du ticket.
[].statestringÉtat du ticket. Peut être opened ou closed.
[].task_completion_statusobjetInclut count et completed_count.
[].time_statsobjetStatistiques de temps pour le ticket. Inclut time_estimate, total_time_spent, human_time_estimate et human_total_time_spent.
[].titlestringTitre du ticket.
[].typestringType du ticket. Identique à issue_type, mais en majuscules.
[].updated_atdatetimeHorodatage de la dernière mise à jour du ticket.
[].upvotesentierNombre de votes positifs reçus par le ticket.
[].user_notes_countentierNombre de notes utilisateur du ticket.
[].web_urlstringURL web du ticket.
[].weightentierPoids du ticket.

En cas de succès, renvoie 200 OK et les attributs de réponse suivants lorsque vous utilisez un système de suivi des tickets externe, tel que Jira :

AttributTypeDescription
[].identierID du ticket.
[].titlestringTitre du ticket.

Exemple de requête :

shell
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/closes_issues"

Exemple de réponse lorsque vous utilisez le système de suivi des tickets GitLab :

json
[
  {
    "id": 76,
    "iid": 6,
    "project_id": 1,
    "title": "Consequatur vero maxime deserunt laboriosam est voluptas dolorem.",
    "description": "Ratione dolores corrupti mollitia soluta quia.",
    "state": "opened",
    "created_at": "2024-09-06T10:58:49.002Z",
    "updated_at": "2024-09-06T11:01:40.710Z",
    "closed_at": null,
    "closed_by": null,
    "labels": [
      "label"
    ],
    "milestone": {
      "project_id": 1,
      "description": "Ducimus nam enim ex consequatur cumque ratione.",
      "state": "closed",
      "due_date": null,
      "iid": 2,
      "created_at": "2016-01-04T15:31:39.996Z",
      "title": "v4.0",
      "id": 17,
      "updated_at": "2016-01-04T15:31:39.996Z"
    },
    "assignees": [
      {
        "id": 1,
        "username": "root",
        "name": "Administrator",
        "state": "active",
        "locked": false,
        "avatar_url": null,
        "web_url": "https://gitlab.example.com/root"
      }
    ],
    "author": {
      "id": 18,
      "username": "eileen.lowe",
      "name": "Alexandra Bashirian",
      "state": "active",
      "locked": false,
      "avatar_url": null,
      "web_url": "https://gitlab.example.com/eileen.lowe"
    },
    "type": "ISSUE",
    "assignee": {
      "id": 1,
      "username": "root",
      "name": "Administrator",
      "state": "active",
      "locked": false,
      "avatar_url": null,
      "web_url": "https://gitlab.example.com/root"
    },
    "user_notes_count": 1,
    "merge_requests_count": 1,
    "upvotes": 0,
    "downvotes": 0,
    "due_date": null,
    "confidential": false,
    "discussion_locked": null,
    "issue_type": "issue",
    "web_url": "https://gitlab.example.com/my-group/my-project/-/issues/6",
    "time_stats": {
      "time_estimate": 0,
      "total_time_spent": 0,
      "human_time_estimate": null,
      "human_total_time_spent": null
    },
    "task_completion_status": {
      "count": 0,
      "completed_count": 0
    },
    "weight": null,
    "blocking_issues_count": 0
 }
]

Exemple de réponse lorsque vous utilisez un système de suivi des tickets externe, tel que Jira :

json
[
   {
       "id" : "PROJECT-123",
       "title" : "Title of this issue"
   }
]

Lister les tickets liés à un merge request à partir de son titre, de sa description, des messages de commit, des commentaires et des discussions.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/related_issues
AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.
shell
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/related_issues"

Exemple de réponse lorsque vous utilisez le système de suivi des tickets GitLab :

json
[
   {
      "state" : "opened",
      "description" : "Ratione dolores corrupti mollitia soluta quia.",
      "author" : {
         "state" : "active",
         "id" : 18,
         "web_url" : "https://gitlab.example.com/eileen.lowe",
         "name" : "Alexandra Bashirian",
         "avatar_url" : null,
         "username" : "eileen.lowe"
      },
      "milestone" : {
         "project_id" : 1,
         "description" : "Ducimus nam enim ex consequatur cumque ratione.",
         "state" : "closed",
         "due_date" : null,
         "iid" : 2,
         "created_at" : "2016-01-04T15:31:39.996Z",
         "title" : "v4.0",
         "id" : 17,
         "updated_at" : "2016-01-04T15:31:39.996Z"
      },
      "project_id" : 1,
      "assignee" : {
         "state" : "active",
         "id" : 1,
         "name" : "Administrator",
         "web_url" : "https://gitlab.example.com/root",
         "avatar_url" : null,
         "username" : "root"
      },
      "updated_at" : "2016-01-04T15:31:51.081Z",
      "id" : 76,
      "title" : "Consequatur vero maxime deserunt laboriosam est voluptas dolorem.",
      "created_at" : "2016-01-04T15:31:51.081Z",
      "iid" : 6,
      "labels" : [],
      "user_notes_count": 1,
      "changes_count": "1"
   }
]

Exemple de réponse lorsque vous utilisez un système de suivi des tickets externe, tel que Jira :

json
[
   {
       "id" : "PROJECT-123",
       "title" : "Title of this issue"
   }
]

S'abonner à un merge request {#subscribe-to-a-merge-request}

Abonne l'utilisateur authentifié à un merge request pour recevoir des notifications.

plaintext
POST /projects/:id/merge_requests/:merge_request_iid/subscribe
AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.

Si l'utilisateur est déjà abonné au merge request, le point de terminaison renvoie le code de statut HTTP 304 Not Modified.

shell
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/17/subscribe"

Exemple de réponse :

json
{
  "id": 1,
  "iid": 1,
  "project_id": 3,
  "title": "test1",
  "description": "fixed login page css paddings",
  "state": "merged",
  "created_at": "2017-04-29T08:46:00Z",
  "updated_at": "2017-04-29T08:46:00Z",
  "target_branch": "main",
  "source_branch": "test1",
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  "assignee": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  "assignees": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "reviewers": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "source_project_id": 2,
  "target_project_id": 3,
  "labels": [
    "Community contribution",
    "Manage"
  ],
  "draft": false,
  "work_in_progress": false,
  "milestone": {
    "id": 5,
    "iid": 1,
    "project_id": 3,
    "title": "v2.0",
    "description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
    "state": "closed",
    "created_at": "2015-02-02T19:49:26.013Z",
    "updated_at": "2015-02-02T19:49:26.013Z",
    "due_date": "2018-09-22",
    "start_date": "2018-08-08",
    "web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
  },
  "merge_when_pipeline_succeeds": true,
  "merge_status": "can_be_merged",
  "detailed_merge_status": "not_open",
  "sha": "8888888888888888888888888888888888888888",
  "merge_commit_sha": null,
  "squash_commit_sha": null,
  "user_notes_count": 1,
  "discussion_locked": null,
  "should_remove_source_branch": true,
  "force_remove_source_branch": false,
  "allow_collaboration": false,
  "allow_maintainer_to_push": false,
  "web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
  "references": {
    "short": "!1",
    "relative": "!1",
    "full": "my-group/my-project!1"
  },
  "time_stats": {
    "time_estimate": 0,
    "total_time_spent": 0,
    "human_time_estimate": null,
    "human_total_time_spent": null
  },
  "squash": false,
  "subscribed": false,
  "changes_count": "1",
  "merged_by": { // Deprecated and will be removed in API v5, use `merge_user` instead
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merge_user": {
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merged_at": "2018-09-07T11:16:17.520Z",
  "merge_after": "2018-09-07T11:16:00.000Z",
  "prepared_at": "2018-09-04T11:16:17.520Z",
  "closed_by": null,
  "closed_at": null,
  "latest_build_started_at": "2018-09-07T07:27:38.472Z",
  "latest_build_finished_at": "2018-09-07T08:07:06.012Z",
  "first_deployed_to_production_at": null,
  "pipeline": {
    "id": 29626725,
    "sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
    "ref": "patch-28",
    "status": "success",
    "web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
  },
  "diff_refs": {
    "base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
    "head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
    "start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
  },
  "diverged_commits_count": 2,
  "task_completion_status":{
    "count":0,
    "completed_count":0
  }
}

Pour les notes importantes sur les données de réponse, voir notes sur la réponse d'une merge request unique.

Se désabonner d'un merge request {#unsubscribe-from-a-merge-request}

Désabonne l'utilisateur authentifié d'un merge request pour ne plus recevoir de notifications de ce merge request.

plaintext
POST /projects/:id/merge_requests/:merge_request_iid/unsubscribe
AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.
shell
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/17/unsubscribe"

Si l'utilisateur n'est pas abonné au merge request, le point de terminaison renvoie le code de statut HTTP 304 Not Modified.

Exemple de réponse :

json
{
  "id": 1,
  "iid": 1,
  "project_id": 3,
  "title": "test1",
  "description": "fixed login page css paddings",
  "state": "merged",
  "created_at": "2017-04-29T08:46:00Z",
  "updated_at": "2017-04-29T08:46:00Z",
  "target_branch": "main",
  "source_branch": "test1",
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  "assignee": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  "assignees": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "reviewers": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "source_project_id": 2,
  "target_project_id": 3,
  "labels": [
    "Community contribution",
    "Manage"
  ],
  "draft": false,
  "work_in_progress": false,
  "milestone": {
    "id": 5,
    "iid": 1,
    "project_id": 3,
    "title": "v2.0",
    "description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
    "state": "closed",
    "created_at": "2015-02-02T19:49:26.013Z",
    "updated_at": "2015-02-02T19:49:26.013Z",
    "due_date": "2018-09-22",
    "start_date": "2018-08-08",
    "web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
  },
  "merge_when_pipeline_succeeds": true,
  "merge_status": "can_be_merged",
  "detailed_merge_status": "not_open",
  "sha": "8888888888888888888888888888888888888888",
  "merge_commit_sha": null,
  "squash_commit_sha": null,
  "user_notes_count": 1,
  "discussion_locked": null,
  "should_remove_source_branch": true,
  "force_remove_source_branch": false,
  "allow_collaboration": false,
  "allow_maintainer_to_push": false,
  "web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
  "references": {
    "short": "!1",
    "relative": "!1",
    "full": "my-group/my-project!1"
  },
  "time_stats": {
    "time_estimate": 0,
    "total_time_spent": 0,
    "human_time_estimate": null,
    "human_total_time_spent": null
  },
  "squash": false,
  "subscribed": false,
  "changes_count": "1",
  "merged_by": { // Deprecated and will be removed in API v5, use `merge_user` instead
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merge_user": {
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merged_at": "2018-09-07T11:16:17.520Z",
  "merge_after": "2018-09-07T11:16:00.000Z",
  "prepared_at": "2018-09-04T11:16:17.520Z",
  "closed_by": null,
  "closed_at": null,
  "latest_build_started_at": "2018-09-07T07:27:38.472Z",
  "latest_build_finished_at": "2018-09-07T08:07:06.012Z",
  "first_deployed_to_production_at": null,
  "pipeline": {
    "id": 29626725,
    "sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
    "ref": "patch-28",
    "status": "success",
    "web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
  },
  "diff_refs": {
    "base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
    "head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
    "start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
  },
  "diverged_commits_count": 2,
  "task_completion_status":{
    "count":0,
    "completed_count":0
  }
}

Pour les notes importantes sur les données de réponse, voir notes sur la réponse d'une merge request unique.

Créer un élément de la liste de tâches {#create-a-to-do-item}

Crée manuellement un élément de la liste de tâches pour l'utilisateur actuel sur un merge request. Si un élément de la liste de tâches existe déjà pour l'utilisateur sur ce merge request, ce point de terminaison renvoie le code de statut HTTP 304 Not Modified.

plaintext
POST /projects/:id/merge_requests/:merge_request_iid/todo
AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.
shell
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/27/todo"

Exemple de réponse :

json
{
  "id": 113,
  "project": {
    "id": 3,
    "name": "GitLab CI/CD",
    "name_with_namespace": "GitLab Org / GitLab CI/CD",
    "path": "gitlab-ci",
    "path_with_namespace": "gitlab-org/gitlab-ci"
  },
  "author": {
    "name": "Administrator",
    "username": "root",
    "id": 1,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/root"
  },
  "action_name": "marked",
  "target_type": "MergeRequest",
  "target": {
    "id": 27,
    "iid": 7,
    "project_id": 3,
    "title": "Et voluptas laudantium minus nihil recusandae ut accusamus earum aut non.",
    "description": "Veniam sunt nihil modi earum cumque illum delectus. Nihil ad quis distinctio quia. Autem eligendi at quibusdam repellendus.",
    "state": "merged",
    "created_at": "2016-06-17T07:48:04.330Z",
    "updated_at": "2016-07-01T11:14:15.537Z",
    "target_branch": "allow_regex_for_project_skip_ref",
    "source_branch": "backup",
    "upvotes": 0,
    "downvotes": 0,
    "author": {
      "name": "Jarret O'Keefe",
      "username": "francisca",
      "id": 14,
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/a7fa515d53450023c83d62986d0658a8?s=80&d=identicon",
      "web_url": "https://gitlab.example.com/francisca",
      "discussion_locked": false
    },
    "assignee": {
      "name": "Dr. Gabrielle Strosin",
      "username": "barrett.krajcik",
      "id": 4,
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/733005fcd7e6df12d2d8580171ccb966?s=80&d=identicon",
      "web_url": "https://gitlab.example.com/barrett.krajcik"
    },
    "assignees": [{
      "name": "Miss Monserrate Beier",
      "username": "axel.block",
      "id": 12,
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
      "web_url": "https://gitlab.example.com/axel.block"
    }],
    "reviewers": [{
      "name": "Miss Monserrate Beier",
      "username": "axel.block",
      "id": 12,
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
      "web_url": "https://gitlab.example.com/axel.block"
    }],
    "source_project_id": 3,
    "target_project_id": 3,
    "labels": [],
    "draft": false,
    "work_in_progress": false,
    "milestone": {
      "id": 27,
      "iid": 2,
      "project_id": 3,
      "title": "v1.0",
      "description": "Quis ea accusantium animi hic fuga assumenda.",
      "state": "active",
      "created_at": "2016-06-17T07:47:33.840Z",
      "updated_at": "2016-06-17T07:47:33.840Z",
      "due_date": null
    },
    "merge_when_pipeline_succeeds": false,
    "merge_status": "unchecked",
    "detailed_merge_status": "not_open",
    "subscribed": true,
    "sha": "8888888888888888888888888888888888888888",
    "merge_commit_sha": null,
    "squash_commit_sha": null,
    "user_notes_count": 7,
    "changes_count": "1",
    "should_remove_source_branch": true,
    "force_remove_source_branch": false,
    "squash": false,
    "web_url": "http://example.com/my-group/my-project/merge_requests/1",
    "references": {
      "short": "!1",
      "relative": "!1",
      "full": "my-group/my-project!1"
    }
  },
  "target_url": "https://gitlab.example.com/gitlab-org/gitlab-ci/merge_requests/7",
  "body": "Et voluptas laudantium minus nihil recusandae ut accusamus earum aut non.",
  "state": "pending",
  "created_at": "2016-07-01T11:14:15.530Z"
}

Récupérer les versions de diff du merge request {#retrieve-merge-request-diff-versions}

Récupérer les versions de diff pour un merge request.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/versions
AttributTypeObligatoireDescription
idChaîneOuiL'ID du projet.
merge_request_iidentierOuiL'ID interne du merge request.

Pour une explication des SHA dans la réponse, voir SHA dans la réponse API.

shell
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/versions"

Exemple de réponse :

json
[{
  "id": 110,
  "head_commit_sha": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30",
  "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
  "start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
  "created_at": "2016-07-26T14:44:48.926Z",
  "merge_request_id": 105,
  "state": "collected",
  "real_size": "1",
  "patch_id_sha": "d504412d5b6e6739647e752aff8e468dde093f2f"
}, {
  "id": 108,
  "head_commit_sha": "3eed087b29835c48015768f839d76e5ea8f07a24",
  "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
  "start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
  "created_at": "2016-07-25T14:21:33.028Z",
  "merge_request_id": 105,
  "state": "collected",
  "real_size": "1",
  "patch_id_sha": "72c30d1f0115fc1d2bb0b29b24dc2982cbcdfd32"
}]

SHA dans la réponse API {#shas-in-the-api-response}

Champ SHAObjectif
base_commit_shaLe SHA du commit de base de fusion entre la branche source et les branches cibles.
head_commit_shaLe commit HEAD de la branche source.
start_commit_shaLe SHA du commit HEAD de la branche cible lorsque cette version du diff a été créée.

Récupérer une version de diff d'un merge request {#retrieve-a-merge-request-diff-version}

{{< history >}}

  • Les attributs de réponse collapsed et too_large ont été introduits dans GitLab 18.4.

{{< /history >}}

Récupérer une version de diff spécifique pour un merge request.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/versions/:version_id

Attributs pris en charge :

AttributTypeObligatoireDescription
idChaîneOuiID du projet.
merge_request_iidentierOuiIdentifiant interne de la merge request.
version_identierOuiID de la version de diff du merge request.
unidiffbooleanNonPrésenter les diffs au format diff unifié. La valeur par défaut est false. Introduite dans GitLab 16.5.

En cas de succès, renvoie 200 OK et les attributs de réponse suivants :

AttributTypeDescription
identierID de la version de diff du merge request.
base_commit_shastringSHA du commit de base de fusion entre la branche source et les branches cibles.
commitstableau d'objetsCommits dans le diff du merge request.
commits[].idstringIdentifiant du commit.
commits[].short_idstringIdentifiant court du commit.
commits[].created_atdatetimeIdentique au champ committed_date.
commits[].parent_idstableauIdentifiants des commits parents.
commits[].titlestringTitre du commit.
commits[].messagestringMessage de commit.
commits[].author_namestringNom de l'auteur du commit.
commits[].author_emailstringAdresse e-mail de l'auteur du commit.
commits[].authored_datedatetimeDate et heure de création du commit.
commits[].committer_namestringNom du contributeur.
commits[].committer_emailstringAdresse e-mail du contributeur.
commits[].committed_datedatetimeDate et heure du commit.
commits[].trailersobjetTrailers Git analysés pour le commit. Les clés en double n'incluent que la dernière valeur.
commits[].extended_trailersobjetTrailers Git analysés pour le commit.
commits[].web_urlstringURL web du merge request.
created_atdatetimeDate et heure de création du merge request.
diffstableau d'objetsDiffs dans la version de diff du merge request.
diffs[].a_modestringAncien mode de fichier du fichier.
diffs[].b_modestringNouveau mode de fichier du fichier.
diffs[].collapsedbooleanLes diffs du fichier sont exclus mais peuvent être récupérés à la demande.
diffs[].deleted_filebooleanLe fichier a été supprimé.
diffs[].diffstringContenu du diff.
diffs[].generated_filebooleanLe fichier est marqué comme généré.
diffs[].new_filebooleanLe fichier a été ajouté.
diffs[].new_pathstringNouveau chemin du fichier.
diffs[].old_pathstringAncien chemin du fichier.
diffs[].renamed_filebooleanLe fichier a été renommé.
diffs[].too_largebooleanLes diffs du fichier sont exclus et ne peuvent pas être récupérés.
head_commit_shastringCommit HEAD de la branche source.
merge_request_identierIdentifiant de la merge request.
patch_id_shastringPatch ID pour le diff du merge request.
real_sizestringNombre de modifications dans le diff du merge request.
start_commit_shastringSHA du commit HEAD de la branche cible lorsque cette version du diff a été créée.
statestringÉtat du diff du merge request. Peut être collected, overflow, without_files. Valeurs obsolètes : timeout, overflow_commits_safe_size, overflow_diff_files_limit, overflow_diff_lines_limit.

Exemple de requête :

shell
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/versions/1"

Exemple de réponse :

json
{
  "id": 110,
  "head_commit_sha": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30",
  "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
  "start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
  "created_at": "2016-07-26T14:44:48.926Z",
  "merge_request_id": 105,
  "state": "collected",
  "real_size": "1",
  "patch_id_sha": "d504412d5b6e6739647e752aff8e468dde093f2f",
  "commits": [{
    "id": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30",
    "short_id": "33e2ee85",
    "parent_ids": [],
    "title": "Change year to 2018",
    "author_name": "Administrator",
    "author_email": "[email protected]",
    "authored_date": "2016-07-26T17:44:29.000+03:00",
    "committer_name": "Administrator",
    "committer_email": "[email protected]",
    "committed_date": "2016-07-26T17:44:29.000+03:00",
    "created_at": "2016-07-26T17:44:29.000+03:00",
    "message": "Change year to 2018",
    "trailers": {},
    "extended_trailers": {},
    "web_url": "https://gitlab.example.com/project/-/commit/33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30"
  }, {
    "id": "aa24655de48b36335556ac8a3cd8bb521f977cbd",
    "short_id": "aa24655d",
    "parent_ids": [],
    "title": "Update LICENSE",
    "author_name": "Administrator",
    "author_email": "[email protected]",
    "authored_date": "2016-07-25T17:21:53.000+03:00",
    "committer_name": "Administrator",
    "committer_email": "[email protected]",
    "committed_date": "2016-07-25T17:21:53.000+03:00",
    "created_at": "2016-07-25T17:21:53.000+03:00",
    "message": "Update LICENSE",
    "trailers": {},
    "extended_trailers": {},
    "web_url": "https://gitlab.example.com/project/-/commit/aa24655de48b36335556ac8a3cd8bb521f977cbd"
  }, {
    "id": "3eed087b29835c48015768f839d76e5ea8f07a24",
    "short_id": "3eed087b",
    "parent_ids": [],
    "title": "Add license",
    "author_name": "Administrator",
    "author_email": "[email protected]",
    "authored_date": "2016-07-25T17:21:20.000+03:00",
    "committer_name": "Administrator",
    "committer_email": "[email protected]",
    "committed_date": "2016-07-25T17:21:20.000+03:00",
    "created_at": "2016-07-25T17:21:20.000+03:00",
    "message": "Add license",
    "trailers": {},
    "extended_trailers": {},
    "web_url": "https://gitlab.example.com/project/-/commit/3eed087b29835c48015768f839d76e5ea8f07a24"
  }],
  "diffs": [{
    "old_path": "LICENSE",
    "new_path": "LICENSE",
    "a_mode": "0",
    "b_mode": "100644",
    "diff": "@@ -0,0 +1,21 @@\n+The MIT License (MIT)\n+\n+Copyright (c) 2018 Administrator\n+\n+Permission is hereby granted, free of charge, to any person obtaining a copy\n+of this software and associated documentation files (the \"Software\"), to deal\n+in the Software without restriction, including without limitation the rights\n+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+copies of the Software, and to permit persons to whom the Software is\n+furnished to do so, subject to the following conditions:\n+\n+The above copyright notice and this permission notice shall be included in all\n+copies or substantial portions of the Software.\n+\n+THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n+SOFTWARE.\n",
    "collapsed": false,
    "too_large": false,
    "new_file": true,
    "renamed_file": false,
    "deleted_file": false,
    "generated_file": false
  }]
}

Définir une estimation de temps pour un merge request {#set-a-time-estimate-for-a-merge-request}

Définit un temps de travail estimé pour ce merge request.

plaintext
POST /projects/:id/merge_requests/:merge_request_iid/time_estimate
AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.
durationstringOuiLa durée au format humain, par exemple 3h30m.
shell
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/time_estimate?duration=3h30m"

Exemple de réponse :

json
{
  "human_time_estimate": "3h 30m",
  "human_total_time_spent": null,
  "time_estimate": 12600,
  "total_time_spent": 0
}

Réinitialiser l'estimation de temps pour un merge request {#reset-the-time-estimate-for-a-merge-request}

Réinitialise le temps estimé pour ce merge request à 0 seconde.

plaintext
POST /projects/:id/merge_requests/:merge_request_iid/reset_time_estimate
AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request d'un projet.
shell
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/reset_time_estimate"

Exemple de réponse :

json
{
  "human_time_estimate": null,
  "human_total_time_spent": null,
  "time_estimate": 0,
  "total_time_spent": 0
}

Ajouter du temps passé pour un merge request {#add-spent-time-for-a-merge-request}

Ajoute du temps passé pour ce merge request.

plaintext
POST /projects/:id/merge_requests/:merge_request_iid/add_spent_time
AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.
durationstringOuiLa durée au format humain, par exemple 3h30m
summarystringNonUn résumé de la façon dont le temps a été utilisé.
shell
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/add_spent_time?duration=1h"

Exemple de réponse :

json
{
  "human_time_estimate": null,
  "human_total_time_spent": "1h",
  "time_estimate": 0,
  "total_time_spent": 3600
}

Réinitialiser le temps passé pour un merge request {#reset-spent-time-for-a-merge-request}

Réinitialise le temps total passé pour ce merge request à 0 seconde.

plaintext
POST /projects/:id/merge_requests/:merge_request_iid/reset_spent_time
AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request d'un projet.
shell
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/reset_spent_time"

Exemple de réponse :

json
{
  "human_time_estimate": null,
  "human_total_time_spent": null,
  "time_estimate": 0,
  "total_time_spent": 0
}

Récupérer les statistiques de suivi du temps {#retrieve-time-tracking-statistics}

Récupérer les statistiques de suivi du temps pour un merge request.

plaintext
GET /projects/:id/merge_requests/:merge_request_iid/time_stats
AttributTypeObligatoireDescription
identier ou chaîneOuiL'ID ou le chemin encodé en URL du projet.
merge_request_iidentierOuiL'ID interne du merge request.
shell
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/time_stats"

Exemple de réponse :

json
{
  "human_time_estimate": "2h",
  "human_total_time_spent": "1h",
  "time_estimate": 7200,
  "total_time_spent": 3600
}

Approbations {#approvals}

Pour les approbations, voir les approbations de merge requests.

Lister les événements d'état des merge requests {#list-merge-request-state-events}

Pour savoir quel état a été défini, qui l'a fait et quand, consultez l'API des événements d'état des ressources.

Dépannage {#troubleshooting}

Champs API vides pour les nouveaux merge requests {#empty-api-fields-for-new-merge-requests}

Lorsque vous créez un merge request, les champs diff_refs et changes_count sont initialement vides. Ces champs sont remplis de manière asynchrone après la création du merge request. Pour plus d'informations, voir le ticket 386562 et la discussion associée dans les forums GitLab.