GitLab Connector
Description
GitLab is a DevSecOps platform for source control, issue tracking, merge requests, and CI/CD, available as GitLab.com or as a self-managed instance.
Use the GitLab component to manage projects, issues, merge requests, branches, commits, repository files, and pipelines, and to react to GitLab events through webhooks or polling. The component also connects to self-managed instances on a private network through the on-prem agent, without exposing the instance to the internet.
API Documentation
Connections
Access Token
key: accessTokenUse an access token to connect to GitLab.com or to a self-managed GitLab instance, including an instance on a private network reached through the on-prem agent (see On-Prem Connections below).
GitLab supports three kinds of access token, and all three work with this connection:
- A personal access token acts as the user who created it. Use it for development and testing.
- A project access token or group access token acts as a bot user scoped to one project or group. Use one of these for production, so the integration does not depend on an individual's account.
Prerequisites
- A GitLab account with access to the projects the integration uses
- For project and group access tokens on GitLab.com, a Premium or Ultimate subscription (self-managed instances include them on every license)
- The Maintainer or Owner role on each project where the integration manages webhooks
Setup Steps
To create a personal access token:
- In GitLab, select the avatar in the upper-right corner, then Edit profile > Access > Personal access tokens
- Select Generate token > Legacy token, then enter a name
To create a project or group access token:
- Open the project or group, then Settings > Access tokens
- Select Add new token and enter a name, then select a role: Developer for issues, merge requests, and branches, or Maintainer to manage webhooks
For either kind of token:
- Set an expiration date. Tokens expire after at most 365 days by default, so rotate the token and update the connection before that date
- Select the api scope, or read_api for an integration that only reads data
- Create the token (for example, Create project access token) and copy the token value
Configure the Connection
- Enter the GitLab instance's URL in GitLab URL:
https://gitlab.comfor GitLab.com, or the base URL of a self-managed instance - Enter the token in Access Token
- If the instance's certificate is signed by an internal certificate authority, paste that authority's PEM-encoded certificate into CA Certificate. This applies to direct and on-prem connections alike
Ignore SSL Errors turns off TLS certificate validation entirely. Use it only when a CA Certificate cannot be supplied, and supply one instead whenever possible.
On-Prem Connections
To reach a self-managed GitLab instance on a private network, route this connection through the on-prem agent. The agent runs inside the network and makes only outbound connections (ports 22 and 443), so no inbound firewall ports need to be opened and the instance does not need to be exposed to the internet.
- Install the on-prem agent on a machine with Docker inside the private network that can reach the GitLab instance. Set APP_HOST to the instance's hostname or IP address and APP_PORT to its HTTPS port (usually
443).localhostand127.0.0.1refer to the agent's own container, so for a service on the same machine usehost.docker.internal - In the integration's config wizard, open this connection and select Allow On-Prem Connections
- When configuring the instance, turn on Use On-Prem Connection and select the on-prem agent's connection
- Enter the instance's own URL in GitLab URL, such as
https://gitlab.internal.example.com, not the agent's address. Requests travel through the agent, but the TLS certificate is validated against this URL's hostname - If the instance's certificate is signed by an internal certificate authority, paste that authority's PEM-encoded certificate into CA Certificate
GitLab URL can use http only through the on-prem agent. A direct connection requires https.
On-prem enabled: this connection can be configured to connect to an on-prem resource on a private network. Learn more.
| Input | Notes | Example |
|---|---|---|
| Access Token | A personal, project, or group access token with the api scope, or read_api for read-only use. Tokens expire after at most 365 days by default. See Personal access tokens. | glpat-xxxxxxxxxxxxxxxxxxxx |
| CA Certificate | The PEM-encoded certificate of the authority that signed the instance's TLS certificate. Required when a self-managed instance uses an internal certificate authority. | -----BEGIN CERTIFICATE----- MIIB... -----END CERTIFICATE----- |
| GitLab URL | The base URL of the GitLab instance: https://gitlab.com for GitLab.com, or the URL of a self-managed instance. For an instance on a private network, use its internal URL; its hostname is used to validate the TLS certificate. The URL must use https unless requests go through the on-prem agent. | https://gitlab.com |
| Host | The on-prem agent tunnel host. Set by the on-prem agent. | 10.0.0.12 |
| Ignore SSL Errors | When true, TLS certificate validation is disabled. Supply a CA Certificate instead whenever possible. | false |
| Port | The on-prem agent tunnel port. Set by the on-prem agent. | 443 |
OAuth 2.0
key: oauth2To connect to GitLab using OAuth 2.0, register an OAuth application in GitLab. Each user then authorizes the integration with their own GitLab account. This works for GitLab.com and for self-managed instances; see Configure GitLab as an OAuth 2.0 authentication identity provider.
Prerequisites
- A GitLab account that can create OAuth applications (user-owned, group-owned, or, on self-managed, instance-wide as an administrator)
Setup Steps
- In GitLab, open the application settings:
- User-owned application: select the avatar in the upper-right corner, then Edit profile > Access > Applications
- Group-owned application: open the group, then Settings > Applications
- Instance-wide application (self-managed, administrator): select Admin in the upper-right corner, then Applications
- Enter a name for the application
- Enter
https://oauth2.prismatic.io/callbackas the Redirect URI - Select the api scope, or read_api for an integration that only reads data
- Select Save application and copy the Application ID and Secret
Configure the Connection
- Enter the Application ID as Client ID and the Secret as Client Secret
- For Scopes, use the same value selected in the application:
api
- For a self-managed instance, replace
gitlab.comwith the instance's host in GitLab URL, Authorize URL, and Token URL - If the instance's certificate is signed by an internal certificate authority, paste that authority's PEM-encoded certificate into CA Certificate. This applies to direct and on-prem connections alike
Ignore SSL Errors turns off TLS certificate validation entirely. Use it only when a CA Certificate cannot be supplied, and supply one instead whenever possible.
GitLab issues a new refresh token on every refresh and invalidates the old one. The connection stores the replacement automatically; see OAuth 2.0 identity provider API.
On-Prem Connections
To reach a self-managed GitLab instance on a private network, route this connection through the on-prem agent. The agent runs inside the network and makes only outbound connections (ports 22 and 443), so no inbound firewall ports need to be opened and the instance does not need to be exposed to the internet.
- Install the on-prem agent on a machine with Docker inside the private network that can reach the GitLab instance. Set APP_HOST to the instance's hostname or IP address and APP_PORT to its HTTPS port (usually
443).localhostand127.0.0.1refer to the agent's own container, so for a service on the same machine usehost.docker.internal - In the integration's config wizard, open this connection and select Allow On-Prem Connections
- When configuring the instance, turn on Use On-Prem Connection and select the on-prem agent's connection
- Enter the instance's own URL in GitLab URL, such as
https://gitlab.internal.example.com, not the agent's address. Requests travel through the agent, but the TLS certificate is validated against this URL's hostname - If the instance's certificate is signed by an internal certificate authority, paste that authority's PEM-encoded certificate into CA Certificate
Users who authorize the connection must be able to reach the Authorize URL from their browser, and Token URL must be reachable from the platform, which exchanges the authorization code and refreshes tokens.
GitLab URL can use http only through the on-prem agent. A direct connection requires https.
On-prem enabled: this connection can be configured to connect to an on-prem resource on a private network. Learn more.
| Input | Notes | Example |
|---|---|---|
| Authorize URL | The OAuth 2.0 authorization URL. For a self-managed instance, replace gitlab.com with the instance's host. See OAuth 2.0 identity provider API. | https://gitlab.com/oauth/authorize |
| CA Certificate | The PEM-encoded certificate of the authority that signed the instance's TLS certificate. Required when a self-managed instance uses an internal certificate authority. | -----BEGIN CERTIFICATE----- MIIB... -----END CERTIFICATE----- |
| Client ID | The Application ID of the OAuth application registered in GitLab. See Configure GitLab as an OAuth 2.0 authentication identity provider. | 8f3b2a1c9d4e5f60718293a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4 |
| Client Secret | The Secret of the OAuth application registered in GitLab. | gloas-xxxxxxxxxxxxxxxxxxxx |
| GitLab URL | The base URL of the GitLab instance: https://gitlab.com for GitLab.com, or the URL of a self-managed instance. For an instance on a private network, use its internal URL; its hostname is used to validate the TLS certificate. The URL must use https unless requests go through the on-prem agent. | https://gitlab.com |
| Host | The on-prem agent tunnel host. Set by the on-prem agent. | 10.0.0.12 |
| Ignore SSL Errors | When true, TLS certificate validation is disabled. Supply a CA Certificate instead whenever possible. | false |
| Port | The on-prem agent tunnel port. Set by the on-prem agent. | 443 |
| Scopes | Space-separated OAuth scopes. Use api for read and write access, or read_api for read-only access. | api |
| Token URL | The OAuth 2.0 token URL. For a self-managed instance, replace gitlab.com with the instance's host. | https://gitlab.com/oauth/token |
Triggers
New and Updated Records
Retrieves existing and ongoing issues or merge requests for a specified GitLab project. Load history once, check for changes on a schedule, or both. | key: pollChangesTrigger
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Look-back Date | The date the initial sync starts from, in YYYY-MM-DD format. Cannot be a future date. Leave empty to start from the first recurrence with no backfill. When set, the initial sync seeds each record modified on or after this date once, ignoring the visibility filters. | 2026-01-01 |
| Resource Type | The kind of record to poll for changes. | issues |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
| Show New Records | When true, records created since the last poll are returned in the trigger payload. | true |
| Show Updated Records | When true, records updated since the last poll are returned in the trigger payload. | true |
This trigger polls the GitLab REST API for new and updated issues or merge requests in a project on a scheduled basis. It does not need GitLab to send outbound requests, so it also works for a self-managed instance on a private network that cannot deliver webhooks.
How It Works
- The trigger runs on the configured schedule
- It fetches the selected Resource Type from the project with
updated_afterset to its stored position, ordered byupdated_atascending. Each further page starts from the newestupdated_atalready fetched rather than from a page offset, so a record edited during the walk is not skipped. Paging stops once the trigger holds the records it can deliver plus every record sharing the last one'supdated_at. An unbatched recurrence delivers at most 1,000 records; a batched recurrence delivers at most 500 records and about 4.5 MB of record data - Each record is classified as created when its
created_atis later than the stored position, and otherwise as updated. A record landing exactly on the stored position is included only if it was not already delivered on an earlier recurrence - Outside an initial sync, Show New Records and Show Updated Records each gate one of the two result arrays. Turning either off empties that array, and both keys remain present in the payload
- When records are delivered, the position advances to the newest
updated_atdelivered, a timestamp from GitLab itself, so a GitLab clock that runs behind the scheduler's clock does not cause records to be skipped. A recurrence with no records keeps the position, and a first run without a Look-back Date starts from the scheduler's clock
Initial Sync
An initial sync seeds a complete starting state rather than a change feed, so inputs that narrow
which changes are reported would leave gaps in it: Show New Records and Show Updated
Records are ignored while it runs, and are the only inputs it ignores. It begins on the first
recurrence, when the trigger has no stored position and a Look-back Date (YYYY-MM-DD) is set,
and seeds every record updated on or after that date exactly once. Left empty, there is no sync and
the trigger starts from its first recurrence.
The window has no fixed upper bound, so a record modified mid-drain is swept into the sync rather than deferred to the schedule. Each recurrence advances the position to the newest record it actually received, never to the wall clock, and the first incremental recurrence resumes from exactly there; nothing in the payload marks the handoff. With batching off each recurrence is capped at 1,000 records; with batching on it is capped at 500 records and about 4.5 MB of record data. A larger window spans several recurrences before the toggles apply again, and the same caps apply to a busy project outside an initial sync, with later recurrences delivering the rest.
Project and Resource Type still apply throughout. The trigger has no page-size or field-selection input, so nothing else is suppressed.
Batching
Batching is enabled per flow on this trigger: each changed record is dispatched as its own execution, or grouped by the configured batch size. Batch size and batch concurrency can both be overridden per instance. Raising concurrency increases the request volume sent to GitLab.
To turn it on, select the flow's trigger, open the Flow control tab, and switch on Enable Batching. Under Batch Size, keep Trigger default or choose Custom batch size. Batch Concurrency is optional; leave it blank for no batch-level limit.
With batching off a downstream step reads body.data.created and body.data.updated. With
batching on those fields do not exist: each execution receives one
{ "changeType": ..., "record": ... } item, or an array of them when the batch size is greater
than 1. Any step reading the older shape must be updated before batching is enabled, or it breaks
the moment the switch is flipped. Because batching is enabled per flow, that change is scoped to
the flow rather than to the component or to other flows using the same trigger.
The trigger advances its position before dispatching, so a failed execution loses its records either way: with batching off the whole recurrence's payload, with batching on only that batch. Records lost this way are not polled again.
Returned Data
With batching off, the trigger returns an object with two arrays: created for new records and updated for modified records. Each record is an issue or merge request as returned by the Issues API or Merge requests API. Fields shown are representative. The full response object includes additional properties.
Example Response
{
"data": {
"created": [
{
"id": 1740233,
"iid": 42,
"project_id": 278964,
"title": "Retry failed ACH settlements",
"state": "opened",
"created_at": "2026-09-20T15:22:31.118Z",
"updated_at": "2026-09-27T10:05:44.901Z",
"labels": ["bug", "backend"],
"web_url": "https://gitlab.example.com/acme/payments-service/-/issues/42"
}
],
"updated": [
{
"id": 1739877,
"iid": 38,
"project_id": 278964,
"title": "Reconcile duplicate ledger entries",
"state": "opened",
"created_at": "2026-09-02T08:14:07.512Z",
"updated_at": "2026-09-27T16:41:19.330Z",
"labels": ["bug", "backend"],
"web_url": "https://gitlab.example.com/acme/payments-service/-/issues/38"
}
]
}
}
With batching on, each execution instead receives one change item, or an array of them when the batch size is greater than 1:
Example Batched Item
{
"changeType": "created",
"record": {
"id": 1740233,
"iid": 42,
"project_id": 278964,
"title": "Retry failed ACH settlements",
"state": "opened",
"created_at": "2026-09-20T15:22:31.118Z",
"updated_at": "2026-09-27T10:05:44.901Z"
}
}
Example Payload for New and Updated Records⤓
Webhook
Receive events from a manually configured GitLab webhook, branching by event type. | key: webhook
| Input | Notes | Example |
|---|---|---|
| Secret Token | The Secret token configured on the GitLab webhook. When set, requests whose X-Gitlab-Token header does not match are rejected. | 4f9c2a7e1b3d5f6a8c0e2b4d6f8a0c2e |
The Webhook trigger receives events from a webhook configured manually in GitLab. For webhooks the instance creates and removes automatically, use Webhook Events instead.
How It Works
- In GitLab, open the project and select Settings > Webhooks > Add new webhook
- Enter the flow's webhook URL as the URL
- Enter a random string as the Secret token, and enter the same value in the trigger's Secret Token input
- Select the events to send and save the webhook
GitLab sends the secret token as plain text in the X-Gitlab-Token header (Webhooks). Newer GitLab versions also offer an HMAC Signing token; this trigger verifies the Secret token only, so configure the webhook with a secret token. When Secret Token is set, the trigger compares the header to it in constant time and rejects any request that does not match. When it is empty, every request is accepted.
The trigger branches by event type; see Event Types below.
Event Types
The trigger branches by the X-Gitlab-Event header. Events not listed here arrive on the Other branch. See Webhook events for each event's payload.
Available Events (12)
X-Gitlab-Event | Branch | Description |
|---|---|---|
Push Hook | Push | Commits pushed to a branch |
Tag Push Hook | Tag Push | A tag created or deleted |
Issue Hook | Issue | An issue created, updated, closed, or reopened |
Confidential Issue Hook | Confidential Issue | The same as Issue, for a confidential issue |
Note Hook | Note | A comment added to an issue, merge request, commit, or snippet |
Confidential Note Hook | Confidential Note | The same as Note, for a comment on a confidential issue |
Merge Request Hook | Merge Request | A merge request opened, updated, merged, closed, or approved |
Pipeline Hook | Pipeline | A pipeline's status changed |
Job Hook | Job | A CI/CD job's status changed |
Release Hook | Release | A release created, updated, or deleted |
Deployment Hook | Deployment | A deployment started, succeeded, failed, or was canceled |
Milestone Hook | Milestone | A milestone created, closed, reopened, or deleted |
Returned Data
The trigger returns the request GitLab sent, with the event body at body.data and the X-Gitlab-Token header removed after verification. Fields shown are representative. The full response object includes additional properties.
Example Payload
{
"object_kind": "push",
"event_name": "push",
"ref": "refs/heads/feature/CU-86b1x2-ach-retry",
"checkout_sha": "8d2f5c7a9b1e3f4d6c8a0b2e4f6a8c0d2e4f6a8c",
"user_username": "jdoe",
"project_id": 278964,
"project": {
"id": 278964,
"path_with_namespace": "acme/payments-service",
"default_branch": "main"
},
"commits": [
{
"id": "8d2f5c7a9b1e3f4d6c8a0b2e4f6a8c0d2e4f6a8c",
"title": "CU-86b1x2 Add ACH settlement retry",
"timestamp": "2026-09-26T11:58:00Z",
"author": { "name": "Jane Doe", "email": "jdoe@example.com" }
}
],
"total_commits_count": 1
}
Example Payload for Webhook⤓
Webhook Events
Receive project event notifications from GitLab. Automatically creates and manages a webhook in each selected project for the selected events when the instance is deployed, and removes the webhooks when the instance is deleted. | key: webhookEvents
| Input | Notes | Example |
|---|---|---|
| Branch Filter | Limit push events to branches matching this name or wildcard pattern, such as main or release/*. Leave empty for all branches. | main |
| Connection | The GitLab connection to use. | |
| Events | The GitLab events that start this flow. | |
| Projects | The projects to receive events from, each as a numeric ID or full path, or a project URL from a GitLab instance at the domain root. A webhook is created in each project; managing webhooks requires the Maintainer or Owner role. | acme/payments-service |
The Webhook Events trigger receives events from GitLab projects, and creates and removes the project webhooks itself.
How It Works
On Instance Deploy, the trigger generates a secret for the instance and, in each selected project, creates a webhook for the flow's URL with the selected Events and Branch Filter. A webhook that already points at the flow's URL is updated in place rather than duplicated. On a redeploy, webhooks are updated to the new settings, and webhooks in projects that are no longer selected are removed. If creating a webhook fails in one project, the webhooks created during that deploy are removed, so a partial failure leaves no newly created webhook behind.
On Instance Deletion, the trigger removes every webhook that points at the flow's URL in the selected projects.
Managing webhooks requires the Maintainer or Owner role in each project. The trigger uses project webhooks, which are available on every GitLab tier.
Each request is checked against the instance's secret, which GitLab sends in the X-Gitlab-Token header, and a request that does not match is rejected. The trigger branches by event type; see Event Types below.
Network Requirement
GitLab delivers events by calling the flow's public webhook URL, so the GitLab instance must be able to make outbound HTTPS requests to it. For a self-managed instance on a private network, that is outbound traffic from the network; the on-prem agent carries requests into the network, not events out of it. If the instance restricts outgoing webhook requests, an administrator may need to allow the destination (Webhooks security). Where outbound requests are not permitted, use New and Updated Records instead.
GitLab temporarily disables a webhook after 4 consecutive failed deliveries and permanently after 40 (Webhooks).
Event Types
The trigger branches by the X-Gitlab-Event header. Events not listed here arrive on the Other branch. See Webhook events for each event's payload.
Available Events (12)
X-Gitlab-Event | Branch | Description |
|---|---|---|
Push Hook | Push | Commits pushed to a branch |
Tag Push Hook | Tag Push | A tag created or deleted |
Issue Hook | Issue | An issue created, updated, closed, or reopened |
Confidential Issue Hook | Confidential Issue | The same as Issue, for a confidential issue |
Note Hook | Note | A comment added to an issue, merge request, commit, or snippet |
Confidential Note Hook | Confidential Note | The same as Note, for a comment on a confidential issue |
Merge Request Hook | Merge Request | A merge request opened, updated, merged, closed, or approved |
Pipeline Hook | Pipeline | A pipeline's status changed |
Job Hook | Job | A CI/CD job's status changed |
Release Hook | Release | A release created, updated, or deleted |
Deployment Hook | Deployment | A deployment started, succeeded, failed, or was canceled |
Milestone Hook | Milestone | A milestone created, closed, reopened, or deleted |
Returned Data
The trigger returns the request GitLab sent, with the event body at body.data and the X-Gitlab-Token header removed after verification; see Webhook events for the body of each event type. Fields shown are representative. The full response object includes additional properties.
Example Payload
{
"object_kind": "push",
"event_name": "push",
"ref": "refs/heads/feature/CU-86b1x2-ach-retry",
"checkout_sha": "8d2f5c7a9b1e3f4d6c8a0b2e4f6a8c0d2e4f6a8c",
"user_username": "jdoe",
"project_id": 278964,
"project": {
"id": 278964,
"path_with_namespace": "acme/payments-service",
"default_branch": "main"
},
"commits": [
{
"id": "8d2f5c7a9b1e3f4d6c8a0b2e4f6a8c0d2e4f6a8c",
"title": "CU-86b1x2 Add ACH settlement retry",
"timestamp": "2026-09-26T11:58:00Z",
"author": { "name": "Jane Doe", "email": "jdoe@example.com" }
}
],
"total_commits_count": 1
}
Example Payload for Webhook Events⤓
Data Sources
Select Branch
Select a branch in a project's repository. | key: selectBranch | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Select Branch⤓
Select Group
Select a group visible to the connection's user. | key: selectGroup | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. |
Example Payload for Select Group⤓
Select Label
Select a label available in a project. | key: selectLabel | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Select Label⤓
Select Milestone
Select an active milestone in a project. | key: selectMilestone | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Select Milestone⤓
Select Project
Select a project the connection's user is a member of. | key: selectProject | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. |
Example Payload for Select Project⤓
Select User
Select a member of a project, including members inherited from its groups. | key: selectUser | type: picklist
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Select User⤓
Actions
Accept Merge Request
Merge a merge request. Fails if the merge request is not mergeable or the SHA guard does not match. | key: acceptMergeRequest
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Merge Options | Merge commit message, squash, source branch removal, and expected head SHA. | |
| Merge Request IID | The project-level number of the merge request, shown in GitLab as !17. This is the IID, not the global merge request ID. | 17 |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Accept Merge Request⤓
Create Branch
Create a branch from an existing branch, tag, or commit. | key: createBranch
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Branch Name | The name of the branch to create. | feature/CU-86b1x2-ach-retry |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
| Ref | The branch name, tag, or commit SHA to create the branch from. | main |
Example Payload for Create Branch⤓
Create File
Create a file in a repository by committing it to a branch. | key: createFile
| Input | Notes | Example |
|---|---|---|
| Branch | The branch to commit the change to. | main |
| Commit Message | The message for the commit that writes the file. | Update retry settings |
| Connection | The GitLab connection to use. | |
| Content | The file content. Use Base64 encoding for binary files. | |
| Encoding | How Content is encoded: text, or base64 for binary files. | text |
| File Path | The path of the file in the repository, such as config/settings.json. | config/settings.json |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Create File⤓
Create Issue
Create an issue in a project. | key: createIssue
| Input | Notes | Example |
|---|---|---|
| Additional Fields | Additional optional fields: includes Description, Due Date, and Confidential. | |
| Assignee IDs | The numeric IDs of the users to assign. | 1001 |
| Connection | The GitLab connection to use. | |
| Labels | Label names to apply. | bug |
| Milestone ID | The numeric global ID of the milestone. | 55120 |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
| Title | The title of the issue or merge request, shown in lists and notifications. | Retry failed ACH settlements |
Example Payload for Create Issue⤓
Create Issue Note
Add a comment to an issue. | key: createIssueNote
| Input | Notes | Example |
|---|---|---|
| Body | The comment text, in Markdown. | Deployed to staging; settlements now retry up to 3 times. |
| Connection | The GitLab connection to use. | |
| Internal | When true, the note is internal and visible only to project members with at least the Reporter role. | false |
| Issue IID | The project-level number of the issue, shown in GitLab as #42. This is the IID, not the global issue ID. | 42 |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Create Issue Note⤓
Create Merge Request
Create a merge request between two branches. | key: createMergeRequest
| Input | Notes | Example |
|---|---|---|
| Additional Fields | Additional optional fields: includes Description, Remove Source Branch, and Squash. | |
| Assignee IDs | The numeric IDs of the users to assign. | 1001 |
| Connection | The GitLab connection to use. | |
| Labels | Label names to apply. | bug |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
| Source Branch | The branch containing the changes. | feature/ach-retry |
| Target Branch | The branch the changes merge into. | main |
| Title | The title of the issue or merge request, shown in lists and notifications. | Retry failed ACH settlements |
Example Payload for Create Merge Request⤓
Create Merge Request Note
Add a comment to a merge request. | key: createMergeRequestNote
| Input | Notes | Example |
|---|---|---|
| Body | The comment text, in Markdown. | Deployed to staging; settlements now retry up to 3 times. |
| Connection | The GitLab connection to use. | |
| Internal | When true, the note is internal and visible only to project members with at least the Reporter role. | false |
| Merge Request IID | The project-level number of the merge request, shown in GitLab as !17. This is the IID, not the global merge request ID. | 17 |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Create Merge Request Note⤓
Delete Branch
Delete a branch. Protected branches cannot be deleted. | key: deleteBranch
| Input | Notes | Example |
|---|---|---|
| Branch | The name of an existing branch, such as feature/ach-retry. Slashes and dots in the name are encoded automatically. | feature/ach-retry |
| Connection | The GitLab connection to use. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Delete Branch⤓
Delete Instanced Webhooks
Delete webhooks in the selected projects that point at any of this instance's flow URLs. | key: deleteInstancedWebhooks
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Projects | The projects to remove this instance's webhooks from. | acme/payments-service |
Example Payload for Delete Instanced Webhooks⤓
Delete Issue
Delete an issue. Users with the Planner or Owner role can delete any issue; other project members can delete the issues they authored. | key: deleteIssue
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Issue IID | The project-level number of the issue, shown in GitLab as #42. This is the IID, not the global issue ID. | 42 |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Delete Issue⤓
Get Branch
Retrieve a branch and its latest commit. | key: getBranch
| Input | Notes | Example |
|---|---|---|
| Branch | The name of an existing branch, such as feature/ach-retry. Slashes and dots in the name are encoded automatically. | feature/ach-retry |
| Connection | The GitLab connection to use. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Get Branch⤓
Get Commit
Retrieve a commit with its change statistics. | key: getCommit
| Input | Notes | Example |
|---|---|---|
| Commit SHA | The commit SHA, or a branch or tag name to resolve to its latest commit. | 8d2f5c7a9b1e3f4d6c8a0b2e4f6a8c0d2e4f6a8c |
| Connection | The GitLab connection to use. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Get Commit⤓
Get Current User
Retrieve the user the connection authenticates as. Useful for verifying a connection. | key: getCurrentUser
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. |
Example Payload for Get Current User⤓
Get File
Retrieve a file from a repository. The content is returned Base64-encoded. | key: getFile
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| File Path | The path of the file in the repository, such as config/settings.json. | config/settings.json |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
| Ref | The branch name, tag, or commit SHA to read the file from. | main |
Example Payload for Get File⤓
Get Group
Retrieve a group by ID or path. | key: getGroup
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Group | The numeric ID or full path (group/subgroup) of the group, or a group URL from a GitLab instance at the domain root. | acme |
Example Payload for Get Group⤓
Get Issue
Retrieve an issue in a project by its IID. | key: getIssue
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Issue IID | The project-level number of the issue, shown in GitLab as #42. This is the IID, not the global issue ID. | 42 |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Get Issue⤓
Get Merge Request
Retrieve a merge request in a project by its IID. | key: getMergeRequest
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Merge Request IID | The project-level number of the merge request, shown in GitLab as !17. This is the IID, not the global merge request ID. | 17 |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Get Merge Request⤓
Get Pipeline
Retrieve a CI/CD pipeline with its timing and triggering user. | key: getPipeline
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Pipeline ID | The numeric ID of the pipeline. | 61205 |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Get Pipeline⤓
Get Project
Retrieve a project by ID or path. | key: getProject
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Get Project⤓
List Branches
List the branches in a project's repository. | key: listBranches
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Fetch All | When true, automatically fetches all pages of results using pagination. The API returns up to 100 results per page. | false |
| Pagination | Page and page-size controls. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
| Search | Return only results that match this text. | payments |
Example Payload for List Branches⤓
List Commits
List commits in a project's repository, with optional filters. | key: listCommits
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Fetch All | When true, automatically fetches all pages of results using pagination. The API returns up to 100 results per page. | false |
| Pagination | Page and page-size controls. | |
| Path | Return only commits that touch this file path. | src/settlements/retry.ts |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
| Ref Name | Return only results for this branch or tag. Defaults to the default branch where applicable. | main |
| Since | Return only commits after this date-time, in ISO 8601 format. | 2026-09-01T00:00:00Z |
| Until | Return only commits before this date-time, in ISO 8601 format. | 2026-09-30T00:00:00Z |
Example Payload for List Commits⤓
List Groups
List groups visible to the authenticated user. | key: listGroups
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Fetch All | When true, automatically fetches all pages of results using pagination. The API returns up to 100 results per page. GitLab caps offset pagination on this endpoint at 50,000 records by default, so Fetch All cannot retrieve results beyond that. | false |
| Pagination | Page and page-size controls. | |
| Search | Return only results that match this text. | payments |
Example Payload for List Groups⤓
List Issue Notes
List the comments and system notes on an issue. | key: listIssueNotes
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Fetch All | When true, automatically fetches all pages of results using pagination. The API returns up to 100 results per page. | false |
| Issue IID | The project-level number of the issue, shown in GitLab as #42. This is the IID, not the global issue ID. | 42 |
| Pagination | Page and page-size controls. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for List Issue Notes⤓
List Issues
List issues in a project, with optional filters. | key: listIssues
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Fetch All | When true, automatically fetches all pages of results using pagination. The API returns up to 100 results per page. GitLab caps offset pagination on this endpoint at 50,000 records by default, so Fetch All cannot retrieve results beyond that. | false |
| State | Return only issues in this state. Leave empty for all states. | |
| Labels | Return only issues that have all of these labels. | bug |
| Pagination | Page and page-size controls. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
| Search | Return only results that match this text. | payments |
| Updated After | Return only results updated on or after this date-time, in ISO 8601 format. | 2026-09-01T00:00:00Z |
Example Payload for List Issues⤓
List Labels
List the labels available in a project, including inherited group labels. | key: listLabels
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Fetch All | When true, automatically fetches all pages of results using pagination. The API returns up to 100 results per page. | false |
| Pagination | Page and page-size controls. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
| Search | Return only results that match this text. | payments |
Example Payload for List Labels⤓
List Merge Request Notes
List the comments and system notes on a merge request. | key: listMergeRequestNotes
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Fetch All | When true, automatically fetches all pages of results using pagination. The API returns up to 100 results per page. | false |
| Merge Request IID | The project-level number of the merge request, shown in GitLab as !17. This is the IID, not the global merge request ID. | 17 |
| Pagination | Page and page-size controls. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for List Merge Request Notes⤓
List Merge Requests
List merge requests in a project, with optional filters. | key: listMergeRequests
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Fetch All | When true, automatically fetches all pages of results using pagination. The API returns up to 100 results per page. | false |
| Labels | Return only merge requests that have all of these labels. | bug |
| State | Return only merge requests in this state. Leave empty for all states. | |
| Pagination | Page and page-size controls. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
| Search | Return only results that match this text. | payments |
| Source Branch | Return only merge requests from this source branch. | feature/ach-retry |
| Target Branch | Return only merge requests into this target branch. | main |
| Updated After | Return only results updated on or after this date-time, in ISO 8601 format. | 2026-09-01T00:00:00Z |
Example Payload for List Merge Requests⤓
List Milestones
List the milestones in a project. | key: listMilestones
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Fetch All | When true, automatically fetches all pages of results using pagination. The API returns up to 100 results per page. | false |
| State | Return only milestones in this state. Leave empty for all. | |
| Pagination | Page and page-size controls. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for List Milestones⤓
List Pipelines
List CI/CD pipelines in a project, with optional filters. | key: listPipelines
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Fetch All | When true, automatically fetches all pages of results using pagination. The API returns up to 100 results per page. | false |
| Pagination | Page and page-size controls. | |
| Status | Return only pipelines with this status. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
| Ref Name | Return only results for this branch or tag. Defaults to the default branch where applicable. | main |
| Updated After | Return only results updated on or after this date-time, in ISO 8601 format. | 2026-09-01T00:00:00Z |
Example Payload for List Pipelines⤓
List Project Members
List a project's members, including members inherited from its groups. | key: listProjectMembers
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Fetch All | When true, automatically fetches all pages of results using pagination. The API returns up to 100 results per page. | false |
| Pagination | Page and page-size controls. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
| Query | Return only members whose name, email, or username matches this text. | jdoe |
Example Payload for List Project Members⤓
List Project Webhooks
List the webhooks configured on a project. | key: listProjectWebhooks
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Fetch All | When true, automatically fetches all pages of results using pagination. The API returns up to 100 results per page. | false |
| Pagination | Page and page-size controls. | |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for List Project Webhooks⤓
List Projects
List projects visible to the authenticated user. | key: listProjects
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Fetch All | When true, automatically fetches all pages of results using keyset pagination, ordered by ID. The API returns up to 100 results per page. | false |
| Membership | When true, return only projects the authenticated user is a member of. On GitLab.com, false searches every public project. | true |
| Pagination | Page and page-size controls. | |
| Search | Return only results that match this text. | payments |
Example Payload for List Projects⤓
List Users
List or search users on the GitLab instance. | key: listUsers
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Fetch All | When true, automatically fetches all pages of results using keyset pagination, ordered by ID. The API returns up to 100 results per page. | false |
| Pagination | Page and page-size controls. | |
| Search | Return only results that match this text. | payments |
| Username | Return only the user with this exact username. | jdoe |
Example Payload for List Users⤓
Raw Request
Send raw HTTP request to GitLab. | key: rawRequest
| Input | Notes | Example |
|---|---|---|
| Connection | The GitLab connection to use. | |
| Data | The HTTP body payload to send to the URL. | {"exampleKey": "Example Data"} |
| Header | A list of headers to send with the request. | User-Agent: curl/7.64.1 |
| Method | The HTTP method to use. | |
| Query Parameter | A list of query parameters to send with the request. This is the portion at the end of the URL similar to ?key1=value1&key2=value2. | |
| Response Type | The type of data you expect in the response. You can request json, text, or binary data. | json |
| Timeout | The maximum time that a client will await a response to its request | 2000 |
| URL | Input the path only (/projects/278964/issues). The base URL, including /api/v4, is already included from the connection. For example, to call https://gitlab.com/api/v4/projects/278964/issues, enter only /projects/278964/issues. Full URLs (with a scheme or starting with //) are rejected. | /projects/278964/issues |
Update File
Update an existing file in a repository by committing to a branch. | key: updateFile
| Input | Notes | Example |
|---|---|---|
| Branch | The branch to commit the change to. | main |
| Commit Message | The message for the commit that writes the file. | Update retry settings |
| Connection | The GitLab connection to use. | |
| Content | The file content. Use Base64 encoding for binary files. | |
| Encoding | How Content is encoded: text, or base64 for binary files. | text |
| File Path | The path of the file in the repository, such as config/settings.json. | config/settings.json |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Update File⤓
Update Issue
Update an issue's fields, or close or reopen it. Empty inputs leave the current values unchanged. | key: updateIssue
| Input | Notes | Example |
|---|---|---|
| Additional Fields | Additional optional fields: includes Title, Description, Due Date, State Event, and Confidential. | |
| Assignee IDs | The numeric IDs of the users to assign. Leave empty to keep the current assignees unchanged. | 1001 |
| Connection | The GitLab connection to use. | |
| Issue IID | The project-level number of the issue, shown in GitLab as #42. This is the IID, not the global issue ID. | 42 |
| Labels | Label names to apply. Leave empty to keep the current labels unchanged. | bug |
| Milestone ID | The numeric global ID of the milestone. | 55120 |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
Example Payload for Update Issue⤓
Update Merge Request
Update a merge request's fields, or close or reopen it. Empty inputs leave the current values unchanged. | key: updateMergeRequest
| Input | Notes | Example |
|---|---|---|
| Additional Fields | Additional optional fields: includes Title, Description, and State Event. | |
| Assignee IDs | The numeric IDs of the users to assign. Leave empty to keep the current assignees unchanged. | 1001 |
| Connection | The GitLab connection to use. | |
| Labels | Label names to apply. Leave empty to keep the current labels unchanged. | bug |
| Merge Request IID | The project-level number of the merge request, shown in GitLab as !17. This is the IID, not the global merge request ID. | 17 |
| Project | The numeric ID or full path (group/subgroup/project) of the project, or a project URL from a GitLab instance at the domain root. | acme/payments-service |
| Target Branch | The new target branch. Leave empty to keep the current target. | main |
Example Payload for Update Merge Request⤓
Changelog
2026-10-20
Initial release of GitLab component for GitLab.com and self-managed instances, with Access Token and OAuth 2.0 connections that can each reach an instance on a private network through the on-prem agent:
- Added 37 actions for projects, groups, users, branches, commits, repository files, issues, merge requests, notes, pipelines, labels, milestones, project members, and webhooks, including a Raw Request action, with data sources for selecting projects, groups, branches, labels, milestones, and users
- Added the Webhook, Webhook Events, and New and Updated Records triggers; New and Updated Records detects created and updated issues or merge requests in a project and offers opt-in batching, dispatching each changed record individually or in configured batches; enabling it changes the shape a downstream step receives
- Added an optional Look-back Date input to the New and Updated Records trigger for performing an initial sync of records. The initial sync begins on the first recurrence and backfills every record modified on or after the specified date, seeding each once and ignoring the trigger's filters; once it completes, later recurrences are unaffected. Leave it empty to start from the first recurrence with no backfill
- Added output schemas to 36 actions for improved field mapping during configuration
- Added inline action calling support to 36 actions for improved example output during configuration