Search all guides

Reference · Tools

GitLab integration

Manage GitLab repository files, issues, releases, repositories, and users via the GitLab REST API v4.

Action (binary) Development v1 Binary data

The GitLab node lets you create, read, update, and delete files, issues, releases, repositories, and users through the GitLab REST API v4. It handles binary files natively, so you can build workflows that, for example, pull a compiled artifact from a release, process it, and commit the result back to a repo. Works with both gitlab.com and self-hosted instances.

Works as
Action (binary)
Tool name
gitlab
Parameters
39
Outputs
Output, Error
Credentials
GitLab API
Official docs
GitLab docs docs.gitlab.com

What you can build with GitLab

  • Download a file from a GitLab repository as binary.
  • Create a new file in a GitLab repository from binary data.
  • Create a GitLab issue with labels and assignees.
  • List all files in a GitLab repository folder.
  • Create a new release for a GitLab project.
  • Get all issues for a GitLab repository.

Overview

The GitLab tool provides full CRUD operations against the GitLab REST API v4. Supports five resources: (1) File — create, edit, delete, get (with binary download), list repository tree. (2) Issue — create, createComment, edit, get, lock. (3) Release — create, delete, get, getAll, update. (4) Repository — get project info, getIssues. (5) User — getRepositories. File operations support binary data: file:get downloads file content (base64-decoded) to the binary store; file:create/edit can upload binary content (base64-encoded) from an item’s binary property. Supports self-hosted GitLab instances via configurable server URL in credentials. Uses PRIVATE-TOKEN header authentication.

Node Type

Action (Binary) — handles file/binary data operations

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires GitLab API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Filefile
Issueissue
Releaserelease
Repositoryrepository
Useruser

Operations

Each resource has its own Operation list, and several resources reuse the same operation values (create, delete, edit, get). Pick the resource first, then the operation.

ResourceOperationValueDescription
FileCreatecreateCreate a new file in the repository
FileDeletedeleteDelete a file from the repository
FileEditeditEdit an existing file in the repository
FileGetgetGet a file from the repository
FileListlistList files and directories in a repository path
IssueCreatecreateCreate a new issue
IssueCreate CommentcreateCommentCreate a comment on an issue
IssueEditeditEdit an issue
IssueGetgetGet an issue
IssueLocklockLock an issue
ReleaseCreatecreateCreate a new release
ReleaseDeletedeleteDelete a release
ReleaseGetgetGet a release
ReleaseGet ManygetAllGet many releases
ReleaseUpdateupdateUpdate a release
RepositoryGetgetGet repository information
RepositoryGet IssuesgetIssuesGet repository issues
UserGet RepositoriesgetRepositoriesGet a user’s repositories

Parameters

Get takes no parameters of its own — see All Operations. Get Repositories takes no parameters of its own — see All Operations.

File: Create

ParameterTypeRequiredDefaultDescription
File PathstringNo—The file path within the repository. (hidden when Operation is list)
Binary FilebooleanNofalseWhether the data to upload should be taken from a binary field.
File ContentstringNo—The text content of the file. (shown when Binary File is false)
Input Binary FieldstringNodataThe name of the input binary field containing the file to upload. Names are case-sensitive — see the upstream node’s Binary Data panel for the exact names to use. (shown when Binary File is true)
Commit MessagestringYes—The commit message for the file operation.
BranchstringYes—Name of the branch to commit to.
Additional ParameterscollectionNo{}
— Start BranchstringNo—Name of the base branch to create the new branch from.
— Author NamestringNo—The name of the commit author.
— Author EmailstringNo—The email of the commit author.
— EncodingstringNotextChange encoding to base64. Default is text.

File: Delete

ParameterTypeRequiredDefaultDescription
File PathstringNo—The file path within the repository. (hidden when Operation is list)
Commit MessagestringYes—The commit message for the file operation.
BranchstringYes—Name of the branch to commit to.
Additional ParameterscollectionNo{}
— Start BranchstringNo—Name of the base branch to create the new branch from.
— Author NamestringNo—The name of the commit author.
— Author EmailstringNo—The email of the commit author.
— EncodingstringNotextChange encoding to base64. Default is text.

File: Edit

ParameterTypeRequiredDefaultDescription
File PathstringNo—The file path within the repository. (hidden when Operation is list)
Binary FilebooleanNofalseWhether the data to upload should be taken from a binary field.
File ContentstringNo—The text content of the file. (shown when Binary File is false)
Input Binary FieldstringNodataThe name of the input binary field containing the file to upload. Names are case-sensitive — see the upstream node’s Binary Data panel for the exact names to use. (shown when Binary File is true)
Commit MessagestringYes—The commit message for the file operation.
BranchstringYes—Name of the branch to commit to.
Additional ParameterscollectionNo{}
— Start BranchstringNo—Name of the base branch to create the new branch from.
— Author NamestringNo—The name of the commit author.
— Author EmailstringNo—The email of the commit author.
— EncodingstringNotextChange encoding to base64. Default is text.

File: Get

ParameterTypeRequiredDefaultDescription
File PathstringNo—The file path within the repository. (hidden when Operation is list)
As Binary PropertybooleanNotrueWhether to decode the file content and store it as binary data instead of returning the raw API response.
Put Output File in FieldstringYesdataThe name of the output binary field to put the file in. Names are case-sensitive — see the upstream node’s Binary Data panel for the exact names to use. (shown when As Binary Property is true)
Additional ParameterscollectionNo{}
— ReferencestringNo—The name of the commit/branch/tag. Defaults to the repository’s default branch.

File: List

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo20Max number of results to return. (shown when Return All is false)
File PathstringNo—The file path within the repository. (hidden when Operation is list)
PathstringNo—The path of the folder to list. Leave empty for root.
Additional ParameterscollectionNo{}
— ReferencestringNo—The name of the commit/branch/tag. Defaults to the repository’s default branch.
— RecursivebooleanNofalseWhether to get a recursive file tree.

Issue: Create

ParameterTypeRequiredDefaultDescription
TitlestringYes—The title of the issue.
BodystringNo—The description body of the issue.
Due DatedateTimeNo—Due date for the issue (YYYY-MM-DD).
LabelsstringNo—Comma-separated list of label names to add to the issue.
Assignee IDsstringNo—Comma-separated list of user IDs to assign to the issue.

Issue: Create Comment

ParameterTypeRequiredDefaultDescription
Issue NumbernumberYes0The IID of the issue.
BodystringNo—The body of the comment.

Issue: Edit

ParameterTypeRequiredDefaultDescription
Issue NumbernumberYes0The IID of the issue.
Edit FieldscollectionNo{}Fields to update on the issue.
Options: closed
— TitlestringNo—New issue title.
— DescriptionstringNo—New issue description.
— StateoptionsNoopenThe state to set.
Options: closed, open
— LabelsstringNo—Comma-separated label names.
— Assignee IDsstringNo—Comma-separated user IDs.
— Due DatedateTimeNo—Due date for the issue.

Issue: Get

ParameterTypeRequiredDefaultDescription
Issue NumbernumberYes0The IID of the issue.

Issue: Lock

ParameterTypeRequiredDefaultDescription
Issue NumbernumberYes0The IID of the issue.
Lock ReasonoptionsNoresolvedThe reason for locking the issue.
Options: off-topic, too heated, resolved, spam

Release: Create

ParameterTypeRequiredDefaultDescription
TagstringYes—The tag name for the release.
Additional FieldscollectionNo{}
Options: created_at, asc
— NamestringNo—The name of the release.
— DescriptionstringNo—Release description (supports Markdown).
— RefstringNo—If the tag doesn’t exist, the release will be created from this ref (commit SHA, tag, or branch).

Release: Delete

ParameterTypeRequiredDefaultDescription
Project IDstringYes—The ID or URL-encoded path of the project.
Tag NamestringYes—The Git tag the release is associated with.

Release: Get

ParameterTypeRequiredDefaultDescription
Project IDstringYes—The ID or URL-encoded path of the project.
Tag NamestringYes—The Git tag the release is associated with.

Release: Get Many

ParameterTypeRequiredDefaultDescription
Project IDstringYes—The ID or URL-encoded path of the project.
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo20Max number of results to return. (shown when Return All is false)
Additional FieldscollectionNo{}
Options: created_at, asc
— Order ByoptionsNoreleased_atThe field to use for ordering.
Options: created_at, released_at
— SortoptionsNodescThe direction of the order.
Options: asc, desc

Release: Update

ParameterTypeRequiredDefaultDescription
Project IDstringYes—The ID or URL-encoded path of the project.
Tag NamestringYes—The Git tag the release is associated with.
Additional FieldscollectionNo{}
Options: created_at, asc
— NamestringNo—The release name.
— DescriptionstringNo—The description of the release (supports Markdown).
— MilestonesstringNo—Comma-separated milestone titles to associate with the release.
— Released AtdateTimeNo—The date when the release is/was ready.

Repository: Get Issues

ParameterTypeRequiredDefaultDescription
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo20Max number of results to return. (shown when Return All is false)
FilterscollectionNo{}Filters for repository issues.
Options: created_at, asc
— AssigneestringNo—Return only issues assigned to a specific user.
— CreatorstringNo—Return only issues created by a specific user.
— SearchstringNo—Search issues against title and description.
— LabelsstringNo—Return only issues with given labels (comma-separated).
— Updated AfterdateTimeNo—Return only issues updated at or after this time.
— StateoptionsNoopenedIssue state filter.
Options: leave empty for the default, closed, opened
— SortoptionsNocreated_atThe order the issues should be returned in.
Options: created_at, updated_at, priority
— DirectionoptionsNodescThe sort direction.
Options: asc, desc

All Operations

ParameterTypeRequiredDefaultDescription
Project OwnerstringYes—User, group, or namespace of the project. For subgroups, use slashes (e.g., “group/subgroup”).
Project NamestringYes—The name of the project. (hidden when Resource is user and Operation is getRepositories)
Max ConcurrencynumberNo10Maximum number of items to process concurrently.

Output Data

How the output item is built depends on whether the operation returns one record or a list — the two behave differently, and mixing them up is the usual surprise:

  • Single-record operations replace the item JSON. File Create, Edit and Delete; every Issue operation; Release Create, Delete, Get and Update; Repository Get — each writes the GitLab response as the whole output item JSON. Fields the input item carried are gone unless GitLab happens to return them, so copy anything you still need onto the item after this node, not before.
  • List operations merge and fan out. File List, Release Get Many, Repository Get Issues and User Get Repositories emit one output item per entry, each entry merged onto the input item’s JSON. A result with no entries produces no output items at all for that input item.
  • File Get is the exception. With As Binary Property on (the default) the file lands in the binary field you named and the item JSON keeps its existing fields plus file_name, file_path, size, encoding, content_sha256, ref, blob_id, commit_id and last_commit_id. With it off, the raw API response replaces the item JSON and the content stays base64-encoded inside it.

Binary data is always forwarded. Binary on the input item is carried through every operation; File Get with As Binary Property on adds the downloaded file alongside it rather than replacing it.

Delete operations that GitLab answers with no body produce success: true — plus deleted naming the file path or release tag.

Example Configuration

Open an issue with labels, assignees and a due date:

{
  "type": "gitlab",
  "parameters": {
    "resource": "issue",
    "operation": "create",
    "owner": "mygroup",
    "repository": "my-repo",
    "title": "{{ $json.summary }}",
    "body": "{{ $json.details }}",
    "dueDate": "2026-12-31T00:00:00Z",
    "labels": "bug,high-priority",
    "assigneeIds": "1,2"
  }
}

Close an issue and relabel it:

{
  "type": "gitlab",
  "parameters": {
    "resource": "issue",
    "operation": "edit",
    "owner": "mygroup",
    "repository": "my-repo",
    "issueNumber": 123,
    "editFields": {
      "title": "Updated bug report",
      "state": "closed",
      "labels": "bug,resolved"
    }
  }
}

Commit a text file:

{
  "type": "gitlab",
  "parameters": {
    "resource": "file",
    "operation": "create",
    "owner": "mygroup",
    "repository": "my-repo",
    "filePath": "src/main.py",
    "binaryData": false,
    "fileContent": "print('Hello World')",
    "commitMessage": "Add main.py file",
    "branch": "main"
  }
}

Commit a binary file coming from an upstream node:

{
  "type": "gitlab",
  "parameters": {
    "resource": "file",
    "operation": "create",
    "owner": "mygroup",
    "repository": "my-repo",
    "filePath": "assets/image.png",
    "binaryData": true,
    "binaryPropertyName": "imageData",
    "commitMessage": "Add image asset",
    "branch": "main"
  }
}

Download a file into a binary field for a downstream node:

{
  "type": "gitlab",
  "parameters": {
    "resource": "file",
    "operation": "get",
    "owner": "mygroup",
    "repository": "my-repo",
    "filePath": "docs/handbook.pdf",
    "asBinaryProperty": true,
    "binaryPropertyName": "data",
    "additionalParameters": {
      "reference": "main"
    }
  }
}

Cut a release from a branch:

{
  "type": "gitlab",
  "parameters": {
    "resource": "release",
    "operation": "create",
    "owner": "mygroup",
    "repository": "my-repo",
    "releaseTag": "v1.0.0",
    "additionalFields": {
      "name": "Version 1.0.0",
      "description": "First stable release",
      "ref": "main"
    }
  }
}

List open bugs, newest first, one item per issue:

{
  "type": "gitlab",
  "parameters": {
    "resource": "repository",
    "operation": "getIssues",
    "owner": "mygroup",
    "repository": "my-repo",
    "returnAll": false,
    "limit": 50,
    "getRepositoryIssuesFilters": {
      "state": "opened",
      "labels": "bug",
      "order_by": "updated_at",
      "sort": "desc"
    }
  }
}

Walk a folder tree:

{
  "type": "gitlab",
  "parameters": {
    "resource": "file",
    "operation": "list",
    "owner": "mygroup",
    "repository": "my-repo",
    "filePath": "src",
    "returnAll": true,
    "additionalParameters": {
      "ref": "main",
      "recursive": true
    }
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

This tool manages GitLab repository files, issues, releases, repositories, and users. It is ideal for operations like creating new files, editing issues, or retrieving release information within a GitLab instance. It produces updated GitLab resources, file content, issue details, release information, or repository data.

  • Owner plus Project Name identify the project for File, Issue, Repository and User operations; the Release operations other than Create identify it with Project ID instead, which accepts either the numeric project ID or its URL-encoded path.
  • Issue Number is the IID. Use the number from the issue’s URL, not the globally unique issue ID.
  • Binary uploads are capped at 50 MB. Larger files fail the item — the whole file has to fit in one API request.
  • Self-hosted GitLab works — set the server URL on the credential; it defaults to gitlab.com.
  • Return All can be a lot of items. File List, Release Get Many and Repository Get Issues page through everything GitLab has, one output item each, so leave Return All off and set Limit while you are still building the workflow.

Frequently asked questions

How do I identify a project — do I use a project ID or the repo name?

It depends on the resource. File, Issue, Repository, and User operations identify the project with an Owner plus a Project Name. Release operations (except Create) use a Project ID field instead, which accepts either the numeric project ID or the URL-encoded path like `mygroup%2Fmyrepo`. Check which resource you're using before you wire up the project reference.

What does 'Issue Number' mean — is it the global issue ID?

No. The Issue Number field expects the IID, which is the number shown in the issue's URL on GitLab (e.g. `/issues/42` → IID 42). This is project-scoped, not the globally unique internal issue ID. Using the wrong ID will either fetch the wrong issue or return an error.

How does binary file handling work, and is there a size limit?

When you use file:get, the node downloads the file content, base64-decodes it, and writes it to the item's binary store so downstream nodes can use it directly. For file:create and file:edit, you can supply a binary property from the item and the node will base64-encode it before uploading. The hard limit is 50 MB — files larger than that will fail the item because the entire file must fit in a single API request.

Can I use this node with a self-hosted GitLab instance?

Yes. The GitLab API credential has a configurable server URL field that defaults to gitlab.com. Point it at your instance's base URL and authentication works the same way via the PRIVATE-TOKEN header. No other changes are needed in the node itself.

Is 'Return All' safe to enable for list operations?

Use it carefully. The File List, Release Get Many, and Repository Get Issues operations will page through every result GitLab has and emit one output item per record. On large repositories or projects with thousands of issues this can produce a very large number of items and slow your workflow significantly. Keep Return All off and set an explicit Limit while building and testing.

Build with GitLab

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need GitLab API credentials first.

Open BusyBot

Last reviewed . Spotted something wrong? Tell us.