Reference · Tools

GitLab

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.

Node type
Action (binary)
Parameters
39
Outputs
Output, Error
Credentials
GitLab API

GitLab

Manage GitLab files, issues, releases, repositories, and users

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.

Category: Development
Tool Name: gitlab
Version: 1

Appearance: Icon: si-gitlab | Color: #FC6D26

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

Every parameter accepts expressions, so identifiers, paths and message text can all come from the incoming item. Where a parameter is left empty, the node also falls back to a field of the same name on the input item — an item carrying owner, repository, filePath, issueNumber, projectId or tagName can drive the node without those fields being filled in at all.

Repository: Get and User: Get Repositories take no parameters of their own — see All Operations.

All Operations

ParameterTypeRequiredDefaultDescription
Project Owner (owner)stringYesUser, group, or namespace of the project. For subgroups, use slashes (e.g., “group/subgroup”). On User: Get Repositories this is the user whose projects you want.
Project Name (repository)stringYesThe name of the project. (hidden when Resource is user and Operation is getRepositories)
Max ConcurrencynumberNo10Maximum number of items to process concurrently (1–100).

File: Create

ParameterTypeRequiredDefaultDescription
File Path (filePath)stringNoThe file path within the repository.
Binary File (binaryData)booleanNofalseWhether the data to upload should be taken from a binary field.
File ContentstringNoThe text content of the file. (shown when Binary File is false)
Input Binary Field (binaryPropertyName)stringNodataThe 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 MessagestringYesThe commit message for the file operation.
BranchstringYesName of the branch to commit to.
Additional Parameters (additionalParameters)collectionNo{}Optional commit settings.
— Start Branch (startBranch)stringNoName of the base branch to create the new branch from.
— Author Name (authorName)stringNoThe name of the commit author.
— Author Email (authorEmail)stringNoThe email of the commit author.
— Encoding (encoding)stringNotextChange encoding to base64. Default is text.

File: Edit

ParameterTypeRequiredDefaultDescription
File Path (filePath)stringNoThe file path within the repository.
Binary File (binaryData)booleanNofalseWhether the data to upload should be taken from a binary field.
File ContentstringNoThe text content of the file. (shown when Binary File is false)
Input Binary Field (binaryPropertyName)stringNodataThe 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 MessagestringYesThe commit message for the file operation.
BranchstringYesName of the branch to commit to.
Additional Parameters (additionalParameters)collectionNo{}Optional commit settings.
— Start Branch (startBranch)stringNoName of the base branch to create the new branch from.
— Author Name (authorName)stringNoThe name of the commit author.
— Author Email (authorEmail)stringNoThe email of the commit author.
— Encoding (encoding)stringNotextChange encoding to base64. Default is text.

File: Delete

ParameterTypeRequiredDefaultDescription
File Path (filePath)stringNoThe file path within the repository.
Commit MessagestringYesThe commit message for the file operation.
BranchstringYesName of the branch to commit to.
Additional Parameters (additionalParameters)collectionNo{}Optional commit settings.
— Start Branch (startBranch)stringNoName of the base branch to create the new branch from.
— Author Name (authorName)stringNoThe name of the commit author.
— Author Email (authorEmail)stringNoThe email of the commit author.
— Encoding (encoding)stringNotextChange encoding to base64. Default is text.

File: Get

ParameterTypeRequiredDefaultDescription
File Path (filePath)stringNoThe file path within the repository.
As Binary Property (asBinaryProperty)booleanNotrueWhether to decode the file content and store it as binary data instead of returning the raw API response.
Put Output File in Field (binaryPropertyName)stringYesdataThe 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 Parameters (additionalParameters)collectionNo{}Optional lookup settings.
— Reference (reference)stringNoThe name of the commit/branch/tag. Defaults to the repository’s default branch.

File: List

ParameterTypeRequiredDefaultDescription
Path (filePath)stringNoThe path of the folder to list. Leave empty for root.
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo20Max number of results to return (1–100). (shown when Return All is false)
Additional Parameters (additionalParameters)collectionNo{}Optional listing settings.
— Reference (ref)stringNoThe name of the commit/branch/tag. Defaults to the repository’s default branch.
— Recursive (recursive)booleanNofalseWhether to get a recursive file tree.

Issue: Create

ParameterTypeRequiredDefaultDescription
TitlestringYesThe title of the issue.
BodystringNoThe description body of the issue.
Due DatedateTimeNoDue date for the issue (YYYY-MM-DD).
LabelsstringNoComma-separated list of label names to add to the issue.
Assignee IDsstringNoComma-separated list of user IDs to assign to the issue.

Issue: Create Comment

ParameterTypeRequiredDefaultDescription
Issue NumbernumberYes0The IID of the issue — the number shown in the issue’s URL, not its global ID.
BodystringNoThe body of the comment.

Issue: Edit

ParameterTypeRequiredDefaultDescription
Issue NumbernumberYes0The IID of the issue — the number shown in the issue’s URL, not its global ID.
Edit FieldscollectionNo{}Fields to update on the issue. Only the fields you add are sent.
— Title (title)stringNoNew issue title.
— Description (description)stringNoNew issue description.
— State (state)optionsNoopenThe state to set.
Options: closed, open
— Labels (labels)stringNoComma-separated label names.
— Assignee IDs (assignee_ids)stringNoComma-separated user IDs.
— Due Date (due_date)dateTimeNoDue date for the issue.

Issue: Get

ParameterTypeRequiredDefaultDescription
Issue NumbernumberYes0The IID of the issue — the number shown in the issue’s URL, not its global ID.

Issue: Lock

ParameterTypeRequiredDefaultDescription
Issue NumbernumberYes0The IID of the issue — the number shown in the issue’s URL, not its global ID.
Lock ReasonoptionsNoresolvedThe reason for locking the issue.
Options: off-topic, too heated, resolved, spam

Release: Create

ParameterTypeRequiredDefaultDescription
Tag (releaseTag)stringYesThe tag name for the release.
Additional Fields (additionalFields)collectionNo{}Optional release properties.
— Name (name)stringNoThe name of the release.
— Description (description)stringNoRelease description (supports Markdown).
— Ref (ref)stringNoIf the tag doesn’t exist, the release will be created from this ref (commit SHA, tag, or branch).

Release: Delete

ParameterTypeRequiredDefaultDescription
Project IDstringYesThe ID or URL-encoded path of the project.
Tag Name (tagName)stringYesThe Git tag the release is associated with.

Release: Get

ParameterTypeRequiredDefaultDescription
Project IDstringYesThe ID or URL-encoded path of the project.
Tag Name (tagName)stringYesThe Git tag the release is associated with.

Release: Get Many

ParameterTypeRequiredDefaultDescription
Project IDstringYesThe 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 (1–100). (shown when Return All is false)
Additional Fields (additionalFields)collectionNo{}Ordering options for the listing.
— Order By (order_by)optionsNoreleased_atThe field to use for ordering.
Options: created_at, released_at
— Sort (sort)optionsNodescThe direction of the order.
Options: asc, desc

Release: Update

ParameterTypeRequiredDefaultDescription
Project IDstringYesThe ID or URL-encoded path of the project.
Tag Name (tagName)stringYesThe Git tag the release is associated with.
Additional Fields (additionalFields)collectionNo{}Fields to change on the release. Only the fields you add are sent.
— Name (name)stringNoThe release name.
— Description (description)stringNoThe description of the release (supports Markdown).
— Milestones (milestones)stringNoComma-separated milestone titles to associate with the release.
— Released At (released_at)dateTimeNoThe 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 (1–100). (shown when Return All is false)
Filters (getRepositoryIssuesFilters)collectionNo{}Filters for repository issues.
— Assignee (assignee_username)stringNoReturn only issues assigned to a specific user.
— Creator (author_username)stringNoReturn only issues created by a specific user.
— Search (search)stringNoSearch issues against title and description.
— Labels (labels)stringNoReturn only issues with given labels (comma-separated).
— Updated After (updated_after)dateTimeNoReturn only issues updated at or after this time.
— State (state)optionsNoopenedIssue state filter.
Options: opened, closed, and an empty value for All
— Sort (order_by)optionsNocreated_atThe order the issues should be returned in.
Options: created_at, updated_at, priority
— Direction (sort)optionsNodescThe sort direction.
Options: asc, desc

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.

Usage Examples

  • 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

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

Manage GitLab files (with binary download/upload), issues, releases, repositories, and users via the GitLab API v4.

  • 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 the GitLab node

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 updated . Spotted something wrong? Tell us.