GitLab API
GitLab API integration for repository operations. Use when working with GitLab repositories for reading, writing, creating, or deleting files, listing projects, managing branches, or any other GitLab
GitLab API integration for repository operations. Use when working with GitLab repositories for reading, writing, creating, or deleting files, listing projects, managing branches, or any other GitLab
Real data. Real impact.
Growing
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Interact with GitLab repositories via the REST API. Supports both GitLab.com and self-hosted instances.
Store your GitLab personal access token:
mkdir -p ~/.config/gitlab echo "glpat-YOUR_TOKEN_HERE" > ~/.config/gitlab/api_token
Token scopes needed:
api or read_api + write_repository
Get a token:
Default instance:
https://gitlab.com
For self-hosted GitLab, create a config file:
echo "https://gitlab.example.com" > ~/.config/gitlab/instance_url
GITLAB_TOKEN=$(cat ~/.config/gitlab/api_token) GITLAB_URL=$(cat ~/.config/gitlab/instance_url 2>/dev/null || echo "https://gitlab.com")curl -H "PRIVATE-TOKEN: $GITLAB_TOKEN"
"$GITLAB_URL/api/v4/projects?owned=true&per_page=20"
Projects are identified by ID or URL-encoded path (
namespace%2Fproject).
# By path curl -H "PRIVATE-TOKEN: $GITLAB_TOKEN" \ "$GITLAB_URL/api/v4/projects/username%2Frepo"Extract ID from response: jq '.id'
PROJECT_ID="12345" FILE_PATH="src/main.py" BRANCH="main"curl -H "PRIVATE-TOKEN: $GITLAB_TOKEN"
"$GITLAB_URL/api/v4/projects/$PROJECT_ID/repository/files/${FILE_PATH}?ref=$BRANCH"
| jq -r '.content' | base64 -d
PROJECT_ID="12345" FILE_PATH="src/new_file.py" BRANCH="main" CONTENT=$(echo "print('hello')" | base64)curl -X POST -H "PRIVATE-TOKEN: $GITLAB_TOKEN"
-H "Content-Type: application/json"
"$GITLAB_URL/api/v4/projects/$PROJECT_ID/repository/files/${FILE_PATH}"
-d @- <<EOF { "branch": "$BRANCH", "content": "$CONTENT", "commit_message": "Add new file", "encoding": "base64" } EOF
For updates, use
-X PUT instead of -X POST.
curl -X DELETE -H "PRIVATE-TOKEN: $GITLAB_TOKEN" \ -H "Content-Type: application/json" \ "$GITLAB_URL/api/v4/projects/$PROJECT_ID/repository/files/${FILE_PATH}" \ -d '{"branch": "main", "commit_message": "Delete file"}'
curl -H "PRIVATE-TOKEN: $GITLAB_TOKEN" \ "$GITLAB_URL/api/v4/projects/$PROJECT_ID/repository/tree?path=src&ref=main"
curl -H "PRIVATE-TOKEN: $GITLAB_TOKEN" \ "$GITLAB_URL/api/v4/projects/$PROJECT_ID/repository/archive.tar.gz" \ -o repo.tar.gz
curl -H "PRIVATE-TOKEN: $GITLAB_TOKEN" \ "$GITLAB_URL/api/v4/projects/$PROJECT_ID/repository/branches"
curl -X POST -H "PRIVATE-TOKEN: $GITLAB_TOKEN" \ -H "Content-Type: application/json" \ "$GITLAB_URL/api/v4/projects/$PROJECT_ID/repository/branches" \ -d '{"branch": "feature-xyz", "ref": "main"}'
Use
scripts/gitlab_api.sh for common operations:
# List projects ./scripts/gitlab_api.sh list-projectsRead file
./scripts/gitlab_api.sh read-file <project-id> <file-path> [branch]
Write file
./scripts/gitlab_api.sh write-file <project-id> <file-path> <content> <commit-msg> [branch]
Delete file
./scripts/gitlab_api.sh delete-file <project-id> <file-path> <commit-msg> [branch]
List directory
./scripts/gitlab_api.sh list-dir <project-id> <dir-path> [branch]
Full API docs: https://docs.gitlab.com/ee/api/api_resources.html
Key endpoints:
/api/v4/projects/api/v4/projects/:id/repository/files/api/v4/projects/:id/repository/tree/api/v4/projects/:id/repository/branchesNo automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.