pyapi-gitlab is a python wrapper for the Gitlab API.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
docker docker tests now test network status before continuing Jul 25, 2017
docs Added get keys Jul 29, 2017
gitlab Removed getsshkey from Jul 30, 2017
integration_tests Added tests for deprecated version Jul 29, 2017
response_data Added get keys Jul 29, 2017
scripts bump gitlab shell to 2.2.0 Dec 4, 2014
.coveragerc Added methods to access requests POST/GET/DELETE May 16, 2017
.gitignore Added methods to access requests POST/GET/DELETE May 16, 2017
.travis.yml Adding codecov Jul 27, 2017 Added recent Contributors May 16, 2017
Dockerfile Docker Compose now working Jul 25, 2017
LICENSE Move to an Apache License Apr 23, 2015
README.rst Added codecov badge Jul 27, 2017 Updated TODO list May 16, 2017
cov Updates to docs and added warnings Jul 26, 2017
integration_cov docker tests now test network status before continuing Jul 25, 2017
requirements.txt Try to fix tests on 2.6, use test-requirements Mar 13, 2015 bump version for future release Sep 8, 2015
test-requirements.txt Fixed issues with python2 failing Jul 25, 2017


Looking for contributors

If you are interested in contributing to this wrapper we ask that all pull requests have an open issue that and they be referenced. We also ask that you submit unit tests for your changes to make sure there are no regressions.

Pull Requests

We are currently working on getting pyapi-gitlab to 101% coverage in both unittests and integration tests. Well the integration testing is not fully flushed out yet the unittests are so we ask that all new pull requests have unittests with them.

Setting up for development

If you wish to setup your system for development you will need to install the test requirements and we ask that you consider docker and docker-compose for integration testing.

To install the test requirements you will need to run the following command pip install -Ur test-requirements.txt. This will install both the requirements.txt and the test-requirements.txt.

To run the test simply run ./cov from the project root directory.

To review the cover open the index.html file in the coverage_html_report.

To run the integration test run the commands below. This will build the docker containers and then start them. The containers will shutdown after the tests finish.

docker-compose -f docker/v93/docker-compose.yml build
docker-compose -f docker/v93/docker-compose.yml up --abort-on-container-exit


pyapi-gitlab is a python wrapper for the Gitlab API.

Build Status Coverage Status PyPI PyPi downloads Requirements Status License Docs


  • requests

Naming convention

pyapi-gitlab has its own versioning in which the 2 first numbers indicates the Gitlab version that its supported for that library. a 7.5 version means that its compatible with the Gitlab 7.5 and lower API versions.


pip install pyapi-gitlab

pyapi-gitlab supports python version 2.7, 3.3, 3.4, 3.5, 3.5-dev, 3.6, 3.6-dev, 3.7-dev, and the nightly build

Versions tested

Gitlab version Status
9.1.X 1
7.9.X 2
7.8.X ✔️0
7.7.X ✔️0
7.6.X ✔️0
7.5.X ✔️0
7.4.X ✔️0
7.3.X ✔️0
7.2.X ✔️0
7.1.X 3
7.0.X 4
  1. Placeholder to get ✔️ working
  2. Currently under development
  3. 3 out of 17 tests failing: Seems that create snippet wall note now returns true/false instead of the created snippet. Snippet creating now does not return the created snippet. And move project does not return a dict either.
  4. Label creation is not supported on this version.
  5. Contributors endpoint seems to not exists in this version. Label creation is not supported on this version.



  • Use requests.json() instead of decoding everything (@satreix)
  • Add getmergerequestchanges (@bor-sh)
  • Add getmilestoneissues (@JonathonReinhart)
  • Add editproject (@nelg)
  • Add editgroupmember (@)
  • Fix hook metadata creation #137 (@jzelinskie)
  • Fix addprojectmember (@btall)
  • Fix Raise exception instead of returning it in creategroup (@brenard)


  • Just a bumped version, now that its tested and fully supports Gitlab versions up to 7.8


  • Change license to Apache 2.0
  • getproject now accepts a namespace/projectname as well like the gitlab api


  • New function wrapper getall to get all results from any function that provides pagination [Anirudh Dutt]
  • Remove pagination params from getdeploykeys, getbranches and getsshkeys as they don't support it [Anirudh Dutt]
  • Add oAuth tokens to the login method [Ken Cochrane]
  • You can now add the type of hook when creating it [tonicbupt]
  • Allow Project Issues to be filtered by passing kwargs [Nick Whyte]
  • Update docs [Itxaka Serrano]


  • Support for the full Gitlab 7.5 API
  • Fix python 2.6 compatibility
  • All methods have documentation (Inside the library only, the docs are lagging a bit behind).
  • New fork api that allows to actually fork a project instead of doing fork relations
  • New label methods (getlabel, createlabel, editlabel, deletelabel)
  • All get* methods that return more than one item support pagination. Check page and per_page args. Default to first page and 20 items per page.
  • BREAKING CHANGE: Old sudo arg in methods to execute as other user is gone. Now there is a method setsudo(user_id/user_username) which will setup the header, so all the subsequent API calls will be done as that user. To get back to your user just do a setsudo() and the sudo parameter will be cleared
  • BREAKING CHANGE: Some methods were returning True or False instead of the object created. Now all the methods in which there is something returning from the server is returned as a dictionary/list of dictionaries to the user
  • BREAKING CHANGE: Some methods now use kwargs for the optional parameters so the code is more easy and readable. Methods affected: createproject, createprojectuser, createmilestone, editmilestone, updatemergerequest
  • BREAKING CHANGE: Project wallnotes does not exist anymore, seems that they have been moved to project snippets (getsnippets, getsnippet, createsnippet, deletesnippet)
  • BREAKING CHANGE: Removed getreadme method as its not part of the gitlab api, nor was it ever.
  • BREAKING CHANGE: Old methods that started with list* are not get*. This is done in order to have a proper naming convention instead of having mixed listsomething and then getsomething. The actual
  • BREAKING CHANGE: Old methods with new names: getownprojects -> getprojectsowned, getallprojects -> getprojectsall


Check the docs at


pyapi-gitlab is licensed under the Apache License 2.0. Check the LICENSE file.

Built with PyCharm

Thanks to Jetbrains for giving me an Open Source license for PyCharm, it has helped making development much faster!