--- stage: Package group: Package Registry info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments --- # PyPI API **(FREE)** This is the API documentation for [PyPI Packages](../../user/packages/pypi_repository/index.md). WARNING: This API is used by the [PyPI package manager client](https://pypi.org/) and is generally not meant for manual consumption. For instructions on how to upload and install PyPI packages from the GitLab package registry, see the [PyPI package registry documentation](../../user/packages/pypi_repository/index.md). NOTE: These endpoints do not adhere to the standard API authentication methods. See the [PyPI package registry documentation](../../user/packages/pypi_repository/index.md) for details on which headers and token types are supported. Undocumented authentication methods might be removed in the future. NOTE: [Twine 3.4.2](https://twine.readthedocs.io/en/stable/changelog.html?highlight=FIPS#id28) or greater is recommended when [FIPS mode](../../development/fips_compliance.md) is enabled. ## Download a package file from a group > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/225545) in GitLab 13.12. Download a PyPI package file. The [simple API](#group-level-simple-api-entry-point) normally supplies this URL. ```plaintext GET groups/:id/-/packages/pypi/files/:sha256/:file_identifier ``` | Attribute | Type | Required | Description | | ----------------- | ------ | -------- | ----------- | | `id` | string | yes | The ID or full path of the group. | | `sha256` | string | yes | The PyPI package file's sha256 checksum. | | `file_identifier` | string | yes | The PyPI package file's name. | ```shell curl --user : "https://gitlab.example.com/api/v4/groups/1/-/packages/pypi/files/5y57017232013c8ac80647f4ca153k3726f6cba62d055cd747844ed95b3c65ff/my.pypi.package-0.0.1.tar.gz" ``` To write the output to a file: ```shell curl --user : "https://gitlab.example.com/api/v4/groups/1/-/packages/pypi/files/5y57017232013c8ac80647f4ca153k3726f6cba62d055cd747844ed95b3c65ff/my.pypi.package-0.0.1.tar.gz" >> my.pypi.package-0.0.1.tar.gz ``` This writes the downloaded file to `my.pypi.package-0.0.1.tar.gz` in the current directory. ## Group-level simple API index > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/327595) in GitLab 15.1. Returns a list of packages in the group as an HTML file: ```plaintext GET groups/:id/-/packages/pypi/simple ``` | Attribute | Type | Required | Description | | --------- | ---- | -------- | ----------- | | `id` | string | yes | The ID or full path of the group. | ```shell curl --user : "https://gitlab.example.com/api/v4/groups/1/-/packages/pypi/simple" ``` Example response: ```html Links for Group

Links for Group

my.pypi.package
package_2
``` To write the output to a file: ```shell curl --user : "https://gitlab.example.com/api/v4/groups/1/-/packages/pypi/simple" >> simple_index.html ``` This writes the downloaded file to `simple_index.html` in the current directory. ## Group level simple API entry point > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/225545) in GitLab 13.12. Returns the package descriptor as an HTML file: ```plaintext GET groups/:id/-/packages/pypi/simple/:package_name ``` | Attribute | Type | Required | Description | | -------------- | ------ | -------- | ----------- | | `id` | string | yes | The ID or full path of the group. | | `package_name` | string | yes | The name of the package. | ```shell curl --user : "https://gitlab.example.com/api/v4/groups/1/-/packages/pypi/simple/my.pypi.package" ``` Example response: ```html Links for my.pypi.package

Links for my.pypi.package

my.pypi.package-0.0.1-py3-none-any.whl
my.pypi.package-0.0.1.tar.gz
``` To write the output to a file: ```shell curl --user : "https://gitlab.example.com/api/v4/groups/1/-/packages/pypi/simple/my.pypi.package" >> simple.html ``` This writes the downloaded file to `simple.html` in the current directory. ## Download a package file from a project > Introduced in GitLab 12.10. Download a PyPI package file. The [simple API](#project-level-simple-api-entry-point) normally supplies this URL. ```plaintext GET projects/:id/packages/pypi/files/:sha256/:file_identifier ``` | Attribute | Type | Required | Description | | --------- | ---- | -------- | ----------- | | `id` | string | yes | The ID or full path of the project. | | `sha256` | string | yes | PyPI package file sha256 check sum. | | `file_identifier` | string | yes | The PyPI package filename. | ```shell curl --user : "https://gitlab.example.com/api/v4/projects/1/packages/pypi/files/5y57017232013c8ac80647f4ca153k3726f6cba62d055cd747844ed95b3c65ff/my.pypi.package-0.0.1.tar.gz" ``` To write the output to a file: ```shell curl --user : "https://gitlab.example.com/api/v4/projects/1/packages/pypi/files/5y57017232013c8ac80647f4ca153k3726f6cba62d055cd747844ed95b3c65ff/my.pypi.package-0.0.1.tar.gz" >> my.pypi.package-0.0.1.tar.gz ``` This writes the downloaded file to `my.pypi.package-0.0.1.tar.gz` in the current directory. ## Project-level simple API index > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/327595) in GitLab 15.1. Returns a list of packages in the project as an HTML file: ```plaintext GET projects/:id/packages/pypi/simple ``` | Attribute | Type | Required | Description | | --------- | ---- | -------- | ----------- | | `id` | string | yes | The ID or full path of the project. | ```shell curl --user : "https://gitlab.example.com/api/v4/projects/1/packages/pypi/simple" ``` Example response: ```html Links for Project

Links for Project

my.pypi.package
package_2
``` To write the output to a file: ```shell curl --user : "https://gitlab.example.com/api/v4/projects/1/packages/pypi/simple" >> simple_index.html ``` This writes the downloaded file to `simple_index.html` in the current directory. ## Project-level simple API entry point > Introduced in GitLab 12.10. Returns the package descriptor as an HTML file: ```plaintext GET projects/:id/packages/pypi/simple/:package_name ``` | Attribute | Type | Required | Description | | --------- | ---- | -------- | ----------- | | `id` | string | yes | The ID or full path of the project. | | `package_name` | string | yes | The name of the package. | ```shell curl --user : "https://gitlab.example.com/api/v4/projects/1/packages/pypi/simple/my.pypi.package" ``` Example response: ```html Links for my.pypi.package

Links for my.pypi.package

my.pypi.package-0.0.1-py3-none-any.whl
my.pypi.package-0.0.1.tar.gz
``` To write the output to a file: ```shell curl --user : "https://gitlab.example.com/api/v4/projects/1/packages/pypi/simple/my.pypi.package" >> simple.html ``` This writes the downloaded file to `simple.html` in the current directory. ## Upload a package Upload a PyPI package: ```plaintext PUT projects/:id/packages/pypi ``` | Attribute | Type | Required | Description | | --------- | ---- | -------- | ----------- | | `id` | string | yes | The ID or full path of the project. | | `requires_python` | string | no | The PyPI required version. | ```shell curl --request POST \ --form 'content=@path/to/my.pypi.package-0.0.1.tar.gz' \ --form 'name=my.pypi.package' --form 'version=1.3.7' --user : \ "https://gitlab.example.com/api/v4/projects/1/packages/pypi" ```