# NAME GitLab::API::v3 - A complete GitLab API v3 client. (DEPRECATED) # SYNOPSIS use GitLab::API::v3; my $api = GitLab::API::v3->new( url => $v3_api_url, token => $token, ); my $branches = $api->branches( $project_id ); ## DEPRECATED This module is at the end of it's life as the latest GitLab no longer supports the v3 API. Instead, use [GitLab::API::v4](https://metacpan.org/pod/GitLab::API::v4). # DESCRIPTION This module provides a one-to-one interface with the GitLab API v3. Much is not documented here as it would just be duplicating GitLab's own [API Documentation](http://doc.gitlab.com/ce/api/README.html). Note that this distribution also includes the [gitlab-api-v3](https://metacpan.org/pod/gitlab-api-v3) command-line interface (CLI). # CREDENTIALS Authentication credentials may be defined by setting either the ["token"](#token), the ["login"](#login) and ["password"](#password), or the ["email"](#email) and ["password"](#password) arguments. When the object is constructed the ["login"](#login), ["email"](#email), and ["password"](#password) arguments are used to call ["session"](#session) to generate a token. The token is saved in the ["token"](#token) attribute, and the login/email/password arguments are discarded. If no credentials are supplied then the client will be anonymous and greatly limited in what it can do with the API. ## CONSTANTS Several values in the GitLab API require looking up the numeric value for a meaning (such as `access_level` and `visibility_level`). Instead of doing that, you can use [GitLab::API::v3::Constants](https://metacpan.org/pod/GitLab::API::v3::Constants). ## EXCEPTIONS The API methods will all throw (hopefully) a useful exception if an unsuccessful response is received from the API. That is except for `GET` requests that return a `404` response - these will return `undef` for methods that return a value. If you'd like to catch and handle these exceptions consider using [Try::Tiny](https://metacpan.org/pod/Try::Tiny). ## LOGGING This module uses [Log::Any](https://metacpan.org/pod/Log::Any) and produces some debug messages here and there, but the most useful bits are the info messages produced just before each API call. ## PROJECT ID Note that many API calls require a `$project_id`. This can be specified as either a numeric project `ID`, or as a `NAMESPACE_PATH/PROJECT_PATH` in many cases. Perhaps even all cases, but the GitLab documentation on this point is vague. ## RETURN VALUES Many of this module's methods should return a value but do not currently. This is due to the fact that this module was built as a strict representation of GitLab's own documentation which is often inconsistent. If you find a method that should provide a return value, but doesn't currently, please verify that GitLab actually does return a value and then submit a pull request or open an issue. See ["CONTRIBUTING"](#contributing) for more info. # REQUIRED ARGUMENTS ## url The URL to your v3 API endpoint. Typically this will be something like `http://git.example.com/api/v3`. # OPTIONAL ARGUMENTS ## token A GitLab API token. If set then neither ["login"](#login) or ["email"](#email) may be set. Read more in ["CREDENTIALS"](#credentials). ## login A GitLab user login name. If set then ["password"](#password) must be set. Read more in ["CREDENTIALS"](#credentials). ## email A GitLab user email. If set then ["password"](#password) must be set. Read more in ["CREDENTIALS"](#credentials). ## password A GitLab user password. This must be set if either ["login"](#login) or ["email"](#email) are set. Read more in ["CREDENTIALS"](#credentials). ## rest\_client An instance of [GitLab::API::v3::RESTClient](https://metacpan.org/pod/GitLab::API::v3::RESTClient). Typically you will not be setting this as it defaults to a new instance and customization should not be necessary. ## retries The number of times the request should be retried in case it does not succeed. Defaults to 0, meaning that a failed request will not be retried. # UTILITY METHODS ## paginator my $paginator = $api->paginator( $method, @method_args ); my $members = $api->paginator('group_members', $group_id); while (my $member = $members->next()) { ... } my $users_pager = $api->paginator('users'); while (my $users = $users_pager->next_page()) { ... } my $all_open_issues = $api->paginator( 'issues', $project_id, { state=>'opened' }, )->all(); Given a method who supports the `page` and `per_page` parameters, and returns an array ref, this will return a [GitLab::API::v3::Paginator](https://metacpan.org/pod/GitLab::API::v3::Paginator) object that will allow you to walk the records one page or one record at a time. # AWARD EMOJI METHODS See [http://docs.gitlab.com/ce/api/award\_emoji.html](http://docs.gitlab.com/ce/api/award_emoji.html). ## issue\_award\_emojis my $award_emojis = $api->issue_award_emojis( $id, $issue_id, ); Sends a `GET` request to `/projects/:id/issues/:issue_id/award_emoji` and returns the decoded/deserialized response body. ## merge\_request\_award\_emojis my $award_emojis = $api->merge_request_award_emojis( $id, $merge_request_id, ); Sends a `GET` request to `/projects/:id/merge_requests/:merge_request_id/award_emoji` and returns the decoded/deserialized response body. ## issue\_award\_emoji my $award_emoji = $api->issue_award_emoji( $id, $issue_id, $award_id, ); Sends a `GET` request to `/projects/:id/issues/:issue_id/award_emoji/:award_id` and returns the decoded/deserialized response body. ## merge\_request\_award\_emoji my $award_emoji = $api->merge_request_award_emoji( $id, $merge_request_id, $award_id, ); Sends a `GET` request to `/projects/:id/merge_requests/:merge_request_id/award_emoji/:award_id` and returns the decoded/deserialized response body. ## create\_issue\_award\_emoji my $award_emoji = $api->create_issue_award_emoji( $id, $issue_id, \%params, ); Sends a `POST` request to `/projects/:id/issues/:issue_id/award_emoji` and returns the decoded/deserialized response body. ## create\_merge\_request\_award\_emoji my $award_emoji = $api->create_merge_request_award_emoji( $id, $merge_request_id, \%params, ); Sends a `POST` request to `/projects/:id/merge_requests/:merge_request_id/award_emoji` and returns the decoded/deserialized response body. ## delete\_issue\_award\_emoji my $award_emoji = $api->delete_issue_award_emoji( $id, $issue_id, $award_id, ); Sends a `DELETE` request to `/projects/:id/issues/:issue_id/award_emoji/:award_id` and returns the decoded/deserialized response body. ## delete\_merge\_request\_award\_emoji my $award_emoji = $api->delete_merge_request_award_emoji( $id, $merge_request_id, $award_id, ); Sends a `DELETE` request to `/projects/:id/merge_requests/:merge_request_id/award_emoji/:award_id` and returns the decoded/deserialized response body. ## issue\_note\_award\_emojis my $award_emojis = $api->issue_note_award_emojis( $id, $issue_id, $note_id, ); Sends a `GET` request to `/projects/:id/issues/:issue_id/notes/:note_id/award_emoji` and returns the decoded/deserialized response body. ## issue\_note\_award\_emoji my $award_emoji = $api->issue_note_award_emoji( $id, $issue_id, $note_id, $award_id, ); Sends a `GET` request to `/projects/:id/issues/:issue_id/notes/:note_id/award_emoji/:award_id` and returns the decoded/deserialized response body. ## create\_issue\_note\_award\_emoji my $award_emoji = $api->create_issue_note_award_emoji( $id, $issue_id, $note_id, \%params, ); Sends a `POST` request to `/projects/:id/issues/:issue_id/notes/:note_id/award_emoji` and returns the decoded/deserialized response body. ## delete\_issue\_note\_award\_emoji my $award_emoji = $api->delete_issue_note_award_emoji( $id, $issue_id, $note_id, $award_id, ); Sends a `DELETE` request to `/projects/:id/issues/:issue_id/notes/:note_id/award_emoji/:award_id` and returns the decoded/deserialized response body. ## merge\_request\_note\_award\_emojis my $award_emojis = $api->merge_request_note_award_emojis( $id, $merge_request_id, $note_id, ); Sends a `GET` request to `/projects/:id/merge_requests/:merge_request_id/notes/:note_id/award_emoji` and returns the decoded/deserialized response body. ## merge\_request\_note\_award\_emoji my $award_emoji = $api->merge_request_note_award_emoji( $id, $merge_request_id, $note_id, $award_id, ); Sends a `GET` request to `/projects/:id/merge_requests/:merge_request_id/notes/:note_id/award_emoji/:award_id` and returns the decoded/deserialized response body. ## create\_merge\_request\_note\_award\_emoji my $award_emoji = $api->create_merge_request_note_award_emoji( $id, $merge_request_id, $note_id, \%params, ); Sends a `POST` request to `/projects/:id/merge_requests/:merge_request_id/notes/:note_id/award_emoji` and returns the decoded/deserialized response body. ## delete\_merge\_request\_note\_award\_emoji my $award_emoji = $api->delete_merge_request_note_award_emoji( $id, $merge_request_id, $note_id, $award_id, ); Sends a `DELETE` request to `/projects/:id/merge_requests/:merge_request_id/notes/:note_id/award_emoji/:award_id` and returns the decoded/deserialized response body. # BRANCH METHODS See [http://doc.gitlab.com/ce/api/branches.html](http://doc.gitlab.com/ce/api/branches.html). ## branches my $branches = $api->branches( $project_id, ); Sends a `GET` request to `/projects/:project_id/repository/branches` and returns the decoded/deserialized response body. ## branch my $branch = $api->branch( $project_id, $branch_name, ); Sends a `GET` request to `/projects/:project_id/repository/branches/:branch_name` and returns the decoded/deserialized response body. ## protect\_branch $api->protect_branch( $project_id, $branch_name, \%params, ); Sends a `PUT` request to `/projects/:project_id/repository/branches/:branch_name/protect`. ## unprotect\_branch $api->unprotect_branch( $project_id, $branch_name, ); Sends a `PUT` request to `/projects/:project_id/repository/branches/:branch_name/unprotect`. ## create\_branch my $branch = $api->create_branch( $project_id, \%params, ); Sends a `POST` request to `/projects/:project_id/repository/branches` and returns the decoded/deserialized response body. ## delete\_branch $api->delete_branch( $project_id, $branch_name, ); Sends a `DELETE` request to `/projects/:project_id/repository/branches/:branch_name`. # BUILD METHODS See [http://docs.gitlab.com/ce/api/builds.html](http://docs.gitlab.com/ce/api/builds.html). ## builds my $builds = $api->builds( $id, \%params, ); Sends a `GET` request to `/projects/:id/builds` and returns the decoded/deserialized response body. ## commit\_builds my $builds = $api->commit_builds( $id, $sha, \%params, ); Sends a `GET` request to `/projects/:id/repository/commits/:sha/builds` and returns the decoded/deserialized response body. ## build my $build = $api->build( $id, $build_id, ); Sends a `GET` request to `/projects/:id/builds/:build_id` and returns the decoded/deserialized response body. ## build\_artifacts my $artifacts = $api->build_artifacts( $id, $build_id, ); Sends a `GET` request to `/projects/:id/builds/:build_id/artifacts` and returns the decoded/deserialized response body. ## build\_trace my $trace = $api->build_trace( $id, $build_id, ); Sends a `GET` request to `/projects/:id/builds/:build_id/trace` and returns the decoded/deserialized response body. ## cancel\_build my $build = $api->cancel_build( $id, $build_id, ); Sends a `POST` request to `/projects/:id/builds/:build_id/cancel` and returns the decoded/deserialized response body. ## retry\_build my $build = $api->retry_build( $id, $build_id, ); Sends a `POST` request to `/projects/:id/builds/:build_id/retry` and returns the decoded/deserialized response body. ## erase\_build my $build = $api->erase_build( $id, $build_id, ); Sends a `POST` request to `/projects/:id/builds/:build_id/erase` and returns the decoded/deserialized response body. ## keep\_build\_artifacts my $build = $api->keep_build_artifacts( $id, $build_id, ); Sends a `POST` request to `/projects/:id/builds/:build_id/artifacts/keep` and returns the decoded/deserialized response body. # BUILD TRIGGER METHODS See [http://docs.gitlab.com/ce/api/build\_triggers.html](http://docs.gitlab.com/ce/api/build_triggers.html). ## triggers my $triggers = $api->triggers( $id, ); Sends a `GET` request to `/projects/:id/triggers` and returns the decoded/deserialized response body. ## trigger my $trigger = $api->trigger( $id, $token, ); Sends a `GET` request to `/projects/:id/triggers/:token` and returns the decoded/deserialized response body. ## create\_trigger my $trigger = $api->create_trigger( $id, ); Sends a `POST` request to `/projects/:id/triggers` and returns the decoded/deserialized response body. ## delete\_trigger my $trigger = $api->delete_trigger( $id, $token, ); Sends a `DELETE` request to `/projects/:id/triggers/:token` and returns the decoded/deserialized response body. # BUILD VARIABLE METHODS See [http://docs.gitlab.com/ce/api/build\_variables.html](http://docs.gitlab.com/ce/api/build_variables.html). ## variables my $variables = $api->variables( $id, ); Sends a `GET` request to `/projects/:id/variables` and returns the decoded/deserialized response body. ## variable my $variable = $api->variable( $id, $key, ); Sends a `GET` request to `/projects/:id/variables/:key` and returns the decoded/deserialized response body. ## create\_variable my $variable = $api->create_variable( $id, \%params, ); Sends a `POST` request to `/projects/:id/variables` and returns the decoded/deserialized response body. ## update\_variable my $variable = $api->update_variable( $id, $key, \%params, ); Sends a `PUT` request to `/projects/:id/variables/:key` and returns the decoded/deserialized response body. ## delete\_variable my $variable = $api->delete_variable( $id, $key, ); Sends a `DELETE` request to `/projects/:id/variables/:key` and returns the decoded/deserialized response body. # COMMIT METHODS See [http://doc.gitlab.com/ce/api/commits.html](http://doc.gitlab.com/ce/api/commits.html). ## commits my $commits = $api->commits( $project_id, \%params, ); Sends a `GET` request to `/projects/:project_id/repository/commits` and returns the decoded/deserialized response body. ## commit my $commit = $api->commit( $project_id, $commit_sha, ); Sends a `GET` request to `/projects/:project_id/repository/commits/:commit_sha` and returns the decoded/deserialized response body. ## commit\_diff my $diff = $api->commit_diff( $project_id, $commit_sha, ); Sends a `GET` request to `/projects/:project_id/repository/commits/:commit_sha/diff` and returns the decoded/deserialized response body. ## commit\_comments my $comments = $api->commit_comments( $project_id, $commit_sha, ); Sends a `GET` request to `/projects/:project_id/repository/commits/:commit_sha/comments` and returns the decoded/deserialized response body. ## add\_commit\_comment $api->add_commit_comment( $project_id, $commit_sha, \%params, ); Sends a `POST` request to `/projects/:project_id/repository/commits/:commit_sha/comments`. # DEPLOY KEY METHODS See [http://doc.gitlab.com/ce/api/deploy\_keys.html](http://doc.gitlab.com/ce/api/deploy_keys.html). ## deploy\_keys my $keys = $api->deploy_keys( $project_id, ); Sends a `GET` request to `/projects/:project_id/keys` and returns the decoded/deserialized response body. ## deploy\_key my $key = $api->deploy_key( $project_id, $key_id, ); Sends a `GET` request to `/projects/:project_id/keys/:key_id` and returns the decoded/deserialized response body. ## create\_deploy\_key $api->create_deploy_key( $project_id, \%params, ); Sends a `POST` request to `/projects/:project_id/keys`. ## delete\_deploy\_key $api->delete_deploy_key( $project_id, $key_id, ); Sends a `DELETE` request to `/projects/:project_id/keys/:key_id`. # GROUP METHODS See [http://doc.gitlab.com/ce/api/groups.html](http://doc.gitlab.com/ce/api/groups.html). ## groups my $groups = $api->groups(); Sends a `GET` request to `/groups` and returns the decoded/deserialized response body. ## group my $group = $api->group( $group_id, ); Sends a `GET` request to `/groups/:group_id` and returns the decoded/deserialized response body. ## create\_group $api->create_group( \%params, ); Sends a `POST` request to `/groups`. ## transfer\_project $api->transfer_project( $group_id, $project_id, ); Sends a `POST` request to `/groups/:group_id/projects/:project_id`. ## delete\_group $api->delete_group( $group_id, ); Sends a `DELETE` request to `/groups/:group_id`. ## search\_groups my $groups = $api->search_groups( \%params, ); Sends a `GET` request to `/groups` and returns the decoded/deserialized response body. ## group\_members my $members = $api->group_members( $group_id, ); Sends a `GET` request to `/groups/:group_id/members` and returns the decoded/deserialized response body. ## group\_projects my $projects = $api->group_projects( $group_id, \%params, ); Sends a `GET` request to `/groups/:group_id/projects` and returns the decoded/deserialized response body. ## add\_group\_member $api->add_group_member( $group_id, \%params, ); Sends a `POST` request to `/groups/:group_id/members`. ## edit\_group\_member $api->edit_group_member( $group_id, $user_id, \%params, ); Sends a `PUT` request to `/groups/:group_id/members/:user_id`. ## remove\_group\_member $api->remove_group_member( $group_id, $user_id, ); Sends a `DELETE` request to `/groups/:group_id/members/:user_id`. # ISSUE METHODS See [http://doc.gitlab.com/ce/api/issues.html](http://doc.gitlab.com/ce/api/issues.html). ## all\_issues my $issues = $api->all_issues( \%params, ); Sends a `GET` request to `/issues` and returns the decoded/deserialized response body. ## issues my $issues = $api->issues( $project_id, \%params, ); Sends a `GET` request to `/projects/:project_id/issues` and returns the decoded/deserialized response body. ## issue my $issue = $api->issue( $project_id, $issue_id, ); Sends a `GET` request to `/projects/:project_id/issues/:issue_id` and returns the decoded/deserialized response body. ## create\_issue my $issue = $api->create_issue( $project_id, \%params, ); Sends a `POST` request to `/projects/:project_id/issues` and returns the decoded/deserialized response body. ## edit\_issue my $issue = $api->edit_issue( $project_id, $issue_id, \%params, ); Sends a `PUT` request to `/projects/:project_id/issues/:issue_id` and returns the decoded/deserialized response body. # KEY METHODS See [http://docs.gitlab.com/ce/api/keys.html](http://docs.gitlab.com/ce/api/keys.html). ## key my $key = $api->key( $key_id, ); Sends a `GET` request to `/keys/:key_id` and returns the decoded/deserialized response body. # LABEL METHODS See [http://doc.gitlab.com/ce/api/labels.html](http://doc.gitlab.com/ce/api/labels.html). ## labels my $labels = $api->labels( $project_id, ); Sends a `GET` request to `/projects/:project_id/labels` and returns the decoded/deserialized response body. ## create\_label my $label = $api->create_label( $project_id, \%params, ); Sends a `POST` request to `/projects/:project_id/labels` and returns the decoded/deserialized response body. ## delete\_label $api->delete_label( $project_id, \%params, ); Sends a `DELETE` request to `/projects/:project_id/labels`. ## edit\_label my $label = $api->edit_label( $project_id, \%params, ); Sends a `PUT` request to `/projects/:project_id/labels` and returns the decoded/deserialized response body. # MERGE REQUEST METHODS See [http://doc.gitlab.com/ce/api/merge\_requests.html](http://doc.gitlab.com/ce/api/merge_requests.html). ## merge\_requests my $merge_requests = $api->merge_requests( $project_id, \%params, ); Sends a `GET` request to `/projects/:project_id/merge_requests` and returns the decoded/deserialized response body. ## merge\_request my $merge_request = $api->merge_request( $project_id, $merge_request_id, ); Sends a `GET` request to `/projects/:project_id/merge_request/:merge_request_id` and returns the decoded/deserialized response body. ## create\_merge\_request my $merge_request = $api->create_merge_request( $project_id, \%params, ); Sends a `POST` request to `/projects/:project_id/merge_requests` and returns the decoded/deserialized response body. ## edit\_merge\_request my $merge_request = $api->edit_merge_request( $project_id, $merge_request_id, \%params, ); Sends a `PUT` request to `/projects/:project_id/merge_requests/:merge_request_id` and returns the decoded/deserialized response body. ## accept\_merge\_request $api->accept_merge_request( $project_id, $merge_request_id, \%params, ); Sends a `PUT` request to `/projects/:project_id/merge_requests/:merge_request_id/merge`. ## add\_merge\_request\_comment $api->add_merge_request_comment( $project_id, $merge_request_id, \%params, ); Sends a `POST` request to `/projects/:project_id/merge_requests/:merge_request_id/comments`. ## merge\_request\_comments my $comments = $api->merge_request_comments( $project_id, $merge_request_id, ); Sends a `GET` request to `/projects/:project_id/merge_requests/:merge_request_id/comments` and returns the decoded/deserialized response body. # MILESTONE METHODS See [http://doc.gitlab.com/ce/api/milestones.html](http://doc.gitlab.com/ce/api/milestones.html). ## milestones my $milestones = $api->milestones( $project_id, \%params, ); Sends a `GET` request to `/projects/:project_id/milestones` and returns the decoded/deserialized response body. ## milestone my $milestone = $api->milestone( $project_id, $milestone_id, ); Sends a `GET` request to `/projects/:project_id/milestones/:milestone_id` and returns the decoded/deserialized response body. ## create\_milestone $api->create_milestone( $project_id, \%params, ); Sends a `POST` request to `/projects/:project_id/milestones`. ## edit\_milestone $api->edit_milestone( $project_id, $milestone_id, \%params, ); Sends a `PUT` request to `/projects/:project_id/milestones/:milestone_id`. ## milestone\_issues my $issues = $api->milestone_issues( $project_id, $milestone_id, ); Sends a `GET` request to `/projects/:project_id/milestones/:milestone_id/issues` and returns the decoded/deserialized response body. # OPEN SOURCE LICENSES METHODS See [http://docs.gitlab.com/ce/api/licenses.html](http://docs.gitlab.com/ce/api/licenses.html). ## licenses my $licenses = $api->licenses( \%params, ); Sends a `GET` request to `/licenses` and returns the decoded/deserialized response body. ## license my $license = $api->license( $license_key, \%params, ); Sends a `GET` request to `/licenses/:license_key` and returns the decoded/deserialized response body. # NAMESPACE METHODS See [http://docs.gitlab.com/ce/api/namespaces.html](http://docs.gitlab.com/ce/api/namespaces.html). ## namespaces my $namespaces = $api->namespaces( \%params, ); Sends a `GET` request to `/namespaces` and returns the decoded/deserialized response body. # NOTE METHODS See [http://doc.gitlab.com/ce/api/notes.html](http://doc.gitlab.com/ce/api/notes.html). ## notes my $notes = $api->notes( $project_id, $thing_type, $thing_id, ); Sends a `GET` request to `/projects/:project_id/:thing_type/:thing_id/notes` and returns the decoded/deserialized response body. ## note my $note = $api->note( $project_id, $thing_type, $thing_id, $note_id, ); Sends a `GET` request to `/projects/:project_id/:thing_type/:thing_id/notes/:note_id` and returns the decoded/deserialized response body. ## create\_note $api->create_note( $project_id, $thing_type, $thing_id, \%params, ); Sends a `POST` request to `/projects/:project_id/:thing_type/:thing_id/notes`. ## edit\_note $api->edit_note( $project_id, $thing_type, $thing_id, $note_id, \%params, ); Sends a `PUT` request to `/projects/:project_id/:thing_type/:thing_id/notes/:note_id`. # PROJECT METHODS See [http://doc.gitlab.com/ce/api/projects.html](http://doc.gitlab.com/ce/api/projects.html). ## projects my $projects = $api->projects( \%params, ); Sends a `GET` request to `/projects` and returns the decoded/deserialized response body. ## owned\_projects my $projects = $api->owned_projects( \%params, ); Sends a `GET` request to `/projects/owned` and returns the decoded/deserialized response body. ## all\_projects my $projects = $api->all_projects( \%params, ); Sends a `GET` request to `/projects/all` and returns the decoded/deserialized response body. ## project my $project = $api->project( $project_id, ); Sends a `GET` request to `/projects/:project_id` and returns the decoded/deserialized response body. ## project\_events my $events = $api->project_events( $project_id, ); Sends a `GET` request to `/projects/:project_id/events` and returns the decoded/deserialized response body. ## create\_project my $project = $api->create_project( \%params, ); Sends a `POST` request to `/projects` and returns the decoded/deserialized response body. ## create\_project\_for\_user $api->create_project_for_user( $user_id, \%params, ); Sends a `POST` request to `/projects/user/:user_id`. ## edit\_project my $project = $api->edit_project( $project_id, \%params, ); Sends a `PUT` request to `/projects/:project_id` and returns the decoded/deserialized response body. ## fork\_project $api->fork_project( $project_id, ); Sends a `POST` request to `/pojects/fork/:project_id`. ## delete\_project $api->delete_project( $project_id, ); Sends a `DELETE` request to `/projects/:project_id`. ## project\_members my $members = $api->project_members( $project_id, \%params, ); Sends a `GET` request to `/projects/:project_id/members` and returns the decoded/deserialized response body. ## project\_member my $member = $api->project_member( $project_id, $user_id, ); Sends a `GET` request to `/project/:project_id/members/:user_id` and returns the decoded/deserialized response body. ## add\_project\_member $api->add_project_member( $project_id, \%params, ); Sends a `POST` request to `/projects/:project_id/members`. ## edit\_project\_member $api->edit_project_member( $project_id, $user_id, \%params, ); Sends a `PUT` request to `/projects/:project_id/members/:user_id`. ## remove\_project\_member $api->remove_project_member( $project_id, $user_id, ); Sends a `DELETE` request to `/projects/:project_id/members/:user_id`. ## share\_project\_with\_group $api->share_project_with_group( $id, \%params, ); Sends a `POST` request to `/projects/:id/share`. ## delete\_shared\_project\_link\_within\_group $api->delete_shared_project_link_within_group( $id, $group_id, ); Sends a `DELETE` request to `/projects/:id/share/:group_id`. ## project\_hooks my $hooks = $api->project_hooks( $project_id, ); Sends a `GET` request to `/projects/:project_id/hooks` and returns the decoded/deserialized response body. ## project\_hook my $hook = $api->project_hook( $project_id, $hook_id, ); Sends a `GET` request to `/project/:project_id/hooks/:hook_id` and returns the decoded/deserialized response body. ## create\_project\_hook $api->create_project_hook( $project_id, \%params, ); Sends a `POST` request to `/projects/:project_id/hooks`. ## edit\_project\_hook $api->edit_project_hook( $project_id, $hook_id, \%params, ); Sends a `PUT` request to `/projects/:project_id/hooks/:hook_id`. ## delete\_project\_hook my $hook = $api->delete_project_hook( $project_id, $hook_id, ); Sends a `DELETE` request to `/projects/:project_id/hooks/:hook_id` and returns the decoded/deserialized response body. ## set\_project\_fork $api->set_project_fork( $project_id, $forked_from_id, ); Sends a `POST` request to `/projects/:project_id/fork/:forked_from_id`. ## clear\_project\_fork $api->clear_project_fork( $project_id, ); Sends a `DELETE` request to `/projects/:project_id/fork`. ## search\_projects\_by\_name my $projects = $api->search_projects_by_name( $query, \%params, ); Sends a `GET` request to `/projects/search/:query` and returns the decoded/deserialized response body. # PROJECT SNIPPET METHODS See [http://doc.gitlab.com/ce/api/project\_snippets.html](http://doc.gitlab.com/ce/api/project_snippets.html). ## snippets my $snippets = $api->snippets( $project_id, ); Sends a `GET` request to `/projects/:project_id/snippets` and returns the decoded/deserialized response body. ## snippet my $snippet = $api->snippet( $project_id, $snippet_id, ); Sends a `GET` request to `/projects/:project_id/snippets/:snippet_id` and returns the decoded/deserialized response body. ## create\_snippet $api->create_snippet( $project_id, \%params, ); Sends a `POST` request to `/projects/:project_id/snippets`. ## edit\_snippet $api->edit_snippet( $project_id, $snippet_id, \%params, ); Sends a `PUT` request to `/projects/:project_id/snippets/:snippet_id`. ## delete\_snippet $api->delete_snippet( $project_id, $snippet_id, ); Sends a `DELETE` request to `/projects/:project_id/snippets/:snippet_id`. ## snippet\_content my $content = $api->snippet_content( $project_id, $snippet_id, ); Sends a `GET` request to `/projects/:project_id/snippets/:snippet_id/raw` and returns the decoded/deserialized response body. # REPOSITORY METHODS See [http://doc.gitlab.com/ce/api/repositories.html](http://doc.gitlab.com/ce/api/repositories.html). ## tree my $tree = $api->tree( $project_id, \%params, ); Sends a `GET` request to `/projects/:project_id/repository/tree` and returns the decoded/deserialized response body. ## blob my $blob = $api->blob( $project_id, $ref, \%params, ); Sends a `GET` request to `/projects/:project_id/repository/blobs/:ref` and returns the decoded/deserialized response body. ## raw\_blob my $raw_blob = $api->raw_blob( $project_id, $blob_sha, ); Sends a `GET` request to `/projects/:project_id/repository/raw_blobs/:blob_sha` and returns the decoded/deserialized response body. ## archive my $archive = $api->archive( $project_id, \%params, ); Sends a `GET` request to `/projects/:project_id/repository/archive` and returns the decoded/deserialized response body. ## compare my $comparison = $api->compare( $project_id, \%params, ); Sends a `GET` request to `/projects/:project_id/repository/compare` and returns the decoded/deserialized response body. ## contributors my $contributors = $api->contributors( $project_id, ); Sends a `GET` request to `/projects/:project_id/repository/contributors` and returns the decoded/deserialized response body. # FILE METHODS See [http://doc.gitlab.com/ce/api/repository\_files.html](http://doc.gitlab.com/ce/api/repository_files.html). ## file my $file = $api->file( $project_id, \%params, ); Sends a `GET` request to `/projects/:project_id/repository/files` and returns the decoded/deserialized response body. ## create\_file $api->create_file( $project_id, \%params, ); Sends a `POST` request to `/projects/:project_id/repository/files`. ## edit\_file $api->edit_file( $project_id, \%params, ); Sends a `PUT` request to `/projects/:project_id/repository/files`. ## delete\_file $api->delete_file( $project_id, \%params, ); Sends a `DELETE` request to `/projects/:project_id/repository/files`. # RUNNER METHODS See [http://docs.gitlab.com/ce/api/runners.html](http://docs.gitlab.com/ce/api/runners.html). ## runners my $runners = $api->runners( \%params, ); Sends a `GET` request to `/runners` and returns the decoded/deserialized response body. ## all\_runners my $runners = $api->all_runners( \%params, ); Sends a `GET` request to `/runners/all` and returns the decoded/deserialized response body. ## runner my $runner = $api->runner( $id, ); Sends a `GET` request to `/runners/:id` and returns the decoded/deserialized response body. ## update\_runner my $runner = $api->update_runner( $id, \%params, ); Sends a `PUT` request to `/runners/:id` and returns the decoded/deserialized response body. ## delete\_runner my $runner = $api->delete_runner( $id, ); Sends a `DELETE` request to `/runners/:id` and returns the decoded/deserialized response body. ## project\_runners my $runners = $api->project_runners( $id, ); Sends a `GET` request to `/projects/:id/runners` and returns the decoded/deserialized response body. ## enable\_project\_runner my $runner = $api->enable_project_runner( $id, \%params, ); Sends a `POST` request to `/projects/:id/runners` and returns the decoded/deserialized response body. ## disable\_project\_runner my $runner = $api->disable_project_runner( $id, $runner_id, ); Sends a `DELETE` request to `/projects/:id/runners/:runner_id` and returns the decoded/deserialized response body. # SERVICE METHODS See [http://doc.gitlab.com/ce/api/services.html](http://doc.gitlab.com/ce/api/services.html). ## edit\_project\_service $api->edit_project_service( $project_id, $service_name, \%params, ); Sends a `PUT` request to `/projects/:project_id/services/:service_name`. ## delete\_project\_service $api->delete_project_service( $project_id, $service_name, ); Sends a `DELETE` request to `/projects/:project_id/services/:service_name`. # SESSION METHODS See [http://doc.gitlab.com/ce/api/session.html](http://doc.gitlab.com/ce/api/session.html). ## session my $session = $api->session( \%params, ); Sends a `POST` request to `/session` and returns the decoded/deserialized response body. # SETTINGS METHODS See [http://docs.gitlab.com/ce/api/settings.html](http://docs.gitlab.com/ce/api/settings.html). ## settings my $settings = $api->settings(); Sends a `GET` request to `/application/settings` and returns the decoded/deserialized response body. ## update\_settings my $settings = $api->update_settings( \%params, ); Sends a `PUT` request to `/application/settings` and returns the decoded/deserialized response body. # SIDEKIQ METHODS See [http://docs.gitlab.com/ce/api/sidekiq\_metrics.html](http://docs.gitlab.com/ce/api/sidekiq_metrics.html). ## queue\_metrics my $metrics = $api->queue_metrics(); Sends a `GET` request to `/sidekiq/queue_metrics` and returns the decoded/deserialized response body. ## process\_metrics my $metrics = $api->process_metrics(); Sends a `GET` request to `/sidekiq/process_metrics` and returns the decoded/deserialized response body. ## job\_stats my $stats = $api->job_stats(); Sends a `GET` request to `/sidekiq/job_stats` and returns the decoded/deserialized response body. ## compound\_metrics my $metrics = $api->compound_metrics(); Sends a `GET` request to `/sidekiq/compound_metrics` and returns the decoded/deserialized response body. # USER SNIPPET METHODS See [http://docs.gitlab.com/ce/api/snippets.html](http://docs.gitlab.com/ce/api/snippets.html). ## user\_snippets my $snippets = $api->user_snippets(); Sends a `GET` request to `/snippets` and returns the decoded/deserialized response body. ## user\_snippet my $snippet = $api->user_snippet( $snippet_id, ); Sends a `GET` request to `/snippets/:snippet_id` and returns the decoded/deserialized response body. ## create\_user\_snippet $api->create_user_snippet( \%params, ); Sends a `POST` request to `/snippets`. ## edit\_user\_snippet $api->edit_user_snippet( $snippet_id, \%params, ); Sends a `PUT` request to `/snippets/:snippet_id`. ## delete\_user\_snippet $api->delete_user_snippet( $snippet_id, ); Sends a `DELETE` request to `/snippets/:snippet_id`. ## public\_snippets my $snippets = $api->public_snippets(); Sends a `GET` request to `/snippets/public` and returns the decoded/deserialized response body. # SYSTEM HOOK METHODS See [http://doc.gitlab.com/ce/api/system\_hooks.html](http://doc.gitlab.com/ce/api/system_hooks.html). ## hooks my $hooks = $api->hooks(); Sends a `GET` request to `/hooks` and returns the decoded/deserialized response body. ## create\_hook $api->create_hook( \%params, ); Sends a `POST` request to `/hooks`. ## test\_hook my $hook = $api->test_hook( $hook_id, ); Sends a `GET` request to `/hooks/:hook_id` and returns the decoded/deserialized response body. ## delete\_hook $api->delete_hook( $hook_id, ); Sends a `DELETE` request to `/hooks/:hook_id`. # TAG METHODS See [http://docs.gitlab.com/ce/api/tags.html](http://docs.gitlab.com/ce/api/tags.html). ## tags my $tags = $api->tags( $project_id, ); Sends a `GET` request to `/projects/:project_id/repository/tags` and returns the decoded/deserialized response body. ## tag my $tag = $api->tag( $project_id, $tag_name, ); Sends a `GET` request to `/projects/:project_id/repository/tags/:tag_name` and returns the decoded/deserialized response body. ## create\_tag my $tag = $api->create_tag( $project_id, \%params, ); Sends a `POST` request to `/projects/:project_id/repository/tags` and returns the decoded/deserialized response body. ## delete\_tag $api->delete_tag( $project_id, $tag_name, ); Sends a `DELETE` request to `/projects/:project_id/repository/tags/:tag_name`. ## create\_release $api->create_release( $project_id, $tag_name, \%params, ); Sends a `POST` request to `/projects/:project_id/repository/tags/:tag_name/release`. ## update\_release $api->update_release( $project_id, $tag_name, \%params, ); Sends a `PUT` request to `/projects/:project_id/repository/tags/:tag_name/release`. # USER METHODS See [http://doc.gitlab.com/ce/api/users.html](http://doc.gitlab.com/ce/api/users.html). ## users my $users = $api->users( \%params, ); Sends a `GET` request to `/users` and returns the decoded/deserialized response body. ## user my $user = $api->user( $user_id, ); Sends a `GET` request to `/users/:user_id` and returns the decoded/deserialized response body. ## create\_user $api->create_user( \%params, ); Sends a `POST` request to `/users`. ## edit\_user $api->edit_user( $user_id, \%params, ); Sends a `PUT` request to `/users/:user_id`. ## delete\_user my $user = $api->delete_user( $user_id, ); Sends a `DELETE` request to `/users/:user_id` and returns the decoded/deserialized response body. ## current\_user my $user = $api->current_user(); Sends a `GET` request to `/user` and returns the decoded/deserialized response body. ## current\_user\_ssh\_keys my $keys = $api->current_user_ssh_keys(); Sends a `GET` request to `/user/keys` and returns the decoded/deserialized response body. ## user\_ssh\_keys my $keys = $api->user_ssh_keys( $user_id, ); Sends a `GET` request to `/users/:user_id/keys` and returns the decoded/deserialized response body. ## user\_ssh\_key my $key = $api->user_ssh_key( $key_id, ); Sends a `GET` request to `/user/keys/:key_id` and returns the decoded/deserialized response body. ## create\_current\_user\_ssh\_key $api->create_current_user_ssh_key( \%params, ); Sends a `POST` request to `/user/keys`. ## create\_user\_ssh\_key $api->create_user_ssh_key( $user_id, \%params, ); Sends a `POST` request to `/users/:user_id/keys`. ## delete\_current\_user\_ssh\_key $api->delete_current_user_ssh_key( $key_id, ); Sends a `DELETE` request to `/user/keys/:key_id`. ## delete\_user\_ssh\_key $api->delete_user_ssh_key( $user_id, $key_id, ); Sends a `DELETE` request to `/users/:user_id/keys/:key_id`. # SEE ALSO [Net::Gitlab](https://metacpan.org/pod/Net::Gitlab) purports to provide an interface to the GitLab API, but it is hard to tell due to a complete lack of documentation via either POD or unit tests. # CONTRIBUTING This module is auto-generated from a set of YAML files defining the interface of GitLab's API. If you'd like to contribute to this module then please feel free to make a [fork on GitHub](https://github.com/bluefeet/GitLab-API-v3) and submit a pull request, just make sure you edit the files in the `authors/` directory instead of `lib/GitLab/API/v3.pm` directly. Please see [https://github.com/bluefeet/GitLab-API-v3/blob/master/author/README.pod](https://github.com/bluefeet/GitLab-API-v3/blob/master/author/README.pod) for more information. Alternatively, you can [open a ticket](https://github.com/bluefeet/GitLab-API-v3/issues). # AUTHORS Aran Clary Deltac Dotan Dimet Nigel Gregoire trunov-ms Marek R. Sotola José Joaquín Atria Dave Webb # ACKNOWLEDGEMENTS Thanks to [ZipRecruiter](https://www.ziprecruiter.com/) for encouraging their employees to contribute back to the open source ecosystem. Without their dedication to quality software development this distribution would not exist. # LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.